llvm/lib
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
..
Analysis Allow min/max detection to see through casts. 2015-05-15 16:04:50 +00:00
AsmParser [opaque pointer type] Use the value type of the GlobalVariable rather than accessing it through the pointee's type 2015-05-13 22:55:01 +00:00
Bitcode [opaque pointer type] Explicit pointee type for GEPOperator/GEPConstantExpr. 2015-05-08 00:42:26 +00:00
CodeGen [SDAGBuilder] Make the AArch64 builder happier. 2015-05-15 17:41:29 +00:00
DebugInfo [DWARF] Add CIE header fields address_size and segment_size when generating dwarf-4 2015-05-12 15:25:08 +00:00
ExecutionEngine Readdress r236990, use of static members on a non-static variable. 2015-05-11 22:20:48 +00:00
Fuzzer [lib/Fuzzer] Add SHA1 implementation from public domain. 2015-05-14 22:41:49 +00:00
IR Add a speculative execution pass 2015-05-15 17:54:48 +00:00
IRReader
LineEditor
Linker
LTO
MC MC: Avoid some UB caused by left shifting a negative value. NFC 2015-05-14 23:54:49 +00:00
Object [llvm-readobj/obj2yaml/yaml2obj] Support MIPS machine ELF header flags 2015-05-08 07:04:59 +00:00
Option
Passes
ProfileData InstrProf: Treat functions with a coverage map but no profile as unreached 2015-05-13 22:03:04 +00:00
Support YAML: Add support for literal block scalar I/O. 2015-05-14 23:08:22 +00:00
TableGen TableGen: Avoid undefined behaviour by doing this shift in int64 2015-05-14 06:47:02 +00:00
Target Mark SMIN/SMAX/UMIN/UMAX nodes as legal and add patterns for them. 2015-05-15 16:15:57 +00:00
Transforms Add a speculative execution pass 2015-05-15 17:54:48 +00:00
CMakeLists.txt
LLVMBuild.txt Reflow long lines of some LLVMBuild files 2015-05-14 15:38:27 +00:00
Makefile