[llvm] r260534 - [AArch64] Refactoring findMatchingStore() in aarch64-ldst-opt; NFC
Jun Bum Lim via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 11 08:18:24 PST 2016
Author: junbuml
Date: Thu Feb 11 10:18:24 2016
New Revision: 260534
URL: http://llvm.org/viewvc/llvm-project?rev=260534&view=rev
Log:
[AArch64] Refactoring findMatchingStore() in aarch64-ldst-opt; NFC
Summary: This change makes findMatchingStore() follow the same coding style introduced in r260275.
Reviewers: gberry, junbuml
Subscribers: aemerson, rengolin, haicheng, bmakam, mssimpso
Differential Revision: http://reviews.llvm.org/D17083
Modified:
llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp
Modified: llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp?rev=260534&r1=260533&r2=260534&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp Thu Feb 11 10:18:24 2016
@@ -1106,27 +1106,29 @@ static bool mayAlias(MachineInstr *MIa,
bool AArch64LoadStoreOpt::findMatchingStore(
MachineBasicBlock::iterator I, unsigned Limit,
MachineBasicBlock::iterator &StoreI) {
- MachineBasicBlock::iterator E = I->getParent()->begin();
+ MachineBasicBlock::iterator B = I->getParent()->begin();
MachineBasicBlock::iterator MBBI = I;
MachineInstr *LoadMI = I;
unsigned BaseReg = getLdStBaseOp(LoadMI).getReg();
+ // If the load is the first instruction in the block, there's obviously
+ // not any matching store.
+ if (MBBI == B)
+ return false;
+
// Track which registers have been modified and used between the first insn
// and the second insn.
ModifiedRegs.reset();
UsedRegs.reset();
- // FIXME: We miss the case where the matching store is the first instruction
- // in the basic block.
- for (unsigned Count = 0; MBBI != E && Count < Limit;) {
+ unsigned Count = 0;
+ do {
--MBBI;
MachineInstr *MI = MBBI;
- // Skip DBG_VALUE instructions. Otherwise debug info can affect the
- // optimization by changing how far we scan.
- 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 the load instruction reads directly from the address to which the
// store instruction writes and the stored value is not modified, we can
@@ -1154,7 +1156,7 @@ bool AArch64LoadStoreOpt::findMatchingSt
// If we encounter a store aliased with the load, return early.
if (MI->mayStore() && mayAlias(LoadMI, MI, TII))
return false;
- }
+ } while (MBBI != B && Count < Limit);
return false;
}
More information about the llvm-commits
mailing list