On Tue, Feb 04, 2014 at 10:47:49AM +0000, Richard Sandiford wrote:
> I wondered whether we could model the load of the stack pointer as an
> addition in cases where that is safe (e.g. it would require !calls_eh_return
> at least).  But that would only work in functions that don't need a frame
> pointer.  In functions that do need a frame pointer we'd presumably have
> (plus (hfp) (const_int X)) instead, which stack_adjust_offset_pre_post
> would again not understand.

But vt_stack_adjustments is only called if frame pointer isn't used.

> Another option would be to work out the offset from REG_CFA_DEF_CFA notes,
> where present, but I'm a bit uncomfortable with the idea of mixing two
> different methods of calculating the stack offset.

So, how does the lmg insn look like in RTL dump on some problematic
testcase?
insn_stack_adjust_offset_pre_post already uses REG_FRAME_RELATED_EXPR,
which is also a kind of CFI note (the oldest one), so likely the issue
is just that it hasn't been adjusted to handle other newer REG_CFA_* notes
that tell how the stack pointer is adjusted.

> The simplest fix seems to be to disable this check for the exit block.
> We never use its stack_adjust anyway, and dwarf2cfi already checks
> (using CFA information) that the offsets in a shrink-wrapped function
> are consistent.
> 
> Tested on s390-linux-gnu and s390x-linux-gnu.  OK to install?

I don't like this, my strong preference is to handle REG_CFA_* notes.

        Jakub

Reply via email to