emit-rtl.c (emit_pattern_after_setloc): New function.

* emit-rtl.c (emit_pattern_after_setloc): New function.
	(emit_insn_after_setloc, emit_jump_insn_after_setloc): Call it.
	(emit_call_insn_after_setloc, emit_debug_insn_after_setloc): Likewise.
	(emit_pattern_after): New function.
	(emit_insn_after, emit_jump_insn_after): Call it.
	(emit_call_insn_after, emit_debug_insn_after): Likewise.
	(emit_pattern_before_setloc): New function.
	(emit_insn_before_setloc, emit_jump_insn_before_setloc): Call it.
	(emit_call_insn_before_setloc, emit_debug_insn_before_setloc):
	Likewise.
	(emit_pattern_before): New function.
	(emit_insn_before, emit_jump_insn_before): Call it.
	(emit_call_insn_before, emit_debug_insn_before): Likewise.

From-SVN: r171817
This commit is contained in:
Nathan Froyd 2011-04-01 03:05:36 +00:00 committed by Nathan Froyd
parent 576f85f168
commit e8110d6f22
2 changed files with 124 additions and 173 deletions

View File

@ -1,3 +1,19 @@
2011-03-31 Nathan Froyd <froydnj@codesourcery.com>
* emit-rtl.c (emit_pattern_after_setloc): New function.
(emit_insn_after_setloc, emit_jump_insn_after_setloc): Call it.
(emit_call_insn_after_setloc, emit_debug_insn_after_setloc): Likewise.
(emit_pattern_after): New function.
(emit_insn_after, emit_jump_insn_after): Call it.
(emit_call_insn_after, emit_debug_insn_after): Likewise.
(emit_pattern_before_setloc): New function.
(emit_insn_before_setloc, emit_jump_insn_before_setloc): Call it.
(emit_call_insn_before_setloc, emit_debug_insn_before_setloc):
Likewise.
(emit_pattern_before): New function.
(emit_insn_before, emit_jump_insn_before): Call it.
(emit_call_insn_before, emit_debug_insn_before): Likewise.
2011-03-31 Richard Henderson <rth@redhat.com>
* dwarf2out.c (dw_separate_line_info_ref): Remove.

View File

