re PR target/83604 (ICE in copy_to_mode_reg, at explow.c:630)

PR target/83604
	* config/i386/sse.md (VI248_VLBW): Rename to ...
	(VI248_AVX512VL): ... this.  Don't guard V32HI with TARGET_AVX512BW.
	(vpshrd_<mode><mask_name>, vpshld_<mode><mask_name>,
	vpshrdv_<mode>, vpshrdv_<mode>_mask, vpshrdv_<mode>_maskz,
	vpshrdv_<mode>_maskz_1, vpshldv_<mode>, vpshldv_<mode>_mask,
	vpshldv_<mode>_maskz, vpshldv_<mode>_maskz_1): Use VI248_AVX512VL
	mode iterator instead of VI248_VLBW.

	* gcc.target/i386/pr83604.c: New test.

From-SVN: r256280
This commit is contained in:
Jakub Jelinek 2018-01-05 17:38:17 +01:00 committed by Jakub Jelinek
parent 3b2a6901f9
commit d33e32a723
4 changed files with 81 additions and 54 deletions

View File

@ -1,3 +1,14 @@
2018-01-05 Jakub Jelinek <jakub@redhat.com>
PR target/83604
* config/i386/sse.md (VI248_VLBW): Rename to ...
(VI248_AVX512VL): ... this. Don't guard V32HI with TARGET_AVX512BW.
(vpshrd_<mode><mask_name>, vpshld_<mode><mask_name>,
vpshrdv_<mode>, vpshrdv_<mode>_mask, vpshrdv_<mode>_maskz,
vpshrdv_<mode>_maskz_1, vpshldv_<mode>, vpshldv_<mode>_mask,
vpshldv_<mode>_maskz, vpshldv_<mode>_maskz_1): Use VI248_AVX512VL
mode iterator instead of VI248_VLBW.
2018-01-05 Jan Hubicka <hubicka@ucw.cz>
* ipa-fnsummary.c (record_modified_bb_info): Add OP.

View File

