summaryrefslogtreecommitdiffstats
path: root/llvm/lib/TableGen/TGPreprocessor.h
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2011-10-05 14:28:49 +0000
committerDuncan Sands <baldrick@free.fr>2011-10-05 14:28:49 +0000
commitf4f47ccd1299a83c62680a4871cc46ffec9fa2c4 (patch)
tree37ac1f3e747ab26e96ca49b75924c6eb06b75c22 /llvm/lib/TableGen/TGPreprocessor.h
parente90dd0587e5949aacfdb042cff1de24d0b6a104e (diff)
downloadbcm5719-llvm-f4f47ccd1299a83c62680a4871cc46ffec9fa2c4.tar.gz
bcm5719-llvm-f4f47ccd1299a83c62680a4871cc46ffec9fa2c4.zip
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. llvm-svn: 141177
Diffstat (limited to 'llvm/lib/TableGen/TGPreprocessor.h')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud