Skip to content

Commit ef5e65d

Browse files
authored
[AArch64] Fix stp kill when merging forward. (#152994)
As an alternative to #149177, iterate through all instructions in `AArch64LoadStoreOptimizer`.
1 parent c1f4107 commit ef5e65d

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1193,7 +1193,8 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
11931193
// USE kill %w1 ; need to clear kill flag when moving STRWui downwards
11941194
// STRW %w0
11951195
Register Reg = getLdStRegOp(*I).getReg();
1196-
for (MachineInstr &MI : make_range(std::next(I), Paired))
1196+
for (MachineInstr &MI :
1197+
make_range(std::next(I->getIterator()), Paired->getIterator()))
11971198
MI.clearRegisterKills(Reg, TRI);
11981199
}
11991200
}

llvm/test/CodeGen/AArch64/sve-vls-ldst-opt.mir

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,21 @@ body: |
7272
# CHECK: STURQi killed renamable $q1, renamable $x1, 16 :: (store (s128))
7373
# CHECK: STURQi killed renamable $q2, renamable $x1, 48 :: (store (s128))
7474
# CHECK: STR_ZXI killed renamable $z3, renamable $x1, 4 :: (store (<vscale x 1 x s128>))
75+
---
76+
name: clear-kill-in-bundle-forward
77+
tracksRegLiveness: true
78+
body: |
79+
bb.0:
80+
liveins: $x0, $z0
81+
STR_ZXI $z0, $x0, 0 :: (store (<vscale x 1 x s128>))
82+
BUNDLE implicit-def $z1, implicit killed $z0 {
83+
$z1 = ADD_ZZZ_D killed $z0, $z0
84+
}
85+
STR_ZXI renamable $z1, $x0, 1 :: (store (<vscale x 1 x s128>))
86+
RET_ReallyLR
87+
...
88+
# CHECK-LABEL: name: clear-kill-in-bundle-forward
89+
# CHECK: BUNDLE implicit-def $z1, implicit $z0 {
90+
# CHECK: $z1 = ADD_ZZZ_D $z0, $z0
91+
# CHECK: }
92+
# CHECK: STPQi $q0, $q1, $x0, 0 :: (store (<vscale x 1 x s128>))

0 commit comments

Comments
 (0)