Skip to content

Commit 2685b3d

Browse files
jamie-osecclubby789
authored andcommitted
Add test for issue 122734
1 parent 1c9952f commit 2685b3d

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//@ min-llvm-version: 21
2+
//@ compile-flags: -Copt-level=3 -Zmerge-functions=disabled
3+
//! Tests that matching + eq on `Option<FieldlessEnum>` produces a simple compare with no branching
4+
5+
#![crate_type = "lib"]
6+
7+
#[derive(PartialEq)]
8+
pub enum TwoNum {
9+
A,
10+
B,
11+
}
12+
13+
#[derive(PartialEq)]
14+
pub enum ThreeNum {
15+
A,
16+
B,
17+
C,
18+
}
19+
20+
// CHECK-LABEL: @match_two
21+
#[no_mangle]
22+
pub fn match_two(a: Option<TwoNum>, b: Option<TwoNum>) -> bool {
23+
// CHECK-NEXT: start:
24+
// CHECK-NOT: phi
25+
// CHECK-NEXT: icmp eq i8
26+
// CHECK-NEXT: ret
27+
match (a, b) {
28+
(Some(x), Some(y)) => x == y,
29+
(Some(_), None) => false,
30+
(None, Some(_)) => false,
31+
(None, None) => true,
32+
}
33+
}
34+
35+
// CHECK-LABEL: @match_three
36+
#[no_mangle]
37+
pub fn match_three(a: Option<ThreeNum>, b: Option<ThreeNum>) -> bool {
38+
// CHECK-NEXT: start:
39+
// CHECK-NOT: phi
40+
// CHECK-NEXT: icmp eq
41+
// CHECK-NEXT: ret
42+
match (a, b) {
43+
(Some(x), Some(y)) => x == y,
44+
(Some(_), None) => false,
45+
(None, Some(_)) => false,
46+
(None, None) => true,
47+
}
48+
}
49+
50+
// CHECK-LABEL: @match_two_ref
51+
#[no_mangle]
52+
pub fn match_two_ref(a: &Option<TwoNum>, b: &Option<TwoNum>) -> bool {
53+
// CHECK-NEXT: start:
54+
// CHECK-NOT: phi
55+
// CHECK-NEXT: load i8
56+
// CHECK-NEXT: load i8
57+
// CHECK-NEXT: icmp eq i8
58+
// CHECK-NEXT: ret
59+
match (a, b) {
60+
(Some(x), Some(y)) => x == y,
61+
(Some(_), None) => false,
62+
(None, Some(_)) => false,
63+
(None, None) => true,
64+
}
65+
}
66+
67+
// CHECK-LABEL: @match_three_ref
68+
#[no_mangle]
69+
pub fn match_three_ref(a: &Option<ThreeNum>, b: &Option<ThreeNum>) -> bool {
70+
// CHECK-NEXT: start:
71+
// CHECK-NOT: phi
72+
// CHECK-NEXT: load i8
73+
// CHECK-NEXT: load i8
74+
// CHECK-NEXT: icmp eq
75+
// CHECK-NEXT: ret
76+
match (a, b) {
77+
(Some(x), Some(y)) => x == y,
78+
(Some(_), None) => false,
79+
(None, Some(_)) => false,
80+
(None, None) => true,
81+
}
82+
}

0 commit comments

Comments
 (0)