]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
better m128i constant materialization
authorXinliang David Li <davidxl@google.com>
Wed, 1 Apr 2009 17:17:18 +0000 (17:17 +0000)
committerXinliang David Li <davidxl@gcc.gnu.org>
Wed, 1 Apr 2009 17:17:18 +0000 (17:17 +0000)
From-SVN: r145418

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/all_one_m128i.c [new file with mode: 0644]

index d90743413c171901f674c82744f1d7ac1b60f77b..7c8880f46ef4e54fe45fd5a0ce4cc5de559c71e2 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-1  Xinliang David Li  <davidxl@google.com>
+
+       * config/i386/i386.c (legitimate_constant_p): Recognize
+       all one vector constant.
+
 2009-04-01     Jan-Benedict Glaw <jbglaw@jbglaw-dev.homezone.telefonica.de>
 
        * gcc/config/vax/vax.c: Add #includes to silence warnings.
index 09a6597b89451c4d2e875b6b92caa1bdb5d89297..8c89823b535afbfbc0a00a73eeae0e50decf558f 100644 (file)
@@ -8951,9 +8951,8 @@ legitimate_constant_p (rtx x)
       break;
 
     case CONST_VECTOR:
-      if (x == CONST0_RTX (GET_MODE (x)))
-       return true;
-      return false;
+      if (!standard_sse_constant_p (x))
+       return false;
 
     default:
       break;
index 3723cb7ef23aeeff2c27bed35bf10559b27baf86..74daab6b07d8fa34430baa8aabe17e2a8b2da74d 100644 (file)
@@ -1,3 +1,7 @@
+2009-04-01  Xinliang David Li  <davidxl@google.com>
+
+       * gcc.target/i386/all_one_m128i.c: New test.
+
 2009-04-01  Janis Johnson  <janis187@us.ibm.com>
 
        PR c/33466
diff --git a/gcc/testsuite/gcc.target/i386/all_one_m128i.c b/gcc/testsuite/gcc.target/i386/all_one_m128i.c
new file mode 100644 (file)
index 0000000..fa973e4
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2" } */
+
+typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+__m128i foo ()
+{
+  __m128i minus_1 = (__m128i) (__v4si) { -1, -1, -1, -1 };
+
+  return minus_1;
+}
+
+/* { dg-final { scan-assembler "pcmpeqd" } } */