------- Comment #12 from hp at gcc dot gnu dot org  2009-03-18 22:24 -------
(In reply to comment #11)
> I think you may need a frame pointer for
> 
>   if (cfun->calls_alloca
>       || cfun->has_nonlocal_label
>       || crtl->has_nonlocal_goto)

That should be covered by the generic code, not the target's
FRAME_POINTER_REQUIRED, and besides, for this target (if I decode defaults.h
correctly, and what seems intuitively correct):

> See expand_stack_alignment in cfgexpand.c.

For this target (if I decode defaults.h correctly, and what seems intuitively
correct):

  if (! SUPPORTS_STACK_ALIGNMENT)
    return;

No, this seems more like a case of reload not being able to keep track of
stack-pointer adjustments.  Actually, I see that for all labels that are
reachable by indirect jumps, it assumes they are reached only by locations that
have the initial elimination offsets.  Instead, it should bail out on those
(signalling that the offset is not known), always or optionally, if there is
any call or any indirect jump in the function that does not have the initial
elimination offset or optionally (set it to the offsets for the first), and if
any call or indirect jump has different elimination offsets, bail out.


-- 


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

Reply via email to