mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
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 note and update LABEL_NUSES during and after reload. From-SVN: r132204
This commit is contained in:
committed by
John David Anglin
parent
675bb06dd3
commit
a6f0ee0821
@@ -1,3 +1,10 @@
|
||||
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 note and
|
||||
update LABEL_NUSES during and after reload.
|
||||
|
||||
2008-02-08 Steven Bosscher <stevenb.gcc@gmail.com>
|
||||
|
||||
PR middle-end/34627
|
||||
|
||||
@@ -626,6 +626,8 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
|
||||
/* Labels need special handling. */
|
||||
if (pic_label_operand (orig, mode))
|
||||
{
|
||||
rtx insn;
|
||||
|
||||
/* We do not want to go through the movXX expanders here since that
|
||||
would create recursion.
|
||||
|
||||
@@ -636,7 +638,24 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
|
||||
So instead we just emit the raw set, which avoids the movXX
|
||||
expanders completely. */
|
||||
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 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, orig,
|
||||
REG_NOTES (insn));
|
||||
LABEL_NUSES (orig)++;
|
||||
}
|
||||
current_function_uses_pic_offset_table = 1;
|
||||
return reg;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user