Skip to content
  • Duncan Sands's avatar
    GVN does simple propagation of conditions: when it sees a conditional · f4f47ccd
    Duncan Sands authored
    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.
    
    llvm-svn: 141177
    f4f47ccd
Loading