@@ -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 :%.*]] = shl nsw i64 [[A:%.*]], 1
510
- ; CHECK-NEXT: [[DOTNEG:%.*]] = add i64 [[B_IDX ]], -84
509
+ ; CHECK-NEXT: [[B_IDX_NEG_NEG :%.*]] = shl i64 [[A:%.*]], 1
510
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = add i64 [[B_IDX_NEG_NEG ]], -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 :%.*]] = shl nsw i16 [[TMP1]], 1
525
- ; CHECK-NEXT: [[DOTNEG:%.*]] = add i16 [[B_IDX ]], -84
524
+ ; CHECK-NEXT: [[B_IDX_NEG_NEG :%.*]] = shl i16 [[TMP1]], 1
525
+ ; CHECK-NEXT: [[DOTNEG:%.*]] = add i16 [[B_IDX_NEG_NEG ]], -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,9 +557,8 @@ 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:%.*]] = shl i64 [[SUB]], 2
561
- ; CHECK-NEXT: [[NEG:%.*]] = sub i64 0, [[MUL]]
562
- ; CHECK-NEXT: ret i64 [[NEG]]
560
+ ; CHECK-NEXT: [[MUL_NEG:%.*]] = mul i64 [[SUB]], -4
561
+ ; CHECK-NEXT: ret i64 [[MUL_NEG]]
563
562
;
564
563
%sub = sub i64 %a , %b
565
564
store i64 %sub , i64* %p
@@ -840,9 +839,10 @@ define i64 @test29(i8* %foo, i64 %i, i64 %j) {
840
839
841
840
define i64 @test30 (i8* %foo , i64 %i , i64 %j ) {
842
841
; CHECK-LABEL: @test30(
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]]
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]]
846
846
;
847
847
%bit = bitcast i8* %foo to i32*
848
848
%gep1 = getelementptr inbounds i32 , i32* %bit , i64 %i
@@ -855,9 +855,10 @@ 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:%.*]] = shl nsw i16 [[I:%.*]], 2
859
- ; CHECK-NEXT: [[DOTNEG:%.*]] = sub i16 [[GEP1_IDX]], [[J:%.*]]
860
- ; CHECK-NEXT: ret i16 [[DOTNEG]]
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]]
861
862
;
862
863
%bit = bitcast i8 addrspace (1 )* %foo to i32 addrspace (1 )*
863
864
%gep1 = getelementptr inbounds i32 , i32 addrspace (1 )* %bit , i16 %i
@@ -1310,8 +1311,8 @@ define i64 @test61([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
1310
1311
1311
1312
define i32 @test62 (i32 %A ) {
1312
1313
; CHECK-LABEL: @test62(
1313
- ; CHECK-NEXT: [[B :%.*]] = shl i32 [[A:%.*]], 1
1314
- ; CHECK-NEXT: [[C:%.*]] = sub i32 2, [[B]]
1314
+ ; CHECK-NEXT: [[B_NEG :%.*]] = mul i32 [[A:%.*]], -2
1315
+ ; CHECK-NEXT: [[C:%.*]] = add i32 [[B_NEG]], 2
1315
1316
; CHECK-NEXT: ret i32 [[C]]
1316
1317
;
1317
1318
%B = sub i32 1 , %A
@@ -1321,8 +1322,8 @@ define i32 @test62(i32 %A) {
1321
1322
1322
1323
define <2 x i32 > @test62vec (<2 x i32 > %A ) {
1323
1324
; CHECK-LABEL: @test62vec(
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]]
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>
1326
1327
; CHECK-NEXT: ret <2 x i32> [[C]]
1327
1328
;
1328
1329
%B = sub <2 x i32 > <i32 1 , i32 1 >, %A
@@ -1332,8 +1333,8 @@ define <2 x i32> @test62vec(<2 x i32> %A) {
1332
1333
1333
1334
define i32 @test63 (i32 %A ) {
1334
1335
; CHECK-LABEL: @test63(
1335
- ; CHECK-NEXT: [[B :%.*]] = shl i32 [[A:%.*]], 1
1336
- ; CHECK-NEXT: ret i32 [[B ]]
1336
+ ; CHECK-NEXT: [[B_NEG_NEG :%.*]] = shl i32 [[A:%.*]], 1
1337
+ ; CHECK-NEXT: ret i32 [[B_NEG_NEG ]]
1337
1338
;
1338
1339
%B = sub i32 1 , %A
1339
1340
%C = shl i32 %B , 1
@@ -1343,8 +1344,8 @@ define i32 @test63(i32 %A) {
1343
1344
1344
1345
define <2 x i32 > @test63vec (<2 x i32 > %A ) {
1345
1346
; CHECK-LABEL: @test63vec(
1346
- ; CHECK-NEXT: [[B :%.*]] = shl <2 x i32> [[A:%.*]], <i32 1, i32 1>
1347
- ; CHECK-NEXT: ret <2 x i32> [[B ]]
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 ]]
1348
1349
;
1349
1350
%B = sub <2 x i32 > <i32 1 , i32 1 >, %A
1350
1351
%C = shl <2 x i32 > %B , <i32 1 , i32 1 >
0 commit comments