Performance regression

Dale Johannesen dalej@apple.com
Wed Sep 25 11:05:00 GMT 2002


On Wednesday, September 25, 2002, at 10:32 AM, David Edelsohn wrote:

> 	The PowerPC backend implements moves in common code in rs6000.c.
> I think one would implement the equivalent to the ARM optimization with
> the following patch.  I am a little worried about selecting the correct
> pseudo mode -- the load extend instruction is identical, but the 
> resulting
> mode may be wider than necessary.
>
> David

Your patch didn't quite work, but this one does, for my small example 
and
for the benchmark it came from.  I'll test it more.  Thanks.

*************** rs6000_emit_move (dest, source, mode)
*** 3792,3799 ****
         return;
       }

!   if (! no_new_pseudos && GET_CODE (operands[0]) != REG)
       operands[1] = force_reg (mode, operands[1]);

     if (mode == SFmode && ! TARGET_POWERPC
         && TARGET_HARD_FLOAT && TARGET_FPRS
--- 3792,3812 ----
         return;
       }

!   if (!no_new_pseudos)
!     {
!       if (GET_CODE (operands[1]) == MEM && optimize > 0
!         && (mode==QImode || mode==HImode))
!       {
!         rtx reg = gen_reg_rtx (SImode);
!
!         emit_insn (gen_rtx_SET (SImode,
!               reg,
!               gen_rtx_ZERO_EXTEND (Pmode, operands[1])));
!         operands[1] = gen_lowpart (mode, reg);
!       }
!       if (GET_CODE (operands[0]) != REG)
         operands[1] = force_reg (mode, operands[1]);
+     }

     if (mode == SFmode && ! TARGET_POWERPC
         && TARGET_HARD_FLOAT && TARGET_FPRS



More information about the Gcc-patches mailing list