]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/44569 (ICE in simplify_subreg for debug insn with CONCATN)
authorUros Bizjak <ubizjak@gmail.com>
Sat, 30 Oct 2010 20:50:12 +0000 (22:50 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Sat, 30 Oct 2010 20:50:12 +0000 (22:50 +0200)
PR middle-end/44569
* lower-suberg.c (simplify_subreg_concatn): For VOIDmode elements,
determine the mode of a subreg by GET_MODE_INNER of CONCATN RTX.

From-SVN: r166095

gcc/ChangeLog
gcc/lower-subreg.c
gcc/testsuite/ChangeLog

index 8679b06695a52dff748c1c9cb76ea76c267f50e4..eaf4f5f19b70862c8ca226d54078e2a73e850a24 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-30  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/44569
+       * lower-suberg.c (simplify_subreg_concatn): For VOIDmode elements,
+       determine the mode of a subreg by GET_MODE_INNER of CONCATN RTX.
+
 2010-10-22  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/45946
@@ -32,7 +38,7 @@
        INTVAL (XEXP (slot, 1)) as prev_size.
 
        2010-06-21  Jakub Jelinek  <jakub@redhat.com>
+
        PR target/44575
        * config/i386/i386.c (ix86_gimplify_va_arg): When copying
        va_arg from a set of register save slots into a temporary,
        2010-09-01  Ian Bolton  <ian.bolton@arm.com>
 
        * Makefile.in (tree-switch-conversion.o): Update dependencies.
-       
+
        2010-08-19  Ian Bolton  <ian.bolton@arm.com>
-       
+
        PR target/45070
        * config/arm/arm.c (arm_output_epilogue): Ensure that return
        value of size 1-3 is handled correctly.
        type for the conditional has wide enough range.
 
        2010-08-07  Marcus Shawcroft  <marcus.shawcroft@arm.com>
-       
+
        * config/arm/linux-atomic.c (SUBWORD_VAL_CAS): Instantiate with
        'unsigned short' and 'unsigned char' instead of 'short' and 'char'.
        (SUBWORD_BOOL_CAS): Likewise.
        (FETCH_AND_OP_WORD): Parenthesise INF_OP
        (SUBWORD_SYNC_OP): Likewise.
        (OP_AND_FETCH_WORD): Likewise.
-       
+
 2010-09-02  Jakub Jelinek  <jakub@redhat.com>
-       
+
        Backport from mainline
        2010-08-30  Jakub Jelinek  <jakub@redhat.com>
 
index ea9c6a0d3477914b711df46eeac5f6a4cee0ff18..933524d1d23961f3420df0876baae09b5bcf940a 100644 (file)
@@ -388,7 +388,7 @@ simplify_subreg_concatn (enum machine_mode outermode, rtx op,
                         unsigned int byte)
 {
   unsigned int inner_size;
-  enum machine_mode innermode;
+  enum machine_mode innermode, partmode;
   rtx part;
   unsigned int final_offset;
 
@@ -401,11 +401,19 @@ simplify_subreg_concatn (enum machine_mode outermode, rtx op,
 
   inner_size = GET_MODE_SIZE (innermode) / XVECLEN (op, 0);
   part = XVECEXP (op, 0, byte / inner_size);
+  partmode = GET_MODE (part);
+
+  if (partmode == VOIDmode)
+    {
+      gcc_assert (VECTOR_MODE_P (innermode));
+      partmode = GET_MODE_INNER (innermode);
+    }
+
   final_offset = byte % inner_size;
   if (final_offset + GET_MODE_SIZE (outermode) > inner_size)
     return NULL_RTX;
 
-  return simplify_gen_subreg (outermode, part, GET_MODE (part), final_offset);
+  return simplify_gen_subreg (outermode, part, partmode, final_offset);
 }
 
 /* Wrapper around simplify_gen_subreg which handles CONCATN.  */
index 21471b7d22d5228a032dfe7c630f32769e009c4f..0ac6b5761e38a059125c0603aa29d1867309e9bc 100644 (file)
 
        PR middle-end/40386
        * gcc.c-torture/execute/{pr40386.c,pr40386.x}: New testcase.
-       
+
 2010-09-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/45595
 
        Backport from mainline
        2010-08-19  Ian Bolton  <ian.bolton@arm.com>
-       
+
        PR target/45070
        * gcc.c-torture/execute/pr45070.c: New.
 
        2010-08-19  Ian Bolton  <ian.bolton@arm.com>
 
        * g++.dg/pr44328.C: New test.
-       
+
        2010-08-07  Marcus Shawcroft <marcus.shawcroft@arm.com>
 
        * lib/target-supports.exp: (check_effective_target_sync_int_long):