diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 16 | ||||
-rw-r--r-- | gcc/jump.c | 5 |
3 files changed, 22 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 022af0a..c71f379 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-07-01 Jakub Jelinek <jakub@redhat.com> + + PR debug/40462 + * jump.c (returnjump_p): Revert last patch. + * dwarf2out.c (dwarf2out_begin_epilogue): Handle SEQUENCEs. + 2009-07-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR target/40575 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 35c26b6..edb93f9 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2759,6 +2759,22 @@ dwarf2out_begin_epilogue (rtx insn) if (CALL_P (i) && SIBLING_CALL_P (i)) break; + if (GET_CODE (PATTERN (i)) == SEQUENCE) + { + int idx; + rtx seq = PATTERN (i); + + if (returnjump_p (XVECEXP (seq, 0, 0))) + break; + if (CALL_P (XVECEXP (seq, 0, 0)) + && SIBLING_CALL_P (XVECEXP (seq, 0, 0))) + break; + + for (idx = 0; idx < XVECLEN (seq, 0); idx++) + if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx))) + saw_frp = true; + } + if (RTX_FRAME_RELATED_P (i)) saw_frp = true; } @@ -893,13 +893,8 @@ returnjump_p_1 (rtx *loc, void *data ATTRIBUTE_UNUSED) int returnjump_p (rtx insn) { - /* Handle delayed branches. */ - if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE) - insn = XVECEXP (PATTERN (insn), 0, 0); - if (!JUMP_P (insn)) return 0; - return for_each_rtx (&PATTERN (insn), returnjump_p_1, NULL); } |