From: David P G. <gr...@us...> - 2011-10-08 12:32:51
|
Ondrej Lhotak <ol...@uw...> wrote on 10/07/2011 11:04:29 PM: > > OK, I think I've gotten to the bottom of this. > > After the first scalar replacement, the code pattern looks like this: > t495a = null > t495a = t28sa > ... > use t495a > > In all of my small examples, the use was in the *same* basic block as > the defs. Therefore, LocalCopyProp replaced the use with a use of t28sa. > This made *both* of the defs dead, and they were both subsequently eliminated. > > In the interesting Scala code, however, the use was in a *different* basic > block than the two defs. LocalCopyProp therefore did not change the > use. None of the transformations that are performed between passes of scalar > replacement remove the first def. As a result, t495a never becomes SSA, > and the second pass of scalar replacement always ignores t495a, and > therefore does nothing. > > To check this, I modified one of my small examples to force the use into > a different basic block. With this modification, the second scalar > replacement pass no longer did anything. > > The bottom line is that the multiple passes of scalar replacement are > useful only in the case when all getfields of the replaced field are in > the same basic block as the allocation and all of the putfields. > > That leaves me with one more question: is there a cheap and easy way to > put just a single variable into SSA form (when the rest of the code is > already mostly SSA)? Cool. Thanks for pushing on this. Are the two defs in the same basic block? If so a quick and dirty solution would be to do a local dead assignment elimination. A better long term solution is probably for us to implement a classical dense data flow global dead assignment elimination pass. We can probably afford to do this at O1. We used to get this by going in & out of SSA form at O2, but the SSA transformation was considered to be buggy enough that it got disabled (moved to O3) in the stability push we did a few years back. The intent was always to bring it back, but we never found the time :( --dave |