From 68e28cfd16e6810a7c07a4af34d5a195821859af Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 18 Sep 2012 17:14:15 +0200 Subject: [PATCH] re PR rtl-optimization/54592 (Cannot fuse SSE move and add together) 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. From-SVN: r191430 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.c | 3 ++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.target/i386/pr54592.c | 17 +++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr54592.c 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 + + 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 * 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 + 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 + +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)" } } */ -- 2.30.2