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]

[patch committed] SH: Fix -fcompare-debug failure for pr42685.c


Hi,

Two test recently added

  g++.dg/other/pr42685.C (test for excess errors)
  gcc.dg/pr42685.c (test for excess errors)

fail for SH with -fcompare-debug error.  -save-temps shows
that .gk.gkd differs with .gkd at stuff_delay_slot and
block_branch_redirect fake insns.  These insns use some
INSN_UIDs for the argument of the UNSPEC_BBR unspec insn and
those INSN_UIDs are changed with -g.  The attached patch uses
a static counter instead of INSN_UID for that purpose.
I've confirmed that both patched/unpatched compilers produce
same codes on all CSiBE tests and there is no new failures
with bootstrap and the top level "make -k check" on
sh4-unknown-linux-gnu.  Committed on trunk.

Regards,
	kaz
--
2010-02-28  Kaz Kojima  <kkojima@gcc.gnu.org>

	* config/sh/sh.c (unspec_bbr_uid): New.
	(gen_block_redirect): Use it instead of INSN_UID.
	(gen_far_branch): Likewise.

--- ORIG/trunk/gcc/config/sh/sh.c	2010-02-12 11:07:38.000000000 +0900
+++ trunk/gcc/config/sh/sh.c	2010-02-27 09:30:54.000000000 +0900
@@ -107,6 +107,9 @@ static int skip_cycles = 0;
    and returned from sh_reorder2.  */
 static short cached_can_issue_more;
 
+/* Unique number for UNSPEC_BBR pattern.  */
+static unsigned int unspec_bbr_uid = 1;
+
 /* Provides the class number of the smallest class containing
    reg number.  */
 
@@ -5012,8 +5015,8 @@ gen_block_redirect (rtx jump, int addr, 
 	 branch; simplejump_p fails for indirect jumps even if they have
 	 a JUMP_LABEL.  */
       rtx insn = emit_insn_before (gen_indirect_jump_scratch
-				   (reg, GEN_INT (INSN_UID (JUMP_LABEL (jump))))
-				   , jump);
+				   (reg, GEN_INT (unspec_bbr_uid++)),
+				   jump);
       /* ??? We would like this to have the scope of the jump, but that
 	 scope will change when a delay slot insn of an inner scope is added.
 	 Hence, after delay slot scheduling, we'll have to expect
@@ -5028,8 +5031,8 @@ gen_block_redirect (rtx jump, int addr, 
     /* We can't use JUMP_LABEL here because it might be undefined
        when not optimizing.  */
     return emit_insn_before (gen_block_branch_redirect
-		      (GEN_INT (INSN_UID (XEXP (SET_SRC (PATTERN (jump)), 0))))
-		      , jump);
+			     (GEN_INT (unspec_bbr_uid++)),
+			     jump);
   return prev;
 }
 
@@ -5088,7 +5091,7 @@ gen_far_branch (struct far_branch *bp)
   if (bp->far_label)
     (emit_insn_after
      (gen_stuff_delay_slot
-      (GEN_INT (INSN_UID (XEXP (SET_SRC (PATTERN (jump)), 0))),
+      (GEN_INT (unspec_bbr_uid++),
        GEN_INT (recog_memoized (insn) == CODE_FOR_branch_false)),
       insn));
   /* Prevent reorg from undoing our splits.  */


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