From patchwork Thu Jun 18 20:46:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Bergner X-Patchwork-Id: 1312379 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: 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=K2mUK96A; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49nv9s43mBz9sR4 for ; Fri, 19 Jun 2020 06:46:41 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6852E3858D34; Thu, 18 Jun 2020 20:46:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6852E3858D34 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1592513199; bh=B3FEzx7k1s0Zh4x1NiQI+d7dxYPLWFA0jDL6OPpFps8=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=K2mUK96ADa7wfTvdVaRS1nkLstoVm9MfRgKZWM3FQLEi3lxh0shsAbt1WzgT1cXC5 orau7d1s/36eJo/eHL2kezf/b36k/PDVKleGStThRqI771M+YsJLvBcYJfjt3fkeW8 trU0OBJ3d11K0dk1bcMgk3BOSBZYr612pe/ZkHOA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 8606C3858D34 for ; Thu, 18 Jun 2020 20:46:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 8606C3858D34 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 05IKUZY3053749; Thu, 18 Jun 2020 16:46:35 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 31r2vny8j2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 18 Jun 2020 16:46:35 -0400 Received: from m0098413.ppops.net (m0098413.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 05IKVpVg057412; Thu, 18 Jun 2020 16:46:34 -0400 Received: from ppma04dal.us.ibm.com (7a.29.35a9.ip4.static.sl-reverse.com [169.53.41.122]) by mx0b-001b2d01.pphosted.com with ESMTP id 31r2vny8hn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 18 Jun 2020 16:46:34 -0400 Received: from pps.filterd (ppma04dal.us.ibm.com [127.0.0.1]) by ppma04dal.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 05IKil66002878; Thu, 18 Jun 2020 20:46:34 GMT Received: from b01cxnp23032.gho.pok.ibm.com (b01cxnp23032.gho.pok.ibm.com [9.57.198.27]) by ppma04dal.us.ibm.com with ESMTP id 31rd9593qs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 18 Jun 2020 20:46:33 +0000 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp23032.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 05IKkX7c47186306 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 18 Jun 2020 20:46:33 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 181AFB205F; Thu, 18 Jun 2020 20:46:33 +0000 (GMT) Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2FA18B2066; Thu, 18 Jun 2020 20:46:32 +0000 (GMT) Received: from [9.160.46.20] (unknown [9.160.46.20]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP; Thu, 18 Jun 2020 20:46:32 +0000 (GMT) Subject: [PATCH 3/3, v2] rs6000: Add testsuite test cases for MMA built-ins. To: Segher Boessenkool References: Message-ID: <6621e241-8ece-da7b-7376-a6a0766b29bc@linux.ibm.com> Date: Thu, 18 Jun 2020 15:46:31 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-18_15:2020-06-18, 2020-06-18 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 phishscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 mlxscore=0 mlxlogscore=999 cotscore=-2147483648 priorityscore=1501 suspectscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006180152 X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Peter Bergner via Gcc-patches From: Peter Bergner Reply-To: Peter Bergner Cc: Bill Schmidt , GCC Patches , David Edelsohn , Michael Meissner Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" Changes since v1: - No changes from v1. This patch adds the testsuite test cases for all of the MMA built-ins. This patch was tested with patch1 + patch2. Peter 2020-06-18 Peter Bergner gcc/testsuite/ * gcc.target/powerpc/mma-builtin-1.c: New test. * gcc.target/powerpc/mma-builtin-2.c: New test. * gcc.target/powerpc/mma-builtin-3.c: New test. * gcc.target/powerpc/mma-builtin-4.c: New test. * gcc.target/powerpc/mma-builtin-5.c: New test. * gcc.target/powerpc/mma-builtin-6.c: New test. diff --git a/gcc/testsuite/gcc.target/powerpc/mma-builtin-1.c b/gcc/testsuite/gcc.target/powerpc/mma-builtin-1.c new file mode 100644 index 00000000000..a971c869095 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/mma-builtin-1.c @@ -0,0 +1,313 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_future_ok } */ +/* { dg-options "-Wno-psabi -mdejagnu-cpu=future -O2" } */ + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +void +foo0 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvi4ger8 (&acc, vec0, vec1); + __builtin_mma_xvi4ger8pp (&acc, vec0, vec1); + dst[0] = acc; +} + +void +foo1 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvi8ger4 (&acc, vec0, vec1); + __builtin_mma_xvi8ger4pp (&acc, vec0, vec1); + __builtin_mma_xvi8ger4spp(&acc, vec0, vec1); + dst[1] = acc; +} + +void +foo2 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvi16ger2 (&acc, vec0, vec1); + __builtin_mma_xvi16ger2pp (&acc, vec0, vec1); + dst[2] = acc; +} + +void +foo3 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvi16ger2s (&acc, vec0, vec1); + __builtin_mma_xvi16ger2spp (&acc, vec0, vec1); + dst[3] = acc; +} + +void +foo4 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvf16ger2 (&acc, vec0, vec1); + __builtin_mma_xvf16ger2pp (&acc, vec0, vec1); + __builtin_mma_xvf16ger2pn (&acc, vec0, vec1); + dst[4] = acc; +} + +void +foo4b (__vector_quad *dst, __vector_quad *src, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_xvf16ger2np (&acc, vec0, vec1); + __builtin_mma_xvf16ger2nn (&acc, vec0, vec1); + dst[4] = acc; +} + +void +foo5 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvbf16ger2 (&acc, vec0, vec1); + __builtin_mma_xvbf16ger2pp (&acc, vec0, vec1); + __builtin_mma_xvbf16ger2pn (&acc, vec0, vec1); + dst[5] = acc; +} + +void +foo5b (__vector_quad *dst, __vector_quad *src, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_xvbf16ger2np (&acc, vec0, vec1); + __builtin_mma_xvbf16ger2nn (&acc, vec0, vec1); + dst[5] = acc; +} + +void +foo6 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_xvf32ger (&acc, vec0, vec1); + __builtin_mma_xvf32gerpp (&acc, vec0, vec1); + __builtin_mma_xvf32gerpn (&acc, vec0, vec1); + dst[6] = acc; +} + +void +foo6b (__vector_quad *dst, __vector_quad *src, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_xvf32gernp (&acc, vec0, vec1); + __builtin_mma_xvf32gernn (&acc, vec0, vec1); + dst[6] = acc; +} + +void +foo7 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvi4ger8 (&acc, vec0, vec1, 15, 15, 255); + __builtin_mma_pmxvi4ger8pp (&acc, vec0, vec1, 15, 15, 255); + dst[7] = acc; +} + +void +foo8 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvi8ger4 (&acc, vec0, vec1, 15, 15, 15); + __builtin_mma_pmxvi8ger4pp (&acc, vec0, vec1, 15, 15, 15); + __builtin_mma_pmxvi8ger4spp(&acc, vec0, vec1, 15, 15, 15); + dst[8] = acc; +} + +void +foo9 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvi16ger2 (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvi16ger2pp (&acc, vec0, vec1, 15, 15, 3); + dst[9] = acc; +} + +void +foo10 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvi16ger2s (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvi16ger2spp (&acc, vec0, vec1, 15, 15, 3); + dst[10] = acc; +} + +void +foo11 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvf16ger2 (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvf16ger2pp (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvf16ger2pn (&acc, vec0, vec1, 15, 15, 3); + dst[11] = acc; +} + +void +foo11b (__vector_quad *dst, __vector_quad *src, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_pmxvf16ger2np (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvf16ger2nn (&acc, vec0, vec1, 15, 15, 3); + dst[11] = acc; +} + +void +foo12 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvbf16ger2 (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvbf16ger2pp (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvbf16ger2pn (&acc, vec0, vec1, 15, 15, 3); + dst[12] = acc; +} + +void +foo12b (__vector_quad *dst, __vector_quad *src, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_pmxvbf16ger2np (&acc, vec0, vec1, 15, 15, 3); + __builtin_mma_pmxvbf16ger2nn (&acc, vec0, vec1, 15, 15, 3); + dst[12] = acc; +} + +void +foo13 (__vector_quad *dst, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + __builtin_mma_pmxvf32ger (&acc, vec0, vec1, 15, 15); + __builtin_mma_pmxvf32gerpp (&acc, vec0, vec1, 15, 15); + __builtin_mma_pmxvf32gerpn (&acc, vec0, vec1, 15, 15); + dst[13] = acc; +} + +void +foo13b (__vector_quad *dst, __vector_quad *src, vec_t *vec) +{ + __vector_quad acc; + vec_t vec0 = vec[0]; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_pmxvf32gernp (&acc, vec0, vec1, 15, 15); + __builtin_mma_pmxvf32gernn (&acc, vec0, vec1, 15, 15); + dst[13] = acc; +} + +/* { dg-final { scan-assembler-times {\mlxv\M} 40 } } */ +/* { dg-final { scan-assembler-times {\mlxvp\M} 12 } } */ +/* { dg-final { scan-assembler-times {\mstxvp\M} 40 } } */ +/* { dg-final { scan-assembler-times {\mxxmfacc\M} 20 } } */ +/* { dg-final { scan-assembler-times {\mxxmtacc\M} 6 } } */ +/* { dg-final { scan-assembler-times {\mxvbf16ger2\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvbf16ger2nn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvbf16ger2np\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvbf16ger2pn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvbf16ger2pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf16ger2\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf16ger2nn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf16ger2np\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf16ger2pn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf16ger2pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf32ger\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf32gernn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf32gernp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf32gerpn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf32gerpp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi16ger2\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi16ger2pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi16ger2s\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi16ger2spp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi4ger8\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi4ger8pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi8ger4\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi8ger4pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvi8ger4spp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvbf16ger2\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvbf16ger2nn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvbf16ger2np\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvbf16ger2pn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvbf16ger2pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf16ger2\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf16ger2nn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf16ger2np\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf16ger2pn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf16ger2pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf32ger\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf32gernn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf32gernp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf32gerpn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf32gerpp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi16ger2\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi16ger2pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi16ger2s\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi16ger2spp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi4ger8\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi4ger8pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi8ger4\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi8ger4pp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvi8ger4spp\M} 1 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/mma-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/mma-builtin-2.c new file mode 100644 index 00000000000..cb8b30dd992 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/mma-builtin-2.c @@ -0,0 +1,72 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_future_ok } */ +/* { dg-options "-Wno-psabi -mdejagnu-cpu=future -O2" } */ + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +void +foo0 (__vector_quad *dst, vec_t *vec, __vector_pair *pvecp) +{ + __vector_quad acc; + __vector_pair vecp0 = *pvecp; + vec_t vec1 = vec[1]; + + __builtin_mma_xvf64ger (&acc, vecp0, vec1); + __builtin_mma_xvf64gerpp (&acc, vecp0, vec1); + __builtin_mma_xvf64gerpn (&acc, vecp0, vec1); + dst[0] = acc; +} + +void +foo1 (__vector_quad *dst, __vector_quad *src, vec_t *vec, __vector_pair *pvecp) +{ + __vector_quad acc; + __vector_pair vecp0 = *pvecp; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_xvf64gernp (&acc, vecp0, vec1); + __builtin_mma_xvf64gernn (&acc, vecp0, vec1); + dst[0] = acc; +} + +void +foo2 (__vector_quad *dst, vec_t *vec, __vector_pair *pvecp) +{ + __vector_quad acc; + __vector_pair vecp0 = *pvecp; + vec_t vec1 = vec[1]; + __builtin_mma_pmxvf64ger (&acc, vecp0, vec1, 15, 3); + __builtin_mma_pmxvf64gerpp (&acc, vecp0, vec1, 15, 3); + __builtin_mma_pmxvf64gerpn (&acc, vecp0, vec1, 15, 3); + dst[1] = acc; +} + +void +foo3 (__vector_quad *dst, __vector_quad *src, vec_t *vec, __vector_pair *pvecp) +{ + __vector_quad acc; + __vector_pair vecp0 = *pvecp; + vec_t vec1 = vec[1]; + + acc = src[0]; + __builtin_mma_pmxvf64gernp (&acc, vecp0, vec1, 15, 3); + __builtin_mma_pmxvf64gernn (&acc, vecp0, vec1, 15, 3); + dst[1] = acc; +} + +/* { dg-final { scan-assembler-times {\mxxmfacc\M} 4 } } */ +/* { dg-final { scan-assembler-times {\mxxmtacc\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mlxv\M} 4 } } */ +/* { dg-final { scan-assembler-times {\mlxvp\M} 8 } } */ +/* { dg-final { scan-assembler-times {\mstxvp\M} 8 } } */ +/* { dg-final { scan-assembler-times {\mxvf64ger\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf64gerpp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf64gerpn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf64gernp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvf64gernn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf64ger\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf64gerpp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf64gerpn\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf64gernp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mpmxvf64gernn\M} 1 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/mma-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/mma-builtin-3.c new file mode 100644 index 00000000000..5406707061e --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/mma-builtin-3.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_future_ok } */ +/* { dg-options "-Wno-psabi -mdejagnu-cpu=future -O2" } */ + +void +foo0 (void) +{ + __vector_quad acc; + asm ("#..." : "=d" (acc)); + __builtin_mma_xxmtacc (&acc); + __builtin_mma_xxmfacc (&acc); + asm ("#..." :: "d" (acc)); +} + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +void +foo1 (vec_t *vec) +{ + vec[1] = __builtin_vsx_xvcvspbf16 (vec[0]); + vec[3] = __builtin_vsx_xvcvbf16sp (vec[2]); +} + +/* { dg-final { scan-assembler-times {\mxxmtacc\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxxmfacc\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mlxv\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mstxv\M} 2 } } */ +/* { dg-final { scan-assembler-not {\mlxvp\M} } } */ +/* { dg-final { scan-assembler-not {\mstxvp\M} } } */ +/* { dg-final { scan-assembler-times {\mxvcvspbf16\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxvcvbf16sp\M} 1 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/mma-builtin-4.c b/gcc/testsuite/gcc.target/powerpc/mma-builtin-4.c new file mode 100644 index 00000000000..138d1b46bc4 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/mma-builtin-4.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_future_ok } */ +/* { dg-options "-Wno-psabi -mdejagnu-cpu=future -O2" } */ + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +void +foo (__vector_pair *dst, vec_t *src) +{ + __vector_pair pair; + __builtin_mma_assemble_pair (&pair, src[0], src[4]); + *dst = pair; +} + +void +bar (vec_t *dst, __vector_pair *src) +{ + vec_t res[2]; + __builtin_mma_disassemble_pair (res, src); + dst[0] = res[0]; + dst[4] = res[1]; +} + +/* { dg-final { scan-assembler-times {\mlxv\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mlxvp\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mstxv\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mstxvp\M} 1 } } */ + diff --git a/gcc/testsuite/gcc.target/powerpc/mma-builtin-5.c b/gcc/testsuite/gcc.target/powerpc/mma-builtin-5.c new file mode 100644 index 00000000000..0ee45b6bdfd --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/mma-builtin-5.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_future_ok } */ +/* { dg-options "-Wno-psabi -mdejagnu-cpu=future -O2" } */ + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +void +foo (__vector_quad *dst, vec_t *src) +{ + __vector_quad acc; + __builtin_mma_assemble_acc (&acc, src[0], src[4], src[8], src[12]); + *dst = acc; +} + +void +bar (vec_t *dst, __vector_quad *src) +{ + vec_t res[4]; + __builtin_mma_disassemble_acc (res, src); + dst[0] = res[0]; + dst[4] = res[1]; + dst[8] = res[2]; + dst[12] = res[3]; +} + +/* { dg-final { scan-assembler-times {\mlxv\M} 4 } } */ +/* { dg-final { scan-assembler-times {\mlxvp\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mstxv\M} 4 } } */ +/* { dg-final { scan-assembler-times {\mstxvp\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mxxmfacc\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mxxmtacc\M} 2 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/mma-builtin-6.c b/gcc/testsuite/gcc.target/powerpc/mma-builtin-6.c new file mode 100644 index 00000000000..c0b5eedd3d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/mma-builtin-6.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_future_ok } */ +/* { dg-options "-Wno-psabi -mdejagnu-cpu=future -O2" } */ + +void +foo (__vector_quad *dst) +{ + __vector_quad acc; + __builtin_mma_xxsetaccz (&acc); + *dst = acc; +} + +/* { dg-final { scan-assembler-not {\mlxv\M} } } */ +/* { dg-final { scan-assembler-not {\mlxvp\M} } } */ +/* { dg-final { scan-assembler-not {\mxxmtacc\M} } } */ +/* { dg-final { scan-assembler-times {\mxxsetaccz\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mxxmfacc\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mstxvp\M} 2 } } */