@@ -177,10 +177,7 @@ define <2 x i8> @sel_shuf_narrowing_commute2(<4 x i8> %x, <4 x i8> %y, <2 x i8>
177177
178178define i8 @strong_order_cmp_slt_eq (i32 %a , i32 %b ) {
179179; CHECK-LABEL: @strong_order_cmp_slt_eq(
180- ; CHECK-NEXT: [[CMP_LT:%.*]] = icmp slt i32 [[A:%.*]], [[B:%.*]]
181- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 1
182- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A]], [[B]]
183- ; CHECK-NEXT: [[SEL_EQ:%.*]] = select i1 [[CMP_EQ]], i8 0, i8 [[SEL_LT]]
180+ ; CHECK-NEXT: [[SEL_EQ:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
184181; CHECK-NEXT: ret i8 [[SEL_EQ]]
185182;
186183 %cmp.lt = icmp slt i32 %a , %b
@@ -192,10 +189,7 @@ define i8 @strong_order_cmp_slt_eq(i32 %a, i32 %b) {
192189
193190define i8 @strong_order_cmp_ult_eq (i32 %a , i32 %b ) {
194191; CHECK-LABEL: @strong_order_cmp_ult_eq(
195- ; CHECK-NEXT: [[CMP_LT:%.*]] = icmp ult i32 [[A:%.*]], [[B:%.*]]
196- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 1
197- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A]], [[B]]
198- ; CHECK-NEXT: [[SEL_EQ:%.*]] = select i1 [[CMP_EQ]], i8 0, i8 [[SEL_LT]]
192+ ; CHECK-NEXT: [[SEL_EQ:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
199193; CHECK-NEXT: ret i8 [[SEL_EQ]]
200194;
201195 %cmp.lt = icmp ult i32 %a , %b
@@ -252,10 +246,7 @@ define i8 @strong_order_cmp_slt_ult_wrong_pred(i32 %a, i32 %b) {
252246
253247define i8 @strong_order_cmp_sgt_eq (i32 %a , i32 %b ) {
254248; CHECK-LABEL: @strong_order_cmp_sgt_eq(
255- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp sgt i32 [[A:%.*]], [[B:%.*]]
256- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 -1
257- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A]], [[B]]
258- ; CHECK-NEXT: [[SEL_EQ:%.*]] = select i1 [[CMP_EQ]], i8 0, i8 [[SEL_GT]]
249+ ; CHECK-NEXT: [[SEL_EQ:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
259250; CHECK-NEXT: ret i8 [[SEL_EQ]]
260251;
261252 %cmp.gt = icmp sgt i32 %a , %b
@@ -267,10 +258,7 @@ define i8 @strong_order_cmp_sgt_eq(i32 %a, i32 %b) {
267258
268259define i8 @strong_order_cmp_ugt_eq (i32 %a , i32 %b ) {
269260; CHECK-LABEL: @strong_order_cmp_ugt_eq(
270- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp ugt i32 [[A:%.*]], [[B:%.*]]
271- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 -1
272- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A]], [[B]]
273- ; CHECK-NEXT: [[SEL_EQ:%.*]] = select i1 [[CMP_EQ]], i8 0, i8 [[SEL_GT]]
261+ ; CHECK-NEXT: [[SEL_EQ:%.*]] = call i8 @llvm.ucmp.i8.i32(i32 [[A:%.*]], i32 [[B:%.*]])
274262; CHECK-NEXT: ret i8 [[SEL_EQ]]
275263;
276264 %cmp.gt = icmp ugt i32 %a , %b
@@ -395,9 +383,7 @@ define i8 @strong_order_cmp_slt_eq_slt_not_oneuse(i32 %a, i32 %b) {
395383; CHECK-LABEL: @strong_order_cmp_slt_eq_slt_not_oneuse(
396384; CHECK-NEXT: [[CMP_LT:%.*]] = icmp slt i32 [[A:%.*]], [[B:%.*]]
397385; CHECK-NEXT: call void @use1(i1 [[CMP_LT]])
398- ; CHECK-NEXT: [[SEL_LT:%.*]] = select i1 [[CMP_LT]], i8 -1, i8 1
399- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A]], [[B]]
400- ; CHECK-NEXT: [[SEL_EQ:%.*]] = select i1 [[CMP_EQ]], i8 0, i8 [[SEL_LT]]
386+ ; CHECK-NEXT: [[SEL_EQ:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A]], i32 [[B]])
401387; CHECK-NEXT: ret i8 [[SEL_EQ]]
402388;
403389 %cmp.lt = icmp slt i32 %a , %b
@@ -410,11 +396,9 @@ define i8 @strong_order_cmp_slt_eq_slt_not_oneuse(i32 %a, i32 %b) {
410396
411397define i8 @strong_order_cmp_sgt_eq_eq_not_oneuse (i32 %a , i32 %b ) {
412398; CHECK-LABEL: @strong_order_cmp_sgt_eq_eq_not_oneuse(
413- ; CHECK-NEXT: [[CMP_GT:%.*]] = icmp sgt i32 [[A:%.*]], [[B:%.*]]
414- ; CHECK-NEXT: [[SEL_GT:%.*]] = select i1 [[CMP_GT]], i8 1, i8 -1
415- ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A]], [[B]]
399+ ; CHECK-NEXT: [[CMP_EQ:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
416400; CHECK-NEXT: call void @use1(i1 [[CMP_EQ]])
417- ; CHECK-NEXT: [[SEL_EQ:%.*]] = select i1 [[CMP_EQ ]], i8 0, i8 [[SEL_GT]]
401+ ; CHECK-NEXT: [[SEL_EQ:%.*]] = call i8 @llvm.scmp.i8.i32(i32 [[A ]], i32 [[B]])
418402; CHECK-NEXT: ret i8 [[SEL_EQ]]
419403;
420404 %cmp.gt = icmp sgt i32 %a , %b
0 commit comments