------- Comment #6 from jh at suse dot cz 2005-10-18 17:22 ------- Subject: Re: [3.4/4.0/4.1 Regression]: ix86 prologue puts values beyond stack
> > > ------- Comment #5 from hjl at lucon dot org 2005-10-18 04:37 ------- > >From bar.i.26.flow2: > > (insn/f 51 11 52 0 (set (mem:DI (plus:DI (reg/f:DI 7 sp) > (const_int -16 [0xfffffffffffffff0])) [0 S8 A8]) > (reg:DI 3 bx)) -1 (nil) > (expr_list:REG_DEAD (reg:DI 3 bx) > (nil))) > > (insn/f 52 51 53 0 (set (mem:DI (plus:DI (reg/f:DI 7 sp) > (const_int -8 [0xfffffffffffffff8])) [0 S8 A8]) > (reg:DI 6 bp)) -1 (nil) > (expr_list:REG_DEAD (reg:DI 6 bp) > (nil))) > > (insn/f 53 52 54 0 (parallel [ > (set (reg/f:DI 7 sp) > (plus:DI (reg/f:DI 7 sp) > (const_int -16 [0xfffffffffffffff0]))) > (clobber (reg:CC 17 flags)) > (clobber (mem:BLK (scratch) [0 A8])) > ]) -1 (nil) > (expr_list:REG_UNUSED (reg:CC 17 flags) > (nil))) > > Gcc doesn't tell the truth here since memory isn't/shouldn't be clobber > when adjusting SP. The transformation to push is probably valid only on x86 where any data on opposite side of stack pointer is implicitly clobbered (for signal handers stacks or whatever), so conversion of sub to push is safe. This is not very well modelled by RTL and ineed was problem few times in past (where scheduler overactively moved the stuff resulting in kernel crashes if I remember right) On x86-64 we probably should conditionalize this and use only for functions not using red zone or avoid the red zone usage for argument area when we are going to produce push instead of sub (the reason for that optimization is to reduce dependency chain that is more important that push conversion for Athlon, not sure what is the case for Nocona) Honza > > > -- > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24419 > > ------- You are receiving this mail because: ------- > You are on the CC list for the bug, or are watching someone who is. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24419