On Fri, 2013-08-16 at 23:25 +0200, Jakub Jelinek wrote: > On Fri, Aug 16, 2013 at 04:18:18PM -0500, Peter Bergner wrote: > > --- gcc/config/rs6000/dfp.md (revision 201779) > > +++ gcc/config/rs6000/dfp.md (working copy) > > @@ -132,11 +132,14 @@ (define_expand "negtd2" > > "") > > > > (define_insn "*negtd2_fpr" > > - [(set (match_operand:TD 0 "gpc_reg_operand" "=d") > > - (neg:TD (match_operand:TD 1 "gpc_reg_operand" "d")))] > > + [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d") > > + (neg:TD (match_operand:TD 1 "gpc_reg_operand" "d,0")))] > > I'm surprised if it works in this order, I'd expect that alternative 0 > would match even for the same regno and that the second alternative wouldn't > be tried.
It did that way because I thought that was the order they had to be in due to this in the internals doc: ‘0’, ‘1’, ‘2’, ... ‘9’ An operand that matches the specified operand number is allowed. If a digit is used together with letters within the same alternative, the digit should come last. I see I missed the "within the same alternative" and yeah, I guess I'm a little surprised the first alternative didn't kick in now too. I'll swap them to be sure and I'll add a couple of extra routines in the tests that test both alternatives. Peter