This is the mail archive of the gcc@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: df_insn_refs_record's handling of global_regs[]


From: "Seongbae Park (박성배, 朴成培)" <seongbae.park@gmail.com>
Date: Tue, 16 Oct 2007 22:56:49 -0700

> Did you replace the DF_REF_REG_USE with DEF ?
> If so, that's not correct.  We need to add DEF as well as USE:
 ...
> Then, we'll need to change the df_invalidated_by_call loop
> not to add global_regs[] again (with MAY_CLOBBER bits).

Seongbae-ssi, I've done full regstraps of mainline with the
following patch on sparc-linux-gnu and sparc64-linux-gnu.

Do you mind if I check in this fix?  I would also like to
pursue getting this installed on the gcc-4.2 branch as well,
as I stated I've already done several regstraps of the 4.2
backport of this fix as well.

Thank you.

2007-10-18  Seongbae Park <seongbae.park@gmail.com>
	David S. Miller  <davem@davemloft.net>

	* df-scan.c (df_get_call_refs): Mark global registers as both a
	DF_REF_REG_USE and a non-clobber DF_REF_REG_DEF.

--- df-scan.c.ORIG	2007-10-18 16:56:19.000000000 -0700
+++ df-scan.c	2007-10-18 16:56:50.000000000 -0700
@@ -3109,18 +3109,22 @@
      so they are recorded as used.  */
   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
     if (global_regs[i])
-      df_ref_record (collection_rec, regno_reg_rtx[i],
-		     NULL, bb, insn, DF_REF_REG_USE, flags);
+      {
+	df_ref_record (collection_rec, regno_reg_rtx[i],
+		       NULL, bb, insn, DF_REF_REG_USE, flags);
+	df_ref_record (collection_rec, regno_reg_rtx[i],
+		       NULL, bb, insn, DF_REF_REG_DEF, flags);
+      }
 
   is_sibling_call = SIBLING_CALL_P (insn);
   EXECUTE_IF_SET_IN_BITMAP (df_invalidated_by_call, 0, ui, bi)
     {
-      if ((!bitmap_bit_p (defs_generated, ui))
+      if (!global_regs[ui]
+	  && (!bitmap_bit_p (defs_generated, ui))
 	  && (!is_sibling_call
 	      || !bitmap_bit_p (df->exit_block_uses, ui)
 	      || refers_to_regno_p (ui, ui+1, 
 				    current_function_return_rtx, NULL)))
-
         df_ref_record (collection_rec, regno_reg_rtx[ui], 
 		       NULL, bb, insn, DF_REF_REG_DEF, DF_REF_MAY_CLOBBER | flags);
     }


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