]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sse.md (*avx_vperm2f128<mode>3_nozero): Emit mask 0x12 and 0x20 as vinsert[fi]128...
authorJakub Jelinek <jakub@redhat.com>
Tue, 8 Nov 2011 12:11:27 +0000 (13:11 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 8 Nov 2011 12:11:27 +0000 (13:11 +0100)
* config/i386/sse.md (*avx_vperm2f128<mode>3_nozero): Emit mask
0x12 and 0x20 as vinsert[fi]128 instead of vperm2[fi]128.

From-SVN: r181158

gcc/ChangeLog
gcc/config/i386/sse.md

index ed0dec9c6f6021524969b01b416ed1f9841edc92..47387a70f2131745445a595eea969d386f74c7d9 100644 (file)
@@ -1,5 +1,8 @@
 2011-11-08  Jakub Jelinek  <jakub@redhat.com>
 
+       * config/i386/sse.md (*avx_vperm2f128<mode>3_nozero): Emit mask
+       0x12 and 0x20 as vinsert[fi]128 instead of vperm2[fi]128.
+
        * tree-vect-stmts.c (vectorizable_call): Add SLP_NODE argument.
        Handle vectorization of SLP calls.
        (vect_analyze_stmt): Adjust caller, add call to it for SLP too.
index 688b5be9648aab45cbcf9cbef833f0d7bc88180e..eff3158cb286d568bf0da6e2c3d981bc8fe9d95e 100644 (file)
    && avx_vperm2f128_parallel (operands[3], <MODE>mode)"
 {
   int mask = avx_vperm2f128_parallel (operands[3], <MODE>mode) - 1;
+  if (mask == 0x12)
+    return "vinsert<i128>\t{$0, %x2, %1, %0|%0, %1, %x2, 0}";
+  if (mask == 0x20)
+    return "vinsert<i128>\t{$1, %x2, %1, %0|%0, %1, %x2, 1}";
   operands[3] = GEN_INT (mask);
   return "vperm2<i128>\t{%3, %2, %1, %0|%0, %1, %2, %3}";
 }