[Bug middle-end/42919] [4.3/4.4/4.5 Regression] Argument unnecessarily spilled
matz at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Feb 1 00:21:00 GMT 2010
------- Comment #3 from matz at gcc dot gnu dot org 2010-02-01 00:21 -------
3.4 had this as initial RTL:
(insn 3 2 4 (set (reg:DI 60)
(mem/f:DI (reg/f:SI 53 virtual-incoming-args) [2 a+0 S8 A32])) -1 (nil)
(expr_list:REG_EQUIV (mem/f:DI (reg/f:SI 53 virtual-incoming-args)
[2 a+0 S8 A32])
(nil)))
(insn 4 3 5 (set (mem/f:DI (addressof:SI (reg/v:DI 59) 58 0xf7c9a4a4)
[2 a+0 S8 A64])
(reg:DI 60)) -1 (nil)
(nil))
(insn 15 7 16 0 (parallel [
(set (reg/f:SI 7 sp)
(plus:SI (reg/f:SI 7 sp)
(const_int -12 [0xfffffff4])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
(insn 16 15 17 0 (set (mem/f:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A32])
(addressof:SI (reg/v:DI 59) 58 0xf7c9a4a4)) -1 (nil)
(nil))
(call_insn 17 16 19 0 (call (mem:QI (symbol_ref:SI ("foo") [flags 0x41]
<function_decl 0xf7c9a438 foo>) [0 S1 A8])
(const_int 16 [0x10])) -1 (nil)
(nil) (nil))
addressof RTL and handling was removed in 2004, but was our way of making this
optimization on RTL. So this would now need to be implemented in expand
or something :-/ Well, or by implementing some more memory optimizations
on RTL (recognizing that mem1 has same content as mem2, and using &mem1 where
&mem2 was used and the former somehow is "better"). Not committing to MEM
to start with would be better, obviously.
--
matz at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |matz at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42919
More information about the Gcc-bugs
mailing list