From ff510a58c2ebaa806828047a7cf1e1daa5266999 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Tue, 3 Oct 2006 07:26:07 +0000 Subject: [PATCH] Revert previous patch. Still breaking things. llvm-svn: 30698 --- llvm/lib/Transforms/IPO/ArgumentPromotion.cpp | 50 +------------------ 1 file changed, 1 insertion(+), 49 deletions(-) diff --git a/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp b/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp index a3ebc65f12a3..5183d43bc7c2 100644 --- a/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/llvm/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -179,53 +179,6 @@ static bool AllCalleesPassInValidPointerForArgument(Argument *Arg) { return true; } -/// AccessOccursOnPath - Returns true if and only if a load or GEP instruction -/// on Pointer occurs in Path, or in every control-flow path that succeeds it. -bool AccessOccursOnPath(Value* V, BasicBlock* Start) { - std::vector Worklist; - Worklist.push_back(Start); - - std::set Visited; - - while (!Worklist.empty()) { - BasicBlock* BB = Worklist.back(); - Worklist.pop_back(); - Visited.insert(BB); - - bool ContainsAccess = false; - for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { - if (isa(I)) { - for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end(); OI != OE; ++OI) - if (*OI == V) { - ContainsAccess = true; - break; - } - } else if (isa(I)) { - for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end(); OI != OE; ++OI) - if (*OI == V) { - ContainsAccess = AccessOccursOnPath(I, I->getParent()); - break; - } - } - - if (ContainsAccess) - break; - } - - if (ContainsAccess) continue; - - TerminatorInst* TI = BB->getTerminator(); - if (isa(TI) || isa(TI)) { - for (unsigned i = 0; i < TI->getNumSuccessors(); ++i) - if (!Visited.count(TI->getSuccessor(i))) - Worklist.push_back(TI->getSuccessor(i)); - } else { - return false; - } - } - - return true; -} /// isSafeToPromoteArgument - As you might guess from the name of this method, /// it checks to see if it is both safe and useful to promote the argument. @@ -299,8 +252,7 @@ bool ArgPromotion::isSafeToPromoteArgument(Argument *Arg) const { // of the pointer in the entry block of the function) or if we can prove that // all pointers passed in are always to legal locations (for example, no null // pointers are passed in, no pointers to free'd memory, etc). - if (!AccessOccursOnPath(Arg, Arg->getParent()->begin()) && - !AllCalleesPassInValidPointerForArgument(Arg)) + if (!HasLoadInEntryBlock && !AllCalleesPassInValidPointerForArgument(Arg)) return false; // Cannot prove that this is safe!! // Okay, now we know that the argument is only used by load instructions and -- GitLab