@@ -1398,9 +1398,7 @@ define i32 @uadd_sat(i32 %x, i32 %y) {
1398
1398
1399
1399
define i32 @uadd_sat_flipped (i32 %x ) {
1400
1400
; CHECK-LABEL: @uadd_sat_flipped(
1401
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -11
1402
- ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1403
- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1401
+ ; CHECK-NEXT: [[COND:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[X:%.*]], i32 9)
1404
1402
; CHECK-NEXT: ret i32 [[COND]]
1405
1403
;
1406
1404
%cmp = icmp ugt i32 %x , -11
@@ -1411,9 +1409,7 @@ define i32 @uadd_sat_flipped(i32 %x) {
1411
1409
1412
1410
define i32 @uadd_sat_flipped2 (i32 %x ) {
1413
1411
; CHECK-LABEL: @uadd_sat_flipped2(
1414
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -10
1415
- ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1416
- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1412
+ ; CHECK-NEXT: [[COND:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[X:%.*]], i32 9)
1417
1413
; CHECK-NEXT: ret i32 [[COND]]
1418
1414
;
1419
1415
%cmp = icmp ugt i32 %x , -10
@@ -1452,9 +1448,7 @@ define i32 @uadd_sat_flipped3_neg_no_nuw(i32 %x) {
1452
1448
1453
1449
define i32 @uadd_sat_negative_one (i32 %x ) {
1454
1450
; CHECK-LABEL: @uadd_sat_negative_one(
1455
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], -1
1456
- ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 1
1457
- ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1451
+ ; CHECK-NEXT: [[COND:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[X:%.*]], i32 1)
1458
1452
; CHECK-NEXT: ret i32 [[COND]]
1459
1453
;
1460
1454
%cmp = icmp eq i32 %x , -1
@@ -1476,9 +1470,7 @@ define <2 x i8> @uadd_sat_flipped4_vector(<2 x i8> %x) {
1476
1470
1477
1471
define <2 x i8 > @uadd_sat_flipped4_poison_vector (<2 x i8 > %x ) {
1478
1472
; CHECK-LABEL: @uadd_sat_flipped4_poison_vector(
1479
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult <2 x i8> [[X:%.*]], <i8 -10, i8 poison>
1480
- ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 9, i8 9>
1481
- ; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> <i8 -1, i8 -1>
1473
+ ; CHECK-NEXT: [[COND:%.*]] = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> [[X:%.*]], <2 x i8> <i8 9, i8 9>)
1482
1474
; CHECK-NEXT: ret <2 x i8> [[COND]]
1483
1475
;
1484
1476
%cmp = icmp ult <2 x i8 > %x , <i8 -10 , i8 poison>
@@ -1489,9 +1481,7 @@ define <2 x i8> @uadd_sat_flipped4_poison_vector(<2 x i8> %x) {
1489
1481
1490
1482
define <2 x i8 > @uadd_sat_flipped4_poison_vector_compare (<2 x i8 > %x ) {
1491
1483
; CHECK-LABEL: @uadd_sat_flipped4_poison_vector_compare(
1492
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult <2 x i8> [[X:%.*]], <i8 -10, i8 poison>
1493
- ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 9, i8 poison>
1494
- ; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> <i8 -1, i8 -1>
1484
+ ; CHECK-NEXT: [[COND:%.*]] = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> [[X:%.*]], <2 x i8> <i8 9, i8 9>)
1495
1485
; CHECK-NEXT: ret <2 x i8> [[COND]]
1496
1486
;
1497
1487
%cmp = icmp ult <2 x i8 > %x , <i8 -10 , i8 poison>
@@ -1986,9 +1976,7 @@ define i32 @uadd_sat_not_commute_select_uge_commute_add(i32 %x, i32 %y) {
1986
1976
1987
1977
define i32 @uadd_sat_constant (i32 %x ) {
1988
1978
; CHECK-LABEL: @uadd_sat_constant(
1989
- ; CHECK-NEXT: [[A:%.*]] = add i32 [[X:%.*]], 42
1990
- ; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[X]], -43
1991
- ; CHECK-NEXT: [[R:%.*]] = select i1 [[C]], i32 -1, i32 [[A]]
1979
+ ; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[X:%.*]], i32 42)
1992
1980
; CHECK-NEXT: ret i32 [[R]]
1993
1981
;
1994
1982
%a = add i32 %x , 42
@@ -2054,9 +2042,7 @@ define i32 @uadd_sat_canon_y_nuw(i32 %x, i32 %y) {
2054
2042
2055
2043
define <4 x i32 > @uadd_sat_constant_vec (<4 x i32 > %x ) {
2056
2044
; CHECK-LABEL: @uadd_sat_constant_vec(
2057
- ; CHECK-NEXT: [[A:%.*]] = add <4 x i32> [[X:%.*]], <i32 42, i32 42, i32 42, i32 42>
2058
- ; CHECK-NEXT: [[C:%.*]] = icmp ugt <4 x i32> [[X]], <i32 -43, i32 -43, i32 -43, i32 -43>
2059
- ; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[C]], <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32> [[A]]
2045
+ ; CHECK-NEXT: [[R:%.*]] = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> [[X:%.*]], <4 x i32> <i32 42, i32 42, i32 42, i32 42>)
2060
2046
; CHECK-NEXT: ret <4 x i32> [[R]]
2061
2047
;
2062
2048
%a = add <4 x i32 > %x , <i32 42 , i32 42 , i32 42 , i32 42 >
@@ -2078,9 +2064,7 @@ define <4 x i32> @uadd_sat_constant_vec_commute(<4 x i32> %x) {
2078
2064
2079
2065
define <4 x i32 > @uadd_sat_constant_vec_commute_undefs (<4 x i32 > %x ) {
2080
2066
; CHECK-LABEL: @uadd_sat_constant_vec_commute_undefs(
2081
- ; CHECK-NEXT: [[A:%.*]] = add <4 x i32> [[X:%.*]], <i32 42, i32 42, i32 42, i32 poison>
2082
- ; CHECK-NEXT: [[C:%.*]] = icmp ult <4 x i32> [[X]], <i32 -43, i32 -43, i32 poison, i32 -43>
2083
- ; CHECK-NEXT: [[R:%.*]] = select <4 x i1> [[C]], <4 x i32> [[A]], <4 x i32> <i32 -1, i32 poison, i32 -1, i32 -1>
2067
+ ; CHECK-NEXT: [[R:%.*]] = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> [[X:%.*]], <4 x i32> <i32 42, i32 42, i32 42, i32 42>)
2084
2068
; CHECK-NEXT: ret <4 x i32> [[R]]
2085
2069
;
2086
2070
%a = add <4 x i32 > %x , <i32 42 , i32 42 , i32 42 , i32 poison>
0 commit comments