aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKirill Yukhin <kirill.yukhin@intel.com>2015-09-23 07:08:56 +0000
committerKirill Yukhin <kyukhin@gcc.gnu.org>2015-09-23 07:08:56 +0000
commit40f1d2ab2662c2ed41707a2126ea0c5c9e028653 (patch)
treeef404d1d522ae3fd925e48cd4969845561f3afc2 /gcc
parent0c6126b47da9afbd99e5a353297b577ed2cdd09f (diff)
downloadgcc-40f1d2ab2662c2ed41707a2126ea0c5c9e028653.zip
gcc-40f1d2ab2662c2ed41707a2126ea0c5c9e028653.tar.gz
gcc-40f1d2ab2662c2ed41707a2126ea0c5c9e028653.tar.bz2
AVX-512. Add kshift[lr][bwdq]. Fix iterator.
gcc/ * config/i386/i386.md (define_code_attr mshift): New. (define_mode_iterator SWI1248_AVX512BW): Rename ... (SWI1248_AVX512BW): ... to this. Make QI enabled for TARGET_AVX512DQ only. (define_insn "*k<logic><mode>"): Use new iterator name. (define_insn "*<mshift><mode>3"): New. From-SVN: r228034
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.md24
2 files changed, 27 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3c79492..0cc98c7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2015-09-23 Kirill Yukhin <kirill.yukhin@intel.com>
+
+ * config/i386/i386.md (define_code_attr mshift): New.
+ (define_mode_iterator SWI1248_AVX512BW): Rename ...
+ (SWI1248_AVX512BW): ... to this. Make QI enabled for TARGET_AVX512DQ
+ only.
+ (define_insn "*k<logic><mode>"): Use new iterator name.
+ (define_insn "*<mshift><mode>3"): New.
+
2015-09-23 Mikhail Maltsev <maltsevm@gmail.com>
PR middle-end/67649
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 2f8cdb2..c0911d4 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -893,6 +893,9 @@
(define_code_attr shift [(ashift "sll") (lshiftrt "shr") (ashiftrt "sar")])
(define_code_attr vshift [(ashift "sll") (lshiftrt "srl") (ashiftrt "sra")])
+;; Mask variant left right mnemonics
+(define_code_attr mshift [(ashift "shiftl") (lshiftrt "shiftr")])
+
;; Mapping of rotate operators
(define_code_iterator any_rotate [rotate rotatert])
@@ -935,9 +938,9 @@
;; 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 with AVX512BW/DQ.
+(define_mode_iterator SWI1248_AVX512BWDQ
+ [(QI "TARGET_AVX512DQ") HI (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
;; All integer modes without QImode.
(define_mode_iterator SWI248x [HI SI DI])
@@ -7841,9 +7844,9 @@
(match_dup 2)))])
(define_insn "*k<logic><mode>"
- [(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")))]
+ [(set (match_operand:SWI1248_AVX512BWDQ 0 "mask_reg_operand" "=k")
+ (any_logic:SWI1248_AVX512BWDQ (match_operand:SWI1248_AVX512BWDQ 1 "mask_reg_operand" "k")
+ (match_operand:SWI1248_AVX512BWDQ 2 "mask_reg_operand" "k")))]
"TARGET_AVX512F"
{
if (!TARGET_AVX512DQ && <MODE>mode == QImode)
@@ -9358,6 +9361,15 @@
;; shift pair, instead using moves and sign extension for counts greater
;; than 31.
+(define_insn "*<mshift><mode>3"
+ [(set (match_operand:SWI1248_AVX512BWDQ 0 "register_operand" "=k")
+ (any_lshift:SWI1248_AVX512BWDQ (match_operand:SWI1248_AVX512BWDQ 1 "register_operand" "k")
+ (match_operand:QI 2 "immediate_operand" "i")))]
+ "TARGET_AVX512F"
+ "k<mshift><mskmodesuffix> %2, %1, %0|%0, %1, %2"
+ [(set_attr "type" "msklog")
+ (set_attr "prefix" "vex")])
+
(define_expand "ashl<mode>3"
[(set (match_operand:SDWIM 0 "<shift_operand>")
(ashift:SDWIM (match_operand:SDWIM 1 "<ashl_input_operand>")