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]

Fix ICE in dse pass (PR36929)


This fixes the ICE in the dse pass on m68k. Regtested on ia64-suse-linux
(trunk and 4.3 branch).  OK for both?

Andreas.

2008-07-26  Andreas Schwab  <schwab@suse.de>

	PR rtl-optimization/36929
	* dse.c (replace_inc_dec): Use emit_insn_before instead of
	add_insn_before and fix argument order.
	(replace_inc_dec_mem): Handle NULL rtx.

Index: gcc/dse.c
===================================================================
--- gcc/dse.c	(revision 138136)
+++ gcc/dse.c	(working copy)
@@ -783,10 +783,9 @@ replace_inc_dec (rtx *r, void *d)
       {
 	rtx r1 = XEXP (x, 0);
 	rtx c = gen_int_mode (Pmode, data->size);
-	add_insn_before (data->insn, 
-			 gen_rtx_SET (Pmode, r1, 
-				      gen_rtx_PLUS (Pmode, r1, c)),
-			 NULL);
+	emit_insn_before (gen_rtx_SET (Pmode, r1, 
+				       gen_rtx_PLUS (Pmode, r1, c)),
+			  data->insn);
 	return -1;
       }
 		 
@@ -795,10 +794,9 @@ replace_inc_dec (rtx *r, void *d)
       {
 	rtx r1 = XEXP (x, 0);
 	rtx c = gen_int_mode (Pmode, -data->size);
-	add_insn_before (data->insn, 
-			 gen_rtx_SET (Pmode, r1, 
-				      gen_rtx_PLUS (Pmode, r1, c)),
-			 NULL);
+	emit_insn_before (gen_rtx_SET (Pmode, r1, 
+				       gen_rtx_PLUS (Pmode, r1, c)),
+			  data->insn);
 	return -1;
       }
 	
@@ -809,8 +807,7 @@ replace_inc_dec (rtx *r, void *d)
 	   insn that contained it.  */
 	rtx add = XEXP (x, 0);
 	rtx r1 = XEXP (add, 0);
-	add_insn_before (data->insn, 
-			 gen_rtx_SET (Pmode, r1, add), NULL);
+	emit_insn_before (gen_rtx_SET (Pmode, r1, add), data->insn);
 	return -1;
       }
 
@@ -827,12 +824,12 @@ static int
 replace_inc_dec_mem (rtx *r, void *d)
 {
   rtx x = *r;
-  if (GET_CODE (x) == MEM)
+  if (x != NULL_RTX && GET_CODE (x) == MEM)
     {
       struct insn_size data;
 
       data.size = GET_MODE_SIZE (GET_MODE (x));
-      data.insn = (rtx)d;
+      data.insn = (rtx) d;
 
       for_each_rtx (&XEXP (x, 0), replace_inc_dec, &data);
 	

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


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