Skip to content

Commit 7fda0f4

Browse files
committed
fix missed swap pattern
1 parent e313f96 commit 7fda0f4

File tree

2 files changed

+29
-25
lines changed

2 files changed

+29
-25
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,8 +1603,12 @@ foldIntrinsicUsingDistributiveLaws(IntrinsicInst *II,
16031603

16041604
// Attempts to swap variables such that A equals C or B equals D,
16051605
// if the inner operation is commutative.
1606-
if (Op0->isCommutative() && A != C && B != D && A == D)
1607-
std::swap(C, D);
1606+
if (Op0->isCommutative() && A != C && B != D) {
1607+
if (A == D || B == C)
1608+
std::swap(C, D);
1609+
else
1610+
return nullptr;
1611+
}
16081612

16091613
BinaryOperator *NewBinop;
16101614
if (A == C) {

llvm/test/Transforms/InstCombine/intrinsic-distributive.ll

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ define i8 @umax_of_add_nuw_l(i8 %a, i8 %b, i8 %c) {
1919
; CHECK-LABEL: define i8 @umax_of_add_nuw_l(
2020
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
2121
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]])
22-
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]]
22+
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[A]], [[TMP1]]
2323
; CHECK-NEXT: ret i8 [[MAX]]
2424
;
2525
%add1 = add nuw i8 %a, %b
@@ -58,7 +58,7 @@ define i8 @umax_of_add_nuw_nsw_lhs_l(i8 %a, i8 %b, i8 %c) {
5858
; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_lhs_l(
5959
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
6060
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]])
61-
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]]
61+
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[A]], [[TMP1]]
6262
; CHECK-NEXT: ret i8 [[MAX]]
6363
;
6464
%add1 = add nuw nsw i8 %a, %b
@@ -71,7 +71,7 @@ define i8 @umax_of_add_nuw_nsw_lhs_comm(i8 %a, i8 %b, i8 %c) {
7171
; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_lhs_comm(
7272
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
7373
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]])
74-
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]]
74+
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[A]], [[TMP1]]
7575
; CHECK-NEXT: ret i8 [[MAX]]
7676
;
7777
%add1 = add nuw nsw i8 %a, %b
@@ -97,7 +97,7 @@ define i8 @umax_of_add_nuw_nsw_rhs_l(i8 %a, i8 %b, i8 %c) {
9797
; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_rhs_l(
9898
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
9999
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]])
100-
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[TMP1]], [[A]]
100+
; CHECK-NEXT: [[MAX:%.*]] = add nuw i8 [[A]], [[TMP1]]
101101
; CHECK-NEXT: ret i8 [[MAX]]
102102
;
103103
%add1 = add nuw i8 %a, %b
@@ -136,7 +136,7 @@ define i8 @umax_of_add_nuw_nsw_l(i8 %a, i8 %b, i8 %c) {
136136
; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_l(
137137
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
138138
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]])
139-
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
139+
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
140140
; CHECK-NEXT: ret i8 [[MAX]]
141141
;
142142
%add1 = add nuw nsw i8 %a, %b
@@ -149,7 +149,7 @@ define i8 @umax_of_add_nuw_nsw_comm(i8 %a, i8 %b, i8 %c) {
149149
; CHECK-LABEL: define i8 @umax_of_add_nuw_nsw_comm(
150150
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
151151
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[B]], i8 [[C]])
152-
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
152+
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
153153
; CHECK-NEXT: ret i8 [[MAX]]
154154
;
155155
%add1 = add nuw nsw i8 %a, %b
@@ -205,7 +205,7 @@ define i8 @umin_of_add_nuw_l(i8 %a, i8 %b, i8 %c) {
205205
; CHECK-LABEL: define i8 @umin_of_add_nuw_l(
206206
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
207207
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]])
208-
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]]
208+
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[A]], [[TMP1]]
209209
; CHECK-NEXT: ret i8 [[MIN]]
210210
;
211211
%add1 = add nuw i8 %a, %b
@@ -244,7 +244,7 @@ define i8 @umin_of_add_nuw_nsw_lhs_l(i8 %a, i8 %b, i8 %c) {
244244
; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_lhs_l(
245245
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
246246
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]])
247-
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]]
247+
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[A]], [[TMP1]]
248248
; CHECK-NEXT: ret i8 [[MIN]]
249249
;
250250
%add1 = add nuw nsw i8 %a, %b
@@ -257,7 +257,7 @@ define i8 @umin_of_add_nuw_nsw_lhs_comm(i8 %a, i8 %b, i8 %c) {
257257
; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_lhs_comm(
258258
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
259259
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]])
260-
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]]
260+
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[A]], [[TMP1]]
261261
; CHECK-NEXT: ret i8 [[MIN]]
262262
;
263263
%add1 = add nuw nsw i8 %a, %b
@@ -283,7 +283,7 @@ define i8 @umin_of_add_nuw_nsw_rhs_l(i8 %a, i8 %b, i8 %c) {
283283
; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_rhs_l(
284284
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
285285
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]])
286-
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[TMP1]], [[A]]
286+
; CHECK-NEXT: [[MIN:%.*]] = add nuw i8 [[A]], [[TMP1]]
287287
; CHECK-NEXT: ret i8 [[MIN]]
288288
;
289289
%add1 = add nuw i8 %a, %b
@@ -322,7 +322,7 @@ define i8 @umin_of_add_nuw_nsw_l(i8 %a, i8 %b, i8 %c) {
322322
; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_l(
323323
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
324324
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]])
325-
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
325+
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
326326
; CHECK-NEXT: ret i8 [[MIN]]
327327
;
328328
%add1 = add nuw nsw i8 %a, %b
@@ -335,7 +335,7 @@ define i8 @umin_of_add_nuw_nsw_comm(i8 %a, i8 %b, i8 %c) {
335335
; CHECK-LABEL: define i8 @umin_of_add_nuw_nsw_comm(
336336
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
337337
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[B]], i8 [[C]])
338-
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
338+
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
339339
; CHECK-NEXT: ret i8 [[MIN]]
340340
;
341341
%add1 = add nuw nsw i8 %a, %b
@@ -406,7 +406,7 @@ define i8 @smax_of_add_nsw_l(i8 %a, i8 %b, i8 %c) {
406406
; CHECK-LABEL: define i8 @smax_of_add_nsw_l(
407407
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
408408
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]])
409-
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]]
409+
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[A]], [[TMP1]]
410410
; CHECK-NEXT: ret i8 [[MAX]]
411411
;
412412
%add1 = add nsw i8 %a, %b
@@ -445,7 +445,7 @@ define i8 @smax_of_add_nsw_nuw_lhs_l(i8 %a, i8 %b, i8 %c) {
445445
; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_lhs_l(
446446
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
447447
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]])
448-
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]]
448+
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[A]], [[TMP1]]
449449
; CHECK-NEXT: ret i8 [[MAX]]
450450
;
451451
%add1 = add nsw nuw i8 %a, %b
@@ -458,7 +458,7 @@ define i8 @smax_of_add_nsw_nuw_lhs_comm(i8 %a, i8 %b, i8 %c) {
458458
; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_lhs_comm(
459459
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
460460
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]])
461-
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]]
461+
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[A]], [[TMP1]]
462462
; CHECK-NEXT: ret i8 [[MAX]]
463463
;
464464
%add1 = add nuw nsw i8 %a, %b
@@ -484,7 +484,7 @@ define i8 @smax_of_add_nsw_nuw_rhs_l(i8 %a, i8 %b, i8 %c) {
484484
; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_rhs_l(
485485
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
486486
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]])
487-
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[TMP1]], [[A]]
487+
; CHECK-NEXT: [[MAX:%.*]] = add nsw i8 [[A]], [[TMP1]]
488488
; CHECK-NEXT: ret i8 [[MAX]]
489489
;
490490
%add1 = add nsw i8 %a, %b
@@ -523,7 +523,7 @@ define i8 @smax_of_add_nsw_nuw_l(i8 %a, i8 %b, i8 %c) {
523523
; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_l(
524524
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
525525
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]])
526-
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
526+
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
527527
; CHECK-NEXT: ret i8 [[MAX]]
528528
;
529529
%add1 = add nsw nuw i8 %a, %b
@@ -536,7 +536,7 @@ define i8 @smax_of_add_nsw_nuw_comm(i8 %a, i8 %b, i8 %c) {
536536
; CHECK-LABEL: define i8 @smax_of_add_nsw_nuw_comm(
537537
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
538538
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[B]], i8 [[C]])
539-
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
539+
; CHECK-NEXT: [[MAX:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
540540
; CHECK-NEXT: ret i8 [[MAX]]
541541
;
542542
%add1 = add nsw nuw i8 %a, %b
@@ -592,7 +592,7 @@ define i8 @smin_of_add_nsw_l(i8 %a, i8 %b, i8 %c) {
592592
; CHECK-LABEL: define i8 @smin_of_add_nsw_l(
593593
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
594594
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]])
595-
; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]]
595+
; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[A]], [[TMP1]]
596596
; CHECK-NEXT: ret i8 [[MIN]]
597597
;
598598
%add1 = add nsw i8 %a, %b
@@ -631,7 +631,7 @@ define i8 @smin_of_add_nsw_nuw_lhs_l(i8 %a, i8 %b, i8 %c) {
631631
; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_lhs_l(
632632
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
633633
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]])
634-
; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]]
634+
; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[A]], [[TMP1]]
635635
; CHECK-NEXT: ret i8 [[MIN]]
636636
;
637637
%add1 = add nsw nuw i8 %a, %b
@@ -671,7 +671,7 @@ define i8 @smin_of_add_nsw_nuw_rhs_l(i8 %a, i8 %b, i8 %c) {
671671
; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_rhs_l(
672672
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
673673
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]])
674-
; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[TMP1]], [[A]]
674+
; CHECK-NEXT: [[MIN:%.*]] = add nsw i8 [[A]], [[TMP1]]
675675
; CHECK-NEXT: ret i8 [[MIN]]
676676
;
677677
%add1 = add nsw i8 %a, %b
@@ -711,7 +711,7 @@ define i8 @smin_of_add_nsw_nuw_l(i8 %a, i8 %b, i8 %c) {
711711
; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_l(
712712
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
713713
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]])
714-
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
714+
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
715715
; CHECK-NEXT: ret i8 [[MIN]]
716716
;
717717
%add1 = add nsw nuw i8 %a, %b
@@ -724,7 +724,7 @@ define i8 @smin_of_add_nsw_nuw_comm(i8 %a, i8 %b, i8 %c) {
724724
; CHECK-LABEL: define i8 @smin_of_add_nsw_nuw_comm(
725725
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
726726
; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.smin.i8(i8 [[B]], i8 [[C]])
727-
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[TMP1]], [[A]]
727+
; CHECK-NEXT: [[MIN:%.*]] = add nuw nsw i8 [[A]], [[TMP1]]
728728
; CHECK-NEXT: ret i8 [[MIN]]
729729
;
730730
%add1 = add nsw nuw i8 %a, %b

0 commit comments

Comments
 (0)