On 12/02/2015 08:35 AM, Richard Biener wrote:


The most interesting side effect, and one I haven't fully analyzed yet is an
unexpected jump thread -- which I've traced back to differences in what the
alias oracle is able to find when we walk unaliased vuses. Which makes
totally no sense that it's unable to find the unaliased vuse in the
simplified CFG, but finds it when we don't remove the unexecutable edge.  As
I said, it makes no sense to me yet and I'm still digging.

The walking of PHI nodes is quite simplistic to avoid doing too much work so
an extra (not executable) edge may confuse it enough.  So this might be
"expected".  Adding a flag on whether EDGE_EXECUTABLE is to be
trusted would be an option (also helping SCCVN).
Found it. In the CFG with the unexectuable edges _not_ removed there is a PHI associated with that edge which provides a dominating unaliased vuse. Once that edge is removed, the PHI arg gets removed and thus we can't easily see the unaliased vuse.

So all is working as expected. It wasn't ever a big issue, I just wanted to make sure I thoroughly understood the somewhat counter-intuitive result.

Jeff

Reply via email to