On 09/30/2017 04:15 AM, Richard Sandiford wrote:
Vladimir Makarov <vmaka...@redhat.com> writes:
The following patch fixes

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81481

The patch was bootstrapped and tested on x86-64.

Committed as rev. 253300.


Index: ira-costs.c
===================================================================
--- ira-costs.c (revision 253253)
+++ ira-costs.c (working copy)
@@ -1471,7 +1471,10 @@ scan_one_insn (rtx_insn *insn)
                && targetm.legitimate_constant_p (GET_MODE (SET_DEST (set)),
                                                  XEXP (note, 0))
                && REG_N_SETS (REGNO (SET_DEST (set))) == 1))
-      && general_operand (SET_SRC (set), GET_MODE (SET_SRC (set))))
+      && general_operand (SET_SRC (set), GET_MODE (SET_SRC (set)))
+      /* LRA does not use equiv with a symbol for PIC code.  */
+      && (! ira_use_lra_p || ! pic_offset_table_rtx
+         || ! contains_symbol_ref_p (XEXP (note, 0))))
       {
         enum reg_class cl = GENERAL_REGS;
         rtx reg = SET_DEST (set);
I don't think this is the right test for PICness.  Most targets have
an unconditional pic_offset_table_rtx.

Thank you, Richard, for checking the patch.

Yes, the test might be not right for PICness. The actual patch goal was to sync IRA and LRA which uses the same code to analyze when an equiv can be used. So if we need less conservative code, we should change the code in the both places.

Reply via email to