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.

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  ulrich.weig...@de.ibm.com

Reply via email to