Add test for jump-threading assume.

This commit is contained in:
Camille GILLOT 2024-01-20 19:11:45 +00:00
parent 161c674ef0
commit d7a7be4049
3 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,39 @@
- // MIR for `assume` before JumpThreading
+ // MIR for `assume` after JumpThreading
fn assume(_1: u8, _2: bool) -> u8 {
let mut _0: u8;
bb0: {
switchInt(_1) -> [7: bb1, otherwise: bb2];
}
bb1: {
assume(_2);
- goto -> bb3;
+ goto -> bb6;
}
bb2: {
goto -> bb3;
}
bb3: {
switchInt(_2) -> [0: bb4, otherwise: bb5];
}
bb4: {
_0 = const 4_u8;
return;
}
bb5: {
_0 = const 5_u8;
return;
+ }
+
+ bb6: {
+ goto -> bb5;
}
}

View File

@ -0,0 +1,39 @@
- // MIR for `assume` before JumpThreading
+ // MIR for `assume` after JumpThreading
fn assume(_1: u8, _2: bool) -> u8 {
let mut _0: u8;
bb0: {
switchInt(_1) -> [7: bb1, otherwise: bb2];
}
bb1: {
assume(_2);
- goto -> bb3;
+ goto -> bb6;
}
bb2: {
goto -> bb3;
}
bb3: {
switchInt(_2) -> [0: bb4, otherwise: bb5];
}
bb4: {
_0 = const 4_u8;
return;
}
bb5: {
_0 = const 5_u8;
return;
+ }
+
+ bb6: {
+ goto -> bb5;
}
}

View File

@ -468,6 +468,52 @@ fn aggregate(x: u8) -> u8 {
}
}
/// Verify that we can leverage the existence of an `Assume` terminator.
#[custom_mir(dialect = "runtime", phase = "post-cleanup")]
fn assume(a: u8, b: bool) -> u8 {
// CHECK-LABEL: fn assume(
mir!(
{
// CHECK: bb0: {
// CHECK-NEXT: switchInt(_1) -> [7: bb1, otherwise: bb2]
match a { 7 => bb1, _ => bb2 }
}
bb1 = {
// CHECK: bb1: {
// CHECK-NEXT: assume(_2);
// CHECK-NEXT: goto -> bb6;
Assume(b);
Goto(bb3)
}
bb2 = {
// CHECK: bb2: {
// CHECK-NEXT: goto -> bb3;
Goto(bb3)
}
bb3 = {
// CHECK: bb3: {
// CHECK-NEXT: switchInt(_2) -> [0: bb4, otherwise: bb5];
match b { false => bb4, _ => bb5 }
}
bb4 = {
// CHECK: bb4: {
// CHECK-NEXT: _0 = const 4_u8;
// CHECK-NEXT: return;
RET = 4;
Return()
}
bb5 = {
// CHECK: bb5: {
// CHECK-NEXT: _0 = const 5_u8;
// CHECK-NEXT: return;
RET = 5;
Return()
}
// CHECK: bb6: {
// CHECK-NEXT: goto -> bb5;
)
}
fn main() {
// CHECK-LABEL: fn main(
too_complex(Ok(0));
@ -481,6 +527,7 @@ fn main() {
renumbered_bb(true);
disappearing_bb(7);
aggregate(7);
assume(7, false);
}
// EMIT_MIR jump_threading.too_complex.JumpThreading.diff
@ -494,3 +541,4 @@ fn main() {
// EMIT_MIR jump_threading.renumbered_bb.JumpThreading.diff
// EMIT_MIR jump_threading.disappearing_bb.JumpThreading.diff
// EMIT_MIR jump_threading.aggregate.JumpThreading.diff
// EMIT_MIR jump_threading.assume.JumpThreading.diff