llvm/lib/Transforms/IPO
Jingyue Wu 85e632de29 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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237459 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-15 17:54:48 +00:00
..
ArgumentPromotion.cpp IR: Give 'DI' prefix to debug info metadata 2015-04-29 16:38:44 +00:00
BarrierNoopPass.cpp
CMakeLists.txt
ConstantMerge.cpp DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
DeadArgumentElimination.cpp Change typeIncompatible to return an AttrBuilder instead of new-ing an AttributeSet. 2015-05-06 23:19:56 +00:00
ExtractGV.cpp
FunctionAttrs.cpp Convert PHI getIncomingValue() to foreach over incoming_values(). NFC. 2015-05-12 20:05:31 +00:00
GlobalDCE.cpp GlobalDCE: Improve performance for large modules containing comdats. 2015-03-19 18:23:29 +00:00
GlobalOpt.cpp Recommit r236670: [opaque pointer type] Pass explicit pointer type through GEP constant folding"" 2015-05-07 17:28:58 +00:00
InlineAlways.cpp
Inliner.cpp [Inliner] Discard empty COMDAT groups 2015-05-05 20:14:22 +00:00
InlineSimple.cpp
Internalize.cpp
IPConstantPropagation.cpp
IPO.cpp
LLVMBuild.txt
LoopExtractor.cpp
LowerBitSets.cpp [opaque pointer type] Pass GlobalAlias the actual pointer type rather than decomposing it into pointee type + address space 2015-04-29 21:22:39 +00:00
Makefile
MergeFunctions.cpp MergeFunctions: Two different sized allocas are *not* the same 2015-05-12 21:42:22 +00:00
PartialInlining.cpp
PassManagerBuilder.cpp Add a speculative execution pass 2015-05-15 17:54:48 +00:00
PruneEH.cpp
StripDeadPrototypes.cpp
StripSymbols.cpp IR: Give 'DI' prefix to debug info metadata 2015-04-29 16:38:44 +00:00