------- Comment #18 from ramana at gcc dot gnu dot org  2010-02-10 23:45 -------
(In reply to comment #16)
> In fwprop.c of r118475, we get to propagate_rtx_1 (fwprop.c:334):
> 
>           /* Copy propagations are always ok.  Otherwise check the costs.  */
>           if (!(REG_P (old) && REG_P (new))
>               && !should_replace_address (op0, new_op0, GET_MODE (x)))
>             return true;
> 
> At this point the simplified address has been found, but fwprop decides not to
> substitute the new address:
> 
> (gdb) p debug_rtx(op0)
> (plus:SI (reg/f:SI 102)
>     (const_int 4 [0x4]))
> $58 = void
> (gdb) p debug_rtx(new_op0)
> (plus:SI (reg/f:SI 25 sfp)
>     (const_int -8 [0xfffffffffffffff8]))
> $59 = void
> (gdb) p should_replace_address(op0,new_op0,SImode)
> $60 = 0 '\000'
> 
> The replacement isn't done because fwprop sees no benefit in doing the
> transformation. Stepping through should_replace_address we get:
> 
> 202       gain = address_cost (old, mode) - address_cost (new, mode);
> (gdb) next
> 208       if (gain == 0)
> (gdb) p gain
> $64 = 0
> (gdb) next
> 209         gain = rtx_cost (new, SET) - rtx_cost (old, SET);
> (gdb) 
> 211       return (gain > 0);
> (gdb) p gain
> $65 = 0
> 
> Perhaps we should prefer addresses based on the frame pointer over other
> addresses?
> 


Why does this sound like some bit of the discussion in this thread here
?http://gcc.gnu.org/ml/gcc/2009-12/msg00347.html


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39871

Reply via email to