From 3bcf35e76f21b684f7f82ffcbe17ab18bc421f6c Mon Sep 17 00:00:00 2001 From: Alexander Ivchenko Date: Mon, 18 Aug 2014 10:59:46 +0000 Subject: 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 --- gcc/ChangeLog | 23 ++++++++++++++++ gcc/config/i386/sse.md | 71 +++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 88 insertions(+), 6 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 687e4b6..5076b9d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -7,6 +7,29 @@ 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 + Ilya Tocar + Andrey Turetskiy + Ilya Verbin + Kirill Yukhin + Michael Zolotukhin + * config/i386/i386.md (define_insn "*movoi_internal_avx"): Add evex version. (define_insn "*movti_internal"): Ditto. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 80dbf17..141c431 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 -- cgit v1.1