mips.c (mips_pic_call_symbol_from_set): Check for SYMBOL_REF SET_SRCs.
gcc/ * config/mips/mips.c (mips_pic_call_symbol_from_set): Check for SYMBOL_REF SET_SRCs. From-SVN: r190717
This commit is contained in:
parent
d8c5157261
commit
cb038fd20d
2 changed files with 17 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-08-27 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/mips/mips.c (mips_pic_call_symbol_from_set): Check for
|
||||
SYMBOL_REF SET_SRCs.
|
||||
|
||||
2012-08-27 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/mips/mips.c (vr4130_align_insns): Don't simulate
|
||||
|
|
|
@ -14706,13 +14706,13 @@ mips_pic_call_symbol_from_set (df_ref def, rtx reg, bool recurse_p)
|
|||
{
|
||||
rtx note, src, symbol;
|
||||
|
||||
/* First, look at REG_EQUAL/EQUIV notes. */
|
||||
note = find_reg_equal_equiv_note (def_insn);
|
||||
if (note && GET_CODE (XEXP (note, 0)) == SYMBOL_REF)
|
||||
return XEXP (note, 0);
|
||||
|
||||
/* For %call16 references we don't have REG_EQUAL. */
|
||||
/* First see whether the source is a plain symbol. This is used
|
||||
when calling symbols that are not lazily bound. */
|
||||
src = SET_SRC (set);
|
||||
if (GET_CODE (src) == SYMBOL_REF)
|
||||
return src;
|
||||
|
||||
/* Handle %call16 references. */
|
||||
symbol = mips_strip_unspec_call (src);
|
||||
if (symbol)
|
||||
{
|
||||
|
@ -14720,6 +14720,12 @@ mips_pic_call_symbol_from_set (df_ref def, rtx reg, bool recurse_p)
|
|||
return symbol;
|
||||
}
|
||||
|
||||
/* If we have something more complicated, look for a
|
||||
REG_EQUAL or REG_EQUIV note. */
|
||||
note = find_reg_equal_equiv_note (def_insn);
|
||||
if (note && GET_CODE (XEXP (note, 0)) == SYMBOL_REF)
|
||||
return XEXP (note, 0);
|
||||
|
||||
/* Follow at most one simple register copy. Such copies are
|
||||
interesting in cases like:
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue