[tree-ssa]: Constant propagation into PHI's screws up IVR and PRE
Daniel Berlin
dberlin@dberlin.org
Wed Jul 30 17:01:00 GMT 2003
On Wednesday, July 30, 2003, at 12:36 PM, Andrew MacLeod wrote:
> On Wed, 2003-07-30 at 11:29, Daniel Berlin wrote:
>> As the subject says, constprop into phi's screws up both PRE and IVR.
>>
>> Let me give an IVR example:
>>
>> for (i = 0; i < 50; i++)
>>
>> now becomes
>>
>> i_4 = 0;
>> while (1)
>> {
>> # i_1 = PHI <0(0), i_7(10)>;
>>
>>
>> because of the propagated 0 in the phi, we can't properly detect i as
>> an induction variable.
>> Why?
>> Trivial induction variables in SSA have the following property:
>> a phi of arity 2 in the loop body with one value coming from the same
>> variable name in the loop pre-header, and one value coming from the
>> same variable name in the loop latch.
>>
>> We have no idea what variable caused that 0 to be propagated into the
>> PHI. It's not necessarily "i".
>
> So does that mean if I have :
>
> for (i = b; i< lim; i++)
> {
> }
>
> where I have a PHI:
>
>
> i_6 = a_3
> ..
> i_9 = PHI <i_6(2), i_8(6)>
>
> and we copy prop this, we end up with:
>
> i_9 = PHI <a_3(2), i_8(6)>
>
> So you wouldn't recognize that as an induction variable either?
Right.
>
> I would think you ought to be able to tell that the edge from 2 is the
> initialization edge, and it doesn't matter what value is there.
You can't, without knowing the original variable before propagation.
Otherwise you risk calling things that *aren't* induction variables,
induction variables.
Which we can't get, since DCE will remove the original set now that
it's useless.
In the i = 0 case, the set of i = 0 will be completely removed, so we
have *zero* way of telling what the original variable was.
> The
> important thing is you have an 'i' coming in from the back edge...
This is a necessary, but not sufficient condition to detect induction
variables.
See Michael Wolfe's paper on induction variable detection in SSA form.
> This kind of thing seems like it ought not be hard to detect, and its
> really limiting not to be able to do so. You are having the net
> effect
> of saying "we cant do many optimization before IVR or PRE, or we cant
> find anything"
No, we can record what the variable in the phi was before const/copy
prop, and that would solve the problem.
>
More information about the Gcc
mailing list