summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LICM.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-11-29 21:26:12 +0000
committerChris Lattner <sabre@nondot.org>2004-11-29 21:26:12 +0000
commit6e455608e24aa6f8922c0e0de93efd67eef9ddf3 (patch)
treeee057a3c5c59c1cdf7957636dba1949844017349 /llvm/lib/Transforms/Scalar/LICM.cpp
parent0ea40c935ff420d07fe02442196c2f638895f061 (diff)
downloadbcm5719-llvm-6e455608e24aa6f8922c0e0de93efd67eef9ddf3.tar.gz
bcm5719-llvm-6e455608e24aa6f8922c0e0de93efd67eef9ddf3.zip
Allow hoisting loads of globals and alloca's in conditionals.
llvm-svn: 18363
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LICM.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LICM.cpp6
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);
OpenPOWER on IntegriCloud