2019-03-22 Jakub Jelinek <jakub@redhat.com>
+ * config/i386/sse.md (<avx512>_fmadd_<mode>_mask<round_name>,
+ <avx512>_fmadd_<mode>_mask3<round_name>,
+ <avx512>_fmsub_<mode>_mask<round_name>,
+ <avx512>_fmsub_<mode>_mask3<round_name>,
+ <avx512>_fnmadd_<mode>_mask<round_name>,
+ <avx512>_fnmadd_<mode>_mask3<round_name>,
+ <avx512>_fnmsub_<mode>_mask<round_name>,
+ <avx512>_fnmsub_<mode>_mask3<round_name>,
+ <avx512>_fmaddsub_<mode>_mask<round_name>,
+ <avx512>_fmaddsub_<mode>_mask3<round_name>,
+ <avx512>_fmsubadd_<mode>_mask<round_name>,
+ <avx512>_fmsubadd_<mode>_mask3<round_name>): Use
+ <round_nimm_predicate> instead of nonimmediate_operand.
+ (fmai_vmfmadd_<mode><round_name>, fmai_vmfmsub_<mode><round_name>,
+ fmai_vmfnmadd_<mode><round_name>, fmai_vmfnmsub_<mode><round_name>):
+ Use register_operand instead of <round_nimm_predicate> for the
+ operand that needs to match output.
+ (*fmai_fmadd_<mode>, *fmai_fmsub_<mode>,
+ *fmai_fnmadd_<mode><round_name>, *fmai_fnmsub_<mode><round_name>):
+ Likewise. Formatting fixes.
+
PR target/89784
* config/i386/i386.c (enum ix86_builtins): Remove
IX86_BUILTIN_VFMSUBSD3_MASK3 and IX86_BUILTIN_VFMSUBSS3_MASK3.
(vec_merge:VF_AVX512VL
(fma:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "0,0")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>,v")
- (match_operand:VF_AVX512VL 3 "nonimmediate_operand" "v,<round_constraint>"))
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
+ (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
"TARGET_AVX512F && <round_mode512bit_condition>"
(vec_merge:VF_AVX512VL
(fma:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "v")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
(match_operand:VF_AVX512VL 3 "register_operand" "0"))
(match_dup 3)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
(vec_merge:VF_AVX512VL
(fma:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "0,0")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>,v")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
(neg:VF_AVX512VL
- (match_operand:VF_AVX512VL 3 "nonimmediate_operand" "v,<round_constraint>")))
+ (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")))
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
"TARGET_AVX512F"
(vec_merge:VF_AVX512VL
(fma:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "v")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 3 "register_operand" "0")))
(match_dup 3)
(fma:VF_AVX512VL
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "0,0"))
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>,v")
- (match_operand:VF_AVX512VL 3 "nonimmediate_operand" "v,<round_constraint>"))
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
+ (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
"TARGET_AVX512F && <round_mode512bit_condition>"
(fma:VF_AVX512VL
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "v"))
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
(match_operand:VF_AVX512VL 3 "register_operand" "0"))
(match_dup 3)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
(fma:VF_AVX512VL
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "0,0"))
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>,v")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
(neg:VF_AVX512VL
- (match_operand:VF_AVX512VL 3 "nonimmediate_operand" "v,<round_constraint>")))
+ (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")))
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
"TARGET_AVX512F && <round_mode512bit_condition>"
(fma:VF_AVX512VL
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 1 "register_operand" "v"))
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 3 "register_operand" "0")))
(match_dup 3)
(vec_merge:VF_AVX512VL
(unspec:VF_AVX512VL
[(match_operand:VF_AVX512VL 1 "register_operand" "0,0")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>,v")
- (match_operand:VF_AVX512VL 3 "nonimmediate_operand" "v,<round_constraint>")]
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
+ (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")]
UNSPEC_FMADDSUB)
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
(vec_merge:VF_AVX512VL
(unspec:VF_AVX512VL
[(match_operand:VF_AVX512VL 1 "register_operand" "v")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
(match_operand:VF_AVX512VL 3 "register_operand" "0")]
UNSPEC_FMADDSUB)
(match_dup 3)
(vec_merge:VF_AVX512VL
(unspec:VF_AVX512VL
[(match_operand:VF_AVX512VL 1 "register_operand" "0,0")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>,v")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
(neg:VF_AVX512VL
- (match_operand:VF_AVX512VL 3 "nonimmediate_operand" "v,<round_constraint>"))]
+ (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))]
UNSPEC_FMADDSUB)
(match_dup 1)
(match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
(vec_merge:VF_AVX512VL
(unspec:VF_AVX512VL
[(match_operand:VF_AVX512VL 1 "register_operand" "v")
- (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "<round_constraint>")
+ (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
(neg:VF_AVX512VL
(match_operand:VF_AVX512VL 3 "register_operand" "0"))]
UNSPEC_FMADDSUB)
[(set (match_operand:VF_128 0 "register_operand")
(vec_merge:VF_128
(fma:VF_128
- (match_operand:VF_128 1 "<round_nimm_predicate>")
+ (match_operand:VF_128 1 "register_operand")
(match_operand:VF_128 2 "<round_nimm_predicate>")
(match_operand:VF_128 3 "<round_nimm_predicate>"))
(match_dup 1)
[(set (match_operand:VF_128 0 "register_operand")
(vec_merge:VF_128
(fma:VF_128
- (match_operand:VF_128 1 "<round_nimm_predicate>")
+ (match_operand:VF_128 1 "register_operand")
(match_operand:VF_128 2 "<round_nimm_predicate>")
(neg:VF_128
(match_operand:VF_128 3 "<round_nimm_predicate>")))
(fma:VF_128
(neg:VF_128
(match_operand:VF_128 2 "<round_nimm_predicate>"))
- (match_operand:VF_128 1 "<round_nimm_predicate>")
+ (match_operand:VF_128 1 "register_operand")
(match_operand:VF_128 3 "<round_nimm_predicate>"))
(match_dup 1)
(const_int 1)))]
(fma:VF_128
(neg:VF_128
(match_operand:VF_128 2 "<round_nimm_predicate>"))
- (match_operand:VF_128 1 "<round_nimm_predicate>")
+ (match_operand:VF_128 1 "register_operand")
(neg:VF_128
(match_operand:VF_128 3 "<round_nimm_predicate>")))
(match_dup 1)
[(set (match_operand:VF_128 0 "register_operand" "=v,v")
(vec_merge:VF_128
(fma:VF_128
- (match_operand:VF_128 1 "<round_nimm_predicate>" " 0, 0")
+ (match_operand:VF_128 1 "register_operand" "0,0")
(match_operand:VF_128 2 "<round_nimm_predicate>" "<round_constraint>, v")
- (match_operand:VF_128 3 "<round_nimm_predicate>" " v,<round_constraint>"))
+ (match_operand:VF_128 3 "<round_nimm_predicate>" "v,<round_constraint>"))
(match_dup 1)
(const_int 1)))]
"TARGET_FMA || TARGET_AVX512F"
[(set (match_operand:VF_128 0 "register_operand" "=v,v")
(vec_merge:VF_128
(fma:VF_128
- (match_operand:VF_128 1 "<round_nimm_predicate>" "0,0")
+ (match_operand:VF_128 1 "register_operand" "0,0")
(match_operand:VF_128 2 "<round_nimm_predicate>" "<round_constraint>,v")
(neg:VF_128
- (match_operand:VF_128 3 "<round_nimm_predicate>" " v,<round_constraint>")))
+ (match_operand:VF_128 3 "<round_nimm_predicate>" "v,<round_constraint>")))
(match_dup 1)
(const_int 1)))]
"TARGET_FMA || TARGET_AVX512F"
(fma:VF_128
(neg:VF_128
(match_operand:VF_128 2 "<round_nimm_predicate>" "<round_constraint>,v"))
- (match_operand:VF_128 1 "<round_nimm_predicate>" "0,0")
+ (match_operand:VF_128 1 "register_operand" "0,0")
(match_operand:VF_128 3 "<round_nimm_predicate>" "v,<round_constraint>"))
(match_dup 1)
(const_int 1)))]
(vec_merge:VF_128
(fma:VF_128
(neg:VF_128
- (match_operand:VF_128 2 "<round_nimm_predicate>" "<round_constraint>, v"))
- (match_operand:VF_128 1 "<round_nimm_predicate>" " 0, 0")
+ (match_operand:VF_128 2 "<round_nimm_predicate>" "<round_constraint>,v"))
+ (match_operand:VF_128 1 "register_operand" "0,0")
(neg:VF_128
- (match_operand:VF_128 3 "<round_nimm_predicate>" " v,<round_constraint>")))
+ (match_operand:VF_128 3 "<round_nimm_predicate>" "v,<round_constraint>")))
(match_dup 1)
(const_int 1)))]
"TARGET_FMA || TARGET_AVX512F"