> On 06/06/13 17:26, Richard Henderson wrote:
> > On 06/06/2013 08:02 AM, Richard Earnshaw wrote:
> >>   (define_insn "add<mode>3"
> >> -  [(set (match_operand:FIXED 0 "s_register_operand" "=r")
> >> -    (plus:FIXED (match_operand:FIXED 1 "s_register_operand"
> "r")
> >> -            (match_operand:FIXED 2 "s_register_operand" "r")))]
> >> +  [(set (match_operand:FIXED 0 "s_register_operand" "=r,l")
> >> +    (plus:FIXED (match_operand:FIXED 1 "s_register_operand"
> "r,l")
> >> +            (match_operand:FIXED 2 "s_register_operand"
> "r,l")))]
> >>
> >> It would probably be better to put the 'l' variant first. This
> should encourage
> >> register allocation to prefer low registers and that might lead
> to other
> >> optimizations later on.  Similarly for sub<mode>3.
> >
> > It's also 100% required in order to make the l alternative ever
> chosen.
> >
> > When we compute which_alternative post-reload, we'll see that r
> matches
> > and always choose alternative 0.  If you've been examining asm
> dumps of
> > various test cases, in addition to your bootstrapping, you'll
> have seen
> > no IT predicated addition insns after this patch.
> >
> >
> > r~
> >
> 
> Not quite.  In the cond-exec case the first alternative can be
> disabled,
> then only those cases that match the second set of constraints
> could be
> conditionalized.

In any case, I've committed the patch with the 'l' constraint going
before 'r' as r199739.
Thanks for the review.

Kyrill



Reply via email to