From: Petr Murzin Date: Mon, 25 Aug 2014 11:39:18 +0000 (+0000) Subject: i386.md (SWI1248_AVX512BW): New mode iterator. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3ebe61b87e6923eee258e26be7fcf00f05fbeff9;p=gcc.git i386.md (SWI1248_AVX512BW): New mode iterator. gcc/ * config/i386/i386.md (SWI1248_AVX512BW): New mode iterator. (*k): Add *kqi and *khi and use SWI1248_AVX512BW mode iterator. From-SVN: r214417 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a3c18972fe2..86617e09934 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-08-25 Petr Murzin + + * config/i386/i386.md (SWI1248_AVX512BW): New mode iterator. + (*k): Add *kqi and *khi and use + SWI1248_AVX512BW mode iterator. + 2014-08-25 Kaz Kojima PR target/62111 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 8e74eabb5ab..f56ad078c2a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -890,6 +890,10 @@ ;; All integer modes. (define_mode_iterator SWI1248x [QI HI SI DI]) +;; All integer modes with AVX512BW. +(define_mode_iterator SWI1248_AVX512BW + [QI HI (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")] + ;; All integer modes without QImode. (define_mode_iterator SWI248x [HI SI DI]) @@ -7543,37 +7547,17 @@ (any_logic:SWI1248x (match_dup 1) (match_dup 2)))]) -;; TODO: It seems to be possible to macroize following -;; 3 patterns. -(define_insn "*kqi" - [(set (match_operand:QI 0 "mask_reg_operand" "=k") - (any_logic:QI (match_operand:QI 1 "mask_reg_operand" "k") - (match_operand:QI 2 "mask_reg_operand" "k")))] - "TARGET_AVX512F" -{ - return TARGET_AVX512DQ ? "kb\t{%2, %1, %0|%0, %1, %2}" - : "kw\t{%2, %1, %0|%0, %1, %2}"; -} - [(set_attr "mode" "QI") - (set_attr "type" "msklog") - (set_attr "prefix" "vex")]) - -(define_insn "*khi" - [(set (match_operand:HI 0 "mask_reg_operand" "=k") - (any_logic:HI (match_operand:HI 1 "mask_reg_operand" "k") - (match_operand:HI 2 "mask_reg_operand" "k")))] - "TARGET_AVX512F" - "kw\t{%2, %1, %0|%0, %1, %2}"; - [(set_attr "mode" "HI") - (set_attr "type" "msklog") - (set_attr "prefix" "vex")]) - (define_insn "*k" - [(set (match_operand:SWI48x 0 "mask_reg_operand" "=k") - (any_logic:SWI48x (match_operand:SWI48x 1 "mask_reg_operand" "k") - (match_operand:SWI48x 2 "mask_reg_operand" "k")))] - "TARGET_AVX512BW" - "k\t{%2, %1, %0|%0, %1, %2}"; + [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand" "=k") + (any_logic:SWI1248_AVX512BW (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand" "k") + (match_operand:SWI1248_AVX512BW 2 "mask_reg_operand" "k")))] + "TARGET_AVX512F" + { + if (!TARGET_AVX512DQ && mode == QImode) + return "kw\t{%2, %1, %0|%0, %1, %2}"; + else + return "k\t{%2, %1, %0|%0, %1, %2}"; + } [(set_attr "mode" "") (set_attr "type" "msklog") (set_attr "prefix" "vex")])