@@ -256,3 +256,105 @@ define i8 @ucmp_6(i32 %x, i32 %y) {
256
256
%1 = call i8 @llvm.ucmp (i32 %x , i32 %y )
257
257
ret i8 %1
258
258
}
259
+
260
+ define i8 @ucmp_switch (i32 %x , i32 %y ) {
261
+ ; CHECK-LABEL: @ucmp_switch(
262
+ ; CHECK-NEXT: [[CMP:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
263
+ ; CHECK-NEXT: switch i8 [[CMP]], label [[DEFAULT_UNREACHABLE:%.*]] [
264
+ ; CHECK-NEXT: i8 -2, label [[BB_NEG2:%.*]]
265
+ ; CHECK-NEXT: i8 -1, label [[BB_NEG1:%.*]]
266
+ ; CHECK-NEXT: i8 0, label [[BB_0:%.*]]
267
+ ; CHECK-NEXT: i8 1, label [[BB_1:%.*]]
268
+ ; CHECK-NEXT: i8 2, label [[BB_2:%.*]]
269
+ ; CHECK-NEXT: ]
270
+ ; CHECK: bb.neg2:
271
+ ; CHECK-NEXT: ret i8 -2
272
+ ; CHECK: bb.neg1:
273
+ ; CHECK-NEXT: ret i8 -1
274
+ ; CHECK: bb.0:
275
+ ; CHECK-NEXT: ret i8 0
276
+ ; CHECK: bb.1:
277
+ ; CHECK-NEXT: ret i8 1
278
+ ; CHECK: bb.2:
279
+ ; CHECK-NEXT: ret i8 2
280
+ ; CHECK: default:
281
+ ; CHECK-NEXT: ret i8 123
282
+ ;
283
+ %cmp = call i8 @llvm.ucmp (i32 %x , i32 %y )
284
+ switch i8 %cmp , label %default [
285
+ i8 -2 , label %bb.neg2
286
+ i8 -1 , label %bb.neg1
287
+ i8 0 , label %bb.0
288
+ i8 1 , label %bb.1
289
+ i8 2 , label %bb.2
290
+ ]
291
+
292
+ bb.neg2:
293
+ ret i8 -2
294
+
295
+ bb.neg1:
296
+ ret i8 -1
297
+
298
+ bb.0 :
299
+ ret i8 0
300
+
301
+ bb.1 :
302
+ ret i8 1
303
+
304
+ bb.2 :
305
+ ret i8 2
306
+
307
+ default:
308
+ ret i8 123
309
+ }
310
+
311
+ define i8 @scmp_switch (i32 %x , i32 %y ) {
312
+ ; CHECK-LABEL: @scmp_switch(
313
+ ; CHECK-NEXT: [[CMP:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
314
+ ; CHECK-NEXT: switch i8 [[CMP]], label [[DEFAULT_UNREACHABLE:%.*]] [
315
+ ; CHECK-NEXT: i8 -2, label [[BB_NEG2:%.*]]
316
+ ; CHECK-NEXT: i8 -1, label [[BB_NEG1:%.*]]
317
+ ; CHECK-NEXT: i8 0, label [[BB_0:%.*]]
318
+ ; CHECK-NEXT: i8 1, label [[BB_1:%.*]]
319
+ ; CHECK-NEXT: i8 2, label [[BB_2:%.*]]
320
+ ; CHECK-NEXT: ]
321
+ ; CHECK: bb.neg2:
322
+ ; CHECK-NEXT: ret i8 -2
323
+ ; CHECK: bb.neg1:
324
+ ; CHECK-NEXT: ret i8 -1
325
+ ; CHECK: bb.0:
326
+ ; CHECK-NEXT: ret i8 0
327
+ ; CHECK: bb.1:
328
+ ; CHECK-NEXT: ret i8 1
329
+ ; CHECK: bb.2:
330
+ ; CHECK-NEXT: ret i8 2
331
+ ; CHECK: default:
332
+ ; CHECK-NEXT: ret i8 123
333
+ ;
334
+ %cmp = call i8 @llvm.scmp (i32 %x , i32 %y )
335
+ switch i8 %cmp , label %default [
336
+ i8 -2 , label %bb.neg2
337
+ i8 -1 , label %bb.neg1
338
+ i8 0 , label %bb.0
339
+ i8 1 , label %bb.1
340
+ i8 2 , label %bb.2
341
+ ]
342
+
343
+ bb.neg2:
344
+ ret i8 -2
345
+
346
+ bb.neg1:
347
+ ret i8 -1
348
+
349
+ bb.0 :
350
+ ret i8 0
351
+
352
+ bb.1 :
353
+ ret i8 1
354
+
355
+ bb.2 :
356
+ ret i8 2
357
+
358
+ default:
359
+ ret i8 123
360
+ }
0 commit comments