@ -4319,11 +4319,14 @@ emit_note_after (enum insn_note subtype, rtx after)
return note;
}
/* Like emit_insn_after_noloc, but set INSN_LOCATOR according to SCOPE. */
rtx
emit_insn_after_setloc (rtx pattern, rtx after, int loc)
/* Insert PATTERN after AFTER, setting its INSN_LOCATION to LOC.
MAKE_RAW indicates how to turn PATTERN into a real insn. */
static rtx
emit_pattern_after_setloc (rtx pattern, rtx after, int loc,
rtx (*make_raw) (rtx))
{
rtx last = emit_insn_after_noloc (pattern, after, NULL);
rtx last = emit_pattern_after_noloc (pattern, after, NULL, make_raw);
if (pattern == NULL_RTX || !loc)
return last;
@ -4340,130 +4343,96 @@ emit_insn_after_setloc (rtx pattern, rtx after, int loc)
return last;
}
/* Insert PATTERN after AFTER. MAKE_RAW indicates how to turn PATTERN
into a real insn. SKIP_DEBUG_INSNS indicates whether to insert after
any DEBUG_INSNs. */
static rtx
emit_pattern_after (rtx pattern, rtx after, bool skip_debug_insns,
rtx (*make_raw) (rtx))
{
rtx prev = after;
if (skip_debug_insns)
while (DEBUG_INSN_P (prev))
prev = PREV_INSN (prev);
if (INSN_P (prev))
return emit_pattern_after_setloc (pattern, after, INSN_LOCATOR (prev),
make_raw);
else
return emit_pattern_after_noloc (pattern, after, NULL, make_raw);
}
/* Like emit_insn_after_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_insn_after_setloc (rtx pattern, rtx after, int loc)
{
return emit_pattern_after_setloc (pattern, after, loc, make_insn_raw);
}
/* Like emit_insn_after_noloc, but set INSN_LOCATOR according to AFTER. */
rtx
emit_insn_after (rtx pattern, rtx after)
{
rtx prev = after;
while (DEBUG_INSN_P (prev))
prev = PREV_INSN (prev);
if (INSN_P (prev))
return emit_insn_after_setloc (pattern, after, INSN_LOCATOR (prev));
else
return emit_insn_after_noloc (pattern, after, NULL);
return emit_pattern_after (pattern, after, true, make_insn_raw);
}
/* Like emit_jump_insn_after_noloc, but set INSN_LOCATOR according to SCOPE. */
/* Like emit_jump_insn_after_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_jump_insn_after_setloc (rtx pattern, rtx after, int loc)
{
rtx last = emit_jump_insn_after_noloc (pattern, after);
if (pattern == NULL_RTX || !loc)
return last;
after = NEXT_INSN (after);
while (1)
{
if (active_insn_p (after) && !INSN_LOCATOR (after))
INSN_LOCATOR (after) = loc;
if (after == last)
break;
after = NEXT_INSN (after);
}
return last;
return emit_pattern_after_setloc (pattern, after, loc, make_jump_insn_raw);
}
/* Like emit_jump_insn_after_noloc, but set INSN_LOCATOR according to AFTER. */
rtx
emit_jump_insn_after (rtx pattern, rtx after)
{
rtx prev = after;
while (DEBUG_INSN_P (prev))
prev = PREV_INSN (prev);
if (INSN_P (prev))
return emit_jump_insn_after_setloc (pattern, after, INSN_LOCATOR (prev));
else
return emit_jump_insn_after_noloc (pattern, after);
return emit_pattern_after (pattern, after, true, make_jump_insn_raw);
}
/* Like emit_call_insn_after_noloc, but set INSN_LOCATOR according to SCOPE. */
/* Like emit_call_insn_after_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_call_insn_after_setloc (rtx pattern, rtx after, int loc)
{
rtx last = emit_call_insn_after_noloc (pattern, after);
if (pattern == NULL_RTX || !loc)
return last;
after = NEXT_INSN (after);
while (1)
{
if (active_insn_p (after) && !INSN_LOCATOR (after))
INSN_LOCATOR (after) = loc;
if (after == last)
break;
after = NEXT_INSN (after);
}
return last;
return emit_pattern_after_setloc (pattern, after, loc, make_call_insn_raw);
}
/* Like emit_call_insn_after_noloc, but set INSN_LOCATOR according to AFTER. */
rtx
emit_call_insn_after (rtx pattern, rtx after)
{
rtx prev = after;
while (DEBUG_INSN_P (prev))
prev = PREV_INSN (prev);
if (INSN_P (prev))
return emit_call_insn_after_setloc (pattern, after, INSN_LOCATOR (prev));
else
return emit_call_insn_after_noloc (pattern, after);
return emit_pattern_after (pattern, after, true, make_call_insn_raw);
}
/* Like emit_debug_insn_after_noloc, but set INSN_LOCATOR according to SCOPE. */
/* Like emit_debug_insn_after_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_debug_insn_after_setloc (rtx pattern, rtx after, int loc)
{
rtx last = emit_debug_insn_after_noloc (pattern, after);
if (pattern == NULL_RTX || !loc)
return last;
after = NEXT_INSN (after);
while (1)
{
if (active_insn_p (after) && !INSN_LOCATOR (after))
INSN_LOCATOR (after) = loc;
if (after == last)
break;
after = NEXT_INSN (after);
}
return last;
return emit_pattern_after_setloc (pattern, after, loc, make_debug_insn_raw);
}
/* Like emit_debug_insn_after_noloc, but set INSN_LOCATOR according to AFTER. */
rtx
emit_debug_insn_after (rtx pattern, rtx after)
{
if (INSN_P (after))
return emit_debug_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
else
return emit_debug_insn_after_noloc (pattern, after);
return emit_pattern_after (pattern, after, false, make_debug_insn_raw);
}
/* Like emit_insn_before_noloc, but set INSN_LOCATOR according to SCOPE. */
rtx
emit_insn_before_setloc (rtx pattern, rtx before, int loc)
/* Insert PATTERN before BEFORE, setting its INSN_LOCATION to LOC.
MAKE_RAW indicates how to turn PATTERN into a real insn. INSNP
indicates if PATTERN is meant for an INSN as opposed to a JUMP_INSN,
CALL_INSN, etc. */
static rtx
emit_pattern_before_setloc (rtx pattern, rtx before, int loc, bool insnp,
rtx (*make_raw) (rtx))
{
rtx first = PREV_INSN (before);
rtx last = emit_insn_before_noloc (pattern, before, NULL);
rtx last = emit_pattern_before_noloc (pattern, before,
insnp ? before : NULL_RTX,
NULL, make_raw);
if (pattern == NULL_RTX || !loc)
return last;
@ -4483,127 +4452,93 @@ emit_insn_before_setloc (rtx pattern, rtx before, int loc)
return last;
}
/* Insert PATTERN before BEFORE. MAKE_RAW indicates how to turn PATTERN
into a real insn. SKIP_DEBUG_INSNS indicates whether to insert
before any DEBUG_INSNs. INSNP indicates if PATTERN is meant for an
INSN as opposed to a JUMP_INSN, CALL_INSN, etc. */
static rtx
emit_pattern_before (rtx pattern, rtx before, bool skip_debug_insns,
bool insnp, rtx (*make_raw) (rtx))
{
rtx next = before;
if (skip_debug_insns)
while (DEBUG_INSN_P (next))
next = PREV_INSN (next);
if (INSN_P (next))
return emit_pattern_before_setloc (pattern, before, INSN_LOCATOR (next),
insnp, make_raw);
else
return emit_pattern_before_noloc (pattern, before,
insnp ? before : NULL_RTX,
NULL, make_raw);
}
/* Like emit_insn_before_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_insn_before_setloc (rtx pattern, rtx before, int loc)
{
return emit_pattern_before_setloc (pattern, before, loc, true,
make_insn_raw);
}
/* Like emit_insn_before_noloc, but set INSN_LOCATOR according to BEFORE. */
rtx
emit_insn_before (rtx pattern, rtx before)
{
rtx next = before;
while (DEBUG_INSN_P (next))
next = PREV_INSN (next);
if (INSN_P (next))
return emit_insn_before_setloc (pattern, before, INSN_LOCATOR (next));
else
return emit_insn_before_noloc (pattern, before, NULL);
return emit_pattern_before (pattern, before, true, true, make_insn_raw);
}
/* like emit_insn_before_noloc, but set insn_locator according to scope. */
/* like emit_insn_before_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_jump_insn_before_setloc (rtx pattern, rtx before, int loc)
{
rtx first = PREV_INSN (before);
rtx last = emit_jump_insn_before_noloc (pattern, before);
if (pattern == NULL_RTX)
return last;
first = NEXT_INSN (first);
while (1)
{
if (active_insn_p (first) && !INSN_LOCATOR (first))
INSN_LOCATOR (first) = loc;
if (first == last)
break;
first = NEXT_INSN (first);
}
return last;
return emit_pattern_before_setloc (pattern, before, loc, false,
make_jump_insn_raw);
}
/* Like emit_jump_insn_before_noloc, but set INSN_LOCATOR according to BEFORE. */
rtx
emit_jump_insn_before (rtx pattern, rtx before)
{
rtx next = before;
while (DEBUG_INSN_P (next))
next = PREV_INSN (next);
if (INSN_P (next))
return emit_jump_insn_before_setloc (pattern, before, INSN_LOCATOR (next));
else
return emit_jump_insn_before_noloc (pattern, before);
return emit_pattern_before (pattern, before, true, false,
make_jump_insn_raw);
}
/* like emit_insn_before_noloc, but set insn_locator according to scope. */
/* Like emit_insn_before_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_call_insn_before_setloc (rtx pattern, rtx before, int loc)
{
rtx first = PREV_INSN (before);
rtx last = emit_call_insn_before_noloc (pattern, before);
if (pattern == NULL_RTX)
return last;
first = NEXT_INSN (first);
while (1)
{
if (active_insn_p (first) && !INSN_LOCATOR (first))
INSN_LOCATOR (first) = loc;
if (first == last)
break;
first = NEXT_INSN (first);
}
return last;
return emit_pattern_before_setloc (pattern, before, loc, false,
make_call_insn_raw);
}
/* like emit_call_insn_before_noloc,
but set insn_locator according to before. */
/* Like emit_call_insn_before_noloc,
but set insn_locator according to BEFORE. */
rtx
emit_call_insn_before (rtx pattern, rtx before)
{
rtx next = before;
while (DEBUG_INSN_P (next))
next = PREV_INSN (next);
if (INSN_P (next))
return emit_call_insn_before_setloc (pattern, before, INSN_LOCATOR (next));
else
return emit_call_insn_before_noloc (pattern, before);
return emit_pattern_before (pattern, before, true, false,
make_call_insn_raw);
}
/* like emit_insn_before_noloc, but set insn_locator according to scope. */
/* Like emit_insn_before_noloc, but set INSN_LOCATOR according to LOC. */
rtx
emit_debug_insn_before_setloc (rtx pattern, rtx before, int loc)
{
rtx first = PREV_INSN (before);
rtx last = emit_debug_insn_before_noloc (pattern, before);
if (pattern == NULL_RTX)
return last;
first = NEXT_INSN (first);
while (1)
{
if (active_insn_p (first) && !INSN_LOCATOR (first))
INSN_LOCATOR (first) = loc;
if (first == last)
break;
first = NEXT_INSN (first);
}
return last;
return emit_pattern_before_setloc (pattern, before, loc, false,
make_debug_insn_raw);
}
/* like emit_debug_insn_before_noloc,
but set insn_locator according to before. */
/* Like emit_debug_insn_before_noloc,
but set insn_locator according to BEFORE. */
rtx
emit_debug_insn_before (rtx pattern, rtx before)
{
if (INSN_P (before))
return emit_debug_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
else
return emit_debug_insn_before_noloc (pattern, before);
return emit_pattern_before (pattern, before, false, false,
make_debug_insn_raw);
}
/* Take X and emit it at the end of the doubly-linked