]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR target/70049
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Mar 2016 14:10:58 +0000 (14:10 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Mar 2016 14:10:58 +0000 (14:10 +0000)
* config/i386/sse.md (*vec_extract<mode>): Use %0 instead of %k0
if the operand is "m".

* gcc.target/i386/pr70049.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234085 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 2b0801a4ee4274804fda5c28be3ddba68f1dec30..c99bf6415b24e8c0129e011e55b677a8f185d95f 100644 (file)
@@ -1,3 +1,9 @@
+2016-03-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/70049
+       * config/i386/sse.md (*vec_extract<mode>): Use %0 instead of %k0
+       if the operand is "m".
+
 2016-03-09  Nathan Sidwell  <nathan@acm.org>
 
        * config/nvptx/nvptx.c (nvptx_option_override): Don't kill debug level.
index 3dd787c6abb21e02dce7fa86e70c5c79f8822b67..00e385aee2a37bdf3f79bdb768e8a98659c730a2 100644 (file)
          (parallel
            [(match_operand:SI 2 "const_0_to_<ssescalarnummask>_operand")])))]
   "TARGET_SSE2"
-  "%vpextr<ssemodesuffix>\t{%2, %1, %k0|%k0, %1, %2}"
+  "@
+   %vpextr<ssemodesuffix>\t{%2, %1, %k0|%k0, %1, %2}
+   %vpextr<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
   [(set_attr "isa" "*,sse4")
    (set_attr "type" "sselog1")
    (set_attr "prefix_data16" "1")
index 9ea56a7b9fc93cc1e07afd4491e08f5889d29d8b..131ed75c624e7fb0132aa6a857aaafc3cbca6840 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/70049
+       * gcc.target/i386/pr70049.c: New test.
+
 2016-03-09  Richard Biener  <rguenther@suse.de>
 
        PR c/70143
diff --git a/gcc/testsuite/gcc.target/i386/pr70049.c b/gcc/testsuite/gcc.target/i386/pr70049.c
new file mode 100644 (file)
index 0000000..a659bb3
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR target/70049 */
+/* { dg-do assemble { target avx } } */
+/* { dg-require-effective-target masm_intel } */
+/* { dg-options "-Og -mavx -masm=intel" } */
+
+typedef unsigned short A;
+typedef unsigned short B __attribute__ ((vector_size (32)));
+typedef unsigned int C;
+typedef unsigned int D __attribute__ ((vector_size (32)));
+typedef unsigned long long E;
+typedef unsigned long long F __attribute__ ((vector_size (32)));
+
+C
+foo(A a, C b, E c, F d, B e, D f, F g)
+{
+  b <<= 28;
+  e[1] += b;
+  d %= (F) { 0, f[4] } | 1;
+  return a + b + c + d[3] + e[1] + g[3];
+}