On 19/09/11 16:53, Ulrich Weigand wrote:
> Richard Earnshaw wrote:
>> On 19/09/11 15:14, Ulrich Weigand wrote:
>>> So it seems to me that for match_operator operands, the
>>> goal_alternative_win flag should always be true ...
>>>
>>> Can you find out why this isn't true in your case?
>>
>> Hmm, I think it must be because of this:
>>
>>        /* If the operand is a SUBREG, extract
>>           the REG or MEM (or maybe even a constant) within.
>>           (Constants can occur as a result of reg_equiv_constant.)  */
>>
>>        while (GET_CODE (operand) == SUBREG)
>>          {
>>              ...
>>              force_reload = 1;
>>          }
> 
> Ah, right.  Note that immediately before this "while" we have:
> 
>           /* If the predicate accepts a unary operator, it means that
>              we need to reload the operand, but do not do this for
>              match_operator and friends.  */
>           if (UNARY_P (operand) && *p != 0)
>             operand = XEXP (operand, 0);
> 
> The "... but do not do this for match_operator and friends" part is
> implemented by the "*p != 0" check here.  It seems we need the same
> check for the SUBREG test.
> 

Hmm, OK, I'll try to cook up a patch that does that and see if it solves
my problem.

Thanks for the review.

R.


Reply via email to