@@ -256,3 +256,105 @@ define i8 @ucmp_6(i32 %x, i32 %y) {
256256 %1 = call i8 @llvm.ucmp (i32 %x , i32 %y )
257257 ret i8 %1
258258}
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