From: Alexander Ivchenko Date: Wed, 18 Dec 2013 07:45:29 +0000 (+0000) Subject: sse.md (avx512f_cmp3): Extend to support masking. X-Git-Tag: releases/gcc-4.9.0~2012 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a95ec51797e17c3967fdfa17eee1c9c03b904414;p=thirdparty%2Fgcc.git sse.md (avx512f_cmp3): Extend to support masking. * config/i386/sse.md (avx512f_cmp3): Extend to support masking. (avx512f_ucmp3): Ditto. (avx512f_eq3): Ditto. (avx512f_gt3): Ditto. (avx512f_testm3): Ditto. (avx512f_testnm3): Ditto. * config/i386/subst.md (SUBST_S): New. (mask_scalar_merge_name): Ditto. (mask_scalar_merge_operand3): Ditto. (mask_scalar_merge_operand4): Ditto. (mask_scalar_merge): Ditto. Co-Authored-By: Andrey Turetskiy Co-Authored-By: Anna Tikhonova Co-Authored-By: Ilya Tocar Co-Authored-By: Ilya Verbin Co-Authored-By: Kirill Yukhin Co-Authored-By: Maxim Kuznetsov Co-Authored-By: Michael Zolotukhin Co-Authored-By: Sergey Lega From-SVN: r206080 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2441b102b87b..8830abc53d3e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,25 @@ +2013-11-13 Alexander Ivchenko + Maxim Kuznetsov + Sergey Lega + Anna Tikhonova + Ilya Tocar + Andrey Turetskiy + Ilya Verbin + Kirill Yukhin + Michael Zolotukhin + + * config/i386/sse.md (avx512f_cmp3): Extend to support masking. + (avx512f_ucmp3): Ditto. + (avx512f_eq3): Ditto. + (avx512f_gt3): Ditto. + (avx512f_testm3): Ditto. + (avx512f_testnm3): Ditto. + * config/i386/subst.md (SUBST_S): New. + (mask_scalar_merge_name): Ditto. + (mask_scalar_merge_operand3): Ditto. + (mask_scalar_merge_operand4): Ditto. + (mask_scalar_merge): Ditto. + 2013-12-17 Jan Hubicka PR middle-end/35535 diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 30895c67c092..46842d295519 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -2099,7 +2099,7 @@ [(V16SF "const_0_to_31_operand") (V8DF "const_0_to_31_operand") (V16SI "const_0_to_7_operand") (V8DI "const_0_to_7_operand")]) -(define_insn "avx512f_cmp3" +(define_insn "avx512f_cmp3" [(set (match_operand: 0 "register_operand" "=k") (unspec: [(match_operand:VI48F_512 1 "register_operand" "v") @@ -2107,13 +2107,13 @@ (match_operand:SI 3 "" "n")] UNSPEC_PCMP))] "TARGET_AVX512F" - "vcmp\t{%3, %2, %1, %0|%0, %1, %2, %3}" + "vcmp\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") (set_attr "mode" "")]) -(define_insn "avx512f_ucmp3" +(define_insn "avx512f_ucmp3" [(set (match_operand: 0 "register_operand" "=k") (unspec: [(match_operand:VI48_512 1 "register_operand" "v") @@ -2121,7 +2121,7 @@ (match_operand:SI 3 "const_0_to_7_operand" "n")] UNSPEC_UNSIGNED_PCMP))] "TARGET_AVX512F" - "vpcmpu\t{%3, %2, %1, %0|%0, %1, %2, %3}" + "vpcmpu\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") @@ -8360,7 +8360,7 @@ (set_attr "prefix" "vex") (set_attr "mode" "OI")]) -(define_expand "avx512f_eq3" +(define_expand "avx512f_eq3" [(set (match_operand: 0 "register_operand") (unspec: [(match_operand:VI48_512 1 "register_operand") @@ -8369,14 +8369,14 @@ "TARGET_AVX512F" "ix86_fixup_binary_operands_no_copy (EQ, mode, operands);") -(define_insn "avx512f_eq3_1" +(define_insn "avx512f_eq3_1" [(set (match_operand: 0 "register_operand" "=k") (unspec: [(match_operand:VI48_512 1 "register_operand" "%v") (match_operand:VI48_512 2 "nonimmediate_operand" "vm")] UNSPEC_MASKED_EQ))] "TARGET_AVX512F && ix86_binary_operator_ok (EQ, mode, operands)" - "vpcmpeq\t{%2, %1, %0|%0, %1, %2}" + "vpcmpeq\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "ssecmp") (set_attr "prefix_extra" "1") (set_attr "prefix" "evex") @@ -8456,13 +8456,13 @@ (set_attr "prefix" "vex") (set_attr "mode" "OI")]) -(define_insn "avx512f_gt3" +(define_insn "avx512f_gt3" [(set (match_operand: 0 "register_operand" "=k") (unspec: [(match_operand:VI48_512 1 "register_operand" "v") (match_operand:VI48_512 2 "nonimmediate_operand" "vm")] UNSPEC_MASKED_GT))] "TARGET_AVX512F" - "vpcmpgt\t{%2, %1, %0|%0, %1, %2}" + "vpcmpgt\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "ssecmp") (set_attr "prefix_extra" "1") (set_attr "prefix" "evex") @@ -8856,25 +8856,25 @@ ] (const_string "")))]) -(define_insn "avx512f_testm3" +(define_insn "avx512f_testm3" [(set (match_operand: 0 "register_operand" "=k") (unspec: [(match_operand:VI48_512 1 "register_operand" "v") (match_operand:VI48_512 2 "nonimmediate_operand" "vm")] UNSPEC_TESTM))] "TARGET_AVX512F" - "vptestm\t{%2, %1, %0|%0, %1, %2}" + "vptestm\t{%2, %1, %0|%0, %1, %2}" [(set_attr "prefix" "evex") (set_attr "mode" "")]) -(define_insn "avx512f_testnm3" +(define_insn "avx512f_testnm3" [(set (match_operand: 0 "register_operand" "=k") (unspec: [(match_operand:VI48_512 1 "register_operand" "v") (match_operand:VI48_512 2 "nonimmediate_operand" "vm")] UNSPEC_TESTNM))] "TARGET_AVX512CD" - "%vptestnm\t{%2, %1, %0|%0, %1, %2}" + "%vptestnm\t{%2, %1, %0|%0, %1, %2}" [(set_attr "prefix" "evex") (set_attr "mode" "")]) diff --git a/gcc/config/i386/subst.md b/gcc/config/i386/subst.md index 6b45d058f225..0fdef6d77cc8 100644 --- a/gcc/config/i386/subst.md +++ b/gcc/config/i386/subst.md @@ -27,6 +27,9 @@ V16SF V8SF V4SF V8DF V4DF V2DF]) +(define_mode_iterator SUBST_S + [QI HI SI DI]) + (define_subst_attr "mask_name" "mask" "" "_mask") (define_subst_attr "mask_applied" "mask" "false" "true") (define_subst_attr "mask_operand2" "mask" "" "%{%3%}%N2") @@ -54,3 +57,16 @@ (match_dup 1) (match_operand:SUBST_V 2 "vector_move_operand" "0C") (match_operand: 3 "register_operand" "k")))]) + +(define_subst_attr "mask_scalar_merge_name" "mask_scalar_merge" "" "_mask") +(define_subst_attr "mask_scalar_merge_operand3" "mask_scalar_merge" "" "%{%3%}") +(define_subst_attr "mask_scalar_merge_operand4" "mask_scalar_merge" "" "%{%4%}") + +(define_subst "mask_scalar_merge" + [(set (match_operand:SUBST_S 0) + (match_operand:SUBST_S 1))] + "TARGET_AVX512F" + [(set (match_dup 0) + (and:SUBST_S + (match_dup 1) + (match_operand:SUBST_S 3 "register_operand" "k")))])