@@ -1435,6 +1435,28 @@ define i32 @and31_add_sexts(i1 %x, i1 %y) {
1435
1435
ret i32 %r
1436
1436
}
1437
1437
1438
+ declare void @use_sexts (i32 , i32 )
1439
+
1440
+ ; Negative test
1441
+ define i32 @lshr_add_use_sexts_both (i1 %x , i1 %y , ptr %p ) {
1442
+ ; CHECK-LABEL: @lshr_add_use_sexts_both(
1443
+ ; CHECK-NEXT: [[XS:%.*]] = sext i1 [[X:%.*]] to i32
1444
+ ; CHECK-NEXT: store i32 [[XS]], ptr [[P:%.*]], align 4
1445
+ ; CHECK-NEXT: [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
1446
+ ; CHECK-NEXT: call void @use_sexts(i32 [[XS]], i32 [[YS]])
1447
+ ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[XS]], [[YS]]
1448
+ ; CHECK-NEXT: [[R:%.*]] = lshr i32 [[SUB]], 31
1449
+ ; CHECK-NEXT: ret i32 [[R]]
1450
+ ;
1451
+ %xs = sext i1 %x to i32
1452
+ store i32 %xs , ptr %p
1453
+ %ys = sext i1 %y to i32
1454
+ call void @use_sexts (i32 %xs , i32 %ys )
1455
+ %sub = add i32 %xs , %ys
1456
+ %r = lshr i32 %sub , 31
1457
+ ret i32 %r
1458
+ }
1459
+
1438
1460
; Negative test - extra use
1439
1461
1440
1462
define i32 @lshr_add_use_sexts (i1 %x , i1 %y , ptr %p ) {
@@ -1458,9 +1480,8 @@ define i32 @lshr_add_use_sexts(i1 %x, i1 %y, ptr %p) {
1458
1480
; CHECK-LABEL: @lshr_add_use_sexts(
1459
1481
; CHECK-NEXT: [[XS:%.*]] = sext i1 [[X:%.*]] to i32
1460
1482
; CHECK-NEXT: store i32 [[XS]], ptr [[P:%.*]], align 4
1461
- ; CHECK-NEXT: [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
1462
- ; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[XS]], [[YS]]
1463
- ; CHECK-NEXT: [[R:%.*]] = lshr i32 [[SUB]], 31
1483
+ ; CHECK-NEXT: [[TMP1:%.*]] = or i1 [[X]], [[Y:%.*]]
1484
+ ; CHECK-NEXT: [[R:%.*]] = zext i1 [[TMP1]] to i32
1464
1485
; CHECK-NEXT: ret i32 [[R]]
1465
1486
;
1466
1487
%xs = sext i1 %x to i32
@@ -1473,11 +1494,10 @@ define i32 @lshr_add_use_sexts(i1 %x, i1 %y, ptr %p) {
1473
1494
1474
1495
define i32 @lshr_add_use2_sexts (i1 %x , i1 %y , ptr %p ) {
1475
1496
; CHECK-LABEL: @lshr_add_use2_sexts(
1476
- ; CHECK-NEXT: [[XS:%.*]] = sext i1 [[X:%.*]] to i32
1477
1497
; CHECK-NEXT: [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
1478
1498
; CHECK-NEXT: store i32 [[YS]], ptr [[P:%.*]], align 4
1479
- ; CHECK-NEXT: [[SUB :%.*]] = add nsw i32 [[XS ]], [[YS ]]
1480
- ; CHECK-NEXT: [[R:%.*]] = lshr i32 [[SUB]], 31
1499
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i1 [[X:%.* ]], [[Y ]]
1500
+ ; CHECK-NEXT: [[R:%.*]] = zext i1 [[TMP1]] to i32
1481
1501
; CHECK-NEXT: ret i32 [[R]]
1482
1502
;
1483
1503
%xs = sext i1 %x to i32
@@ -4033,8 +4053,8 @@ define i32 @add_reduce_sqr_sum_varC_invalid2(i32 %a, i32 %b) {
4033
4053
4034
4054
define i32 @fold_sext_addition_or_disjoint (i8 %x ) {
4035
4055
; CHECK-LABEL: @fold_sext_addition_or_disjoint(
4036
- ; CHECK-NEXT: [[SE :%.*]] = sext i8 [[XX :%.*]] to i32
4037
- ; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[SE ]], 1246
4056
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sext i8 [[X :%.*]] to i32
4057
+ ; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[TMP1 ]], 1246
4038
4058
; CHECK-NEXT: ret i32 [[R]]
4039
4059
;
4040
4060
%xx = or disjoint i8 %x , 12
@@ -4058,8 +4078,8 @@ define i32 @fold_sext_addition_fail(i8 %x) {
4058
4078
4059
4079
define i32 @fold_zext_addition_or_disjoint (i8 %x ) {
4060
4080
; CHECK-LABEL: @fold_zext_addition_or_disjoint(
4061
- ; CHECK-NEXT: [[SE :%.*]] = zext i8 [[XX :%.*]] to i32
4062
- ; CHECK-NEXT: [[R:%.*]] = add nuw nsw i32 [[SE ]], 1246
4081
+ ; CHECK-NEXT: [[TMP1 :%.*]] = zext i8 [[X :%.*]] to i32
4082
+ ; CHECK-NEXT: [[R:%.*]] = add nuw nsw i32 [[TMP1 ]], 1246
4063
4083
; CHECK-NEXT: ret i32 [[R]]
4064
4084
;
4065
4085
%xx = or disjoint i8 %x , 12
@@ -4070,9 +4090,9 @@ define i32 @fold_zext_addition_or_disjoint(i8 %x) {
4070
4090
4071
4091
define i32 @fold_zext_addition_or_disjoint2 (i8 %x ) {
4072
4092
; CHECK-LABEL: @fold_zext_addition_or_disjoint2(
4073
- ; CHECK-NEXT: [[XX :%.*]] = add nuw i8 [[X:%.*]], 4
4074
- ; CHECK-NEXT: [[SE :%.*]] = zext i8 [[XX ]] to i32
4075
- ; CHECK-NEXT: ret i32 [[SE ]]
4093
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nuw i8 [[X:%.*]], 4
4094
+ ; CHECK-NEXT: [[R :%.*]] = zext i8 [[TMP1 ]] to i32
4095
+ ; CHECK-NEXT: ret i32 [[R ]]
4076
4096
;
4077
4097
%xx = or disjoint i8 %x , 18
4078
4098
%se = zext i8 %xx to i32
0 commit comments