From e0c9db9b3ef710f0177a40840e5dcff01fa931b3 Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 15 Mar 2012 23:45:45 +0000 Subject: [PATCH] PR target/52568 * config/i386/sse.md (UNSPEC_VPERMDF): Remove. (avx2_permv4df): Remove. (avx2_permv4di): Macroize into... (avx2_perm): ... this using VI8F_256 iterator. (avx2_permv4di_1): Macroize into... (avx2_perm_1): ... this using VI8F_256 iterator. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185446 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/i386/sse.md | 42 ++++++++++++++---------------------------- 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 + + PR target/52568 + * config/i386/sse.md (UNSPEC_VPERMDF): Remove. + (avx2_permv4df): Remove. + (avx2_permv4di): Macroize into... + (avx2_perm): ... this using VI8F_256 iterator. + (avx2_permv4di_1): Macroize into... + (avx2_perm_1): ... this using VI8F_256 iterator. + 2012-03-15 Ulrich Weigand * 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" + [(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_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_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\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "sselog") (set_attr "prefix" "vex") - (set_attr "mode" "OI")]) + (set_attr "mode" "")]) (define_insn "avx2_permv2ti" [(set (match_operand:V4DI 0 "register_operand" "=x") -- 2.7.4