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 d907434..7c8880f 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 09a6597..8c89823 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 3723cb7..74daab6 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" } } */