From 7acb838bb364d99cd6adf705db3c421d2d4d338a Mon Sep 17 00:00:00 2001 From: bwilson Date: Tue, 21 Oct 2008 18:06:12 +0000 Subject: [PATCH] * var-tracking.c (insn_stack_adjust_offset_pre_post): If insn has a REG_FRAME_RELATED_EXPR note, examine the pattern from the note instead of from insn. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141272 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/var-tracking.c | 25 +++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2400d9966b9..cf00fef37a8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-10-21 Bob Wilson + + * var-tracking.c (insn_stack_adjust_offset_pre_post): If insn has a + REG_FRAME_RELATED_EXPR note, examine the pattern from the note instead + of from insn. + 2008-10-21 Adam Nemet PR middle-end/37669 diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index ab4d93cb76b..2b92e403bf2 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -466,22 +466,31 @@ static void insn_stack_adjust_offset_pre_post (rtx insn, HOST_WIDE_INT *pre, HOST_WIDE_INT *post) { + rtx pattern; + *pre = 0; *post = 0; - if (GET_CODE (PATTERN (insn)) == SET) - stack_adjust_offset_pre_post (PATTERN (insn), pre, post); - else if (GET_CODE (PATTERN (insn)) == PARALLEL - || GET_CODE (PATTERN (insn)) == SEQUENCE) + pattern = PATTERN (insn); + if (RTX_FRAME_RELATED_P (insn)) + { + rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX); + if (expr) + pattern = XEXP (expr, 0); + } + + if (GET_CODE (pattern) == SET) + stack_adjust_offset_pre_post (pattern, pre, post); + else if (GET_CODE (pattern) == PARALLEL + || GET_CODE (pattern) == SEQUENCE) { int i; /* There may be stack adjustments inside compound insns. Search for them. */ - for ( i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) - if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET) - stack_adjust_offset_pre_post (XVECEXP (PATTERN (insn), 0, i), - pre, post); + for ( i = XVECLEN (pattern, 0) - 1; i >= 0; i--) + if (GET_CODE (XVECEXP (pattern, 0, i)) == SET) + stack_adjust_offset_pre_post (XVECEXP (pattern, 0, i), pre, post); } } -- 2.11.4.GIT