summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-18 15:14:15 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-18 15:14:15 +0000
commit439c36e48026ec7dbbc2654aef4c228d6b020ec9 (patch)
treeb4681198fd6e41a70e213cdbc26037bd97912742 /gcc
parent735538a1ce4b3e1ba12f3c749ea708db0ed336cc (diff)
downloadgcc-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/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 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)" } } */