diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LICM.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index e9f2b330eef..c20e179f107 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/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); |