Commit d459f870 by Jakub Jelinek Committed by Jakub Jelinek

re PR debug/54402 (var-tracking does not scale)

	PR debug/54402
	* var-tracking.c (fp_setter): Return false if there is REG_CFA_RESTORE
	hfp note.
	(vt_initialize): Look for fp_setter in any bb, not just successor of
	entry bb.

From-SVN: r193152
parent ead4af4f
2012-11-05 Jakub Jelinek <jakub@redhat.com>
PR debug/54402
* var-tracking.c (fp_setter): Return false if there is REG_CFA_RESTORE
hfp note.
(vt_initialize): Look for fp_setter in any bb, not just successor of
entry bb.
2012-11-05 Oleg Endo <olegendo@gcc.gnu.org> 2012-11-05 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/sh.h (TARGET_CACHE32, TARGET_HARVARD): Delete macro. * config/sh/sh.h (TARGET_CACHE32, TARGET_HARVARD): Delete macro.
...@@ -9543,16 +9543,25 @@ fp_setter (rtx insn) ...@@ -9543,16 +9543,25 @@ fp_setter (rtx insn)
pat = XEXP (expr, 0); pat = XEXP (expr, 0);
} }
if (GET_CODE (pat) == SET) if (GET_CODE (pat) == SET)
return SET_DEST (pat) == hard_frame_pointer_rtx; {
if (SET_DEST (pat) != hard_frame_pointer_rtx)
return false;
}
else if (GET_CODE (pat) == PARALLEL) else if (GET_CODE (pat) == PARALLEL)
{ {
int i; int i;
for (i = XVECLEN (pat, 0) - 1; i >= 0; i--) for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)
if (GET_CODE (XVECEXP (pat, 0, i)) == SET if (GET_CODE (XVECEXP (pat, 0, i)) == SET
&& SET_DEST (XVECEXP (pat, 0, i)) == hard_frame_pointer_rtx) && SET_DEST (XVECEXP (pat, 0, i)) == hard_frame_pointer_rtx)
return true; break;
if (i < 0)
return false;
} }
return false; else
return false;
if (find_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx))
return false;
return true;
} }
/* Initialize cfa_base_rtx, create a preserved VALUE for it and /* Initialize cfa_base_rtx, create a preserved VALUE for it and
...@@ -9600,7 +9609,7 @@ vt_init_cfa_base (void) ...@@ -9600,7 +9609,7 @@ vt_init_cfa_base (void)
static bool static bool
vt_initialize (void) vt_initialize (void)
{ {
basic_block bb, prologue_bb = single_succ (ENTRY_BLOCK_PTR); basic_block bb;
HOST_WIDE_INT fp_cfa_offset = -1; HOST_WIDE_INT fp_cfa_offset = -1;
alloc_aux_for_blocks (sizeof (struct variable_tracking_info_def)); alloc_aux_for_blocks (sizeof (struct variable_tracking_info_def));
...@@ -9858,8 +9867,7 @@ vt_initialize (void) ...@@ -9858,8 +9867,7 @@ vt_initialize (void)
VTI (bb)->out.stack_adjust += post; VTI (bb)->out.stack_adjust += post;
} }
if (bb == prologue_bb if (fp_cfa_offset != -1
&& fp_cfa_offset != -1
&& hard_frame_pointer_adjustment == -1 && hard_frame_pointer_adjustment == -1
&& RTX_FRAME_RELATED_P (insn) && RTX_FRAME_RELATED_P (insn)
&& fp_setter (insn)) && fp_setter (insn))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment