llvm-project/llvm/test/Transforms/JumpThreading
Philip Reames 44456b8963 [LVI] Introduce an intersect operation on lattice values
LVI has several separate sources of facts - edge local conditions, recursive queries, assumes, and control independent value facts - which all apply to the same value at the same location. The existing implementation was very conservative about exploiting all of these facts at once.

This change introduces an "intersect" function specifically to abstract the action of picking a good set of facts from all of the separate facts given. At the moment, this function is relatively simple (i.e. mostly just reuses the bits which were already there), but even the minor additions reveal the inherent power. For example, JumpThreading is now capable of doing an inductive proof that a particular value is always positive and removing a half range check.

I'm currently only using the new intersect function in one place. If folks are happy with the direction of the work, I plan on making a series of small changes without review to replace mergeIn with intersect at all the appropriate places.

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

llvm-svn: 259461
2016-02-02 03:15:40 +00:00
..
2008-11-27-EntryMunge.ll
2010-08-26-and.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2011-04-02-SimplifyDeadBlock.ll
2011-04-14-InfLoop.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
2012-07-19-NoSuccessorIndirectBr.ll
and-and-cond.ll
and-cond.ll
assume-edge-dom.ll
assume.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
basic.ll [JumpThreading] make jump threading respect convergent annotation. 2015-08-31 06:10:27 +00:00
branch-no-const.ll
compare.ll
conservative-lvi.ll
crash.ll
degenerate-phi.ll
implied-cond.ll [JumpThreading] Use dominating conditions to prove implications 2015-10-28 21:27:08 +00:00
indirectbr.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
induction.ll [LVI] Introduce an intersect operation on lattice values 2016-02-02 03:15:40 +00:00
landing-pad.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
lvi-load.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
no-irreducible-loops.ll
or-undef.ll
phi-eq.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
phi-known.ll [LazyValueInfo] Look through Phi nodes when trying to prove a predicate 2015-08-31 18:31:48 +00:00
pr9331.ll
pr15851_hang.ll
pr22086.ll
pr26096.ll Avoid inlining call sites in unreachable-terminated block 2016-02-01 20:55:11 +00:00
select.ll [JumpThreading] Split select that has constant conditions coming from the PHI node 2016-01-08 19:39:39 +00:00
thread-cmp.ll [JumpThreading] Simplify comparisons when simplifying branches 2015-05-07 00:19:14 +00:00
thread-loads.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
update-edge-weight.ll [BPI] Replace weights by probabilities in BPI. 2015-12-22 18:56:14 +00:00