99define i32 @add_sext_icmp (i32 %A ) {
1010; CHECK-LABEL: define i32 @add_sext_icmp(
1111; CHECK-SAME: i32 [[A:%.*]]) {
12- ; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[A]], 1
13- ; CHECK-NEXT: [[ICMP:%.*]] = icmp ne i32 [[A]], 0
14- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[ICMP]] to i32
15- ; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[ADD1]], [[SEXT]]
12+ ; CHECK-NEXT: [[ADD2:%.*]] = call i32 @llvm.umax.i32(i32 [[A]], i32 1)
1613; CHECK-NEXT: ret i32 [[ADD2]]
1714;
1815 %add1 = add i32 %A , 1
@@ -25,10 +22,7 @@ define i32 @add_sext_icmp(i32 %A) {
2522define i32 @add_sext_icmp_commutative (i32 %A ) {
2623; CHECK-LABEL: define i32 @add_sext_icmp_commutative(
2724; CHECK-SAME: i32 [[A:%.*]]) {
28- ; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[A]], 1
29- ; CHECK-NEXT: [[ICMP:%.*]] = icmp ne i32 [[A]], 0
30- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[ICMP]] to i32
31- ; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[ADD1]], [[SEXT]]
25+ ; CHECK-NEXT: [[ADD2:%.*]] = call i32 @llvm.umax.i32(i32 [[A]], i32 1)
3226; CHECK-NEXT: ret i32 [[ADD2]]
3327;
3428 %add1 = add i32 %A , 1
@@ -77,10 +71,7 @@ define i32 @add_sext_icmp_negative_pred(i32 %A) {
7771define i32 @add_sext_icmp_multi_use_add2 (i32 %A ) {
7872; CHECK-LABEL: define i32 @add_sext_icmp_multi_use_add2(
7973; CHECK-SAME: i32 [[A:%.*]]) {
80- ; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[A]], 1
81- ; CHECK-NEXT: [[ICMP:%.*]] = icmp ne i32 [[A]], 0
82- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[ICMP]] to i32
83- ; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[ADD1]], [[SEXT]]
74+ ; CHECK-NEXT: [[ADD2:%.*]] = call i32 @llvm.umax.i32(i32 [[A]], i32 1)
8475; CHECK-NEXT: call void @use(i32 [[ADD2]])
8576; CHECK-NEXT: ret i32 [[ADD2]]
8677;
0 commit comments