fix for PR49888 var-tracking compile-time regression

Alexandre Oliva aoliva@redhat.com
Thu Jan 17 20:57:00 GMT 2013


On Jan 16, 2013, Jakub Jelinek <jakub@redhat.com> wrote:

> for i686-linux tree-ssa-pre.o is different, and
> for x86_64-linux go/export.o is different.

I looked into the latter first, and that revealed a few major bugs:

1. I'd failed to fully implement what I'd planned.  The canonicalization
function would still take REGs from dataflow sets, instead of only
VALUEs that can be safely cached, and the memory clobbering was still
using an expression that could contain REGs rather than only VALUEs.
This means at times the canonical values could have been wrong, and they
could accidentally fail to match.

2. ENTRY_VALUEs, that could already be used as canonical base addresses
before, have now become far more likely to be chosen as such, but the
alias code compared all ENTRY_VALUEs of the same mode equal, because the
ENTRY_VALUE operand is a 0 rather than an e.

Having fixed these two problems, the debug info for go/export became
identical.  Feeling adventurous, I made all memory overlap tests
performed as part of the memory clobbering use (the nwo cheap)
canonicalized addresses, instead of only canonicalizing the compare-with
addresses that were marked as SP-based.

This gives us additional accuracy in the tests, and this caused some
additional differences in tree-ssa-pre compare on i686: with the earlier
patch, we'd fail to recognize many compares as non-overlapping, and
conservatively drop the corresponding MEMs from the dataflow set.  In
other cases, it was the use of VALUE-based address canonicalization that
enabled the mem conflict test to do a better job.

While investigating this, I found out we'd go TWICE over the entire
dataflow set clobbering each modified MEM, when once would have been
enough, and fixed that too.  This should further reduce the performance
impact caused by the original memory clobbering patch.

Here's the patch I've just regstrapped.  Test results look good, with no
regressions introduced since the earlier version of the patch, which
itself hadn't regressed on top of an earlier tree.  However, there are
regressions comparing the latest results with those based on the earlier
tree, so I'm now running a baseline test just to be sure that the
regressions are not caused by this patch.  Ok to install if they aren't?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: vta-get-addr-caching-pr54402-pr54114.patch
Type: text/x-diff
Size: 14382 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20130117/cbaafc58/attachment.bin>
-------------- next part --------------


-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer


More information about the Gcc-patches mailing list