From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6999 invoked by alias); 16 Jan 2020 09:43:04 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 6990 invoked by uid 89); 16 Jan 2020 09:43:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 16 Jan 2020 09:42:53 +0000 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 00G9gjxl018144 for ; Thu, 16 Jan 2020 04:42:51 -0500 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0b-001b2d01.pphosted.com with ESMTP id 2xhgv6p796-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 16 Jan 2020 04:42:49 -0500 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 16 Jan 2020 09:42:47 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Thu, 16 Jan 2020 09:42:45 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 00G9gi0e57540756 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 16 Jan 2020 09:42:44 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4E31F5205F; Thu, 16 Jan 2020 09:42:44 +0000 (GMT) Received: from kewenlins-mbp.cn.ibm.com (unknown [9.200.147.222]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 72C1552051; Thu, 16 Jan 2020 09:42:42 +0000 (GMT) Subject: [PATCH 4/4 GCC11] rs6000: P9 D-form test cases From: "Kewen.Lin" To: GCC Patches Cc: Segher Boessenkool , Bill Schmidt , "bin.cheng" , Richard Guenther References: Date: Thu, 16 Jan 2020 10:12:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------8730C9B838D3A9B01CF69ACB" x-cbid: 20011609-0016-0000-0000-000002DDCDAE X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20011609-0017-0000-0000-000033406495 Message-Id: <91209c2f-50f8-556b-bde4-3a4f93c8accd@linux.ibm.com> X-IsSubscribed: yes X-SW-Source: 2020-01/txt/msg00945.txt.bz2 This is a multi-part message in MIME format. --------------8730C9B838D3A9B01CF69ACB Content-Type: text/plain; charset=gbk Content-Transfer-Encoding: 7bit Content-length: 400 gcc/testsuite/ChangeLog 2020-01-16 Kelvin Nilsen Kewen Lin * gcc.target/powerpc/p9-dform-0.c: New test. * gcc.target/powerpc/p9-dform-1.c: New test. * gcc.target/powerpc/p9-dform-2.c: New test. * gcc.target/powerpc/p9-dform-3.c: New test. * gcc.target/powerpc/p9-dform-4.c: New test. * gcc.target/powerpc/p9-dform-generic.h: New test. --------------8730C9B838D3A9B01CF69ACB Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0004.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0004.patch" Content-length: 7018 gcc/testsuite/gcc.target/powerpc/p9-dform-0.c | 43 +++++++++++++++++ gcc/testsuite/gcc.target/powerpc/p9-dform-1.c | 55 ++++++++++++++++++++++ gcc/testsuite/gcc.target/powerpc/p9-dform-2.c | 12 +++++ gcc/testsuite/gcc.target/powerpc/p9-dform-3.c | 15 ++++++ gcc/testsuite/gcc.target/powerpc/p9-dform-4.c | 12 +++++ .../gcc.target/powerpc/p9-dform-generic.h | 34 +++++++++++++ 6 files changed, 171 insertions(+) create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-dform-0.c create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-dform-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-dform-2.c create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-dform-3.c create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-dform-4.c create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-dform-generic.h diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dform-0.c b/gcc/testsuite/gcc.target/powerpc/p9-dform-0.c new file mode 100644 index 0000000..01f8b69 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-dform-0.c @@ -0,0 +1,43 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O3 -mdejagnu-cpu=power9 -funroll-loops" } */ + +/* This test confirms that the dform instructions are selected in the + translation of this main program. */ + +extern void first_dummy (); +extern void dummy (double sacc, int n); +extern void other_dummy (); + +extern float opt_value; +extern char *opt_desc; + +#define M 128 +#define N 512 + +double x [N]; +double y [N]; + +int main (int argc, char *argv []) { + double sacc; + + first_dummy (); + for (int j = 0; j < M; j++) { + + sacc = 0.00; + for (unsigned long long int i = 0; i < N; i++) { + sacc += x[i] * y[i]; + } + dummy (sacc, N); + } + opt_value = ((float) N) * 2 * ((float) M); + opt_desc = "flops"; + other_dummy (); +} + +/* At time the dform optimization pass was merged with trunk, 12 + lxv instructions were emitted in place of the same number of lxvx + instructions. No need to require exactly this number, as it may + change when other optimization passes evolve. */ + +/* { dg-final { scan-assembler {\mlxv\M} } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dform-1.c b/gcc/testsuite/gcc.target/powerpc/p9-dform-1.c new file mode 100644 index 0000000..c6f1d76 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-dform-1.c @@ -0,0 +1,55 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O3 -mdejagnu-cpu=power9 -funroll-loops" } */ + +/* This test confirms that the dform instructions are selected in the + translation of this main program. */ + +extern void first_dummy (); +extern void dummy (double sacc, int n); +extern void other_dummy (); + +extern float opt_value; +extern char *opt_desc; + +#define M 128 +#define N 512 + +double x [N]; +double y [N]; +double z [N]; + +int main (int argc, char *argv []) { + double sacc; + + first_dummy (); + for (int j = 0; j < M; j++) { + + sacc = 0.00; + for (unsigned long long int i = 0; i < N; i++) { + z[i] = x[i] * y[i]; + sacc += z[i]; + } + dummy (sacc, N); + } + opt_value = ((float) N) * 2 * ((float) M); + opt_desc = "flops"; + other_dummy (); +} + + + +/* At time the dform optimization pass was merged with trunk, 12 + lxv instructions were emitted in place of the same number of lxvx + instructions. No need to require exactly this number, as it may + change when other optimization passes evolve. */ + +/* { dg-final { scan-assembler {\mlxv\M} } } */ + +/* At time the dform optimization pass was merged with trunk, 6 + stxv instructions were emitted in place of the same number of stxvx + instructions. No need to require exactly this number, as it may + change when other optimization passes evolve. */ + +/* { dg-final { scan-assembler {\mstxv\M} } } */ + diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dform-2.c b/gcc/testsuite/gcc.target/powerpc/p9-dform-2.c new file mode 100644 index 0000000..8752f3d --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-dform-2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O3 -mdejagnu-cpu=power9 -funroll-loops" } */ + +#define TYPE int +#include "p9-dform-generic.h" + +/* The precise number of lxv and stxv instructions may be impacted by + complex interactions between optimization passes, but we expect at + least one of each. */ +/* { dg-final { scan-assembler {\mlxv\M} } } */ +/* { dg-final { scan-assembler {\mstxv\M} } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dform-3.c b/gcc/testsuite/gcc.target/powerpc/p9-dform-3.c new file mode 100644 index 0000000..df299a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-dform-3.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O3 -mdejagnu-cpu=power9 -funroll-loops" } */ + +#define TYPE double +#include "p9-dform-generic.h" + +/* At time the dform optimization pass was merged with trunk, 6 + lxv instructions were emitted in place of the same number of lxvx + instructions and 8 stxv instructions replace the same number of + stxvx instructions. No need to require exactly this number, as it + may change when other optimization passes evolve. */ + +/* { dg-final { scan-assembler {\mlxv\M} } } */ +/* { dg-final { scan-assembler {\mstxv\M} } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dform-4.c b/gcc/testsuite/gcc.target/powerpc/p9-dform-4.c new file mode 100644 index 0000000..d712958 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-dform-4.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=power9 -funroll-loops -mfloat128" } */ + +#define TYPE __float128 +#include "p9-dform-generic.h" + +/* The precise number of lxv and stxv instructions may be impacted by + complex interactions between optimization passes, but we expect at + least one of each. */ +/* { dg-final { scan-assembler {\mlxv\M} } } */ +/* { dg-final { scan-assembler {\mstxv\M} } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/p9-dform-generic.h b/gcc/testsuite/gcc.target/powerpc/p9-dform-generic.h new file mode 100644 index 0000000..3caed25 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-dform-generic.h @@ -0,0 +1,34 @@ + +#define ITERATIONS 1000000 + +#define SIZE (16384/sizeof(TYPE)) + +static TYPE x[SIZE] __attribute__ ((aligned (16))); +static TYPE y[SIZE] __attribute__ ((aligned (16))); +static TYPE a; + +void obfuscate(void *a, ...); + +static void __attribute__((noinline)) do_one(void) +{ + unsigned long i; + + obfuscate(x, y, &a); + + for (i = 0; i < SIZE; i++) + y[i] = a * x[i]; + + obfuscate(x, y, &a); + +} + +int main(void) +{ + unsigned long i; + + for (i = 0; i < ITERATIONS; i++) + do_one(); + + return 0; + +} -- 2.7.4 --------------8730C9B838D3A9B01CF69ACB--