diff options
author | Jingyue Wu <jingyue@google.com> | 2015-05-15 17:54:48 +0000 |
---|---|---|
committer | Jingyue Wu <jingyue@google.com> | 2015-05-15 17:54:48 +0000 |
commit | 154eb5aa1d9c829715d13c9a047d4498be4d2e2a (patch) | |
tree | 3e7a47b1737c62724e40b83a620e11141a000abc /llvm/lib/Transforms/Scalar/Scalar.cpp | |
parent | 1675b4a57f21b01e5b78f2ba95fb37945acff831 (diff) | |
download | bcm5719-llvm-154eb5aa1d9c829715d13c9a047d4498be4d2e2a.tar.gz bcm5719-llvm-154eb5aa1d9c829715d13c9a047d4498be4d2e2a.zip |
Add a speculative execution pass
Summary:
This is a pass for speculative execution of instructions for simple if-then (triangle) control flow. It's aimed at GPUs, but could perhaps be used in other contexts. Enabling this pass gives us a 1.0% geomean improvement on Google benchmark suites, with one benchmark improving 33%.
Credit goes to Jingyue Wu for writing an earlier version of this pass.
Patched by Bjarke Roune.
Test Plan:
This patch adds a set of tests in test/Transforms/SpeculativeExecution/spec.ll
The pass is controlled by a flag which defaults to having the pass not run.
Reviewers: eliben, dberlin, meheff, jingyue, hfinkel
Reviewed By: jingyue, hfinkel
Subscribers: majnemer, jholewinski, llvm-commits
Differential Revision: http://reviews.llvm.org/D9360
llvm-svn: 237459
Diffstat (limited to 'llvm/lib/Transforms/Scalar/Scalar.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/Scalar.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/Scalar.cpp b/llvm/lib/Transforms/Scalar/Scalar.cpp index 483a2997eb8..d5d360571f8 100644 --- a/llvm/lib/Transforms/Scalar/Scalar.cpp +++ b/llvm/lib/Transforms/Scalar/Scalar.cpp @@ -74,6 +74,7 @@ void llvm::initializeScalarOpts(PassRegistry &Registry) { initializeSinkingPass(Registry); initializeTailCallElimPass(Registry); initializeSeparateConstOffsetFromGEPPass(Registry); + initializeSpeculativeExecutionPass(Registry); initializeStraightLineStrengthReducePass(Registry); initializeLoadCombinePass(Registry); initializePlaceBackedgeSafepointsImplPass(Registry); |