aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-09-18 17:14:15 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-09-18 17:14:15 +0200
commit68e28cfd16e6810a7c07a4af34d5a195821859af (patch)
treeb4681198fd6e41a70e213cdbc26037bd97912742
parent0b07a57e8cd8f14480f00da041212a84f1b3ab30 (diff)
downloadgcc-68e28cfd16e6810a7c07a4af34d5a195821859af.zip
gcc-68e28cfd16e6810a7c07a4af34d5a195821859af.tar.gz
gcc-68e28cfd16e6810a7c07a4af34d5a195821859af.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr54592.c17
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 951467b..4b58a9b 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 df8c101..c82da82 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 208a6d2..40efded 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 0000000..20dc11c
--- /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)" } } */