performance: cache result of looking up user

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100862 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gabor Greif 2010-04-09 15:18:34 +00:00
parent 5ce1bf9531
commit c092362300

View File

@ -434,19 +434,21 @@ static bool FindAllMemoryUses(Instruction *I,
// Loop over all the uses, recursively processing them. // Loop over all the uses, recursively processing them.
for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
UI != E; ++UI) { UI != E; ++UI) {
if (LoadInst *LI = dyn_cast<LoadInst>(*UI)) { User *U = *UI;
if (LoadInst *LI = dyn_cast<LoadInst>(U)) {
MemoryUses.push_back(std::make_pair(LI, UI.getOperandNo())); MemoryUses.push_back(std::make_pair(LI, UI.getOperandNo()));
continue; continue;
} }
if (StoreInst *SI = dyn_cast<StoreInst>(*UI)) { if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
unsigned opNo = UI.getOperandNo(); unsigned opNo = UI.getOperandNo();
if (opNo == 0) return true; // Storing addr, not into addr. if (opNo == 0) return true; // Storing addr, not into addr.
MemoryUses.push_back(std::make_pair(SI, opNo)); MemoryUses.push_back(std::make_pair(SI, opNo));
continue; continue;
} }
if (CallInst *CI = dyn_cast<CallInst>(*UI)) { if (CallInst *CI = dyn_cast<CallInst>(U)) {
InlineAsm *IA = dyn_cast<InlineAsm>(CI->getCalledValue()); InlineAsm *IA = dyn_cast<InlineAsm>(CI->getCalledValue());
if (IA == 0) return true; if (IA == 0) return true;
@ -456,7 +458,7 @@ static bool FindAllMemoryUses(Instruction *I,
continue; continue;
} }
if (FindAllMemoryUses(cast<Instruction>(*UI), MemoryUses, ConsideredInsts, if (FindAllMemoryUses(cast<Instruction>(U), MemoryUses, ConsideredInsts,
TLI)) TLI))
return true; return true;
} }