cache result of operator*

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107990 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gabor Greif 2010-07-09 16:51:20 +00:00
parent 19e5ada58a
commit e664267ae7

View File

@ -160,13 +160,12 @@ static bool SafeToDestroyConstant(const Constant *C) {
static bool AnalyzeGlobal(const Value *V, GlobalStatus &GS, static bool AnalyzeGlobal(const Value *V, GlobalStatus &GS,
SmallPtrSet<const PHINode*, 16> &PHIUsers) { SmallPtrSet<const PHINode*, 16> &PHIUsers) {
for (Value::const_use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; for (Value::const_use_iterator UI = V->use_begin(), E = V->use_end(); UI != E;
++UI) ++UI) {
if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(*UI)) { const User *U = *UI;
if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
GS.HasNonInstructionUser = true; GS.HasNonInstructionUser = true;
if (AnalyzeGlobal(CE, GS, PHIUsers)) return true; if (AnalyzeGlobal(CE, GS, PHIUsers)) return true;
} else if (const Instruction *I = dyn_cast<Instruction>(U)) {
} else if (const Instruction *I = dyn_cast<Instruction>(*UI)) {
if (!GS.HasMultipleAccessingFunctions) { if (!GS.HasMultipleAccessingFunctions) {
const Function *F = I->getParent()->getParent(); const Function *F = I->getParent()->getParent();
if (GS.AccessingFunction == 0) if (GS.AccessingFunction == 0)
@ -235,7 +234,7 @@ static bool AnalyzeGlobal(const Value *V, GlobalStatus &GS,
} else { } else {
return true; // Any other non-load instruction might take address! return true; // Any other non-load instruction might take address!
} }
} else if (const Constant *C = dyn_cast<Constant>(*UI)) { } else if (const Constant *C = dyn_cast<Constant>(U)) {
GS.HasNonInstructionUser = true; GS.HasNonInstructionUser = true;
// We might have a dead and dangling constant hanging off of here. // We might have a dead and dangling constant hanging off of here.
if (!SafeToDestroyConstant(C)) if (!SafeToDestroyConstant(C))
@ -245,6 +244,7 @@ static bool AnalyzeGlobal(const Value *V, GlobalStatus &GS,
// Otherwise must be some other user. // Otherwise must be some other user.
return true; return true;
} }
}
return false; return false;
} }