summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-07-18 04:35:10 +0000
committerAndrew Trick <atrick@apple.com>2012-07-18 04:35:10 +0000
commitc08726627cd222ba1ac186935a2e0f4213e0d3bf (patch)
treef4d4658a194e036c681af22c5ed8f30ff40070f4 /clang/lib/Frontend/CompilerInvocation.cpp
parent01deb5f2dfbd7d6a62aefa0425de44ffd36e77cc (diff)
downloadbcm5719-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/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud