@@ -1184,10 +1184,8 @@ define i32 @lshr_add_use2(i1 %x, i1 %y, i32* %p) {
1184
1184
1185
1185
define i32 @lshr_add_sexts (i1 %x , i1 %y ) {
1186
1186
; CHECK-LABEL: @lshr_add_sexts(
1187
- ; CHECK-NEXT: [[XS:%.*]] = sext i1 [[X:%.*]] to i32
1188
- ; CHECK-NEXT: [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
1189
- ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[XS]], [[YS]]
1190
- ; CHECK-NEXT: [[R:%.*]] = lshr i32 [[SUB]], 31
1187
+ ; CHECK-NEXT: [[TMP1:%.*]] = or i1 [[X:%.*]], [[Y:%.*]]
1188
+ ; CHECK-NEXT: [[R:%.*]] = zext i1 [[TMP1]] to i32
1191
1189
; CHECK-NEXT: ret i32 [[R]]
1192
1190
;
1193
1191
%xs = sext i1 %x to i32
@@ -1199,10 +1197,8 @@ define i32 @lshr_add_sexts(i1 %x, i1 %y) {
1199
1197
1200
1198
define i5 @and_add_sexts (i1 %x , i1 %y ) {
1201
1199
; CHECK-LABEL: @and_add_sexts(
1202
- ; CHECK-NEXT: [[XS:%.*]] = sext i1 [[X:%.*]] to i5
1203
- ; CHECK-NEXT: [[YS:%.*]] = sext i1 [[Y:%.*]] to i5
1204
- ; CHECK-NEXT: [[SUB:%.*]] = add nsw i5 [[XS]], [[YS]]
1205
- ; CHECK-NEXT: [[R:%.*]] = and i5 [[SUB]], -2
1200
+ ; CHECK-NEXT: [[TMP1:%.*]] = or i1 [[X:%.*]], [[Y:%.*]]
1201
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[TMP1]], i5 -2, i5 0
1206
1202
; CHECK-NEXT: ret i5 [[R]]
1207
1203
;
1208
1204
%xs = sext i1 %x to i5
@@ -1214,11 +1210,9 @@ define i5 @and_add_sexts(i1 %x, i1 %y) {
1214
1210
1215
1211
define <2 x i8 > @ashr_add_sexts (<2 x i1 > %x , <2 x i1 > %y ) {
1216
1212
; CHECK-LABEL: @ashr_add_sexts(
1217
- ; CHECK-NEXT: [[XS:%.*]] = sext <2 x i1> [[X:%.*]] to <2 x i8>
1218
- ; CHECK-NEXT: [[YS:%.*]] = sext <2 x i1> [[Y:%.*]] to <2 x i8>
1219
- ; CHECK-NEXT: [[SUB:%.*]] = add nsw <2 x i8> [[YS]], [[XS]]
1220
- ; CHECK-NEXT: [[R:%.*]] = ashr <2 x i8> [[SUB]], <i8 1, i8 1>
1221
- ; CHECK-NEXT: ret <2 x i8> [[R]]
1213
+ ; CHECK-NEXT: [[TMP1:%.*]] = or <2 x i1> [[Y:%.*]], [[X:%.*]]
1214
+ ; CHECK-NEXT: [[TMP2:%.*]] = sext <2 x i1> [[TMP1]] to <2 x i8>
1215
+ ; CHECK-NEXT: ret <2 x i8> [[TMP2]]
1222
1216
;
1223
1217
%xs = sext <2 x i1 > %x to <2 x i8 >
1224
1218
%ys = sext <2 x i1 > %y to <2 x i8 >
@@ -1229,12 +1223,8 @@ define <2 x i8> @ashr_add_sexts(<2 x i1> %x, <2 x i1> %y) {
1229
1223
1230
1224
define i32 @cmp_math_sexts (i32 %x , i32 %y ) {
1231
1225
; CHECK-LABEL: @cmp_math_sexts(
1232
- ; CHECK-NEXT: [[GT:%.*]] = icmp ugt i32 [[X:%.*]], [[Y:%.*]]
1233
- ; CHECK-NEXT: [[LT:%.*]] = icmp ult i32 [[X]], [[Y]]
1234
- ; CHECK-NEXT: [[XZ:%.*]] = sext i1 [[GT]] to i32
1235
- ; CHECK-NEXT: [[TMP1:%.*]] = sext i1 [[LT]] to i32
1236
- ; CHECK-NEXT: [[S:%.*]] = add nsw i32 [[XZ]], [[TMP1]]
1237
- ; CHECK-NEXT: [[R:%.*]] = lshr i32 [[S]], 31
1226
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
1227
+ ; CHECK-NEXT: [[R:%.*]] = zext i1 [[TMP1]] to i32
1238
1228
; CHECK-NEXT: ret i32 [[R]]
1239
1229
;
1240
1230
%gt = icmp ugt i32 %x , %y
0 commit comments