summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/LLVMTargetMachine.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-09-16 20:25:11 +0000
committerDan Gohman <gohman@apple.com>2009-09-16 20:25:11 +0000
commit0f64d71d9984a987e428a86a9895c89840ed0df3 (patch)
treeff533ca90fc3b645277a7b9355999aa674487673 /llvm/lib/CodeGen/LLVMTargetMachine.cpp
parentdec23fd82522b157b5d27e55e5908eb371f7b884 (diff)
downloadbcm5719-llvm-0f64d71d9984a987e428a86a9895c89840ed0df3.tar.gz
bcm5719-llvm-0f64d71d9984a987e428a86a9895c89840ed0df3.zip
Add a new pass for doing late hoisting of floating-point and vector
constants out of loops. These aren't covered by the regular LICM pass, because in LLVM IR constants don't require separate instructions. They're not always covered by the MachineLICM pass either, because it doesn't know how to unfold folded constant-pool loads. This is somewhat experimental at this point, and off by default. llvm-svn: 82076
Diffstat (limited to 'llvm/lib/CodeGen/LLVMTargetMachine.cpp')
-rw-r--r--llvm/lib/CodeGen/LLVMTargetMachine.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/LLVMTargetMachine.cpp b/llvm/lib/CodeGen/LLVMTargetMachine.cpp
index 5b6cfdc989f..94c6fa6b833 100644
--- a/llvm/lib/CodeGen/LLVMTargetMachine.cpp
+++ b/llvm/lib/CodeGen/LLVMTargetMachine.cpp
@@ -39,6 +39,8 @@ static cl::opt<bool> PrintEmittedAsm("print-emitted-asm", cl::Hidden,
cl::desc("Dump emitter generated instructions as assembly"));
static cl::opt<bool> PrintGCInfo("print-gc", cl::Hidden,
cl::desc("Dump garbage collector data"));
+static cl::opt<bool> HoistConstants("hoist-constants", cl::Hidden,
+ cl::desc("Hoist constants out of loops"));
static cl::opt<bool> VerifyMachineCode("verify-machineinstrs", cl::Hidden,
cl::desc("Verify generated machine code"),
cl::init(getenv("LLVM_VERIFY_MACHINEINSTRS")!=NULL));
@@ -259,8 +261,11 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM,
// Make sure that no unreachable blocks are instruction selected.
PM.add(createUnreachableBlockEliminationPass());
- if (OptLevel != CodeGenOpt::None)
+ if (OptLevel != CodeGenOpt::None) {
+ if (HoistConstants)
+ PM.add(createCodeGenLICMPass());
PM.add(createCodeGenPreparePass(getTargetLowering()));
+ }
PM.add(createStackProtectorPass(getTargetLowering()));
OpenPOWER on IntegriCloud