diff options
-rw-r--r-- | lib/Transforms/Scalar/LICM.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp index e9f2b330ee..c20e179f10 100644 --- a/lib/Transforms/Scalar/LICM.cpp +++ b/lib/Transforms/Scalar/LICM.cpp @@ -592,6 +592,12 @@ bool LICM::isSafeToExecuteUnconditionally(Instruction &Inst) { if (Inst.getParent() == CurLoop->getHeader()) return true; + // It's always safe to load from a global or alloca. + if (isa<LoadInst>(Inst)) + if (isa<AllocationInst>(Inst.getOperand(0)) || + isa<GlobalVariable>(Inst.getOperand(0))) + return true; + // Get the exit blocks for the current loop. std::vector<BasicBlock*> ExitBlocks; CurLoop->getExitBlocks(ExitBlocks); |