From: Uros Bizjak Date: Sat, 30 Oct 2010 20:50:12 +0000 (+0200) Subject: re PR middle-end/44569 (ICE in simplify_subreg for debug insn with CONCATN) X-Git-Tag: releases/gcc-4.4.6~291 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=048a2aa10e98edbf72fb4fbd0cfce223c29b40d4;p=thirdparty%2Fgcc.git re PR middle-end/44569 (ICE in simplify_subreg for debug insn with CONCATN) 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8679b06695a5..eaf4f5f19b70 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-10-30 Uros Bizjak + + 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 PR target/45946 @@ -32,7 +38,7 @@ INTVAL (XEXP (slot, 1)) as prev_size. 2010-06-21 Jakub Jelinek - + 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, @@ -157,9 +163,9 @@ 2010-09-01 Ian Bolton * Makefile.in (tree-switch-conversion.o): Update dependencies. - + 2010-08-19 Ian Bolton - + PR target/45070 * config/arm/arm.c (arm_output_epilogue): Ensure that return value of size 1-3 is handled correctly. @@ -170,7 +176,7 @@ type for the conditional has wide enough range. 2010-08-07 Marcus Shawcroft - + * config/arm/linux-atomic.c (SUBWORD_VAL_CAS): Instantiate with 'unsigned short' and 'unsigned char' instead of 'short' and 'char'. (SUBWORD_BOOL_CAS): Likewise. @@ -179,9 +185,9 @@ (FETCH_AND_OP_WORD): Parenthesise INF_OP (SUBWORD_SYNC_OP): Likewise. (OP_AND_FETCH_WORD): Likewise. - + 2010-09-02 Jakub Jelinek - + Backport from mainline 2010-08-30 Jakub Jelinek diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c index ea9c6a0d3477..933524d1d239 100644 --- a/gcc/lower-subreg.c +++ b/gcc/lower-subreg.c @@ -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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 21471b7d22d5..0ac6b5761e38 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -195,7 +195,7 @@ PR middle-end/40386 * gcc.c-torture/execute/{pr40386.c,pr40386.x}: New testcase. - + 2010-09-08 Jakub Jelinek PR fortran/45595 @@ -205,14 +205,14 @@ Backport from mainline 2010-08-19 Ian Bolton - + PR target/45070 * gcc.c-torture/execute/pr45070.c: New. 2010-08-19 Ian Bolton * g++.dg/pr44328.C: New test. - + 2010-08-07 Marcus Shawcroft * lib/target-supports.exp: (check_effective_target_sync_int_long):