@@ -3284,12 +3284,17 @@ define i32 @add_reduce_sqr_sum_flipped(i32 %a, i32 %b) {
3284
3284
ret i32 %add
3285
3285
}
3286
3286
3287
- define i32 @add_reduce_sqr_sum_flipped2 (i32 %a , i32 %b ) {
3287
+ define i32 @add_reduce_sqr_sum_flipped2 (i32 %a , i32 %bx ) {
3288
3288
; CHECK-LABEL: @add_reduce_sqr_sum_flipped2(
3289
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
3290
- ; CHECK-NEXT: [[ADD:%.*]] = mul i32 [[TMP1]], [[TMP1]]
3289
+ ; CHECK-NEXT: [[B:%.*]] = xor i32 [[BX:%.*]], 42
3290
+ ; CHECK-NEXT: [[A_SQ:%.*]] = mul nsw i32 [[A:%.*]], [[A]]
3291
+ ; CHECK-NEXT: [[TWO_A:%.*]] = shl i32 [[A]], 1
3292
+ ; CHECK-NEXT: [[TWO_A_PLUS_B:%.*]] = add i32 [[TWO_A]], [[B]]
3293
+ ; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[B]], [[TWO_A_PLUS_B]]
3294
+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[MUL]], [[A_SQ]]
3291
3295
; CHECK-NEXT: ret i32 [[ADD]]
3292
3296
;
3297
+ %b = xor i32 %bx , 42 ; thwart complexity-based canonicalization
3293
3298
%a_sq = mul nsw i32 %a , %a
3294
3299
%two_a = shl i32 %a , 1
3295
3300
%two_a_plus_b = add i32 %two_a , %b
@@ -3342,12 +3347,17 @@ define i32 @add_reduce_sqr_sum_order2_flipped(i32 %a, i32 %b) {
3342
3347
ret i32 %ab2
3343
3348
}
3344
3349
3345
- define i32 @add_reduce_sqr_sum_order2_flipped2 (i32 %a , i32 %b ) {
3350
+ define i32 @add_reduce_sqr_sum_order2_flipped2 (i32 %a , i32 %bx ) {
3346
3351
; CHECK-LABEL: @add_reduce_sqr_sum_order2_flipped2(
3347
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
3348
- ; CHECK-NEXT: [[AB2:%.*]] = mul i32 [[TMP1]], [[TMP1]]
3352
+ ; CHECK-NEXT: [[B:%.*]] = xor i32 [[BX:%.*]], 42
3353
+ ; CHECK-NEXT: [[A_SQ:%.*]] = mul nsw i32 [[A:%.*]], [[A]]
3354
+ ; CHECK-NEXT: [[TWOA:%.*]] = shl i32 [[A]], 1
3355
+ ; CHECK-NEXT: [[TWOAB1:%.*]] = add i32 [[B]], [[TWOA]]
3356
+ ; CHECK-NEXT: [[TWOAB_B2:%.*]] = mul i32 [[B]], [[TWOAB1]]
3357
+ ; CHECK-NEXT: [[AB2:%.*]] = add i32 [[A_SQ]], [[TWOAB_B2]]
3349
3358
; CHECK-NEXT: ret i32 [[AB2]]
3350
3359
;
3360
+ %b = xor i32 %bx , 42 ; thwart complexity-based canonicalization
3351
3361
%a_sq = mul nsw i32 %a , %a
3352
3362
%twoa = mul i32 %a , 2
3353
3363
%twoab = mul i32 %twoa , %b
@@ -3357,12 +3367,17 @@ define i32 @add_reduce_sqr_sum_order2_flipped2(i32 %a, i32 %b) {
3357
3367
ret i32 %ab2
3358
3368
}
3359
3369
3360
- define i32 @add_reduce_sqr_sum_order2_flipped3 (i32 %a , i32 %b ) {
3370
+ define i32 @add_reduce_sqr_sum_order2_flipped3 (i32 %a , i32 %bx ) {
3361
3371
; CHECK-LABEL: @add_reduce_sqr_sum_order2_flipped3(
3362
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
3363
- ; CHECK-NEXT: [[AB2:%.*]] = mul i32 [[TMP1]], [[TMP1]]
3372
+ ; CHECK-NEXT: [[B:%.*]] = xor i32 [[BX:%.*]], 42
3373
+ ; CHECK-NEXT: [[A_SQ:%.*]] = mul nsw i32 [[A:%.*]], [[A]]
3374
+ ; CHECK-NEXT: [[TWOA:%.*]] = shl i32 [[A]], 1
3375
+ ; CHECK-NEXT: [[B_SQ1:%.*]] = add i32 [[TWOA]], [[B]]
3376
+ ; CHECK-NEXT: [[TWOAB_B2:%.*]] = mul i32 [[B]], [[B_SQ1]]
3377
+ ; CHECK-NEXT: [[AB2:%.*]] = add i32 [[A_SQ]], [[TWOAB_B2]]
3364
3378
; CHECK-NEXT: ret i32 [[AB2]]
3365
3379
;
3380
+ %b = xor i32 %bx , 42 ; thwart complexity-based canonicalization
3366
3381
%a_sq = mul nsw i32 %a , %a
3367
3382
%twoa = mul i32 %a , 2
3368
3383
%twoab = mul i32 %b , %twoa
@@ -3552,12 +3567,18 @@ define i32 @add_reduce_sqr_sum_order5_flipped2(i32 %a, i32 %b) {
3552
3567
ret i32 %ab2
3553
3568
}
3554
3569
3555
- define i32 @add_reduce_sqr_sum_order5_flipped3 (i32 %a , i32 %b ) {
3570
+ define i32 @add_reduce_sqr_sum_order5_flipped3 (i32 %ax , i32 %b ) {
3556
3571
; CHECK-LABEL: @add_reduce_sqr_sum_order5_flipped3(
3557
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[B:%.*]], [[A:%.*]]
3558
- ; CHECK-NEXT: [[AB2:%.*]] = mul i32 [[TMP1]], [[TMP1]]
3572
+ ; CHECK-NEXT: [[A:%.*]] = xor i32 [[AX:%.*]], 42
3573
+ ; CHECK-NEXT: [[A_SQ:%.*]] = mul nsw i32 [[A]], [[A]]
3574
+ ; CHECK-NEXT: [[TWOB:%.*]] = shl i32 [[B:%.*]], 1
3575
+ ; CHECK-NEXT: [[TWOAB:%.*]] = mul i32 [[A]], [[TWOB]]
3576
+ ; CHECK-NEXT: [[B_SQ:%.*]] = mul i32 [[B]], [[B]]
3577
+ ; CHECK-NEXT: [[A2_B2:%.*]] = add i32 [[A_SQ]], [[B_SQ]]
3578
+ ; CHECK-NEXT: [[AB2:%.*]] = add i32 [[TWOAB]], [[A2_B2]]
3559
3579
; CHECK-NEXT: ret i32 [[AB2]]
3560
3580
;
3581
+ %a = xor i32 %ax , 42 ; thwart complexity-based canonicalization
3561
3582
%a_sq = mul nsw i32 %a , %a
3562
3583
%twob = mul i32 %b , 2
3563
3584
%twoab = mul i32 %a , %twob
@@ -4018,8 +4039,8 @@ define i32 @add_reduce_sqr_sum_varC_invalid2(i32 %a, i32 %b) {
4018
4039
4019
4040
define i32 @fold_sext_addition_or_disjoint (i8 %x ) {
4020
4041
; CHECK-LABEL: @fold_sext_addition_or_disjoint(
4021
- ; CHECK-NEXT: [[SE :%.*]] = sext i8 [[XX :%.*]] to i32
4022
- ; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[SE ]], 1246
4042
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sext i8 [[X :%.*]] to i32
4043
+ ; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[TMP1 ]], 1246
4023
4044
; CHECK-NEXT: ret i32 [[R]]
4024
4045
;
4025
4046
%xx = or disjoint i8 %x , 12
@@ -4043,8 +4064,8 @@ define i32 @fold_sext_addition_fail(i8 %x) {
4043
4064
4044
4065
define i32 @fold_zext_addition_or_disjoint (i8 %x ) {
4045
4066
; CHECK-LABEL: @fold_zext_addition_or_disjoint(
4046
- ; CHECK-NEXT: [[SE :%.*]] = zext i8 [[XX :%.*]] to i32
4047
- ; CHECK-NEXT: [[R:%.*]] = add nuw nsw i32 [[SE ]], 1246
4067
+ ; CHECK-NEXT: [[TMP1 :%.*]] = zext i8 [[X :%.*]] to i32
4068
+ ; CHECK-NEXT: [[R:%.*]] = add nuw nsw i32 [[TMP1 ]], 1246
4048
4069
; CHECK-NEXT: ret i32 [[R]]
4049
4070
;
4050
4071
%xx = or disjoint i8 %x , 12
@@ -4055,9 +4076,9 @@ define i32 @fold_zext_addition_or_disjoint(i8 %x) {
4055
4076
4056
4077
define i32 @fold_zext_addition_or_disjoint2 (i8 %x ) {
4057
4078
; CHECK-LABEL: @fold_zext_addition_or_disjoint2(
4058
- ; CHECK-NEXT: [[XX :%.*]] = add nuw i8 [[X:%.*]], 4
4059
- ; CHECK-NEXT: [[SE :%.*]] = zext i8 [[XX ]] to i32
4060
- ; CHECK-NEXT: ret i32 [[SE ]]
4079
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nuw i8 [[X:%.*]], 4
4080
+ ; CHECK-NEXT: [[R :%.*]] = zext i8 [[TMP1 ]] to i32
4081
+ ; CHECK-NEXT: ret i32 [[R ]]
4061
4082
;
4062
4083
%xx = or disjoint i8 %x , 18
4063
4084
%se = zext i8 %xx to i32
0 commit comments