On Sun, Aug 21, 2011 at 1:58 AM, Richard Henderson <r...@redhat.com> wrote: > On 08/20/2011 03:03 PM, H.J. Lu wrote: >> On Sat, Aug 20, 2011 at 3:02 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>> You can do better than this, and avoid the %M %N specifiers. >>>> The outputs are truly independent and do not need to be a pair. >>>> >>> >>> Since RA use register pairs for TImode/DImode, should requiring >>> TI/DI registers in pairs generate better does? >> ^^^^^^ codes. >> >> Without register pairs, we are generating very strange codes. >> > > We ought to be making better use of the lower-subregs pass. > Representing independent outputs when possible enables that. > > Admittedly, the i386 port needs more attention to really make > this happen properly. But we don't need to make things even > worse in the meantime.
I will investigate this. BTW: Latest patch has a small error. Insn mnemonic in following pattern should be "mult" instead of "imult", so the correct version reads: +(define_insn "*umul<mode><dwi>3_1" + [(set (match_operand:<DWI> 0 "register_operand" "=A,r") + (mult:<DWI> + (zero_extend:<DWI> + (match_operand:DWIH 1 "nonimmediate_operand" "%0,d")) + (zero_extend:<DWI> + (match_operand:DWIH 2 "nonimmediate_operand" "rm,rm")))) + (clobber (reg:CC FLAGS_REG))] + "!(MEM_P (operands[1]) && MEM_P (operands[2]))" + "@ + mul{<imodesuffix>}\t%2 + #" Uros.