@@ -506,8 +506,8 @@ define i64 @test24b(i8* %P, i64 %A){
506
506
507
507
define i64 @test25 (i8* %P , i64 %A ){
508
508
; CHECK-LABEL: @test25(
509
- ; CHECK-NEXT: [[B_IDX_NEG_NEG :%.*]] = shl i64 [[A:%.*]], 1
510
- ; CHECK-NEXT: [[DOTNEG:%.*]] = add i64 [[B_IDX_NEG_NEG ]], -84
509
+ ; CHECK-NEXT: [[B_IDX :%.*]] = shl nsw i64 [[A:%.*]], 1
510
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = add i64 [[B_IDX ]], -84
511
511
; CHECK-NEXT: ret i64 [[DOTNEG]]
512
512
;
513
513
%B = getelementptr inbounds [42 x i16 ], [42 x i16 ]* @Arr , i64 0 , i64 %A
@@ -521,8 +521,8 @@ define i64 @test25(i8* %P, i64 %A){
521
521
define i16 @test25_as1 (i8 addrspace (1 )* %P , i64 %A ) {
522
522
; CHECK-LABEL: @test25_as1(
523
523
; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[A:%.*]] to i16
524
- ; CHECK-NEXT: [[B_IDX_NEG_NEG :%.*]] = shl i16 [[TMP1]], 1
525
- ; CHECK-NEXT: [[DOTNEG:%.*]] = add i16 [[B_IDX_NEG_NEG ]], -84
524
+ ; CHECK-NEXT: [[B_IDX :%.*]] = shl nsw i16 [[TMP1]], 1
525
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = add i16 [[B_IDX ]], -84
526
526
; CHECK-NEXT: ret i16 [[DOTNEG]]
527
527
;
528
528
%B = getelementptr inbounds [42 x i16 ], [42 x i16 ] addrspace (1 )* @Arr_as1 , i64 0 , i64 %A
@@ -557,8 +557,9 @@ define i64 @test_neg_shl_sub_extra_use1(i64 %a, i64 %b, i64* %p) {
557
557
; CHECK-LABEL: @test_neg_shl_sub_extra_use1(
558
558
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[A:%.*]], [[B:%.*]]
559
559
; CHECK-NEXT: store i64 [[SUB]], i64* [[P:%.*]], align 8
560
- ; CHECK-NEXT: [[MUL_NEG:%.*]] = mul i64 [[SUB]], -4
561
- ; CHECK-NEXT: ret i64 [[MUL_NEG]]
560
+ ; CHECK-NEXT: [[MUL:%.*]] = shl i64 [[SUB]], 2
561
+ ; CHECK-NEXT: [[NEG:%.*]] = sub i64 0, [[MUL]]
562
+ ; CHECK-NEXT: ret i64 [[NEG]]
562
563
;
563
564
%sub = sub i64 %a , %b
564
565
store i64 %sub , i64* %p
@@ -839,10 +840,9 @@ define i64 @test29(i8* %foo, i64 %i, i64 %j) {
839
840
840
841
define i64 @test30 (i8* %foo , i64 %i , i64 %j ) {
841
842
; CHECK-LABEL: @test30(
842
- ; CHECK-NEXT: [[GEP1_IDX_NEG:%.*]] = mul i64 [[I:%.*]], -4
843
- ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[GEP1_IDX_NEG]], [[J:%.*]]
844
- ; CHECK-NEXT: [[DIFF_NEG:%.*]] = sub i64 0, [[TMP1]]
845
- ; CHECK-NEXT: ret i64 [[DIFF_NEG]]
843
+ ; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nsw i64 [[I:%.*]], 2
844
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = sub i64 [[GEP1_IDX]], [[J:%.*]]
845
+ ; CHECK-NEXT: ret i64 [[DOTNEG]]
846
846
;
847
847
%bit = bitcast i8* %foo to i32*
848
848
%gep1 = getelementptr inbounds i32 , i32* %bit , i64 %i
@@ -855,10 +855,9 @@ define i64 @test30(i8* %foo, i64 %i, i64 %j) {
855
855
856
856
define i16 @test30_as1 (i8 addrspace (1 )* %foo , i16 %i , i16 %j ) {
857
857
; CHECK-LABEL: @test30_as1(
858
- ; CHECK-NEXT: [[GEP1_IDX_NEG:%.*]] = mul i16 [[I:%.*]], -4
859
- ; CHECK-NEXT: [[TMP1:%.*]] = add i16 [[GEP1_IDX_NEG]], [[J:%.*]]
860
- ; CHECK-NEXT: [[DIFF_NEG:%.*]] = sub i16 0, [[TMP1]]
861
- ; CHECK-NEXT: ret i16 [[DIFF_NEG]]
858
+ ; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nsw i16 [[I:%.*]], 2
859
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = sub i16 [[GEP1_IDX]], [[J:%.*]]
860
+ ; CHECK-NEXT: ret i16 [[DOTNEG]]
862
861
;
863
862
%bit = bitcast i8 addrspace (1 )* %foo to i32 addrspace (1 )*
864
863
%gep1 = getelementptr inbounds i32 , i32 addrspace (1 )* %bit , i16 %i
@@ -1311,8 +1310,8 @@ define i64 @test61([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
1311
1310
1312
1311
define i32 @test62 (i32 %A ) {
1313
1312
; CHECK-LABEL: @test62(
1314
- ; CHECK-NEXT: [[B_NEG :%.*]] = mul i32 [[A:%.*]], -2
1315
- ; CHECK-NEXT: [[C:%.*]] = add i32 [[B_NEG]], 2
1313
+ ; CHECK-NEXT: [[B :%.*]] = shl i32 [[A:%.*]], 1
1314
+ ; CHECK-NEXT: [[C:%.*]] = sub i32 2, [[B]]
1316
1315
; CHECK-NEXT: ret i32 [[C]]
1317
1316
;
1318
1317
%B = sub i32 1 , %A
@@ -1322,8 +1321,8 @@ define i32 @test62(i32 %A) {
1322
1321
1323
1322
define <2 x i32 > @test62vec (<2 x i32 > %A ) {
1324
1323
; CHECK-LABEL: @test62vec(
1325
- ; CHECK-NEXT: [[B_NEG :%.*]] = mul <2 x i32> [[A:%.*]], <i32 -2 , i32 -2 >
1326
- ; CHECK-NEXT: [[C:%.*]] = add <2 x i32> [[B_NEG]], <i32 2, i32 2>
1324
+ ; CHECK-NEXT: [[B :%.*]] = shl <2 x i32> [[A:%.*]], <i32 1 , i32 1 >
1325
+ ; CHECK-NEXT: [[C:%.*]] = sub <2 x i32> <i32 2, i32 2>, [[B]]
1327
1326
; CHECK-NEXT: ret <2 x i32> [[C]]
1328
1327
;
1329
1328
%B = sub <2 x i32 > <i32 1 , i32 1 >, %A
@@ -1333,8 +1332,8 @@ define <2 x i32> @test62vec(<2 x i32> %A) {
1333
1332
1334
1333
define i32 @test63 (i32 %A ) {
1335
1334
; CHECK-LABEL: @test63(
1336
- ; CHECK-NEXT: [[B_NEG_NEG :%.*]] = shl i32 [[A:%.*]], 1
1337
- ; CHECK-NEXT: ret i32 [[B_NEG_NEG ]]
1335
+ ; CHECK-NEXT: [[B :%.*]] = shl i32 [[A:%.*]], 1
1336
+ ; CHECK-NEXT: ret i32 [[B ]]
1338
1337
;
1339
1338
%B = sub i32 1 , %A
1340
1339
%C = shl i32 %B , 1
@@ -1344,8 +1343,8 @@ define i32 @test63(i32 %A) {
1344
1343
1345
1344
define <2 x i32 > @test63vec (<2 x i32 > %A ) {
1346
1345
; CHECK-LABEL: @test63vec(
1347
- ; CHECK-NEXT: [[B_NEG_NEG :%.*]] = shl <2 x i32> [[A:%.*]], <i32 1, i32 1>
1348
- ; CHECK-NEXT: ret <2 x i32> [[B_NEG_NEG ]]
1346
+ ; CHECK-NEXT: [[B :%.*]] = shl <2 x i32> [[A:%.*]], <i32 1, i32 1>
1347
+ ; CHECK-NEXT: ret <2 x i32> [[B ]]
1349
1348
;
1350
1349
%B = sub <2 x i32 > <i32 1 , i32 1 >, %A
1351
1350
%C = shl <2 x i32 > %B , <i32 1 , i32 1 >
0 commit comments