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 | c08726627cd222ba1ac186935a2e0f4213e0d3bf (patch) | |
| tree | f4d4658a194e036c681af22c5ed8f30ff40070f4 /clang/lib/Analysis/ProgramPoint.cpp | |
| parent | 01deb5f2dfbd7d6a62aefa0425de44ffd36e77cc (diff) | |
| download | bcm5719-llvm-c08726627cd222ba1ac186935a2e0f4213e0d3bf.tar.gz bcm5719-llvm-c08726627cd222ba1ac186935a2e0f4213e0d3bf.zip | |
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.
llvm-svn: 160421
Diffstat (limited to 'clang/lib/Analysis/ProgramPoint.cpp')
0 files changed, 0 insertions, 0 deletions

