From: Uros Bizjak Date: Tue, 23 Oct 2007 20:15:04 +0000 (+0200) Subject: re PR rtl-optimization/33846 (ICE in trunc_int_for_mode, at explow.c:55) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=881ef7be466c6ff0a88bd2a7be3bb91008388795;p=gcc.git re PR rtl-optimization/33846 (ICE in trunc_int_for_mode, at explow.c:55) PR rtl-optimization/33846 * combine.c (simplify_shift_const_1) [NOT]: Skip vector modes. testsuite/ChangeLog: PR rtl-optimization/33846 * gcc.dg/vect/pr33846.c: New testcase. From-SVN: r129589 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a8d8a9f5a3a..3fb2fef9ccd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-10-23 Uros Bizjak + + PR rtl-optimization/33846 + * combine.c (simplify_shift_const_1) [NOT]: Skip vector modes. + 2007-10-23 Dorit Nuzman PR tree-optimization/33860 @@ -32,8 +37,8 @@ PR tree-optimization/33834 PR tree-optimization/33835 - * tree-vect-analyze.c (vect_analyze_operations): RELEVANT and LIVE stmts - need to be checked for success seperately. + * tree-vect-analyze.c (vect_analyze_operations): RELEVANT and LIVE + stmts need to be checked for success seperately. * tree-vect-transform.c (vectorizable_call, vectorizable_conversion): Remove the check that stmt is not LIVE. (vectorizable_assignment, vectorizable_induction): Likewise. @@ -899,7 +904,7 @@ IX86_BUILTIN_PSRADI128, IX86_BUILTIN_PSRLWI128, IX86_BUILTIN_PSRLDI128, IX86_BUILTIN_PSRLQI128]: Do not require immediate shift value. - config/i386/emmintrin.h (_mm_slli_epi16, _mm_slli_epi32, + * config/i386/emmintrin.h (_mm_slli_epi16, _mm_slli_epi32, _mm_slli_epi64, _mm_srai_epi16, _mm_srai_epi32, _mm_srli_epi16, _mm_srli_epi32, _mm_srli_epi64): Remove 'const' from count argument. Remove macros for !__OPTIMIZE__ case. diff --git a/gcc/combine.c b/gcc/combine.c index dae0baf8f47..cfd0ed1a404 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -9343,6 +9343,9 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode, break; case NOT: + if (VECTOR_MODE_P (mode)) + break; + /* Make this fit the case below. */ varop = gen_rtx_XOR (mode, XEXP (varop, 0), GEN_INT (GET_MODE_MASK (mode))); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a1bf668c44e..c68d6c23f7d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,10 @@ -2007-10-23 Martin Michlmayr +2007-10-23 Martin Michlmayr + Uros Bizjak + + PR rtl-optimization/33846 + * gcc.dg/vect/pr33846.c: New testcase. + +2007-10-23 Martin Michlmayr Dorit Nuzman PR tree-optimization/33860 @@ -8,13 +14,13 @@ 2007-10-23 Tehila Meyzels Revital Eres - * testsuite/gcc.dg/sms-2.c: New testcase. + * testsuite/gcc.dg/sms-2.c: New testcase. 2007-10-22 David S. Miller * gcc.dg/globalreg-1.c: New test. -2007-10-22 Martin Michlmayr +2007-10-22 Martin Michlmayr Dorit Nuzman PR tree-optimization/33834 diff --git a/gcc/testsuite/gcc.dg/vect/pr33846.c b/gcc/testsuite/gcc.dg/vect/pr33846.c new file mode 100644 index 00000000000..f31e207bdef --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr33846.c @@ -0,0 +1,22 @@ +/* Testcase by Martin Michlmayr */ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_shift } */ + +int clamp_val (int i) +{ + return ~i >> 31; +} + +void _mix_some_samples (long buf, int *mix_buffer, int mix_size) +{ + int i; + signed int *p = mix_buffer; + for (i = mix_size ; i > 0; i--) + { + *((short *) buf) = clamp_val ((*p) + 0x800000); + buf += 2; + p++; + } +} + +/* { dg-final { cleanup-tree-dump "vect" } } */