1- // skip-filecheck
21//@ unit-test: EarlyOtherwiseBranch
32//@ compile-flags: -Zmir-enable-passes=+UninhabitedEnumBranching
43
54// We can't optimize it because y may be an invalid value.
65// EMIT_MIR early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff
76fn opt1 ( x : Option < u32 > , y : Option < u32 > ) -> u32 {
7+ // CHECK-LABEL: fn opt1(
8+ // CHECK: bb0: {
9+ // CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
10+ // CHECK-NOT: Ne
11+ // CHECK-NOT: discriminant
12+ // CHECK: switchInt(move [[LOCAL1]]) -> [
13+ // CHECK-NEXT: }
814 match ( x, y) {
915 ( Some ( a) , Some ( b) ) => 0 ,
1016 _ => 1 ,
@@ -13,6 +19,14 @@ fn opt1(x: Option<u32>, y: Option<u32>) -> u32 {
1319
1420// EMIT_MIR early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff
1521fn opt2 ( x : Option < u32 > , y : Option < u32 > ) -> u32 {
22+ // CHECK-LABEL: fn opt2(
23+ // CHECK: let mut [[CMP_LOCAL:_.*]]: bool;
24+ // CHECK: bb0: {
25+ // CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
26+ // CHECK: [[LOCAL2:_.*]] = discriminant({{.*}});
27+ // CHECK: [[CMP_LOCAL]] = Ne([[LOCAL1]], move [[LOCAL2]]);
28+ // CHECK: switchInt(move [[CMP_LOCAL]]) -> [
29+ // CHECK-NEXT: }
1630 match ( x, y) {
1731 ( Some ( a) , Some ( b) ) => 0 ,
1832 ( None , None ) => 2 ,
@@ -23,6 +37,14 @@ fn opt2(x: Option<u32>, y: Option<u32>) -> u32 {
2337// optimize despite different types
2438// EMIT_MIR early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff
2539fn opt3 ( x : Option < u32 > , y : Option < bool > ) -> u32 {
40+ // CHECK-LABEL: fn opt3(
41+ // CHECK: let mut [[CMP_LOCAL:_.*]]: bool;
42+ // CHECK: bb0: {
43+ // CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
44+ // CHECK: [[LOCAL2:_.*]] = discriminant({{.*}});
45+ // CHECK: [[CMP_LOCAL]] = Ne([[LOCAL1]], move [[LOCAL2]]);
46+ // CHECK: switchInt(move [[CMP_LOCAL]]) -> [
47+ // CHECK-NEXT: }
2648 match ( x, y) {
2749 ( Some ( a) , Some ( b) ) => 0 ,
2850 ( None , None ) => 2 ,
0 commit comments