diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-09-18 15:14:15 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-09-18 15:14:15 +0000 |
commit | 439c36e48026ec7dbbc2654aef4c228d6b020ec9 (patch) | |
tree | b4681198fd6e41a70e213cdbc26037bd97912742 /gcc | |
parent | 735538a1ce4b3e1ba12f3c749ea708db0ed336cc (diff) | |
download | gcc-439c36e48026ec7dbbc2654aef4c228d6b020ec9.tar.gz |
PR target/54592
* config/i386/i386.c (ix86_rtx_costs): Limit > UNITS_PER_WORD
AND/IOR/XOR cost calculation to MODE_INT class modes.
* gcc.target/i386/pr54592.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191430 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr54592.c | 17 |
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 951467b6c13..4b58a9b2835 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-09-18 Jakub Jelinek <jakub@redhat.com> + + PR target/54592 + * config/i386/i386.c (ix86_rtx_costs): Limit > UNITS_PER_WORD + AND/IOR/XOR cost calculation to MODE_INT class modes. + 2012-09-18 Thomas Quinot <quinot@adacore.com> * doc/invoke.texi: Document -fada-spec-parent. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index df8c101cd76..c82da8214a6 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -32792,7 +32792,8 @@ ix86_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, case AND: case IOR: case XOR: - if (GET_MODE_SIZE (mode) > UNITS_PER_WORD) + if (GET_MODE_CLASS (mode) == MODE_INT + && GET_MODE_SIZE (mode) > UNITS_PER_WORD) { *total = (cost->add * 2 + (rtx_cost (XEXP (x, 0), outer_code, opno, speed) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 208a6d23d42..40efded3f37 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2012-09-18 Jakub Jelinek <jakub@redhat.com> + PR target/54592 + * gcc.target/i386/pr54592.c: New test. + PR tree-optimization/54610 * gcc.target/i386/pr54610.c: New test. diff --git a/gcc/testsuite/gcc.target/i386/pr54592.c b/gcc/testsuite/gcc.target/i386/pr54592.c new file mode 100644 index 00000000000..20dc11c2351 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr54592.c @@ -0,0 +1,17 @@ +/* PR target/54592 */ +/* { dg-do compile } */ +/* { dg-options "-Os -msse2" } */ +/* { dg-require-effective-target sse2 } */ + +#include <emmintrin.h> + +void +func (__m128i * foo, size_t a, size_t b, int *dst) +{ + __m128i x = foo[a]; + __m128i y = foo[b]; + __m128i sum = _mm_add_epi32 (x, y); + *dst = _mm_cvtsi128_si32 (sum); +} + +/* { dg-final { scan-assembler "paddd\[^\n\r\]*(\\(\[^\n\r\]*\\)|XMMWORD PTR)" } } */ |