Skip to content

Commit d15b7a8

Browse files
authored
[llvm][LICM] Limit multi-use BOAssociation to FP and Vector (#149829)
Limit the re-association of BOps with multiple users to FP and Vector arithmetic.
1 parent 186176d commit d15b7a8

File tree

6 files changed

+116
-134
lines changed

6 files changed

+116
-134
lines changed

llvm/lib/Transforms/Scalar/LICM.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2867,7 +2867,7 @@ static bool hoistBOAssociation(Instruction &I, Loop &L,
28672867
bool LVInRHS = L.isLoopInvariant(BO->getOperand(0));
28682868
auto *BO0 = dyn_cast<BinaryOperator>(BO->getOperand(LVInRHS));
28692869
if (!BO0 || BO0->getOpcode() != Opcode || !BO0->isAssociative() ||
2870-
BO0->hasNUsesOrMore(3))
2870+
BO0->hasNUsesOrMore(BO0->getType()->isIntegerTy() ? 2 : 3))
28712871
return false;
28722872

28732873
Value *LV = BO0->getOperand(0);

llvm/test/CodeGen/PowerPC/p10-spill-crlt.ll

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,14 @@ define dso_local void @P10_Spill_CR_LT() local_unnamed_addr {
3030
; CHECK-NEXT: mflr r0
3131
; CHECK-NEXT: std r0, 16(r1)
3232
; CHECK-NEXT: stw r12, 8(r1)
33-
; CHECK-NEXT: stdu r1, -64(r1)
34-
; CHECK-NEXT: .cfi_def_cfa_offset 64
33+
; CHECK-NEXT: stdu r1, -48(r1)
34+
; CHECK-NEXT: .cfi_def_cfa_offset 48
3535
; CHECK-NEXT: .cfi_offset lr, 16
36-
; CHECK-NEXT: .cfi_offset r29, -24
3736
; CHECK-NEXT: .cfi_offset r30, -16
3837
; CHECK-NEXT: .cfi_offset cr2, 8
3938
; CHECK-NEXT: .cfi_offset cr3, 8
4039
; CHECK-NEXT: .cfi_offset cr4, 8
41-
; CHECK-NEXT: std r29, 40(r1) # 8-byte Folded Spill
42-
; CHECK-NEXT: std r30, 48(r1) # 8-byte Folded Spill
40+
; CHECK-NEXT: std r30, 32(r1) # 8-byte Folded Spill
4341
; CHECK-NEXT: bl call_2@notoc
4442
; CHECK-NEXT: bc 12, 4*cr5+lt, .LBB0_13
4543
; CHECK-NEXT: # %bb.1: # %bb
@@ -67,11 +65,10 @@ define dso_local void @P10_Spill_CR_LT() local_unnamed_addr {
6765
; CHECK-NEXT: bc 12, 4*cr3+eq, .LBB0_11
6866
; CHECK-NEXT: # %bb.6: # %bb32
6967
; CHECK-NEXT: #
68+
; CHECK-NEXT: rlwinm r30, r30, 0, 24, 22
7069
; CHECK-NEXT: andi. r3, r30, 2
71-
; CHECK-NEXT: rlwinm r29, r30, 0, 24, 22
7270
; CHECK-NEXT: mcrf cr2, cr0
7371
; CHECK-NEXT: bl call_4@notoc
74-
; CHECK-NEXT: mr r30, r29
7572
; CHECK-NEXT: beq+ cr2, .LBB0_3
7673
; CHECK-NEXT: # %bb.7: # %bb37
7774
; CHECK-NEXT: .LBB0_8: # %bb22
@@ -92,13 +89,11 @@ define dso_local void @P10_Spill_CR_LT() local_unnamed_addr {
9289
; CHECK-BE-NEXT: stdu r1, -144(r1)
9390
; CHECK-BE-NEXT: .cfi_def_cfa_offset 144
9491
; CHECK-BE-NEXT: .cfi_offset lr, 16
95-
; CHECK-BE-NEXT: .cfi_offset r28, -32
9692
; CHECK-BE-NEXT: .cfi_offset r29, -24
9793
; CHECK-BE-NEXT: .cfi_offset r30, -16
9894
; CHECK-BE-NEXT: .cfi_offset cr2, 8
9995
; CHECK-BE-NEXT: .cfi_offset cr2, 8
10096
; CHECK-BE-NEXT: .cfi_offset cr2, 8
101-
; CHECK-BE-NEXT: std r28, 112(r1) # 8-byte Folded Spill
10297
; CHECK-BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill
10398
; CHECK-BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
10499
; CHECK-BE-NEXT: bl call_2
@@ -131,12 +126,11 @@ define dso_local void @P10_Spill_CR_LT() local_unnamed_addr {
131126
; CHECK-BE-NEXT: bc 12, 4*cr3+eq, .LBB0_11
132127
; CHECK-BE-NEXT: # %bb.6: # %bb32
133128
; CHECK-BE-NEXT: #
129+
; CHECK-BE-NEXT: rlwinm r29, r29, 0, 24, 22
134130
; CHECK-BE-NEXT: andi. r3, r29, 2
135-
; CHECK-BE-NEXT: rlwinm r28, r29, 0, 24, 22
136131
; CHECK-BE-NEXT: mcrf cr2, cr0
137132
; CHECK-BE-NEXT: bl call_4
138133
; CHECK-BE-NEXT: nop
139-
; CHECK-BE-NEXT: mr r29, r28
140134
; CHECK-BE-NEXT: beq+ cr2, .LBB0_3
141135
; CHECK-BE-NEXT: # %bb.7: # %bb37
142136
; CHECK-BE-NEXT: .LBB0_8: # %bb22

llvm/test/CodeGen/PowerPC/swaps-le-1.ll

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -187,34 +187,34 @@ define void @foo() {
187187
; CHECK-P9-NEXT: .p2align 4
188188
; CHECK-P9-NEXT: .LBB0_1: # %vector.body
189189
; CHECK-P9-NEXT: #
190-
; CHECK-P9-NEXT: lxv 2, -32(6)
191-
; CHECK-P9-NEXT: lxv 3, -32(5)
192-
; CHECK-P9-NEXT: lxv 4, -16(5)
193-
; CHECK-P9-NEXT: vadduwm 2, 3, 2
190+
; CHECK-P9-NEXT: lxv 2, -32(3)
194191
; CHECK-P9-NEXT: lxv 3, -32(4)
192+
; CHECK-P9-NEXT: lxv 4, -16(4)
193+
; CHECK-P9-NEXT: vadduwm 2, 3, 2
194+
; CHECK-P9-NEXT: lxv 3, -32(5)
195195
; CHECK-P9-NEXT: vmuluwm 2, 2, 3
196-
; CHECK-P9-NEXT: lxv 3, -16(6)
197-
; CHECK-P9-NEXT: vadduwm 3, 4, 3
198-
; CHECK-P9-NEXT: lxv 4, 0(5)
199-
; CHECK-P9-NEXT: stxv 2, -32(3)
200-
; CHECK-P9-NEXT: lxv 2, -16(4)
201-
; CHECK-P9-NEXT: vmuluwm 2, 3, 2
202-
; CHECK-P9-NEXT: lxv 3, 0(6)
196+
; CHECK-P9-NEXT: lxv 3, -16(3)
203197
; CHECK-P9-NEXT: vadduwm 3, 4, 3
204-
; CHECK-P9-NEXT: lxv 4, 16(5)
205-
; CHECK-P9-NEXT: addi 5, 5, 64
206-
; CHECK-P9-NEXT: stxv 2, -16(3)
207-
; CHECK-P9-NEXT: lxv 2, 0(4)
198+
; CHECK-P9-NEXT: lxv 4, 0(4)
199+
; CHECK-P9-NEXT: stxv 2, -32(6)
200+
; CHECK-P9-NEXT: lxv 2, -16(5)
208201
; CHECK-P9-NEXT: vmuluwm 2, 3, 2
209-
; CHECK-P9-NEXT: lxv 3, 16(6)
210-
; CHECK-P9-NEXT: addi 6, 6, 64
202+
; CHECK-P9-NEXT: lxv 3, 0(3)
211203
; CHECK-P9-NEXT: vadduwm 3, 4, 3
212-
; CHECK-P9-NEXT: stxv 2, 0(3)
213-
; CHECK-P9-NEXT: lxv 2, 16(4)
204+
; CHECK-P9-NEXT: lxv 4, 16(4)
214205
; CHECK-P9-NEXT: addi 4, 4, 64
206+
; CHECK-P9-NEXT: stxv 2, -16(6)
207+
; CHECK-P9-NEXT: lxv 2, 0(5)
215208
; CHECK-P9-NEXT: vmuluwm 2, 3, 2
216-
; CHECK-P9-NEXT: stxv 2, 16(3)
209+
; CHECK-P9-NEXT: lxv 3, 16(3)
217210
; CHECK-P9-NEXT: addi 3, 3, 64
211+
; CHECK-P9-NEXT: vadduwm 3, 4, 3
212+
; CHECK-P9-NEXT: stxv 2, 0(6)
213+
; CHECK-P9-NEXT: lxv 2, 16(5)
214+
; CHECK-P9-NEXT: addi 5, 5, 64
215+
; CHECK-P9-NEXT: vmuluwm 2, 3, 2
216+
; CHECK-P9-NEXT: stxv 2, 16(6)
217+
; CHECK-P9-NEXT: addi 6, 6, 64
218218
; CHECK-P9-NEXT: bdnz .LBB0_1
219219
; CHECK-P9-NEXT: # %bb.2: # %for.end
220220
; CHECK-P9-NEXT: blr

0 commit comments

Comments
 (0)