]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/53975 ([ia64] Target register of a speculative load moved to a branch...
authorAndrey Belevantsev <abel@ispras.ru>
Tue, 31 Jul 2012 10:56:52 +0000 (14:56 +0400)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Tue, 31 Jul 2012 10:56:52 +0000 (14:56 +0400)
        PR target/53975

        * sel-sched-ir.c (has_dependence_note_reg_use): Clarify comment.

        Revert
        2011-08-04  Sergey Grechanik  <mouseentity@ispras.ru>

        * sel-sched-ir.c (has_dependence_note_reg_use): Call ds_full_merge
        only if producer writes to the register given by regno.

From-SVN: r190005

gcc/ChangeLog
gcc/sel-sched-ir.c

index be4e91a12e0be978b8188f626a46e19d596e7307..e923388a811476f0ad006406109ce92682dd4942 100644 (file)
@@ -1,3 +1,15 @@
+2012-07-31  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR target/53975
+       
+       * sel-sched-ir.c (has_dependence_note_reg_use): Clarify comment. 
+
+       Revert
+       2011-08-04  Sergey Grechanik  <mouseentity@ispras.ru>
+
+       * sel-sched-ir.c (has_dependence_note_reg_use): Call ds_full_merge
+       only if producer writes to the register given by regno.
+
 2012-07-31  Nick Clifton  <nickc@redhat.com>
 
        * config/frv/frv.c (QUAD): Fix typo.
index 2dfecf5e45bd77dab457d85b01d0f92c2d605544..e7ca3f160e427af348f70fb8bdeded6456929fa0 100644 (file)
@@ -3228,7 +3228,11 @@ has_dependence_note_reg_use (int regno)
       if (reg_last->clobbers)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
 
-      /* Handle BE_IN_SPEC.  */
+      /* Merge BE_IN_SPEC bits into *DSP when the dependency producer
+        is actually a check insn.  We need to do this for any register
+        read-read dependency with the check unless we track properly
+        all registers written by BE_IN_SPEC-speculated insns, as
+        we don't have explicit dependence lists.  See PR 53975.  */
       if (reg_last->uses)
        {
          ds_t pro_spec_checked_ds;
@@ -3236,9 +3240,7 @@ has_dependence_note_reg_use (int regno)
          pro_spec_checked_ds = INSN_SPEC_CHECKED_DS (has_dependence_data.pro);
          pro_spec_checked_ds = ds_get_max_dep_weak (pro_spec_checked_ds);
 
-         if (pro_spec_checked_ds != 0
-             && bitmap_bit_p (INSN_REG_SETS (has_dependence_data.pro), regno))
-           /* Merge BE_IN_SPEC bits into *DSP.  */
+         if (pro_spec_checked_ds != 0)
            *dsp = ds_full_merge (*dsp, pro_spec_checked_ds,
                                  NULL_RTX, NULL_RTX);
        }