spu.c (emit_nop_for_insn): Set INSN_LOCATOR for newly inserted insns.

* config/spu/spu.c (emit_nop_for_insn): Set INSN_LOCATOR for
	newly inserted insns.
	(pad_bb): Likewise.
	(spu_emit_branch_hint): Likewise.
	(insert_hbrp_for_ilb_runout): Likewise.
	(spu_machine_dependent_reorg): Call df_finish_pass after
	schedule_insns returns.

From-SVN: r168510
This commit is contained in:
Ulrich Weigand 2011-01-05 13:28:20 +00:00 committed by Ulrich Weigand
parent 4c825c0240
commit f626b979b1
2 changed files with 30 additions and 3 deletions

View File

@ -1,3 +1,13 @@
2011-01-05 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/spu/spu.c (emit_nop_for_insn): Set INSN_LOCATOR for
newly inserted insns.
(pad_bb): Likewise.
(spu_emit_branch_hint): Likewise.
(insert_hbrp_for_ilb_runout): Likewise.
(spu_machine_dependent_reorg): Call df_finish_pass after
schedule_insns returns.
2011-01-05 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/spu/spu.c (spu_expand_prologue): Support -fstack-usage.

View File

@ -2266,6 +2266,7 @@ emit_nop_for_insn (rtx insn)
else
new_insn = emit_insn_after (gen_lnop (), insn);
recog_memoized (new_insn);
INSN_LOCATOR (new_insn) = INSN_LOCATOR (insn);
}
/* Insert nops in basic blocks to meet dual issue alignment
@ -2304,6 +2305,7 @@ pad_bb(void)
prev_insn = emit_insn_before (gen_lnop (), insn);
PUT_MODE (prev_insn, GET_MODE (insn));
PUT_MODE (insn, TImode);
INSN_LOCATOR (prev_insn) = INSN_LOCATOR (insn);
length += 4;
}
}
@ -2372,6 +2374,7 @@ spu_emit_branch_hint (rtx before, rtx branch, rtx target,
hint = emit_insn_before (gen_hbr (branch_label, target), before);
recog_memoized (hint);
INSN_LOCATOR (hint) = INSN_LOCATOR (branch);
HINTED_P (branch) = 1;
if (GET_CODE (target) == LABEL_REF)
@ -2392,7 +2395,9 @@ spu_emit_branch_hint (rtx before, rtx branch, rtx target,
{
/* Make sure the hint isn't scheduled any earlier than this point,
which could make it too far for the branch offest to fit */
recog_memoized (emit_insn_before (gen_blockage (), hint));
insn = emit_insn_before (gen_blockage (), hint);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (hint);
}
else if (distance <= 8 * 4)
{
@ -2404,14 +2409,21 @@ spu_emit_branch_hint (rtx before, rtx branch, rtx target,
insn =
emit_insn_after (gen_nopn_nv (gen_rtx_REG (SImode, 127)), hint);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (hint);
}
/* Make sure any nops inserted aren't scheduled before the hint. */
recog_memoized (emit_insn_after (gen_blockage (), hint));
insn = emit_insn_after (gen_blockage (), hint);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (hint);
/* Make sure any nops inserted aren't scheduled after the call. */
if (CALL_P (branch) && distance < 8 * 4)
recog_memoized (emit_insn_before (gen_blockage (), branch));
{
insn = emit_insn_before (gen_blockage (), branch);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (branch);
}
}
}
@ -2596,6 +2608,7 @@ insert_hbrp_for_ilb_runout (rtx first)
insn =
emit_insn_before (gen_iprefetch (GEN_INT (1)), before_4);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (before_4);
INSN_ADDRESSES_NEW (insn,
INSN_ADDRESSES (INSN_UID (before_4)));
PUT_MODE (insn, GET_MODE (before_4));
@ -2604,6 +2617,7 @@ insert_hbrp_for_ilb_runout (rtx first)
{
insn = emit_insn_before (gen_lnop (), before_4);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (before_4);
INSN_ADDRESSES_NEW (insn,
INSN_ADDRESSES (INSN_UID (before_4)));
PUT_MODE (insn, TImode);
@ -2615,6 +2629,7 @@ insert_hbrp_for_ilb_runout (rtx first)
insn =
emit_insn_before (gen_iprefetch (GEN_INT (2)), before_16);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (before_16);
INSN_ADDRESSES_NEW (insn,
INSN_ADDRESSES (INSN_UID (before_16)));
PUT_MODE (insn, GET_MODE (before_16));
@ -2623,6 +2638,7 @@ insert_hbrp_for_ilb_runout (rtx first)
{
insn = emit_insn_before (gen_lnop (), before_16);
recog_memoized (insn);
INSN_LOCATOR (insn) = INSN_LOCATOR (before_16);
INSN_ADDRESSES_NEW (insn,
INSN_ADDRESSES (INSN_UID
(before_16)));
@ -2865,6 +2881,7 @@ spu_machine_dependent_reorg (void)
/* The hints need to be scheduled, so call it again. */
schedule_insns ();
df_finish_pass (true);
insert_hbrp ();