[ARM] fix PR debug/57351 ICE: internal compiler error: in dbx_reg_number,

2013-05-22 Thread Christian Bruel
Hello,

arm_dwarf_register_span converts regno to a dbx register number while
building the PARALLEL rtx. But since
http://gcc.gnu.org/ml/gcc-patches/2013-05/msg01131.html this information
is centralized in DBX_REGISTER_NUMBER that will be called when
processing the operands in reg_loc_descriptor, so the DBX conversion
information doesn't need to be duplicated.

Build and regtested with a arm-none-eabi newlib toolset configured with
--with-fpu=neon-vfpv4 --with-float=hard --with-arch=armv7-a

OK for trunk ?

Thanks

Christian

2013-05-22  Christian Bruel  christian.br...@st.com

	PR debug/57351
	* config/arm/arm.c (arm_dwarf_register_span): Do not use dbx number.

2013-05-22  Christian Bruel  christian.br...@st.com

	PR debug/57351
	* gcc.dg/debug/pr57351.c: New test

Index: gcc/config/arm/arm.c
===
--- gcc/config/arm/arm.c	(revision 199179)
+++ gcc/config/arm/arm.c	(working copy)
@@ -25861,9 +25861,8 @@ arm_dwarf_register_span (rtx rtl)
 
   nregs = GET_MODE_SIZE (GET_MODE (rtl)) / 8;
   p = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (nregs));
-  regno = (regno - FIRST_VFP_REGNUM) / 2;
   for (i = 0; i  nregs; i++)
-XVECEXP (p, 0, i) = gen_rtx_REG (DImode, 256 + regno + i);
+XVECEXP (p, 0, i) = gen_rtx_REG (DImode, regno + i);
 
   return p;
 }

Index: gcc/testsuite/gcc.dg/debug/pr57351.c
===
--- gcc/testsuite/gcc.dg/debug/pr57351.c	(revision 0)
+++ gcc/testsuite/gcc.dg/debug/pr57351.c	(revision 0)
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon }  */
+/* { dg-options -std=c99 -Os -g -march=armv7-a -mfpu=neon-vfpv4  -mfloat-abi=hard { target { arm-*-* } } } */
+
+typedef unsigned int size_t;
+typedef int ptrdiff_t;
+typedef signed char int8_t ;
+typedef signed long long int64_t;
+typedef int8_t GFC_INTEGER_1;
+typedef GFC_INTEGER_1 GFC_LOGICAL_1;
+typedef int64_t GFC_INTEGER_8;
+typedef GFC_INTEGER_8 GFC_LOGICAL_8;
+typedef ptrdiff_t index_type;
+typedef struct descriptor_dimension
+{
+  index_type lower_bound;
+  index_type _ubound;
+}
+descriptor_dimension;
+typedef struct { GFC_LOGICAL_1 *base_addr; size_t offset; index_type dtype; descriptor_dimension dim[7];} gfc_array_l1;
+typedef struct { GFC_LOGICAL_8 *base_addr; size_t offset; index_type dtype; descriptor_dimension dim[7];} gfc_array_l8;
+void
+all_l8 (gfc_array_l8 * const restrict retarray,
+ gfc_array_l1 * const restrict array,
+ const index_type * const restrict pdim)
+{
+  GFC_LOGICAL_8 * restrict dest;
+  index_type n;
+  index_type len;
+  index_type delta;
+  index_type dim;
+  dim = (*pdim) - 1;
+  len = ((array)-dim[dim]._ubound + 1 - (array)-dim[dim].lower_bound);
+  for (n = 0; n  dim; n++)
+{
+  const GFC_LOGICAL_1 * restrict src;
+  GFC_LOGICAL_8 result;
+  {
+  result = 1;
+   {
+ for (n = 0; n  len; n++, src += delta)
+   {
+  if (! *src)
+{
+  result = 0;
+  break;
+}
+  }
+ *dest = result;
+   }
+  }
+}
+}


Re: [ARM] fix PR debug/57351 ICE: internal compiler error: in dbx_reg_number,

2013-05-22 Thread Ramana Radhakrishnan

On 05/22/13 11:31, Christian Bruel wrote:

Hello,

arm_dwarf_register_span converts regno to a dbx register number while
building the PARALLEL rtx. But since
http://gcc.gnu.org/ml/gcc-patches/2013-05/msg01131.html this information
is centralized in DBX_REGISTER_NUMBER that will be called when
processing the operands in reg_loc_descriptor, so the DBX conversion
information doesn't need to be duplicated.

Build and regtested with a arm-none-eabi newlib toolset configured with
--with-fpu=neon-vfpv4 --with-float=hard --with-arch=armv7-a

OK for trunk ?

Thanks

Christian




In the test use

/* { dg-options -std=c99 -Os -g -march=armv7-a } */
/* { dg-add-options arm_neon } */

instead of

/* { dg-options -std=c99 -Os -g -march=armv7-a -mfpu=neon-vfpv4 
-mfloat-abi=hard { target { arm-*-* } } } */


Ok with that change.


regards
Ramana