From patchwork Tue Aug 8 07:20:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiang, Haochen" X-Patchwork-Id: 1818543 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=r0PI1u0U; dkim-atps=neutral Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RKl424x09z1yYl for ; Tue, 8 Aug 2023 17:21:38 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6AF74385E037 for ; Tue, 8 Aug 2023 07:21:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6AF74385E037 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1691479296; bh=rc0gbfgRjk/1exb7yAhUgbIAC+WENmaJYCU86v1LQMs=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=r0PI1u0UlqK3mipijgXIsYXl3YBSNK16fzZP4wl8MWtRTNKhKUBA/ieMXnCLiuckU 6DIoULleYnV6qrKmoJCD2tQ+H4kJhxTBIjzFOmgVsnsya8uAClunUN+7Dhpp26wm3G ynGfCLsUpA+Z9v9OCC6H1KPJgNFEQrZ0pXxGuYMw= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by sourceware.org (Postfix) with ESMTPS id EC1053857007 for ; Tue, 8 Aug 2023 07:20:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EC1053857007 X-IronPort-AV: E=McAfee;i="6600,9927,10795"; a="457126272" X-IronPort-AV: E=Sophos;i="6.01,263,1684825200"; d="scan'208";a="457126272" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Aug 2023 00:20:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10795"; a="796615231" X-IronPort-AV: E=Sophos;i="6.01,263,1684825200"; d="scan'208";a="796615231" Received: from shvmail03.sh.intel.com ([10.239.245.20]) by fmsmga008.fm.intel.com with ESMTP; 08 Aug 2023 00:20:32 -0700 Received: from shliclel4217.sh.intel.com (shliclel4217.sh.intel.com [10.239.240.127]) by shvmail03.sh.intel.com (Postfix) with ESMTP id EC3F81005608; Tue, 8 Aug 2023 15:20:31 +0800 (CST) To: gcc-patches@gcc.gnu.org Cc: ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH 4/6] Support AVX10.1 for AVX512DQ+AVX512VL intrins Date: Tue, 8 Aug 2023 15:20:31 +0800 Message-Id: <20230808072031.1570222-1-haochen.jiang@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230808071312.1569559-1-haochen.jiang@intel.com> References: <20230808071312.1569559-1-haochen.jiang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Haochen Jiang via Gcc-patches From: "Jiang, Haochen" Reply-To: Haochen Jiang Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" gcc/testsuite/ChangeLog: * gcc.target/i386/avx10_1-abs-copysign-1.c: New test. * gcc.target/i386/avx10_1-vandpd-1.c: Ditto. * gcc.target/i386/avx10_1-vandps-1.c: Ditto. * gcc.target/i386/avx10_1-vcvtps2qq-1.c: Ditto. * gcc.target/i386/avx10_1-vcvtps2uqq-1.c: Ditto. * gcc.target/i386/avx10_1-vcvtqq2pd-1.c: Ditto. * gcc.target/i386/avx10_1-vcvtqq2ps-1.c: Ditto. * gcc.target/i386/avx10_1-vcvtuqq2pd-1.c: Ditto. * gcc.target/i386/avx10_1-vcvtuqq2ps-1.c: Ditto. * gcc.target/i386/avx10_1-vorpd-1.c: Ditto. * gcc.target/i386/avx10_1-vorps-1.c: Ditto. * gcc.target/i386/avx10_1-vpmovd2m-1.c: Ditto. * gcc.target/i386/avx10_1-vpmovm2d-1.c: Ditto. * gcc.target/i386/avx10_1-vpmovm2q-1.c: Ditto. * gcc.target/i386/avx10_1-vpmovq2m-1.c: Ditto. * gcc.target/i386/avx10_1-vxorpd-1.c: Ditto. * gcc.target/i386/avx10_1-vxorps-1.c: Ditto. --- .../gcc.target/i386/avx10_1-abs-copysign-1.c | 69 +++++++++++++++++++ .../gcc.target/i386/avx10_1-vandpd-1.c | 21 ++++++ .../gcc.target/i386/avx10_1-vandps-1.c | 21 ++++++ .../gcc.target/i386/avx10_1-vcvtps2qq-1.c | 28 ++++++++ .../gcc.target/i386/avx10_1-vcvtps2uqq-1.c | 27 ++++++++ .../gcc.target/i386/avx10_1-vcvtqq2pd-1.c | 27 ++++++++ .../gcc.target/i386/avx10_1-vcvtqq2ps-1.c | 26 +++++++ .../gcc.target/i386/avx10_1-vcvtuqq2pd-1.c | 27 ++++++++ .../gcc.target/i386/avx10_1-vcvtuqq2ps-1.c | 27 ++++++++ .../gcc.target/i386/avx10_1-vorpd-1.c | 22 ++++++ .../gcc.target/i386/avx10_1-vorps-1.c | 22 ++++++ .../gcc.target/i386/avx10_1-vpmovd2m-1.c | 17 +++++ .../gcc.target/i386/avx10_1-vpmovm2d-1.c | 17 +++++ .../gcc.target/i386/avx10_1-vpmovm2q-1.c | 17 +++++ .../gcc.target/i386/avx10_1-vpmovq2m-1.c | 17 +++++ .../gcc.target/i386/avx10_1-vxorpd-1.c | 23 +++++++ .../gcc.target/i386/avx10_1-vxorps-1.c | 22 ++++++ 17 files changed, 430 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-abs-copysign-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vandpd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vandps-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2qq-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2uqq-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2pd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2ps-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2pd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2ps-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vorpd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vorps-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vpmovd2m-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2d-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2q-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vpmovq2m-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vxorpd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vxorps-1.c diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-abs-copysign-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-abs-copysign-1.c new file mode 100644 index 00000000000..e9e45e44051 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-abs-copysign-1.c @@ -0,0 +1,69 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-Ofast -mavx10.1" } */ + +void +f1 (float x) +{ + register float a __asm ("xmm16"); + a = x; + asm volatile ("" : "+v" (a)); + a = __builtin_fabsf (a); + asm volatile ("" : "+v" (a)); +} +/* +void +f2 (float x, float y) +{ + register float a __asm ("xmm16"), b __asm ("xmm17"); + a = x; + b = y; + asm volatile ("" : "+v" (a), "+v" (b)); + a = __builtin_copysignf (a, b); + asm volatile ("" : "+v" (a)); +} +*/ +void +f3 (float x) +{ + register float a __asm ("xmm16"); + a = x; + asm volatile ("" : "+v" (a)); + a = -a; + asm volatile ("" : "+v" (a)); +} + +void +f4 (double x) +{ + register double a __asm ("xmm18"); + a = x; + asm volatile ("" : "+v" (a)); + a = __builtin_fabs (a); + asm volatile ("" : "+v" (a)); +} +/* +void +f5 (double x, double y) +{ + register double a __asm ("xmm18"), b __asm ("xmm19"); + a = x; + b = y; + asm volatile ("" : "+v" (a), "+v" (b)); + a = __builtin_copysign (a, b); + asm volatile ("" : "+v" (a)); +} +*/ +void +f6 (double x) +{ + register double a __asm ("xmm18"); + a = x; + asm volatile ("" : "+v" (a)); + a = -a; + asm volatile ("" : "+v" (a)); +} + +/* { dg-final { scan-assembler "vandps\[^\n\r\]*xmm16" } } */ +/* { dg-final { scan-assembler "vxorps\[^\n\r\]*xmm16" } } */ +/* { dg-final { scan-assembler "vandpd\[^\n\r\]*xmm18" } } */ +/* { dg-final { scan-assembler "vxorpd\[^\n\r\]*xmm18" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vandpd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vandpd-1.c new file mode 100644 index 00000000000..3a765479f6d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vandpd-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vandpd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vandpd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vandpd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vandpd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256d y; +volatile __m128d x; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + y = _mm256_mask_and_pd (y, m, y, y); + y = _mm256_maskz_and_pd (m, y, y); + x = _mm_mask_and_pd (x, m, x, x); + x = _mm_maskz_and_pd (m, x, x); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vandps-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vandps-1.c new file mode 100644 index 00000000000..ed785af5f30 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vandps-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vandps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vandps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vandps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vandps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256 y; +volatile __m128 x; +volatile __mmask8 m2; + +void extern +avx10_1_test (void) +{ + y = _mm256_mask_and_ps (y, m2, y, y); + y = _mm256_maskz_and_ps (m2, y, y); + x = _mm_mask_and_ps (x, m2, x, x); + x = _mm_maskz_and_ps (m2, x, x); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2qq-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2qq-1.c new file mode 100644 index 00000000000..dad6dbe778d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2qq-1.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vcvtps2qq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2qq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2qq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2qq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2qq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2qq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i x1; +volatile __m128i x2; +volatile __m256 z1; +volatile __m128 z2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + x1 = _mm256_cvtps_epi64 (z2); + x1 = _mm256_mask_cvtps_epi64 (x1, m, z2); + x1 = _mm256_maskz_cvtps_epi64 (m, z2); + x2 = _mm_cvtps_epi64 (z2); + x2 = _mm_mask_cvtps_epi64 (x2, m, z2); + x2 = _mm_maskz_cvtps_epi64 (m, z2); +} + diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2uqq-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2uqq-1.c new file mode 100644 index 00000000000..24de26bd5e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtps2uqq-1.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vcvtps2uqq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2uqq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2uqq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2uqq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2uqq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtps2uqq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i x1; +volatile __m128i x2; +volatile __m256 z1; +volatile __m128 z2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + x1 = _mm256_cvtps_epu64 (z2); + x1 = _mm256_mask_cvtps_epu64 (x1, m, z2); + x1 = _mm256_maskz_cvtps_epu64 (m, z2); + x2 = _mm_cvtps_epu64 (z2); + x2 = _mm_mask_cvtps_epu64 (x2, m, z2); + x2 = _mm_maskz_cvtps_epu64 (m, z2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2pd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2pd-1.c new file mode 100644 index 00000000000..5a2472292b5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2pd-1.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vcvtqq2pd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2pd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2pd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2pd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2pd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2pd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i s1; +volatile __m128i s2; +volatile __m256d res1; +volatile __m128d res2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + res1 = _mm256_cvtepi64_pd (s1); + res1 = _mm256_mask_cvtepi64_pd (res1, m, s1); + res1 = _mm256_maskz_cvtepi64_pd (m, s1); + res2 = _mm_cvtepi64_pd (s2); + res2 = _mm_mask_cvtepi64_pd (res2, m, s2); + res2 = _mm_maskz_cvtepi64_pd (m, s2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2ps-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2ps-1.c new file mode 100644 index 00000000000..7d735eb4c9c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtqq2ps-1.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vcvtqq2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtqq2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i s1; +volatile __m128i s2; +volatile __m128 res; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + res = _mm256_cvtepi64_ps (s1); + res = _mm256_mask_cvtepi64_ps (res, m, s1); + res = _mm256_maskz_cvtepi64_ps (m, s1); + res = _mm_cvtepi64_ps (s2); + res = _mm_mask_cvtepi64_ps (res, m, s2); + res = _mm_maskz_cvtepi64_ps (m, s2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2pd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2pd-1.c new file mode 100644 index 00000000000..ab433a2ecde --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2pd-1.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vcvtuqq2pd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2pd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2pd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2pd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2pd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2pd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i s1; +volatile __m128i s2; +volatile __m256d res1; +volatile __m128d res2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + res1 = _mm256_cvtepu64_pd (s1); + res1 = _mm256_mask_cvtepu64_pd (res1, m, s1); + res1 = _mm256_maskz_cvtepu64_pd (m, s1); + res2 = _mm_cvtepu64_pd (s2); + res2 = _mm_mask_cvtepu64_pd (res2, m, s2); + res2 = _mm_maskz_cvtepu64_pd (m, s2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2ps-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2ps-1.c new file mode 100644 index 00000000000..ac9e788e4c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vcvtuqq2ps-1.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vcvtuqq2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtuqq2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i s1; +volatile __m128i s2; +volatile __m256 res1; +volatile __m128 res2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + res2 = _mm256_cvtepu64_ps (s1); + res2 = _mm256_mask_cvtepu64_ps (res2, m, s1); + res2 = _mm256_maskz_cvtepu64_ps (m, s1); + res2 = _mm_cvtepu64_ps (s2); + res2 = _mm_mask_cvtepu64_ps (res2, m, s2); + res2 = _mm_maskz_cvtepu64_ps (m, s2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vorpd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vorpd-1.c new file mode 100644 index 00000000000..d2367d136a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vorpd-1.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vorpd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vorpd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vorpd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vorpd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256d y; +volatile __m128d x; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + y = _mm256_mask_or_pd (y, m, y, y); + y = _mm256_maskz_or_pd (m, y, y); + + x = _mm_mask_or_pd (x, m, x, x); + x = _mm_maskz_or_pd (m, x, x); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vorps-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vorps-1.c new file mode 100644 index 00000000000..2ba919ed2e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vorps-1.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vorps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vorps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vorps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vorps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256 y; +volatile __m128 x; +volatile __mmask8 n; + +void extern +avx10_1_test (void) +{ + y = _mm256_mask_or_ps (y, n, y, y); + y = _mm256_maskz_or_ps (n, y, y); + + x = _mm_mask_or_ps (x, n, x, x); + x = _mm_maskz_or_ps (n, x, x); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vpmovd2m-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovd2m-1.c new file mode 100644 index 00000000000..68f1a9485ed --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovd2m-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vpmovd2m\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmovd2m\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i x256; +volatile __m128i x128; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + m = _mm_movepi32_mask (x128); + m = _mm256_movepi32_mask (x256); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2d-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2d-1.c new file mode 100644 index 00000000000..89ac3bd49ed --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2d-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vpmovm2d\[ \\t\]+\[^\{\n\]*%k\[0-7\]\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmovm2d\[ \\t\]+\[^\{\n\]*%k\[0-7\]\[^\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i x256; +volatile __m128i x128; +volatile __mmask8 m8; + +void extern +avx10_1_test (void) +{ + x128 = _mm_movm_epi32 (m8); + x256 = _mm256_movm_epi32 (m8); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2q-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2q-1.c new file mode 100644 index 00000000000..b5a3298c4ab --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovm2q-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vpmovm2q\[ \\t\]+\[^\{\n\]*%k\[0-7\]\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmovm2q\[ \\t\]+\[^\{\n\]*%k\[0-7\]\[^\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i x256; +volatile __m128i x128; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + x128 = _mm_movm_epi64 (m); + x256 = _mm256_movm_epi64 (m); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vpmovq2m-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovq2m-1.c new file mode 100644 index 00000000000..2eb1f81a7ed --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vpmovq2m-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vpmovq2m\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmovq2m\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256i x256; +volatile __m128i x128; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + m = _mm_movepi64_mask (x128); + m = _mm256_movepi64_mask (x256); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vxorpd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vxorpd-1.c new file mode 100644 index 00000000000..062acc9b011 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vxorpd-1.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vxorpd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vxorpd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vxorpd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vxorpd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256d y; +volatile __m128d x; +volatile __mmask8 m; + + +void extern +avx10_1_test (void) +{ + y = _mm256_mask_xor_pd (y, m, y, y); + y = _mm256_maskz_xor_pd (m, y, y); + + x = _mm_mask_xor_pd (x, m, x, x); + x = _mm_maskz_xor_pd (m, x, x); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vxorps-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vxorps-1.c new file mode 100644 index 00000000000..04473ce0468 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vxorps-1.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vxorps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vxorps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vxorps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vxorps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include + +volatile __m256 y; +volatile __m128 x; +volatile __mmask8 n; + +void extern +avx10_1_test (void) +{ + y = _mm256_mask_xor_ps (y, n, y, y); + y = _mm256_maskz_xor_ps (n, y, y); + + x = _mm_mask_xor_ps (x, n, x, x); + x = _mm_maskz_xor_ps (n, x, x); +}