Commit 4d811a05 by John David Anglin Committed by John David Anglin

PR middle_end/34150

	* pa.c (legitimize_pic_address): Add REG_EQUAL note on sets with a
	pic_label_operand source.  Similarly, add a REG_LABEL_OPERAND note
	and update LABEL_NUSES during and after reload.

From-SVN: r132203
parent a3395528
2008-02-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR middle_end/34150
* pa.c (legitimize_pic_address): Add REG_EQUAL note on sets with a
pic_label_operand source. Similarly, add a REG_LABEL_OPERAND note
and update LABEL_NUSES during and after reload.
2008-02-08 Steven Bosscher <stevenb.gcc@gmail.com> 2008-02-08 Steven Bosscher <stevenb.gcc@gmail.com>
PR middle-end/34627 PR middle-end/34627
......
...@@ -668,6 +668,8 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) ...@@ -668,6 +668,8 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
/* Labels need special handling. */ /* Labels need special handling. */
if (pic_label_operand (orig, mode)) if (pic_label_operand (orig, mode))
{ {
rtx insn;
/* We do not want to go through the movXX expanders here since that /* We do not want to go through the movXX expanders here since that
would create recursion. would create recursion.
...@@ -678,7 +680,24 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) ...@@ -678,7 +680,24 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
So instead we just emit the raw set, which avoids the movXX So instead we just emit the raw set, which avoids the movXX
expanders completely. */ expanders completely. */
mark_reg_pointer (reg, BITS_PER_UNIT); mark_reg_pointer (reg, BITS_PER_UNIT);
emit_insn (gen_rtx_SET (VOIDmode, reg, orig)); insn = emit_insn (gen_rtx_SET (VOIDmode, reg, orig));
/* Put a REG_EQUAL note on this insn, so that it can be optimized. */
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUAL, orig, REG_NOTES (insn));
/* During and after reload, we need to generate a REG_LABEL_OPERAND note
and update LABEL_NUSES because this is not done automatically. */
if (reload_in_progress || reload_completed)
{
/* Extract LABEL_REF. */
if (GET_CODE (orig) == CONST)
orig = XEXP (XEXP (orig, 0), 0);
/* Extract CODE_LABEL. */
orig = XEXP (orig, 0);
REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL_OPERAND, orig,
REG_NOTES (insn));
LABEL_NUSES (orig)++;
}
current_function_uses_pic_offset_table = 1; current_function_uses_pic_offset_table = 1;
return reg; return reg;
} }
......
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