diff options
author | Andrew Trick <atrick@apple.com> | 2012-07-18 04:35:10 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-07-18 04:35:10 +0000 |
commit | 4781d8ee1cd586bf7a569f80e1e49694c93eddd8 (patch) | |
tree | ddd01788c164c6fd412f657aacebdcfb26478e31 /examples/LLVMBuild.txt | |
parent | 75dc33a60b65bbbf2253b0b916df1d36a4da4237 (diff) | |
download | external_llvm-4781d8ee1cd586bf7a569f80e1e49694c93eddd8.zip external_llvm-4781d8ee1cd586bf7a569f80e1e49694c93eddd8.tar.gz external_llvm-4781d8ee1cd586bf7a569f80e1e49694c93eddd8.tar.bz2 |
indvars: Linear function test replace should avoid reusing undef.
Fixes PR13371: indvars pass incorrectly substitutes 'undef' values.
I do not like this fix. It's needed until/unless the meaning of undef
changes. It attempts to be complete according to the IR spec, but I
don't have much confidence in the implementation given the difficulty
testing undefined behavior. Worse, this invalidates some of my
hard-fought work on indvars and LSR to optimize pointer induction
variables. It results benchmark regressions, which I'll track
internally. On x86_64 no LTO I see:
-3% huffbench
-3% 400.perlbench
-8% fhourstones
My only suggestion for recovering is to change the meaning of
undef. If we could trust an arbitrary instruction to produce a some
real value that can be manipulated (e.g. incremented) according to
non-undef rules, then this case could be easily handled with SCEV.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160421 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'examples/LLVMBuild.txt')
0 files changed, 0 insertions, 0 deletions