Skip to content

Commit f65946e

Browse files
committed
Add FileCheck for early_otherwise_branch*.rs
1 parent 3970b01 commit f65946e

5 files changed

+59
-5
lines changed

tests/mir-opt/early_otherwise_branch.rs

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
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
76
fn 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
1521
fn 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
2539
fn 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,

tests/mir-opt/early_otherwise_branch_3_element_tuple.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
// skip-filecheck
21
//@ unit-test: EarlyOtherwiseBranch
32
//@ compile-flags: -Zmir-enable-passes=+UninhabitedEnumBranching
43

54
// EMIT_MIR early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff
65
fn opt1(x: Option<u32>, y: Option<u32>, z: Option<u32>) -> u32 {
6+
// CHECK-LABEL: fn opt1(
7+
// CHECK: let mut [[CMP_LOCAL:_.*]]: bool;
8+
// CHECK: bb0: {
9+
// CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
10+
// CHECK: [[LOCAL2:_.*]] = discriminant({{.*}});
11+
// CHECK: [[CMP_LOCAL]] = Ne([[LOCAL1]], move [[LOCAL2]]);
12+
// CHECK: switchInt(move [[CMP_LOCAL]]) -> [
13+
// CHECK-NEXT: }
714
match (x, y, z) {
815
(Some(a), Some(b), Some(c)) => 0,
916
(None, None, None) => 0,

tests/mir-opt/early_otherwise_branch_68867.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
//@ unit-test: EarlyOtherwiseBranch
32
//@ compile-flags: -Zmir-enable-passes=+UninhabitedEnumBranching
43

@@ -20,6 +19,13 @@ pub extern "C" fn try_sum(
2019
x: &ViewportPercentageLength,
2120
other: &ViewportPercentageLength,
2221
) -> Result<ViewportPercentageLength, ()> {
22+
// CHECK-LABEL: fn try_sum(
23+
// CHECK: bb0: {
24+
// CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
25+
// CHECK-NOT: Ne
26+
// CHECK-NOT: discriminant
27+
// CHECK: switchInt(move [[LOCAL1]]) -> [
28+
// CHECK-NEXT: }
2329
use self::ViewportPercentageLength::*;
2430
Ok(match (x, other) {
2531
(&Vw(one), &Vw(other)) => Vw(one + other),

tests/mir-opt/early_otherwise_branch_noopt.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
//@ unit-test: EarlyOtherwiseBranch
32
//@ compile-flags: -Zmir-enable-passes=+UninhabitedEnumBranching
43

@@ -7,6 +6,13 @@
76

87
// EMIT_MIR early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff
98
fn noopt1(x: Option<u32>, y: Option<u32>) -> u32 {
9+
// CHECK-LABEL: fn noopt1(
10+
// CHECK: bb0: {
11+
// CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
12+
// CHECK-NOT: Ne
13+
// CHECK-NOT: discriminant
14+
// CHECK: switchInt(move [[LOCAL1]]) -> [
15+
// CHECK-NEXT: }
1016
match (x, y) {
1117
(Some(a), Some(b)) => 0,
1218
(Some(a), None) => 1,

tests/mir-opt/early_otherwise_branch_soundness.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
//@ unit-test: EarlyOtherwiseBranch
32
//@ compile-flags: -Zmir-enable-passes=+UninhabitedEnumBranching
43

@@ -12,12 +11,26 @@ enum E<'a> {
1211

1312
// EMIT_MIR early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff
1413
fn no_downcast(e: &E) -> u32 {
14+
// CHECK-LABEL: fn no_downcast(
15+
// CHECK: bb0: {
16+
// CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
17+
// CHECK-NOT: Ne
18+
// CHECK-NOT: discriminant
19+
// CHECK: switchInt(move [[LOCAL1]]) -> [
20+
// CHECK-NEXT: }
1521
if let E::Some(E::Some(_)) = e { 1 } else { 2 }
1622
}
1723

1824
// SAFETY: if `a` is `Some`, `b` must point to a valid, initialized value
1925
// EMIT_MIR early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff
2026
unsafe fn no_deref_ptr(a: Option<i32>, b: *const Option<i32>) -> i32 {
27+
// CHECK-LABEL: fn no_deref_ptr(
28+
// CHECK: bb0: {
29+
// CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
30+
// CHECK-NOT: Ne
31+
// CHECK-NOT: discriminant
32+
// CHECK: switchInt(move [[LOCAL1]]) -> [
33+
// CHECK-NEXT: }
2134
match a {
2235
// `*b` being correct depends on `a == Some(_)`
2336
Some(_) => match *b {

0 commit comments

Comments
 (0)