In the MemoryDependenceAnalysis::getNonLocalPointerDependency overload
that takes a pointer value, it is currently creating an
AliasAnalysis::Location from just the pointer, which pessimistically
assumes unknown size. I added code to use
AliasAnalysis::getTypeStoreSize to create an AliasAnalysis::Location
with a more accurate size (when target data is available) and ran it
through the nightly test suite, comparing it to the nightly test suite
run of the unmodified version.
I did this on a 32bit Linux x86 machine.
The results were all over the map. Some tests ran faster, others ran
slower, and it's hard to get an overall sense of whether the change
can be expected to improve or degraded the code. Since the only
change (as far as I can tell) was to make getNonLocalPointerDependency
more likely to succeed, and allow GVN to eliminate more reloads from
memory, my only guess as to why it would pessimize *any* testcases is
that it has to do with the register allocator/spiller behavior in the
presence of extra live virtual registers or extra live PHI nodes.
I saw from recent posts that new heuristics and a new live range
splitter are under development... what's the status on that? Is there
anything else that might explain these results? (I repeated the test
a few times and saw the same thing)
The patch for the change I made for the test is attached in order to
provide context for my questions.
MemDep.patch (977 Bytes)