]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/33669 (Revision 128957 miscompiles 481.wrf)
authorKenneth Zadeck <zadeck@naturalbridge.com>
Wed, 10 Oct 2007 03:32:43 +0000 (03:32 +0000)
committerKenneth Zadeck <zadeck@gcc.gnu.org>
Wed, 10 Oct 2007 03:32:43 +0000 (03:32 +0000)
2007-10-07  Kenneth Zadeck <zadeck@naturalbridge.com>

PR middle-end/33669
* ra-conflict.c (record_one_conflict_between_regnos,
set_conflicts_for_earlyclobber, global_conflicts): Improved logging.
(global_conflicts): Enhanced incorrect check.

From-SVN: r129193

gcc/ChangeLog
gcc/ra-conflict.c

index cb9b8784d549765a98b2e46e5fbcc8d89a58419e..548053e3721221bd703c9a9177fca05d2290cb45 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-07  Kenneth Zadeck <zadeck@naturalbridge.com>
+
+       PR middle-end/33669
+       * ra-conflict.c (record_one_conflict_between_regnos, 
+       set_conflicts_for_earlyclobber, global_conflicts): Improved logging.
+       (global_conflicts): Enhanced incorrect check.
+       
 2007-10-09  Geoffrey Keating  <geoffk@apple.com>
 
        * dwarf2out.c (output_call_frame_info): FDEs are always emitted
index 27a9fcc81eb5b42939198fc57417edc9e8e3d736..8f35afde465ece178b6a14cfd1a76c7b32e6c5c2 100644 (file)
@@ -196,7 +196,7 @@ record_one_conflict_between_regnos (enum machine_mode mode1, int r1,
   int allocno2 = reg_allocno[r2];
 
   if (dump_file)
-    fprintf (dump_file, "  rocbr adding %d<=>%d\n", r1, r2);
+    fprintf (dump_file, "    rocbr adding %d<=>%d\n", r1, r2);
 
   if (allocno1 >= 0 && allocno2 >= 0)
     set_conflict (allocno1, allocno2);
@@ -401,9 +401,6 @@ set_conflicts_for_earlyclobber (rtx insn)
                                                    recog_data.operand[use + 1]);
                }
        }
-
-  if (dump_file) 
-    fprintf (dump_file, "  finished early clobber conflicts.\n");
 }
 
 
@@ -983,12 +980,12 @@ global_conflicts (void)
                        set_renumbers_live (&renumbers_live, live_subregs, live_subregs_used, 
                                            allocnum, renumber);
                    }
-                 
-                 else if (!sparseset_bit_p (allocnos_live, allocnum))
+                 else if (live_subregs_used[allocnum] > 0
+                          || !sparseset_bit_p (allocnos_live, allocnum))
                    {
                      if (dump_file)
-                       fprintf (dump_file, "    dying pseudo\n");
-                     
+                       fprintf (dump_file, "    %sdying pseudo\n", 
+                                (live_subregs_used[allocnum] > 0) ? "partially ": "");
                      /* Resetting the live_subregs_used is
                         effectively saying do not use the subregs
                         because we are reading the whole pseudo.  */
@@ -1071,6 +1068,8 @@ global_conflicts (void)
                 FIXME: We should consider either adding a new kind of
                 clobber, or adding a flag to the clobber distinguish
                 these two cases.  */
+             if (dump_file && VEC_length (df_ref_t, clobbers))
+               fprintf (dump_file, "  clobber conflicts\n");
              for (k = VEC_length (df_ref_t, clobbers) - 1; k >= 0; k--)
                {
                  struct df_ref *def = VEC_index (df_ref_t, clobbers, k);
@@ -1132,6 +1131,8 @@ global_conflicts (void)
              if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn))
                { 
                  int j;
+                 if (dump_file)
+                   fprintf (dump_file, "  multiple sets\n");
                  for (j = VEC_length (df_ref_t, dying_regs) - 1; j >= 0; j--)
                    {
                      int used_in_output = 0;
@@ -1166,7 +1167,7 @@ global_conflicts (void)
            }
        }
 
-           /* Add the renumbers live to the hard_regs_live for the next few
+      /* Add the renumbers live to the hard_regs_live for the next few
         calls.  All of this gets recomputed at the top of the loop so
         there is no harm.  */
       IOR_HARD_REG_SET (hard_regs_live, renumbers_live);