Skip to content

Commit d7a7be4

Browse files
committed
Add test for jump-threading assume.
1 parent 161c674 commit d7a7be4

3 files changed

+126
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
- // MIR for `assume` before JumpThreading
2+
+ // MIR for `assume` after JumpThreading
3+
4+
fn assume(_1: u8, _2: bool) -> u8 {
5+
let mut _0: u8;
6+
7+
bb0: {
8+
switchInt(_1) -> [7: bb1, otherwise: bb2];
9+
}
10+
11+
bb1: {
12+
assume(_2);
13+
- goto -> bb3;
14+
+ goto -> bb6;
15+
}
16+
17+
bb2: {
18+
goto -> bb3;
19+
}
20+
21+
bb3: {
22+
switchInt(_2) -> [0: bb4, otherwise: bb5];
23+
}
24+
25+
bb4: {
26+
_0 = const 4_u8;
27+
return;
28+
}
29+
30+
bb5: {
31+
_0 = const 5_u8;
32+
return;
33+
+ }
34+
+
35+
+ bb6: {
36+
+ goto -> bb5;
37+
}
38+
}
39+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
- // MIR for `assume` before JumpThreading
2+
+ // MIR for `assume` after JumpThreading
3+
4+
fn assume(_1: u8, _2: bool) -> u8 {
5+
let mut _0: u8;
6+
7+
bb0: {
8+
switchInt(_1) -> [7: bb1, otherwise: bb2];
9+
}
10+
11+
bb1: {
12+
assume(_2);
13+
- goto -> bb3;
14+
+ goto -> bb6;
15+
}
16+
17+
bb2: {
18+
goto -> bb3;
19+
}
20+
21+
bb3: {
22+
switchInt(_2) -> [0: bb4, otherwise: bb5];
23+
}
24+
25+
bb4: {
26+
_0 = const 4_u8;
27+
return;
28+
}
29+
30+
bb5: {
31+
_0 = const 5_u8;
32+
return;
33+
+ }
34+
+
35+
+ bb6: {
36+
+ goto -> bb5;
37+
}
38+
}
39+

Diff for: tests/mir-opt/jump_threading.rs

+48
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,52 @@ fn aggregate(x: u8) -> u8 {
468468
}
469469
}
470470

471+
/// Verify that we can leverage the existence of an `Assume` terminator.
472+
#[custom_mir(dialect = "runtime", phase = "post-cleanup")]
473+
fn assume(a: u8, b: bool) -> u8 {
474+
// CHECK-LABEL: fn assume(
475+
mir!(
476+
{
477+
// CHECK: bb0: {
478+
// CHECK-NEXT: switchInt(_1) -> [7: bb1, otherwise: bb2]
479+
match a { 7 => bb1, _ => bb2 }
480+
}
481+
bb1 = {
482+
// CHECK: bb1: {
483+
// CHECK-NEXT: assume(_2);
484+
// CHECK-NEXT: goto -> bb6;
485+
Assume(b);
486+
Goto(bb3)
487+
}
488+
bb2 = {
489+
// CHECK: bb2: {
490+
// CHECK-NEXT: goto -> bb3;
491+
Goto(bb3)
492+
}
493+
bb3 = {
494+
// CHECK: bb3: {
495+
// CHECK-NEXT: switchInt(_2) -> [0: bb4, otherwise: bb5];
496+
match b { false => bb4, _ => bb5 }
497+
}
498+
bb4 = {
499+
// CHECK: bb4: {
500+
// CHECK-NEXT: _0 = const 4_u8;
501+
// CHECK-NEXT: return;
502+
RET = 4;
503+
Return()
504+
}
505+
bb5 = {
506+
// CHECK: bb5: {
507+
// CHECK-NEXT: _0 = const 5_u8;
508+
// CHECK-NEXT: return;
509+
RET = 5;
510+
Return()
511+
}
512+
// CHECK: bb6: {
513+
// CHECK-NEXT: goto -> bb5;
514+
)
515+
}
516+
471517
fn main() {
472518
// CHECK-LABEL: fn main(
473519
too_complex(Ok(0));
@@ -481,6 +527,7 @@ fn main() {
481527
renumbered_bb(true);
482528
disappearing_bb(7);
483529
aggregate(7);
530+
assume(7, false);
484531
}
485532

486533
// EMIT_MIR jump_threading.too_complex.JumpThreading.diff
@@ -494,3 +541,4 @@ fn main() {
494541
// EMIT_MIR jump_threading.renumbered_bb.JumpThreading.diff
495542
// EMIT_MIR jump_threading.disappearing_bb.JumpThreading.diff
496543
// EMIT_MIR jump_threading.aggregate.JumpThreading.diff
544+
// EMIT_MIR jump_threading.assume.JumpThreading.diff

0 commit comments

Comments
 (0)