This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PARCH 2/2, x86, PR63534] Fix darwin bootstrap


On 10/17/14 08:16, Evgeny Stupachenko wrote:
Hi,

Some instructions (like one in PR63534) could have hidden use of PIC register.
Therefore we need to leave SET_GOT not deleted till reload completed.
The patch prevents SET_GOT from deleting while PIC register is pseudo.

Is it ok?

ChangeLog:

2014-10-17  Evgeny Stupachenko  <evstupac@gmail.com>

         PR target/63534
         * cse.c (delete_trivially_dead_insns): Consider PIC register is used
         while it is pseudo.
         * dse.c (deletable_insn_p): Likewise.


diff --git a/gcc/cse.c b/gcc/cse.c
index be2f31b..062ba45 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -6953,6 +6953,11 @@ delete_trivially_dead_insns (rtx_insn *insns, int nreg)
        /* If no debug insns can be present, COUNTS is just an array
          which counts how many times each pseudo is used.  */
      }
+  /* Pseudo PIC register should be considered as used due to possible
+     new usages generated.  */
+  if (pic_offset_table_rtx
+      && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER)
+    counts[REGNO (pic_offset_table_rtx)]++;
    /* Go from the last insn to the first and delete insns that only set unused
       registers or copy a register to itself.  As we delete an insn, remove
       usage counts for registers it uses.
Shouldn't this also be guarded with !reload_completed? One reload is complete all the implicit references to the PIC register should be explicit and thus there's no need to treat the PIC register special.

diff --git a/gcc/dce.c b/gcc/dce.c
index 5b7d36e..a52a59c 100644
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -127,6 +127,10 @@ deletable_insn_p (rtx_insn *insn, bool fast,
bitmap arg_stores)
      if (HARD_REGISTER_NUM_P (DF_REF_REGNO (def))
         && global_regs[DF_REF_REGNO (def)])
        return false;
+    /* Initialization of pseudo PIC register should never be removed.  */
+    else if (DF_REF_REG (def) == pic_offset_table_rtx
+            && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER)
+      return false;
Similarly.

jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]