From: Jakub Jelinek Date: Wed, 25 Aug 2010 17:49:26 +0000 (+0200) Subject: re PR rtl-optimization/45400 (XBMC AudioEngine Compilation C++ Internal Compiler... X-Git-Tag: releases/gcc-4.6.0~4839 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=932c9bffa0224eb16e061da1802f6f95fb23e7d3;p=thirdparty%2Fgcc.git re PR rtl-optimization/45400 (XBMC AudioEngine Compilation C++ Internal Compiler Error /w Optimization) PR rtl-optimization/45400 * combine.c (simplify_shift_const_1) : Only use SUBREG_REG if both modes are of MODE_INT class. * g++.dg/other/i386-8.C: New test. From-SVN: r163551 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb6ebd99bdc9..1123d07ce208 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-25 Jakub Jelinek + + PR rtl-optimization/45400 + * combine.c (simplify_shift_const_1) : Only use + SUBREG_REG if both modes are of MODE_INT class. + 2010-08-25 Julian Brown * config/arm/arm.c (arm_issue_rate): Return 2 for Cortex-A5. diff --git a/gcc/combine.c b/gcc/combine.c index 94e68392d98b..acff54198e54 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -9858,7 +9858,9 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode, > GET_MODE_SIZE (GET_MODE (varop))) && (unsigned int) ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (varop))) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD) - == mode_words) + == mode_words + && GET_MODE_CLASS (GET_MODE (varop)) == MODE_INT + && GET_MODE_CLASS (GET_MODE (SUBREG_REG (varop))) == MODE_INT) { varop = SUBREG_REG (varop); if (GET_MODE_SIZE (GET_MODE (varop)) > GET_MODE_SIZE (mode)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 372024fd7cde..fd9f5ad3d0ae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-08-25 Jakub Jelinek + + PR rtl-optimization/45400 + * g++.dg/other/i386-8.C: New test. + 2010-08-25 Richard Guenther * gcc.dg/alias-8.c: Adjust. diff --git a/gcc/testsuite/g++.dg/other/i386-8.C b/gcc/testsuite/g++.dg/other/i386-8.C new file mode 100644 index 000000000000..7de75c73c8b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/i386-8.C @@ -0,0 +1,23 @@ +// PR rtl-optimization/45400 +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -msse2" } +// { dg-options "-O2 -msse2 -fpic" { target fpic } } +// { dg-require-effective-target sse2 } + +#include + +static inline unsigned short +bar (unsigned short x) +{ + return ((x << 8) | (x >> 8)); +} + +unsigned int +foo (float *x, short *y) +{ + __m128 a = _mm_set_ps1 (32767.5f); + __m128 b = _mm_mul_ps (_mm_load_ps (x), a); + __m64 c = _mm_cvtps_pi16 (b); + __builtin_memcpy (y, &c, sizeof (short) * 4); + y[0] = bar (y[0]); +}