OSDN Git Service

* config/i386/sse.md (*avx_vperm2f128<mode>3_nozero): Emit mask
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 8 Nov 2011 12:11:27 +0000 (12:11 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 8 Nov 2011 12:11:27 +0000 (12:11 +0000)
0x12 and 0x20 as vinsert[fi]128 instead of vperm2[fi]128.

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

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

index ed0dec9..47387a7 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 688b5be..eff3158 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}";
 }