@@ -174,6 +174,18 @@ define i32 @test4(i32 %X) {
174
174
ret i32 %cond
175
175
}
176
176
177
+ ; FIXME: This is a miscompile.
178
+ define i32 @test4_disjoint (i32 %X ) {
179
+ ; CHECK-LABEL: @test4_disjoint(
180
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[X:%.*]], -2147483648
181
+ ; CHECK-NEXT: ret i32 [[OR]]
182
+ ;
183
+ %cmp = icmp slt i32 %X , 0
184
+ %or = or disjoint i32 %X , -2147483648
185
+ %cond = select i1 %cmp , i32 %X , i32 %or
186
+ ret i32 %cond
187
+ }
188
+
177
189
; Same as above, but the compare isn't canonical
178
190
define i32 @test4noncanon (i32 %X ) {
179
191
; CHECK-LABEL: @test4noncanon(
@@ -196,6 +208,16 @@ define i32 @test5(i32 %X) {
196
208
ret i32 %cond
197
209
}
198
210
211
+ define i32 @test5_disjoint (i32 %X ) {
212
+ ; CHECK-LABEL: @test5_disjoint(
213
+ ; CHECK-NEXT: ret i32 [[X:%.*]]
214
+ ;
215
+ %cmp = icmp slt i32 %X , 0
216
+ %or = or disjoint i32 %X , -2147483648
217
+ %cond = select i1 %cmp , i32 %or , i32 %X
218
+ ret i32 %cond
219
+ }
220
+
199
221
define i32 @test6 (i32 %X ) {
200
222
; CHECK-LABEL: @test6(
201
223
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 2147483647
@@ -227,6 +249,16 @@ define i32 @test8(i32 %X) {
227
249
ret i32 %cond
228
250
}
229
251
252
+ define i32 @test8_disjoint (i32 %X ) {
253
+ ; CHECK-LABEL: @test8_disjoint(
254
+ ; CHECK-NEXT: ret i32 [[X:%.*]]
255
+ ;
256
+ %cmp = icmp sgt i32 %X , -1
257
+ %or = or disjoint i32 %X , -2147483648
258
+ %cond = select i1 %cmp , i32 %X , i32 %or
259
+ ret i32 %cond
260
+ }
261
+
230
262
define i32 @test9 (i32 %X ) {
231
263
; CHECK-LABEL: @test9(
232
264
; CHECK-NEXT: [[OR:%.*]] = or i32 [[X:%.*]], -2147483648
@@ -238,6 +270,18 @@ define i32 @test9(i32 %X) {
238
270
ret i32 %cond
239
271
}
240
272
273
+ ; FIXME: This is a miscompile.
274
+ define i32 @test9_disjoint (i32 %X ) {
275
+ ; CHECK-LABEL: @test9_disjoint(
276
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[X:%.*]], -2147483648
277
+ ; CHECK-NEXT: ret i32 [[OR]]
278
+ ;
279
+ %cmp = icmp sgt i32 %X , -1
280
+ %or = or disjoint i32 %X , -2147483648
281
+ %cond = select i1 %cmp , i32 %or , i32 %X
282
+ ret i32 %cond
283
+ }
284
+
241
285
; Same as above, but the compare isn't canonical
242
286
define i32 @test9noncanon (i32 %X ) {
243
287
; CHECK-LABEL: @test9noncanon(
0 commit comments