aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-03-16 00:45:45 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-03-16 00:45:45 +0100
commitb82277395eb57ad0f2fd4d129e3497c74fb74fe0 (patch)
tree457ac73b9366599842658bcf2c0a32a28401f8db
parent192b716b1048d69edcef628c1cf5fdf2ad01ef12 (diff)
downloadgcc-b82277395eb57ad0f2fd4d129e3497c74fb74fe0.zip
gcc-b82277395eb57ad0f2fd4d129e3497c74fb74fe0.tar.gz
gcc-b82277395eb57ad0f2fd4d129e3497c74fb74fe0.tar.bz2
re PR target/52568 (suboptimal __builtin_shuffle on cycles with AVX)
PR target/52568 * config/i386/sse.md (UNSPEC_VPERMDF): Remove. (avx2_permv4df): Remove. (avx2_permv4di): Macroize into... (avx2_perm<mode>): ... this using VI8F_256 iterator. (avx2_permv4di_1): Macroize into... (avx2_perm<mode>_1): ... this using VI8F_256 iterator. From-SVN: r185446
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/sse.md42
2 files changed, 24 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32ba912..f262c9c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2012-03-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/52568
+ * config/i386/sse.md (UNSPEC_VPERMDF): Remove.
+ (avx2_permv4df): Remove.
+ (avx2_permv4di): Macroize into...
+ (avx2_perm<mode>): ... this using VI8F_256 iterator.
+ (avx2_permv4di_1): Macroize into...
+ (avx2_perm<mode>_1): ... this using VI8F_256 iterator.
+
2012-03-15 Ulrich Weigand <ulrich.weigand@linaro.org>
* combine.c (apply_distributive_law): Do not distribute SUBREG.
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index f5935f1..71e8e6d 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -80,7 +80,6 @@
;; For AVX2 support
UNSPEC_VPERMSI
- UNSPEC_VPERMDF
UNSPEC_VPERMSF
UNSPEC_VPERMTI
UNSPEC_GATHER
@@ -11889,19 +11888,6 @@
(set_attr "prefix" "vex")
(set_attr "mode" "OI")])
-(define_insn "avx2_permv4df"
- [(set (match_operand:V4DF 0 "register_operand" "=x")
- (unspec:V4DF
- [(match_operand:V4DF 1 "register_operand" "xm")
- (match_operand:SI 2 "const_0_to_255_operand" "n")]
- UNSPEC_VPERMDF))]
- "TARGET_AVX2"
- "vpermpd\t{%2, %1, %0|%0, %1, %2}"
- [(set_attr "type" "sselog")
- (set_attr "prefix_extra" "1")
- (set_attr "prefix" "vex")
- (set_attr "mode" "OI")])
-
(define_insn "avx2_permvarv8sf"
[(set (match_operand:V8SF 0 "register_operand" "=x")
(unspec:V8SF
@@ -11914,25 +11900,25 @@
(set_attr "prefix" "vex")
(set_attr "mode" "OI")])
-(define_expand "avx2_permv4di"
- [(match_operand:V4DI 0 "register_operand" "")
- (match_operand:V4DI 1 "nonimmediate_operand" "")
+(define_expand "avx2_perm<mode>"
+ [(match_operand:VI8F_256 0 "register_operand" "")
+ (match_operand:VI8F_256 1 "nonimmediate_operand" "")
(match_operand:SI 2 "const_0_to_255_operand" "")]
"TARGET_AVX2"
{
int mask = INTVAL (operands[2]);
- emit_insn (gen_avx2_permv4di_1 (operands[0], operands[1],
- GEN_INT ((mask >> 0) & 3),
- GEN_INT ((mask >> 2) & 3),
- GEN_INT ((mask >> 4) & 3),
- GEN_INT ((mask >> 6) & 3)));
+ emit_insn (gen_avx2_perm<mode>_1 (operands[0], operands[1],
+ GEN_INT ((mask >> 0) & 3),
+ GEN_INT ((mask >> 2) & 3),
+ GEN_INT ((mask >> 4) & 3),
+ GEN_INT ((mask >> 6) & 3)));
DONE;
})
-(define_insn "avx2_permv4di_1"
- [(set (match_operand:V4DI 0 "register_operand" "=x")
- (vec_select:V4DI
- (match_operand:V4DI 1 "nonimmediate_operand" "xm")
+(define_insn "avx2_perm<mode>_1"
+ [(set (match_operand:VI8F_256 0 "register_operand" "=x")
+ (vec_select:VI8F_256
+ (match_operand:VI8F_256 1 "nonimmediate_operand" "xm")
(parallel [(match_operand 2 "const_0_to_3_operand" "")
(match_operand 3 "const_0_to_3_operand" "")
(match_operand 4 "const_0_to_3_operand" "")
@@ -11945,11 +11931,11 @@
mask |= INTVAL (operands[4]) << 4;
mask |= INTVAL (operands[5]) << 6;
operands[2] = GEN_INT (mask);
- return "vpermq\t{%2, %1, %0|%0, %1, %2}";
+ return "vperm<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}";
}
[(set_attr "type" "sselog")
(set_attr "prefix" "vex")
- (set_attr "mode" "OI")])
+ (set_attr "mode" "<sseinsnmode>")])
(define_insn "avx2_permv2ti"
[(set (match_operand:V4DI 0 "register_operand" "=x")