summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-11-08 13:11:27 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-11-08 13:11:27 +0100
commit5d54daace2f9b6b65bbed0792db145a6bdf3f1d9 (patch)
treead753300ffe08a7c328e3ca24c29578f895f5663
parent190c22366d05e909c07547ff48077ac9058c8f26 (diff)
downloadgcc-5d54daace2f9b6b65bbed0792db145a6bdf3f1d9.tar.gz
sse.md (*avx_vperm2f128<mode>3_nozero): Emit mask 0x12 and 0x20 as vinsert[fi]128 instead of vperm2[fi]128.
* 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
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/i386/sse.md4
2 files changed, 7 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ed0dec9c6f6..47387a70f21 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 688b5be9648..eff3158cb28 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -12065,6 +12065,10 @@
&& 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}";
}