llvm-6502/lib
Philip Reames 7c7b72a066 Infer known bits from dominating conditions
This patch adds limited support in ValueTracking for inferring known bits of a value from conditional expressions which must be true to reach the instruction we're trying to optimize. At this time, the feature is off by default. Once landed, I'm hoping for feedback from others on both profitability and compile time impact.

Forms of conditional value propagation have been tried in LLVM before and have failed due to compile time problems.  In an attempt to side step that, this patch only considers conditions where the edge leaving the branch dominates the context instruction. It does not attempt full dataflow.  Even with that restriction, it handles many interesting cases:
 * Early exits from functions
 * Early exits from loops (for context instructions in the loop and after the check)
 * Conditions which control entry into loops, including multi-version loops (such as those produced during vectorization, IRCE, loop unswitch, etc..)

Possible applications include optimizing using information provided by constructs such as: preconditions, assumptions, null checks, & range checks.

This patch implements two approaches to the problem that need further benchmarking.  Approach 1 is to directly walk the dominator tree looking for interesting conditions.  Approach 2 is to inspect other uses of the value being queried for interesting comparisons.  From initial benchmarking, it appears that Approach 2 is faster than Approach 1, but this needs to be further validated.  

Differential Revision: http://reviews.llvm.org/D7708



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231879 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-10 22:43:20 +00:00
..
Analysis Infer known bits from dominating conditions 2015-03-10 22:43:20 +00:00
AsmParser Fix a stack overflow in the assembler when checking that GEPs must be over sized types. 2015-03-10 06:34:57 +00:00
Bitcode
CodeGen Remove the use of the subtarget in MCCodeEmitter creation and 2015-03-10 22:03:14 +00:00
DebugInfo
ExecutionEngine Temporarily revert r231726 and r231724 as they're breaking the build.: 2015-03-10 00:33:27 +00:00
Fuzzer
IR [X86, AVX] replace vinsertf128 intrinsics with generic shuffles 2015-03-10 16:08:36 +00:00
IRReader
LineEditor
Linker DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
LTO
MC Create symbols marking the start of a section earlier. 2015-03-10 22:00:25 +00:00
Object Add support for Nuxi CloudABI. 2015-03-09 18:40:45 +00:00
Option
Passes
ProfileData InstrProf: Allow hexadecimal function hashes in proftext format 2015-03-09 18:54:49 +00:00
Support Teach raw_ostream to accept SmallString. 2015-03-10 07:33:23 +00:00
TableGen
Target Remove the use of the subtarget in MCCodeEmitter creation and 2015-03-10 22:03:14 +00:00
Transforms remove function names from comments; NFC 2015-03-10 19:42:57 +00:00
CMakeLists.txt
LLVMBuild.txt
Makefile