mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
restructure this a bit. Initialize the WeakVH with "I", the
instruction *after* the store. The store will always be deleted if the transformation kicks in, so we'd do an N^2 scan of every loop block. Whoops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
645b1d2f12
commit
b7e9ef0ed1
@ -207,19 +207,22 @@ bool LoopIdiomRecognize::runOnLoopBlock(BasicBlock *BB, const SCEV *BECount,
|
||||
|
||||
bool MadeChange = false;
|
||||
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ) {
|
||||
// Look for store instructions, which may be memsets.
|
||||
StoreInst *SI = dyn_cast<StoreInst>(I++);
|
||||
if (SI == 0 || SI->isVolatile()) continue;
|
||||
Instruction *Inst = I++;
|
||||
// Look for store instructions, which may be optimized to memset/memcpy.
|
||||
if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
|
||||
if (SI->isVolatile()) continue;
|
||||
|
||||
WeakVH InstPtr(SI);
|
||||
if (!processLoopStore(SI, BECount)) continue;
|
||||
WeakVH InstPtr(I);
|
||||
if (!processLoopStore(SI, BECount)) continue;
|
||||
MadeChange = true;
|
||||
|
||||
// If processing the store invalidated our iterator, start over from the
|
||||
// head of the loop.
|
||||
if (InstPtr == 0)
|
||||
I = BB->begin();
|
||||
continue;
|
||||
}
|
||||
|
||||
MadeChange = true;
|
||||
|
||||
// If processing the store invalidated our iterator, start over from the
|
||||
// head of the loop.
|
||||
if (InstPtr == 0)
|
||||
I = BB->begin();
|
||||
}
|
||||
|
||||
return MadeChange;
|
||||
|
Loading…
x
Reference in New Issue
Block a user