------- 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