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.