File tree 3 files changed +103
-0
lines changed
3 files changed +103
-0
lines changed Original file line number Diff line number Diff line change
1
+ - // MIR for `not_int` before JumpThreading
2
+ + // MIR for `not_int` after JumpThreading
3
+
4
+ fn not_int() -> i32 {
5
+ let mut _0: i32;
6
+ let _1: i32;
7
+ let mut _2: bool;
8
+ let mut _3: i32;
9
+ let mut _4: i32;
10
+ scope 1 {
11
+ debug a => _1;
12
+ }
13
+
14
+ bb0: {
15
+ StorageLive(_1);
16
+ _1 = const 1_i32;
17
+ StorageLive(_2);
18
+ StorageLive(_3);
19
+ StorageLive(_4);
20
+ _4 = copy _1;
21
+ _3 = Not(move _4);
22
+ StorageDead(_4);
23
+ _2 = Eq(move _3, const 0_i32);
24
+ - switchInt(move _2) -> [0: bb2, otherwise: bb1];
25
+ + goto -> bb1;
26
+ }
27
+
28
+ bb1: {
29
+ StorageDead(_3);
30
+ _0 = const 1_i32;
31
+ goto -> bb3;
32
+ }
33
+
34
+ bb2: {
35
+ StorageDead(_3);
36
+ _0 = const 0_i32;
37
+ goto -> bb3;
38
+ }
39
+
40
+ bb3: {
41
+ StorageDead(_2);
42
+ StorageDead(_1);
43
+ return;
44
+ }
45
+ }
46
+
Original file line number Diff line number Diff line change
1
+ - // MIR for `not_int` before JumpThreading
2
+ + // MIR for `not_int` after JumpThreading
3
+
4
+ fn not_int() -> i32 {
5
+ let mut _0: i32;
6
+ let _1: i32;
7
+ let mut _2: bool;
8
+ let mut _3: i32;
9
+ let mut _4: i32;
10
+ scope 1 {
11
+ debug a => _1;
12
+ }
13
+
14
+ bb0: {
15
+ StorageLive(_1);
16
+ _1 = const 1_i32;
17
+ StorageLive(_2);
18
+ StorageLive(_3);
19
+ StorageLive(_4);
20
+ _4 = copy _1;
21
+ _3 = Not(move _4);
22
+ StorageDead(_4);
23
+ _2 = Eq(move _3, const 0_i32);
24
+ - switchInt(move _2) -> [0: bb2, otherwise: bb1];
25
+ + goto -> bb1;
26
+ }
27
+
28
+ bb1: {
29
+ StorageDead(_3);
30
+ _0 = const 1_i32;
31
+ goto -> bb3;
32
+ }
33
+
34
+ bb2: {
35
+ StorageDead(_3);
36
+ _0 = const 0_i32;
37
+ goto -> bb3;
38
+ }
39
+
40
+ bb3: {
41
+ StorageDead(_2);
42
+ StorageDead(_1);
43
+ return;
44
+ }
45
+ }
46
+
Original file line number Diff line number Diff line change @@ -531,6 +531,15 @@ fn floats() -> u32 {
531
531
if x == 0.0 { 0 } else { 1 }
532
532
}
533
533
534
+ fn not_int ( ) -> i32 {
535
+ // CHECK-LABEL: fn not_int(
536
+
537
+ // Test for issue #131195, where !a == b is assumed to be equivalent to a != b
538
+ // This is only the case for bools
539
+ let a = 1 ;
540
+ if !a == 0 { 1 } else { 0 }
541
+ }
542
+
534
543
fn main ( ) {
535
544
// CHECK-LABEL: fn main(
536
545
too_complex ( Ok ( 0 ) ) ;
@@ -546,6 +555,7 @@ fn main() {
546
555
aggregate ( 7 ) ;
547
556
assume ( 7 , false ) ;
548
557
floats ( ) ;
558
+ not_int ( ) ;
549
559
}
550
560
551
561
// EMIT_MIR jump_threading.too_complex.JumpThreading.diff
@@ -562,3 +572,4 @@ fn main() {
562
572
// EMIT_MIR jump_threading.assume.JumpThreading.diff
563
573
// EMIT_MIR jump_threading.aggregate_copy.JumpThreading.diff
564
574
// EMIT_MIR jump_threading.floats.JumpThreading.diff
575
+ // EMIT_MIR jump_threading.not_int.JumpThreading.diff
You can’t perform that action at this time.
0 commit comments