11//@ revisions: OPT DBG
22//@ [OPT] compile-flags: -C opt-level=3 -C no-prepopulate-passes
3+ //@ [OPT] min-llvm-version: 19 (for range parameter metadata)
34//@ [DBG] compile-flags: -C opt-level=0 -C no-prepopulate-passes
45//@ only-64bit (so I don't need to worry about usize)
56#![ crate_type = "lib" ]
@@ -17,26 +18,25 @@ pub enum SmallEnum {
1718// CHECK-LABEL: @check_to_enum(
1819#[ no_mangle]
1920pub unsafe fn check_to_enum ( x : i8 ) -> SmallEnum {
21+ // CHECK-NOT: icmp
22+ // CHECK-NOT: assume
2023 // OPT: %0 = icmp uge i8 %x, 10
2124 // OPT: call void @llvm.assume(i1 %0)
2225 // OPT: %1 = icmp ule i8 %x, 12
2326 // OPT: call void @llvm.assume(i1 %1)
24- // DBG -NOT: icmp
25- // DBG -NOT: assume
27+ // CHECK -NOT: icmp
28+ // CHECK -NOT: assume
2629 // CHECK: ret i8 %x
2730
2831 transmute ( x)
2932}
3033
3134// CHECK-LABEL: @check_from_enum(
35+ // OPT-SAME: range(i8 10, 13){{.+}}%x
3236#[ no_mangle]
3337pub unsafe fn check_from_enum ( x : SmallEnum ) -> i8 {
34- // OPT: %0 = icmp uge i8 %x, 10
35- // OPT: call void @llvm.assume(i1 %0)
36- // OPT: %1 = icmp ule i8 %x, 12
37- // OPT: call void @llvm.assume(i1 %1)
38- // DBG-NOT: icmp
39- // DBG-NOT: assume
38+ // CHECK-NOT: icmp
39+ // CHECK-NOT: assume
4040 // CHECK: ret i8 %x
4141
4242 transmute ( x)
@@ -45,26 +45,25 @@ pub unsafe fn check_from_enum(x: SmallEnum) -> i8 {
4545// CHECK-LABEL: @check_to_ordering(
4646#[ no_mangle]
4747pub unsafe fn check_to_ordering ( x : u8 ) -> std:: cmp:: Ordering {
48+ // CHECK-NOT: icmp
49+ // CHECK-NOT: assume
4850 // OPT: %0 = icmp uge i8 %x, -1
4951 // OPT: %1 = icmp ule i8 %x, 1
5052 // OPT: %2 = or i1 %0, %1
5153 // OPT: call void @llvm.assume(i1 %2)
52- // DBG -NOT: icmp
53- // DBG -NOT: assume
54+ // CHECK -NOT: icmp
55+ // CHECK -NOT: assume
5456 // CHECK: ret i8 %x
5557
5658 transmute ( x)
5759}
5860
5961// CHECK-LABEL: @check_from_ordering(
62+ // OPT-SAME: range(i8 -1, 2){{.+}}%x
6063#[ no_mangle]
6164pub unsafe fn check_from_ordering ( x : std:: cmp:: Ordering ) -> u8 {
62- // OPT: %0 = icmp uge i8 %x, -1
63- // OPT: %1 = icmp ule i8 %x, 1
64- // OPT: %2 = or i1 %0, %1
65- // OPT: call void @llvm.assume(i1 %2)
66- // DBG-NOT: icmp
67- // DBG-NOT: assume
65+ // CHECK-NOT: icmp
66+ // CHECK-NOT: assume
6867 // CHECK: ret i8 %x
6968
7069 transmute ( x)
@@ -96,50 +95,50 @@ pub enum Minus100ToPlus100 {
9695}
9796
9897// CHECK-LABEL: @check_enum_from_char(
98+ // OPT-SAME: range(i32 0, 1114112){{.+}}%x
9999#[ no_mangle]
100100pub unsafe fn check_enum_from_char ( x : char ) -> Minus100ToPlus100 {
101- // OPT: %0 = icmp ule i32 %x, 1114111
102- // OPT: call void @llvm. assume(i1 %0)
103- // OPT: %1 = icmp uge i32 %x, -100
104- // OPT: %2 = icmp ule i32 %x, 100
105- // OPT: %3 = or i1 %1 , %2
106- // OPT: call void @llvm.assume(i1 %3 )
107- // DBG -NOT: icmp
108- // DBG -NOT: assume
101+ // CHECK-NOT: icmp
102+ // CHECK-NOT: assume
103+ // OPT: %0 = icmp uge i32 %x, -100
104+ // OPT: %1 = icmp ule i32 %x, 100
105+ // OPT: %2 = or i1 %0 , %1
106+ // OPT: call void @llvm.assume(i1 %2 )
107+ // CHECK -NOT: icmp
108+ // CHECK -NOT: assume
109109 // CHECK: ret i32 %x
110110
111111 transmute ( x)
112112}
113113
114114// CHECK-LABEL: @check_enum_to_char(
115+ // OPT-SAME: range(i32 -100, 101){{.+}}%x
115116#[ no_mangle]
116117pub unsafe fn check_enum_to_char ( x : Minus100ToPlus100 ) -> char {
117- // OPT: %0 = icmp uge i32 %x, -100
118- // OPT: %1 = icmp ule i32 %x, 100
119- // OPT: %2 = or i1 %0, %1
120- // OPT: call void @llvm.assume(i1 %2)
121- // OPT: %3 = icmp ule i32 %x, 1114111
122- // OPT: call void @llvm.assume(i1 %3)
123- // DBG-NOT: icmp
124- // DBG-NOT: assume
118+ // CHECK-NOT: icmp
119+ // CHECK-NOT: assume
120+ // OPT: %0 = icmp ule i32 %x, 1114111
121+ // OPT: call void @llvm.assume(i1 %0)
122+ // CHECK-NOT: icmp
123+ // CHECK-NOT: assume
125124 // CHECK: ret i32 %x
126125
127126 transmute ( x)
128127}
129128
130129// CHECK-LABEL: @check_swap_pair(
130+ // OPT-SAME: range(i32 0, 1114112){{.+}}%x.0
131+ // OPT-SAME: range(i32 1, 0){{.+}}%x.1
131132#[ no_mangle]
132133pub unsafe fn check_swap_pair ( x : ( char , NonZero < u32 > ) ) -> ( NonZero < u32 > , char ) {
133- // OPT: %0 = icmp ule i32 %x.0, 1114111
134+ // CHECK-NOT: icmp
135+ // CHECK-NOT: assume
136+ // OPT: %0 = icmp uge i32 %x.0, 1
134137 // OPT: call void @llvm.assume(i1 %0)
135- // OPT: %1 = icmp uge i32 %x.0, 1
138+ // OPT: %1 = icmp ule i32 %x.1, 1114111
136139 // OPT: call void @llvm.assume(i1 %1)
137- // OPT: %2 = icmp uge i32 %x.1, 1
138- // OPT: call void @llvm.assume(i1 %2)
139- // OPT: %3 = icmp ule i32 %x.1, 1114111
140- // OPT: call void @llvm.assume(i1 %3)
141- // DBG-NOT: icmp
142- // DBG-NOT: assume
140+ // CHECK-NOT: icmp
141+ // CHECK-NOT: assume
143142 // CHECK: %[[P1:.+]] = insertvalue { i32, i32 } poison, i32 %x.0, 0
144143 // CHECK: %[[P2:.+]] = insertvalue { i32, i32 } %[[P1]], i32 %x.1, 1
145144 // CHECK: ret { i32, i32 } %[[P2]]
@@ -148,34 +147,34 @@ pub unsafe fn check_swap_pair(x: (char, NonZero<u32>)) -> (NonZero<u32>, char) {
148147}
149148
150149// CHECK-LABEL: @check_bool_from_ordering(
150+ // OPT-SAME: range(i8 -1, 2){{.+}}%x
151151#[ no_mangle]
152152pub unsafe fn check_bool_from_ordering ( x : std:: cmp:: Ordering ) -> bool {
153- // OPT: %0 = icmp uge i8 %x, -1
154- // OPT: %1 = icmp ule i8 %x, 1
155- // OPT: %2 = or i1 %0, %1
156- // OPT: call void @llvm.assume(i1 %2)
157- // OPT: %3 = icmp ule i8 %x, 1
158- // OPT: call void @llvm.assume(i1 %3)
159- // DBG-NOT: icmp
160- // DBG-NOT: assume
153+ // CHECK-NOT: icmp
154+ // CHECK-NOT: assume
155+ // OPT: %0 = icmp ule i8 %x, 1
156+ // OPT: call void @llvm.assume(i1 %0)
157+ // CHECK-NOT: icmp
158+ // CHECK-NOT: assume
161159 // CHECK: %[[R:.+]] = trunc i8 %x to i1
162160 // CHECK: ret i1 %[[R]]
163161
164162 transmute ( x)
165163}
166164
167165// CHECK-LABEL: @check_bool_to_ordering(
166+ // OPT-SAME: i1 {{.+}} %x
168167#[ no_mangle]
169168pub unsafe fn check_bool_to_ordering ( x : bool ) -> std:: cmp:: Ordering {
170169 // CHECK: %_0 = zext i1 %x to i8
171- // OPT: %0 = icmp ule i8 %_0, 1
172- // OPT: call void @llvm. assume(i1 %0)
173- // OPT: %1 = icmp uge i8 %_0, -1
174- // OPT: %2 = icmp ule i8 %_0, 1
175- // OPT: %3 = or i1 %1 , %2
176- // OPT: call void @llvm.assume(i1 %3 )
177- // DBG -NOT: icmp
178- // DBG -NOT: assume
170+ // CHECK-NOT: icmp
171+ // CHECK-NOT: assume
172+ // OPT: %0 = icmp uge i8 %_0, -1
173+ // OPT: %1 = icmp ule i8 %_0, 1
174+ // OPT: %2 = or i1 %0 , %1
175+ // OPT: call void @llvm.assume(i1 %2 )
176+ // CHECK -NOT: icmp
177+ // CHECK -NOT: assume
179178 // CHECK: ret i8 %_0
180179
181180 transmute ( x)
0 commit comments