* [PATCH] [i386] Enable avx512 embedde broadcast for vpternlog.
@ 2021-08-24 10:25 liuhongt
2021-08-24 10:40 ` Hongtao Liu
0 siblings, 1 reply; 2+ messages in thread
From: liuhongt @ 2021-08-24 10:25 UTC (permalink / raw)
To: gcc-patches
gcc/ChangeLog:
PR target/101989
* config/i386/sse.md (<avx512>_vternlog<mode><sd_maskz_name>):
Enable avx512 embedded broadcast.
(*<avx512>_vternlog<mode>_all): Ditto.
(<avx512>_vternlog<mode>_mask): Ditto.
gcc/testsuite/ChangeLog:
PR target/101989
* gcc.target/i386/pr101989-broadcast-1.c: New test.
---
gcc/config/i386/sse.md | 6 ++--
.../gcc.target/i386/pr101989-broadcast-1.c | 31 +++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 40ba4bfab46..3d24ad48cdf 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -10034,7 +10034,7 @@ (define_insn "<avx512>_vternlog<mode><sd_maskz_name>"
(unspec:VI48_AVX512VL
[(match_operand:VI48_AVX512VL 1 "register_operand" "0")
(match_operand:VI48_AVX512VL 2 "register_operand" "v")
- (match_operand:VI48_AVX512VL 3 "nonimmediate_operand" "vm")
+ (match_operand:VI48_AVX512VL 3 "bcst_vector_operand" "vmBr")
(match_operand:SI 4 "const_0_to_255_operand")]
UNSPEC_VTERNLOG))]
"TARGET_AVX512F"
@@ -10048,7 +10048,7 @@ (define_insn "*<avx512>_vternlog<mode>_all"
(unspec:V
[(match_operand:V 1 "register_operand" "0")
(match_operand:V 2 "register_operand" "v")
- (match_operand:V 3 "nonimmediate_operand" "vm")
+ (match_operand:V 3 "bcst_vector_operand" "vmBr")
(match_operand:SI 4 "const_0_to_255_operand")]
UNSPEC_VTERNLOG))]
"TARGET_AVX512F"
@@ -10281,7 +10281,7 @@ (define_insn "<avx512>_vternlog<mode>_mask"
(unspec:VI48_AVX512VL
[(match_operand:VI48_AVX512VL 1 "register_operand" "0")
(match_operand:VI48_AVX512VL 2 "register_operand" "v")
- (match_operand:VI48_AVX512VL 3 "nonimmediate_operand" "vm")
+ (match_operand:VI48_AVX512VL 3 "bcst_vector_operand" "vmBr")
(match_operand:SI 4 "const_0_to_255_operand")]
UNSPEC_VTERNLOG)
(match_dup 1)
diff --git a/gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c b/gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
new file mode 100644
index 00000000000..d03d192915f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx512vl" } */
+/* { dg-final { scan-assembler-times "vpternlog" 4 } } */
+/* { dg-final { scan-assembler-times "\\\{1to4\\\}" 4 } } */
+#include<immintrin.h>
+extern long long C;
+__m256d
+copysign2_pd(__m256d from, __m256d to) {
+ __m256i a = _mm256_castpd_si256(from);
+ __m256d avx_signbit = _mm256_castsi256_pd(_mm256_slli_epi64(_mm256_cmpeq_epi64(a, a), 63));
+ /* (avx_signbit & from) | (~avx_signbit & to) */
+ return _mm256_or_pd(_mm256_and_pd(avx_signbit, from), _mm256_andnot_pd(avx_signbit, to));
+}
+
+__m256i
+mask_pternlog (__m256i A, __m256i B, __mmask8 U)
+{
+ return _mm256_mask_ternarylogic_epi64 (A, U, B, _mm256_set1_epi64x (C) ,202);
+}
+
+__m256i
+maskz_pternlog (__m256i A, __m256i B, __mmask8 U)
+{
+ return _mm256_maskz_ternarylogic_epi64 (U, A, B, _mm256_set1_epi64x (C) ,202);
+}
+
+__m256i
+none_pternlog (__m256i A, __m256i B)
+{
+ return _mm256_ternarylogic_epi64 (A, B, _mm256_set1_epi64x (C) ,202);
+}
--
2.27.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] [i386] Enable avx512 embedde broadcast for vpternlog.
2021-08-24 10:25 [PATCH] [i386] Enable avx512 embedde broadcast for vpternlog liuhongt
@ 2021-08-24 10:40 ` Hongtao Liu
0 siblings, 0 replies; 2+ messages in thread
From: Hongtao Liu @ 2021-08-24 10:40 UTC (permalink / raw)
To: liuhongt; +Cc: GCC Patches, H. J. Lu
On Tue, Aug 24, 2021 at 6:25 PM liuhongt <hongtao.liu@intel.com> wrote:
>
> gcc/ChangeLog:
>
> PR target/101989
> * config/i386/sse.md (<avx512>_vternlog<mode><sd_maskz_name>):
> Enable avx512 embedded broadcast.
> (*<avx512>_vternlog<mode>_all): Ditto.
> (<avx512>_vternlog<mode>_mask): Ditto.
>
> gcc/testsuite/ChangeLog:
>
> PR target/101989
> * gcc.target/i386/pr101989-broadcast-1.c: New test.
Pushed to trunk.
> ---
> gcc/config/i386/sse.md | 6 ++--
> .../gcc.target/i386/pr101989-broadcast-1.c | 31 +++++++++++++++++++
> 2 files changed, 34 insertions(+), 3 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
>
> diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> index 40ba4bfab46..3d24ad48cdf 100644
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -10034,7 +10034,7 @@ (define_insn "<avx512>_vternlog<mode><sd_maskz_name>"
> (unspec:VI48_AVX512VL
> [(match_operand:VI48_AVX512VL 1 "register_operand" "0")
> (match_operand:VI48_AVX512VL 2 "register_operand" "v")
> - (match_operand:VI48_AVX512VL 3 "nonimmediate_operand" "vm")
> + (match_operand:VI48_AVX512VL 3 "bcst_vector_operand" "vmBr")
> (match_operand:SI 4 "const_0_to_255_operand")]
> UNSPEC_VTERNLOG))]
> "TARGET_AVX512F"
> @@ -10048,7 +10048,7 @@ (define_insn "*<avx512>_vternlog<mode>_all"
> (unspec:V
> [(match_operand:V 1 "register_operand" "0")
> (match_operand:V 2 "register_operand" "v")
> - (match_operand:V 3 "nonimmediate_operand" "vm")
> + (match_operand:V 3 "bcst_vector_operand" "vmBr")
> (match_operand:SI 4 "const_0_to_255_operand")]
> UNSPEC_VTERNLOG))]
> "TARGET_AVX512F"
> @@ -10281,7 +10281,7 @@ (define_insn "<avx512>_vternlog<mode>_mask"
> (unspec:VI48_AVX512VL
> [(match_operand:VI48_AVX512VL 1 "register_operand" "0")
> (match_operand:VI48_AVX512VL 2 "register_operand" "v")
> - (match_operand:VI48_AVX512VL 3 "nonimmediate_operand" "vm")
> + (match_operand:VI48_AVX512VL 3 "bcst_vector_operand" "vmBr")
> (match_operand:SI 4 "const_0_to_255_operand")]
> UNSPEC_VTERNLOG)
> (match_dup 1)
> diff --git a/gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c b/gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
> new file mode 100644
> index 00000000000..d03d192915f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
> @@ -0,0 +1,31 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -mavx512vl" } */
> +/* { dg-final { scan-assembler-times "vpternlog" 4 } } */
> +/* { dg-final { scan-assembler-times "\\\{1to4\\\}" 4 } } */
> +#include<immintrin.h>
> +extern long long C;
> +__m256d
> +copysign2_pd(__m256d from, __m256d to) {
> + __m256i a = _mm256_castpd_si256(from);
> + __m256d avx_signbit = _mm256_castsi256_pd(_mm256_slli_epi64(_mm256_cmpeq_epi64(a, a), 63));
> + /* (avx_signbit & from) | (~avx_signbit & to) */
> + return _mm256_or_pd(_mm256_and_pd(avx_signbit, from), _mm256_andnot_pd(avx_signbit, to));
> +}
> +
> +__m256i
> +mask_pternlog (__m256i A, __m256i B, __mmask8 U)
> +{
> + return _mm256_mask_ternarylogic_epi64 (A, U, B, _mm256_set1_epi64x (C) ,202);
> +}
> +
> +__m256i
> +maskz_pternlog (__m256i A, __m256i B, __mmask8 U)
> +{
> + return _mm256_maskz_ternarylogic_epi64 (U, A, B, _mm256_set1_epi64x (C) ,202);
> +}
> +
> +__m256i
> +none_pternlog (__m256i A, __m256i B)
> +{
> + return _mm256_ternarylogic_epi64 (A, B, _mm256_set1_epi64x (C) ,202);
> +}
> --
> 2.27.0
>
--
BR,
Hongtao
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-08-24 10:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-24 10:25 [PATCH] [i386] Enable avx512 embedde broadcast for vpternlog liuhongt
2021-08-24 10:40 ` Hongtao Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).