From: Alexander Ivchenko Date: Mon, 18 Aug 2014 10:59:46 +0000 (+0000) Subject: sse.md (define_mode_iterator VF2_AVX512VL): New. X-Git-Tag: releases/gcc-5.1.0~5420 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3bcf35e76f21b684f7f82ffcbe17ab18bc421f6c;p=thirdparty%2Fgcc.git sse.md (define_mode_iterator VF2_AVX512VL): New. gcc/ * config/i386/sse.md (define_mode_iterator VF2_AVX512VL): New. (define_mode_attr sseintvecmode2): New. (define_insn "ufix_truncv2dfv2si2"): Add masking. (define_insn "fix_truncv4dfv4si2"): New. (define_insn "ufix_truncv4dfv4si2"): Ditto. (define_insn "fix_trunc2"): Ditto. (define_insn "fix_notrunc2"): Ditto. (define_insn "ufix_notrunc2"): 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 From-SVN: r214090 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 687e4b64094a..5076b9d240bb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2014-08-18 Alexander Ivchenko + Maxim Kuznetsov + Anna Tikhonova + Ilya Tocar + Andrey Turetskiy + Ilya Verbin + Kirill Yukhin + Michael Zolotukhin + + * config/i386/sse.md + (define_mode_iterator VF2_AVX512VL): New. + (define_mode_attr sseintvecmode2): New. + (define_insn "ufix_truncv2dfv2si2"): Add masking. + (define_insn "fix_truncv4dfv4si2"): New. + (define_insn "ufix_truncv4dfv4si2"): Ditto. + (define_insn + "fix_trunc2"): + Ditto. + (define_insn "fix_notrunc2"): + Ditto. + (define_insn "ufix_notrunc2"): + Ditto. + 2014-08-18 Alexander Ivchenko Maxim Kuznetsov Anna Tikhonova diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 80dbf1775c43..141c4319b7d0 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -228,6 +228,9 @@ (define_mode_iterator VF_512 [V16SF V8DF]) +(define_mode_iterator VF2_AVX512VL + [V8DF (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")]) + ;; All vector integer modes (define_mode_iterator VI [(V16SI "TARGET_AVX512F") (V8DI "TARGET_AVX512F") @@ -523,6 +526,10 @@ (V32HI "V32HI") (V64QI "V64QI") (V32QI "V32QI") (V16QI "V16QI")]) +(define_mode_attr sseintvecmode2 + [(V8DF "XI") (V4DF "OI") (V2DF "TI") + (V8SF "OI") (V4SF "TI")]) + (define_mode_attr sseintvecmodelower [(V16SF "v16si") (V8DF "v8di") (V8SF "v8si") (V4DF "v4di") @@ -4235,15 +4242,67 @@ (set_attr "prefix" "evex") (set_attr "mode" "OI")]) -(define_insn "fix_truncv4dfv4si2" - [(set (match_operand:V4SI 0 "register_operand" "=x") - (fix:V4SI (match_operand:V4DF 1 "nonimmediate_operand" "xm")))] - "TARGET_AVX" - "vcvttpd2dq{y}\t{%1, %0|%0, %1}" +(define_insn "ufix_truncv2dfv2si2" + [(set (match_operand:V4SI 0 "register_operand" "=v") + (vec_concat:V4SI + (unsigned_fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "vm")) + (const_vector:V2SI [(const_int 0) (const_int 0)])))] + "TARGET_AVX512VL" + "vcvttpd2udq{x}\t{%1, %0|%0, %1}" [(set_attr "type" "ssecvt") - (set_attr "prefix" "vex") + (set_attr "prefix" "evex") + (set_attr "mode" "TI")]) + +(define_insn "fix_truncv4dfv4si2" + [(set (match_operand:V4SI 0 "register_operand" "=v") + (fix:V4SI (match_operand:V4DF 1 "nonimmediate_operand" "vm")))] + "TARGET_AVX || (TARGET_AVX512VL && TARGET_AVX512F)" + "vcvttpd2dq{y}\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "prefix" "maybe_evex") + (set_attr "mode" "OI")]) + +(define_insn "ufix_truncv4dfv4si2" + [(set (match_operand:V4SI 0 "register_operand" "=v") + (unsigned_fix:V4SI (match_operand:V4DF 1 "nonimmediate_operand" "vm")))] + "TARGET_AVX512VL && TARGET_AVX512F" + "vcvttpd2udq{y}\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "prefix" "maybe_evex") (set_attr "mode" "OI")]) +(define_insn "fix_trunc2" + [(set (match_operand: 0 "register_operand" "=v") + (any_fix: + (match_operand:VF2_AVX512VL 1 "" "")))] + "TARGET_AVX512DQ && " + "vcvttpd2qq\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "prefix" "evex") + (set_attr "mode" "")]) + +(define_insn "fix_notrunc2" + [(set (match_operand: 0 "register_operand" "=v") + (unspec: + [(match_operand:VF2_AVX512VL 1 "" "")] + UNSPEC_FIX_NOTRUNC))] + "TARGET_AVX512DQ && " + "vcvtpd2qq\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "prefix" "evex") + (set_attr "mode" "")]) + +(define_insn "ufix_notrunc2" + [(set (match_operand: 0 "register_operand" "=v") + (unspec: + [(match_operand:VF2_AVX512VL 1 "nonimmediate_operand" "")] + UNSPEC_UNSIGNED_FIX_NOTRUNC))] + "TARGET_AVX512DQ && " + "vcvtpd2uqq\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "prefix" "evex") + (set_attr "mode" "")]) + (define_expand "avx_cvttpd2dq256_2" [(set (match_operand:V8SI 0 "register_operand") (vec_concat:V8SI