aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-03-22 11:12:18 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-03-22 11:12:18 +0100
commitecf392360a548c5c510b491f284c439b05964b3a (patch)
treec20fcfbc4c3392cd24a1ac1eda53496a610c8a22
parent5c4ade6d44914428c8f71713f15c5697d27ed3c8 (diff)
downloadgcc-ecf392360a548c5c510b491f284c439b05964b3a.zip
gcc-ecf392360a548c5c510b491f284c439b05964b3a.tar.gz
gcc-ecf392360a548c5c510b491f284c439b05964b3a.tar.bz2
sse.md (<avx512>_fmadd_<mode>_mask<round_name>, [...]): Use <round_nimm_predicate> instead of nonimmediate_operand.
* 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. From-SVN: r269869
-rw-r--r--gcc/ChangeLog21
-rw-r--r--gcc/config/i386/sse.md60
2 files changed, 51 insertions, 30 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6601be5..4e4fde8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,26 @@
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.
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index dc588ec..e74521a 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -3958,8 +3958,8 @@
(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>"
@@ -3974,7 +3974,7 @@
(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")))]
@@ -4078,9 +4078,9 @@
(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"
@@ -4095,7 +4095,7 @@
(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)
@@ -4201,8 +4201,8 @@
(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>"
@@ -4218,7 +4218,7 @@
(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")))]
@@ -4328,9 +4328,9 @@
(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>"
@@ -4346,7 +4346,7 @@
(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)
@@ -4428,8 +4428,8 @@
(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")))]
@@ -4445,7 +4445,7 @@
(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)
@@ -4495,9 +4495,9 @@
(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")))]
@@ -4513,7 +4513,7 @@
(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)
@@ -4531,7 +4531,7 @@
[(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)
@@ -4542,7 +4542,7 @@
[(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>")))
@@ -4556,7 +4556,7 @@
(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)))]
@@ -4568,7 +4568,7 @@
(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)
@@ -4579,9 +4579,9 @@
[(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"
@@ -4595,10 +4595,10 @@
[(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"
@@ -4614,7 +4614,7 @@
(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)))]
@@ -4630,10 +4630,10 @@
(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"