[Bug middle-end/37233] 64-bit product of 32-bit value loses optimisation when inlined
pinskia at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Fri Aug 29 04:15:00 GMT 2008
------- Comment #1 from pinskia at gcc dot gnu dot org 2008-08-29 04:13 -------
This has been fixed on the trunk for 4.4:
L8:
movl 40(%esp), %eax
mull (%ebp,%ecx,4)
movl %eax, 8(%esp)
addl %esi, 8(%esp)
movl %edx, 12(%esp)
movl 8(%esp), %edx
adcl %edi, 12(%esp)
movl 12(%esp), %edi
movl %edx, (%ebp,%ecx,4)
addl $1, %ecx
movl %edi, %esi
xorl %edi, %edi
cmpl %ecx, 36(%esp)
ja L8
Note 4.3 produces the old bad code.
fwprop fixes this up from expansion time:
In insn 48, replacing
(mult:SI (subreg:SI (reg:DI 96) 4)
(reg:SI 100 [ pretmp.43 ]))
with (const_int 0 [0x0])
Changed insn 48
deferring rescan insn with uid = 48.
In insn 49, replacing
(plus:SI (reg:SI 97)
(reg:SI 98))
with (reg:SI 97)
Changed insn 49
deferring rescan insn with uid = 49.
Most likely due to:
2008-02-28 Richard Sandiford <rsandifo@nildram.co.uk>
* simplify-rtx.c (simplify_unary_operation_1): Extend the handling
of SUBREG_PROMOTED_VAR_P to cope with cases where the extended value
is smaller than the original promoted value.
(simplify_subreg): If OP is a SUBREG, try to preserve its
SUBREG_PROMOTED_VAR_P information.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Component|c |middle-end
Keywords| |missed-optimization
Resolution| |FIXED
Target Milestone|--- |4.4.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37233
More information about the Gcc-bugs
mailing list