From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2078) id ECE2E3858C2C; Tue, 24 Aug 2021 10:34:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ECE2E3858C2C MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: hongtao Liu To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-3109] Enable avx512 embedde broadcast for vpternlog. X-Act-Checkin: gcc X-Git-Author: liuhongt X-Git-Refname: refs/heads/master X-Git-Oldrev: 6ddb30f941a44bd528904558673ab35394565f08 X-Git-Newrev: 8da9b4f73c2c878b48f45fa2ed47d8a9edd31262 Message-Id: <20210824103401.ECE2E3858C2C@sourceware.org> Date: Tue, 24 Aug 2021 10:34:01 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Aug 2021 10:34:02 -0000 https://gcc.gnu.org/g:8da9b4f73c2c878b48f45fa2ed47d8a9edd31262 commit r12-3109-g8da9b4f73c2c878b48f45fa2ed47d8a9edd31262 Author: liuhongt Date: Tue Aug 24 18:09:33 2021 +0800 Enable avx512 embedde broadcast for vpternlog. gcc/ChangeLog: PR target/101989 * config/i386/sse.md (_vternlog): Enable avx512 embedded broadcast. (*_vternlog_all): Ditto. (_vternlog_mask): Ditto. gcc/testsuite/ChangeLog: PR target/101989 * gcc.target/i386/pr101989-broadcast-1.c: New test. Diff: --- gcc/config/i386/sse.md | 6 ++--- .../gcc.target/i386/pr101989-broadcast-1.c | 31 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 25ca9a5c29c..03fc2df1fb0 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -10034,7 +10034,7 @@ (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 @@ (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 @@ (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 +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); +}