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