@@ -282,10 +282,7 @@ define i8 @strong_order_cmp_ugt_eq(i32 %a, i32 %b) {
282282
283283define i8 @strong_order_cmp_eq_slt (i32 %a , i32 %b ) {
284284; CHECK-LABEL: @strong_order_cmp_eq_slt(
285- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
286- ; CHECK-NEXT: [[SEL_EQ:%.*]] = zext i1 [[CMP_EQ]] to i8
287- ; CHECK-NEXT: [[CMP_LT:%.*]] = icmp slt i32 [[A]], [[B]]
288- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 [[SEL_EQ]]
285+ ; CHECK-NEXT: [[SEL_LT:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
289286; CHECK-NEXT: ret i8 [[SEL_LT]]
290287;
291288 %cmp.eq = icmp eq i32 %a , %b
@@ -297,10 +294,7 @@ define i8 @strong_order_cmp_eq_slt(i32 %a, i32 %b) {
297294
298295define i8 @strong_order_cmp_eq_sgt (i32 %a , i32 %b ) {
299296; CHECK-LABEL: @strong_order_cmp_eq_sgt(
300- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
301- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext i1 [[CMP_EQ]] to i8
302- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp sgt i32 [[A]], [[B]]
303- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 [[SEL_EQ]]
297+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
304298; CHECK-NEXT: ret i8 [[SEL_GT]]
305299;
306300 %cmp.eq = icmp eq i32 %a , %b
@@ -312,10 +306,7 @@ define i8 @strong_order_cmp_eq_sgt(i32 %a, i32 %b) {
312306
313307define i8 @strong_order_cmp_eq_ult (i32 %a , i32 %b ) {
314308; CHECK-LABEL: @strong_order_cmp_eq_ult(
315- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
316- ; CHECK-NEXT: [[SEL_EQ:%.*]] = zext i1 [[CMP_EQ]] to i8
317- ; CHECK-NEXT: [[CMP_LT:%.*]] = icmp ult i32 [[A]], [[B]]
318- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 [[SEL_EQ]]
309+ ; CHECK-NEXT: [[SEL_LT:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
319310; CHECK-NEXT: ret i8 [[SEL_LT]]
320311;
321312 %cmp.eq = icmp eq i32 %a , %b
@@ -327,10 +318,7 @@ define i8 @strong_order_cmp_eq_ult(i32 %a, i32 %b) {
327318
328319define i8 @strong_order_cmp_eq_ugt (i32 %a , i32 %b ) {
329320; CHECK-LABEL: @strong_order_cmp_eq_ugt(
330- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
331- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext i1 [[CMP_EQ]] to i8
332- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt i32 [[A]], [[B]]
333- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 [[SEL_EQ]]
321+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
334322; CHECK-NEXT: ret i8 [[SEL_GT]]
335323;
336324 %cmp.eq = icmp eq i32 %a , %b
@@ -404,9 +392,7 @@ define i8 @strong_order_cmp_ne_ugt_ne_not_one_use(i32 %a, i32 %b) {
404392; CHECK-LABEL: @strong_order_cmp_ne_ugt_ne_not_one_use(
405393; CHECK-NEXT: [[CMP_NE:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
406394; CHECK-NEXT: call void @use1(i1 [[CMP_NE]])
407- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext i1 [[CMP_NE]] to i8
408- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt i32 [[A]], [[B]]
409- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 [[SEL_EQ]]
395+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A]], i32 [[B]])
410396; CHECK-NEXT: ret i8 [[SEL_GT]]
411397;
412398 %cmp.ne = icmp ne i32 %a , %b
@@ -535,10 +521,7 @@ define <2 x i8> @strong_order_cmp_ugt_ult_vector_poison(<2 x i32> %a, <2 x i32>
535521
536522define <2 x i8 > @strong_order_cmp_eq_ugt_vector (<2 x i32 > %a , <2 x i32 > %b ) {
537523; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector(
538- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
539- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
540- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
541- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 1>, <2 x i8> [[SEL_EQ]]
524+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
542525; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
543526;
544527 %cmp.eq = icmp eq <2 x i32 > %a , %b
@@ -550,10 +533,7 @@ define <2 x i8> @strong_order_cmp_eq_ugt_vector(<2 x i32> %a, <2 x i32> %b) {
550533
551534define <2 x i8 > @strong_order_cmp_eq_ugt_vector_poison1 (<2 x i32 > %a , <2 x i32 > %b ) {
552535; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector_poison1(
553- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
554- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
555- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
556- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 1>, <2 x i8> [[SEL_EQ]]
536+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
557537; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
558538;
559539 %cmp.eq = icmp eq <2 x i32 > %a , %b
@@ -565,10 +545,7 @@ define <2 x i8> @strong_order_cmp_eq_ugt_vector_poison1(<2 x i32> %a, <2 x i32>
565545
566546define <2 x i8 > @strong_order_cmp_eq_ugt_vector_poison2 (<2 x i32 > %a , <2 x i32 > %b ) {
567547; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector_poison2(
568- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
569- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
570- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
571- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 1>, <2 x i8> [[SEL_EQ]]
548+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
572549; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
573550;
574551 %cmp.eq = icmp eq <2 x i32 > %a , %b
@@ -580,10 +557,7 @@ define <2 x i8> @strong_order_cmp_eq_ugt_vector_poison2(<2 x i32> %a, <2 x i32>
580557
581558define <2 x i8 > @strong_order_cmp_eq_ugt_vector_poison3 (<2 x i32 > %a , <2 x i32 > %b ) {
582559; CHECK-LABEL: @strong_order_cmp_eq_ugt_vector_poison3(
583- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp ne <2 x i32> [[A:%.*]], [[B:%.*]]
584- ; CHECK-NEXT: [[SEL_EQ:%.*]] = sext <2 x i1> [[CMP_EQ]] to <2 x i8>
585- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt <2 x i32> [[A]], [[B]]
586- ; CHECK-NEXT: [[SEL_GT:%.*]] = select <2 x i1> [[CMP_GT]], <2 x i8> <i8 1, i8 poison>, <2 x i8> [[SEL_EQ]]
560+ ; CHECK-NEXT: [[SEL_GT:%.*]] = call <2 x i8> @llvm.ucmp.v2i8.v2i32(<2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]])
587561; CHECK-NEXT: ret <2 x i8> [[SEL_GT]]
588562;
589563 %cmp.eq = icmp eq <2 x i32 > %a , %b
0 commit comments