From: bwilson Date: Tue, 21 Oct 2008 18:06:12 +0000 (+0000) Subject: * var-tracking.c (insn_stack_adjust_offset_pre_post): If insn has a X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7acb838bb364d99cd6adf705db3c421d2d4d338a;p=thirdparty%2Fgcc.git * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2400d9966b93..cf00fef37a8d 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 ab4d93cb76b8..2b92e403bf25 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); } }