Commit 65712d5c by Richard Sandiford Committed by Richard Sandiford

re PR rtl-optimization/48826 (ICE in dwarf2out_var_location, at dwarf2out.c:22013)

gcc/
	PR rtl-optimization/48826
	* emit-rtl.c (try_split): When splitting a call that is followed
	by a NOTE_INSN_CALL_ARG_LOCATION, move the note after the new call.

From-SVN: r174080
parent 9025085e
2011-05-23 Richard Sandiford <rdsandiford@googlemail.com>
PR rtl-optimization/48826
* emit-rtl.c (try_split): When splitting a call that is followed
by a NOTE_INSN_CALL_ARG_LOCATION, move the note after the new call.
2011-05-23 Jakub Jelinek <jakub@redhat.com>
* cfgexpand.c (expand_debug_expr): For unused non-addressable
......
......@@ -3470,17 +3470,40 @@ try_split (rtx pat, rtx trial, int last)
}
/* If we are splitting a CALL_INSN, look for the CALL_INSN
in SEQ and copy our CALL_INSN_FUNCTION_USAGE to it. */
in SEQ and copy any additional information across. */
if (CALL_P (trial))
{
for (insn = insn_last; insn ; insn = PREV_INSN (insn))
if (CALL_P (insn))
{
rtx *p = &CALL_INSN_FUNCTION_USAGE (insn);
rtx next, *p;
/* Add the old CALL_INSN_FUNCTION_USAGE to whatever the
target may have explicitly specified. */
p = &CALL_INSN_FUNCTION_USAGE (insn);
while (*p)
p = &XEXP (*p, 1);
*p = CALL_INSN_FUNCTION_USAGE (trial);
/* If the old call was a sibling call, the new one must
be too. */
SIBLING_CALL_P (insn) = SIBLING_CALL_P (trial);
/* If the new call is the last instruction in the sequence,
it will effectively replace the old call in-situ. Otherwise
we must move any following NOTE_INSN_CALL_ARG_LOCATION note
so that it comes immediately after the new call. */
if (NEXT_INSN (insn))
{
next = NEXT_INSN (trial);
if (next
&& NOTE_P (next)
&& NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
{
remove_insn (next);
add_insn_after (next, insn, NULL);
}
}
}
}
......
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