mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-05 03:19:11 +00:00
[AArch64] AArch64LoadStoreOptimizer: fix bug in pre-inc check iterator
Summary: Fix case where a pre-inc/dec load/store would not be formed if the add/sub that forms the inc/dec part of the operation was the first instruction in the block being examined. Reviewers: mcrosier, jmolloy, t.p.northover, junbuml Subscribers: aemerson, rengolin, mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D16785 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260275 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a9adb28214
commit
d3a670dcad
@ -1023,6 +1023,8 @@ static void trackRegDefsUses(const MachineInstr *MI, BitVector &ModifiedRegs,
|
||||
if (!MO.isReg())
|
||||
continue;
|
||||
unsigned Reg = MO.getReg();
|
||||
if (!Reg)
|
||||
continue;
|
||||
if (MO.isDef()) {
|
||||
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
|
||||
ModifiedRegs.set(*AI);
|
||||
@ -1496,15 +1498,14 @@ MachineBasicBlock::iterator AArch64LoadStoreOpt::findMatchingUpdateInsnBackward(
|
||||
// (inclusive) and the second insn.
|
||||
ModifiedRegs.reset();
|
||||
UsedRegs.reset();
|
||||
--MBBI;
|
||||
for (unsigned Count = 0; MBBI != B && Count < Limit; --MBBI) {
|
||||
unsigned Count = 0;
|
||||
do {
|
||||
--MBBI;
|
||||
MachineInstr *MI = MBBI;
|
||||
// Skip DBG_VALUE instructions.
|
||||
if (MI->isDebugValue())
|
||||
continue;
|
||||
|
||||
// Now that we know this is a real instruction, count it.
|
||||
++Count;
|
||||
// Don't count DBG_VALUE instructions towards the search limit.
|
||||
if (!MI->isDebugValue())
|
||||
++Count;
|
||||
|
||||
// If we found a match, return it.
|
||||
if (isMatchingUpdateInsn(I, MI, BaseReg, Offset))
|
||||
@ -1517,7 +1518,7 @@ MachineBasicBlock::iterator AArch64LoadStoreOpt::findMatchingUpdateInsnBackward(
|
||||
// return early.
|
||||
if (ModifiedRegs[BaseReg] || UsedRegs[BaseReg])
|
||||
return E;
|
||||
}
|
||||
} while (MBBI != B && Count < Limit);
|
||||
return E;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
; CHECK-LABEL: _test:
|
||||
; CHECK: fmov.2d v0, #2.00000000
|
||||
; CHECK: str q0, [sp]
|
||||
; CHECK: str q0, [sp, #-16]!
|
||||
; CHECK: mov x8, sp
|
||||
; CHECK: ldr s0, [x8, w1, sxtw #2]
|
||||
; CHECK: str s0, [x0]
|
||||
@ -16,7 +16,7 @@ entry:
|
||||
|
||||
; CHECK-LABEL: _test2
|
||||
; CHECK: movi.16b v0, #0x3f
|
||||
; CHECK: str q0, [sp]
|
||||
; CHECK: str q0, [sp, #-16]!
|
||||
; CHECK: mov x8, sp
|
||||
; CHECK: ldr s0, [x8, w1, sxtw #2]
|
||||
; CHECK: str s0, [x0]
|
||||
|
Loading…
x
Reference in New Issue
Block a user