diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/Scalar/ConstantProp.cpp')
-rw-r--r-- | contrib/llvm/lib/Transforms/Scalar/ConstantProp.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/contrib/llvm/lib/Transforms/Scalar/ConstantProp.cpp b/contrib/llvm/lib/Transforms/Scalar/ConstantProp.cpp index c974ebb..9e98219 100644 --- a/contrib/llvm/lib/Transforms/Scalar/ConstantProp.cpp +++ b/contrib/llvm/lib/Transforms/Scalar/ConstantProp.cpp @@ -19,6 +19,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Utils/Local.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/ConstantFolding.h" #include "llvm/IR/Constant.h" @@ -61,11 +62,14 @@ FunctionPass *llvm::createConstantPropagationPass() { } bool ConstantPropagation::runOnFunction(Function &F) { + if (skipFunction(F)) + return false; + // Initialize the worklist to all of the instructions ready to process... std::set<Instruction*> WorkList; - for(inst_iterator i = inst_begin(F), e = inst_end(F); i != e; ++i) { - WorkList.insert(&*i); - } + for (Instruction &I: instructions(&F)) + WorkList.insert(&I); + bool Changed = false; const DataLayout &DL = F.getParent()->getDataLayout(); TargetLibraryInfo *TLI = @@ -87,11 +91,13 @@ bool ConstantPropagation::runOnFunction(Function &F) { // Remove the dead instruction. WorkList.erase(I); - I->eraseFromParent(); + if (isInstructionTriviallyDead(I, TLI)) { + I->eraseFromParent(); + ++NumInstKilled; + } // We made a change to the function... Changed = true; - ++NumInstKilled; } } return Changed; |