llvm-6502/lib/Transforms
Duncan Sands 02b5e72ac6 GVN does simple propagation of conditions: when it sees a conditional
branch "br i1 %x, label %if_true, label %if_false" then it replaces
"%x" with "true" in places only reachable via the %if_true arm, and
with "false" in places only reachable via the %if_false arm.  Except
that actually it doesn't: if value numbering shows that %y is equal
to %x then, yes, %y will be turned into true/false in this way, but
any occurrences of %x itself are not transformed.  Fix this.  What's
more, it's often the case that %x is an equality comparison such as
"%x = icmp eq %A, 0", in which case every occurrence of %A that is
only reachable via the %if_true arm can be replaced with 0.  Implement
this and a few other variations on this theme.  This reduces the number
of lines of LLVM IR in "GCC as one big file" by 0.2%.  It has a bigger
impact on Ada code, typically reducing the number of lines of bitcode
by around 0.4% by removing repeated compiler generated checks.  Passes
the LLVM nightly testsuite and the Ada ACATS testsuite.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141177 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-05 14:28:49 +00:00
..
Hello
InstCombine Add a new icmp+select optz'n. Also shows off the load(cst) folding added in 2011-10-02 10:37:37 +00:00
Instrumentation If simple ownership works then friendship is not required. 2011-09-20 18:48:56 +00:00
IPO Inlining and unrolling heuristics should be aware of free truncs. 2011-10-01 01:39:05 +00:00
Scalar GVN does simple propagation of conditions: when it sees a conditional 2011-10-05 14:28:49 +00:00
Utils LSR should avoid redundant edge splitting. 2011-10-04 03:50:44 +00:00
CMakeLists.txt
Makefile