Commit cc0cbae1 by Jim Wilson Committed by Jim Wilson

Fix IA-64 REG_LIBCALL dangling reference.

	* function.c (fixup_var_refs_1, case SET): When gen_move_insn returns a
	SEQUENCE, call emit_insn_before, copy PATTERN and REG_NOTES of last
	sequence insn to INSN, and delete last sequence insn.

From-SVN: r36735
parent f5fa9a5b
2000-10-05 Jim Wilson <wilson@cygnus.com>
* function.c (fixup_var_refs_1, case SET): When gen_move_insn returns a
SEQUENCE, call emit_insn_before, copy PATTERN and REG_NOTES of last
sequence insn to INSN, and delete last sequence insn.
2000-10-05 Phil Edwards <pme@gcc.gnu.org>
* gcc.c (main): Include generated configargs.h header
......
......@@ -2324,7 +2324,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
&& GET_MODE (var) == promoted_mode
&& x == single_set (insn))
{
rtx pat;
rtx pat, last;
replacement = find_fixup_replacement (replacements, SET_SRC (x));
if (replacement->new)
......@@ -2350,10 +2350,22 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
pat = gen_move_insn (SET_DEST (x), SET_SRC (x));
if (GET_CODE (pat) == SEQUENCE)
{
emit_insn_after (pat, insn);
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
last = emit_insn_before (pat, insn);
/* INSN might have REG_RETVAL or other important notes, so
we need to store the pattern of the last insn in the
sequence into INSN similarly to the normal case. LAST
should not have REG_NOTES, but we allow them if INSN has
no REG_NOTES. */
if (REG_NOTES (last) && REG_NOTES (insn))
abort ();
if (REG_NOTES (last))
REG_NOTES (insn) = REG_NOTES (last);
PATTERN (insn) = PATTERN (last);
PUT_CODE (last, NOTE);
NOTE_LINE_NUMBER (last) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (last) = 0;
}
else
PATTERN (insn) = pat;
......@@ -2370,7 +2382,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
&& GET_MODE (var) == promoted_mode
&& x == single_set (insn))
{
rtx pat;
rtx pat, last;
if (GET_CODE (SET_DEST (x)) == SUBREG)
SET_DEST (x) = fixup_memory_subreg (SET_DEST (x), insn, 0);
......@@ -2383,10 +2395,22 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
pat = gen_move_insn (SET_DEST (x), SET_SRC (x));
if (GET_CODE (pat) == SEQUENCE)
{
emit_insn_after (pat, insn);
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
last = emit_insn_before (pat, insn);
/* INSN might have REG_RETVAL or other important notes, so
we need to store the pattern of the last insn in the
sequence into INSN similarly to the normal case. LAST
should not have REG_NOTES, but we allow them if INSN has
no REG_NOTES. */
if (REG_NOTES (last) && REG_NOTES (insn))
abort ();
if (REG_NOTES (last))
REG_NOTES (insn) = REG_NOTES (last);
PATTERN (insn) = PATTERN (last);
PUT_CODE (last, NOTE);
NOTE_LINE_NUMBER (last) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (last) = 0;
}
else
PATTERN (insn) = pat;
......
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