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] Fix a thinko in vt_expand_loc_callback (PR debug/43304)


Hi!

This patch fixes vmx/fft.c, vmx/7-01.c and vmx/7-01a.c tests
on powerpc - in the SUBREG case I've missed one case which needs to
call the dummy variant of the function when in dummy variant.  Otherwise
it allocates memory (wastes GC space) and, what's worse, it calls the
callback still in dummy mode so it returns pc_rtx on success instead of
some real expression, and simplification can then ICE when simplifying an
expression involving (pc) in places it doesn't expect.

Fixed thusly, bootstrap/regtest on x86_64-linux, i686-linux and
powerpc64-linux pending.  Ok for trunk?

2010-03-09  Jakub Jelinek  <jakub@redhat.com>

	PR debug/43304
	* var-tracking.c (vt_expand_loc_callback) <case SUBREG>: If dummy,
	call cselib_dummy_expand_value_rtx_cb instead of
	cselib_expand_value_rtx_cb.

--- gcc/var-tracking.c.jj	2010-03-09 12:25:04.000000000 +0100
+++ gcc/var-tracking.c	2010-03-09 13:15:36.000000000 +0100
@@ -6610,6 +6610,16 @@ vt_expand_loc_callback (rtx x, bitmap re
   switch (GET_CODE (x))
     {
     case SUBREG:
+      if (dummy)
+	{
+	  if (cselib_dummy_expand_value_rtx_cb (SUBREG_REG (x), regs,
+						max_depth - 1,
+						vt_expand_loc_callback, data))
+	    return pc_rtx;
+	  else
+	    return NULL;
+	}
+
       subreg = cselib_expand_value_rtx_cb (SUBREG_REG (x), regs,
 					   max_depth - 1,
 					   vt_expand_loc_callback, data);
@@ -6617,9 +6627,6 @@ vt_expand_loc_callback (rtx x, bitmap re
       if (!subreg)
 	return NULL;
 
-      if (dummy)
-	return pc_rtx;
-
       result = simplify_gen_subreg (GET_MODE (x), subreg,
 				    GET_MODE (SUBREG_REG (x)),
 				    SUBREG_BYTE (x));

	Jakub


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