@ -448,8 +448,8 @@
(define_mode_iterator VI2_AVX2_AVX512BW
[(V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX2") V8HI])
(define_mode_iterator VI248_VLBW
[(V32HI "TARGET_AVX512BW") V16SI V8DI
(define_mode_iterator VI248_AVX512VL
[V32HI V16SI V8DI
(V16HI "TARGET_AVX512VL") (V8SI "TARGET_AVX512VL")
(V4DI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")
(V4SI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
@ -20116,10 +20116,10 @@
(set_attr "mode" "<sseinsnmode>")])
(define_insn "vpshrd_<mode><mask_name>"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "v")
(match_operand:VI248_VLBW 2 "nonimmediate_operand" "vm")
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "v")
(match_operand:VI248_AVX512VL 2 "nonimmediate_operand" "vm")
(match_operand:SI 3 "const_0_to_255_operand" "n")]
UNSPEC_VPSHRD))]
"TARGET_AVX512VBMI2"
@ -20127,10 +20127,10 @@
[(set_attr ("prefix") ("evex"))])
(define_insn "vpshld_<mode><mask_name>"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "v")
(match_operand:VI248_VLBW 2 "nonimmediate_operand" "vm")
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "v")
(match_operand:VI248_AVX512VL 2 "nonimmediate_operand" "vm")
(match_operand:SI 3 "const_0_to_255_operand" "n")]
UNSPEC_VPSHLD))]
"TARGET_AVX512VBMI2"
@ -20138,11 +20138,11 @@
[(set_attr ("prefix") ("evex"))])
(define_insn "vpshrdv_<mode>"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "0")
(match_operand:VI248_VLBW 2 "register_operand" "v")
(match_operand:VI248_VLBW 3 "nonimmediate_operand" "vm")]
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "0")
(match_operand:VI248_AVX512VL 2 "register_operand" "v")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand" "vm")]
UNSPEC_VPSHRDV))]
"TARGET_AVX512VBMI2"
"vpshrdv<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3 }"
@ -20150,12 +20150,12 @@
(set_attr "mode" "<sseinsnmode>")])
(define_insn "vpshrdv_<mode>_mask"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(vec_merge:VI248_VLBW
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "0")
(match_operand:VI248_VLBW 2 "register_operand" "v")
(match_operand:VI248_VLBW 3 "nonimmediate_operand" "vm")]
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(vec_merge:VI248_AVX512VL
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "0")
(match_operand:VI248_AVX512VL 2 "register_operand" "v")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand" "vm")]
UNSPEC_VPSHRDV)
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
@ -20165,10 +20165,10 @@
(set_attr "mode" "<sseinsnmode>")])
(define_expand "vpshrdv_<mode>_maskz"
[(match_operand:VI248_VLBW 0 "register_operand")
(match_operand:VI248_VLBW 1 "register_operand")
(match_operand:VI248_VLBW 2 "register_operand")
(match_operand:VI248_VLBW 3 "nonimmediate_operand")
[(match_operand:VI248_AVX512VL 0 "register_operand")
(match_operand:VI248_AVX512VL 1 "register_operand")
(match_operand:VI248_AVX512VL 2 "register_operand")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand")
(match_operand:<avx512fmaskmode> 4 "register_operand")]
"TARGET_AVX512VBMI2"
{
@ -20180,14 +20180,14 @@
})
(define_insn "vpshrdv_<mode>_maskz_1"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(vec_merge:VI248_VLBW
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "0")
(match_operand:VI248_VLBW 2 "register_operand" "v")
(match_operand:VI248_VLBW 3 "nonimmediate_operand" "vm")]
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(vec_merge:VI248_AVX512VL
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "0")
(match_operand:VI248_AVX512VL 2 "register_operand" "v")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand" "vm")]
UNSPEC_VPSHRDV)
(match_operand:VI248_VLBW 4 "const0_operand" "C")
(match_operand:VI248_AVX512VL 4 "const0_operand" "C")
(match_operand:<avx512fmaskmode> 5 "register_operand" "Yk")))]
"TARGET_AVX512VBMI2"
"vpshrdv<ssemodesuffix>\t{%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %2, %3 }"
@ -20195,11 +20195,11 @@
(set_attr "mode" "<sseinsnmode>")])
(define_insn "vpshldv_<mode>"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "0")
(match_operand:VI248_VLBW 2 "register_operand" "v")
(match_operand:VI248_VLBW 3 "nonimmediate_operand" "vm")]
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "0")
(match_operand:VI248_AVX512VL 2 "register_operand" "v")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand" "vm")]
UNSPEC_VPSHLDV))]
"TARGET_AVX512VBMI2"
"vpshldv<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3 }"
@ -20207,12 +20207,12 @@
(set_attr "mode" "<sseinsnmode>")])
(define_insn "vpshldv_<mode>_mask"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(vec_merge:VI248_VLBW
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "0")
(match_operand:VI248_VLBW 2 "register_operand" "v")
(match_operand:VI248_VLBW 3 "nonimmediate_operand" "vm")]
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(vec_merge:VI248_AVX512VL
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "0")
(match_operand:VI248_AVX512VL 2 "register_operand" "v")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand" "vm")]
UNSPEC_VPSHLDV)
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
@ -20222,10 +20222,10 @@
(set_attr "mode" "<sseinsnmode>")])
(define_expand "vpshldv_<mode>_maskz"
[(match_operand:VI248_VLBW 0 "register_operand")
(match_operand:VI248_VLBW 1 "register_operand")
(match_operand:VI248_VLBW 2 "register_operand")
(match_operand:VI248_VLBW 3 "nonimmediate_operand")
[(match_operand:VI248_AVX512VL 0 "register_operand")
(match_operand:VI248_AVX512VL 1 "register_operand")
(match_operand:VI248_AVX512VL 2 "register_operand")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand")
(match_operand:<avx512fmaskmode> 4 "register_operand")]
"TARGET_AVX512VBMI2"
{
@ -20237,14 +20237,14 @@
})
(define_insn "vpshldv_<mode>_maskz_1"
[(set (match_operand:VI248_VLBW 0 "register_operand" "=v")
(vec_merge:VI248_VLBW
(unspec:VI248_VLBW
[(match_operand:VI248_VLBW 1 "register_operand" "0")
(match_operand:VI248_VLBW 2 "register_operand" "v")
(match_operand:VI248_VLBW 3 "nonimmediate_operand" "vm")]
[(set (match_operand:VI248_AVX512VL 0 "register_operand" "=v")
(vec_merge:VI248_AVX512VL
(unspec:VI248_AVX512VL
[(match_operand:VI248_AVX512VL 1 "register_operand" "0")
(match_operand:VI248_AVX512VL 2 "register_operand" "v")
(match_operand:VI248_AVX512VL 3 "nonimmediate_operand" "vm")]
UNSPEC_VPSHLDV)
(match_operand:VI248_VLBW 4 "const0_operand" "C")
(match_operand:VI248_AVX512VL 4 "const0_operand" "C")
(match_operand:<avx512fmaskmode> 5 "register_operand" "Yk")))]
"TARGET_AVX512VBMI2"
"vpshldv<ssemodesuffix>\t{%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %2, %3 }"

View File

@ -1,3 +1,8 @@
2018-01-05 Jakub Jelinek <jakub@redhat.com>
PR target/83604
* gcc.target/i386/pr83604.c: New test.
2018-01-05 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.dg/vect/vect-align-4.c: New test.

View File

@ -0,0 +1,11 @@
/* PR target/83604 */
/* { dg-do compile } */
/* { dg-options "-O2 -mno-avx" } */
typedef short V __attribute__((__vector_size__(64)));
__attribute__((target ("avx512vbmi2"))) V
foo (V x, V y, V z)
{
return __builtin_ia32_vpshrdv_v32hi (x, y, z);
}