mirror of https://github.com/rust-lang/rust.git
Add test for jump-threading assume.
This commit is contained in:
parent
161c674ef0
commit
d7a7be4049
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue