public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Kewen.Lin" <linkw@linux.ibm.com>
To: Michael Meissner <meissner@linux.ibm.com>
Cc: gcc-patches@gcc.gnu.org,
	Segher Boessenkool <segher@kernel.crashing.org>,
	David Edelsohn <dje.gcc@gmail.com>,
	Peter Bergner <bergner@linux.ibm.com>
Subject: Re: Repost [PATCH 5/6] PowerPC: Switch to dense math names for all MMA operations.
Date: Sun, 4 Feb 2024 13:47:12 +0800	[thread overview]
Message-ID: <50a94e38-540e-7bf0-0f75-1e7f0525e120@linux.ibm.com> (raw)
In-Reply-To: <ZZiTiojbYNzVvJEV@cowardly-lion.the-meissners.org>

Hi Mike,

on 2024/1/6 07:40, Michael Meissner wrote:
> This patch changes the assembler instruction names for MMA instructions from
> the original name used in power10 to the new name when used with the dense math
> system.  I.e. xvf64gerpp becomes dmxvf64gerpp.  The assembler will emit the
> same bits for either spelling.
> 
> The patches have been tested on both little and big endian systems.  Can I check
> it into the master branch?
> 
> 2024-01-05   Michael Meissner  <meissner@linux.ibm.com>
> 
> gcc/
> 
> 	* config/rs6000/mma.md (vvi4i4i8_dm): New int attribute.
> 	(avvi4i4i8_dm): Likewise.
> 	(vvi4i4i2_dm): Likewise.
> 	(avvi4i4i2_dm): Likewise.
> 	(vvi4i4_dm): Likewise.
> 	(avvi4i4_dm): Likewise.
> 	(pvi4i2_dm): Likewise.
> 	(apvi4i2_dm): Likewise.
> 	(vvi4i4i4_dm): Likewise.
> 	(avvi4i4i4_dm): Likewise.
> 	(mma_<vv>): Add support for running on DMF systems, generating the dense
> 	math instruction and using the dense math accumulators.
> 	(mma_<avv>): Likewise.
> 	(mma_<pv>): Likewise.
> 	(mma_<apv>): Likewise.
> 	(mma_<vvi4i4i8>): Likewise.
> 	(mma_<avvi4i4i8>): Likewise.
> 	(mma_<vvi4i4i2>): Likewise.
> 	(mma_<avvi4i4i2>): Likewise.
> 	(mma_<vvi4i4>): Likewise.
> 	(mma_<avvi4i4): Likewise.
> 	(mma_<pvi4i2>): Likewise.
> 	(mma_<apvi4i2): Likewise.
> 	(mma_<vvi4i4i4>): Likewise.
> 	(mma_<avvi4i4i4>): Likewise.
> 
> gcc/testsuite/
> 
> 	* gcc.target/powerpc/dm-double-test.c: New test.
> 	* lib/target-supports.exp (check_effective_target_ppc_dmr_ok): New
> 	target test.
> ---
>  gcc/config/rs6000/mma.md                      |  98 +++++++--
>  .../gcc.target/powerpc/dm-double-test.c       | 194 ++++++++++++++++++
>  gcc/testsuite/lib/target-supports.exp         |  19 ++
>  3 files changed, 299 insertions(+), 12 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/powerpc/dm-double-test.c
> 
> diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md
> index 525a85146ff..f06e6bbb184 100644
> --- a/gcc/config/rs6000/mma.md
> +++ b/gcc/config/rs6000/mma.md
> @@ -227,13 +227,22 @@ (define_int_attr apv		[(UNSPEC_MMA_XVF64GERPP		"xvf64gerpp")
>  
>  (define_int_attr vvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8		"pmxvi4ger8")])
>  
> +(define_int_attr vvi4i4i8_dm	[(UNSPEC_MMA_PMXVI4GER8		"pmdmxvi4ger8")])

Can we update vvi4i4i8 to

(define_int_attr vvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8		"xvi4ger8")])

by avoiding to introduce vvi4i4i8_dm, then its use places would be like:

-  "<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
+  "@
+   pmdm<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
+   pm<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
+   pm<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"

and 

- define_insn "mma_<vvi4i4i8>"
+ define_insn "mma_pm<vvi4i4i8>"

(or updating its use in corresponding bif expander field)

?  

This comment is also applied for the other iterators changes.

> +
>  (define_int_attr avvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8PP	"pmxvi4ger8pp")])
>  
> +(define_int_attr avvi4i4i8_dm	[(UNSPEC_MMA_PMXVI4GER8PP	"pmdmxvi4ger8pp")])
> +
>  (define_int_attr vvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2	"pmxvi16ger2")
>  				 (UNSPEC_MMA_PMXVI16GER2S	"pmxvi16ger2s")
>  				 (UNSPEC_MMA_PMXVF16GER2	"pmxvf16ger2")
>  				 (UNSPEC_MMA_PMXVBF16GER2	"pmxvbf16ger2")])
>  
> +(define_int_attr vvi4i4i2_dm	[(UNSPEC_MMA_PMXVI16GER2	"pmdmxvi16ger2")
> +				 (UNSPEC_MMA_PMXVI16GER2S	"pmdmxvi16ger2s")
> +				 (UNSPEC_MMA_PMXVF16GER2	"pmdmxvf16ger2")
> +				 (UNSPEC_MMA_PMXVBF16GER2	"pmdmxvbf16ger2")])
> +
>  (define_int_attr avvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2PP	"pmxvi16ger2pp")
>  				 (UNSPEC_MMA_PMXVI16GER2SPP	"pmxvi16ger2spp")
>  				 (UNSPEC_MMA_PMXVF16GER2PP	"pmxvf16ger2pp")
> @@ -245,25 +254,54 @@ (define_int_attr avvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2PP	"pmxvi16ger2pp")
>  				 (UNSPEC_MMA_PMXVBF16GER2NP	"pmxvbf16ger2np")
>  				 (UNSPEC_MMA_PMXVBF16GER2NN	"pmxvbf16ger2nn")])
>  
> +(define_int_attr avvi4i4i2_dm	[(UNSPEC_MMA_PMXVI16GER2PP	"pmdmxvi16ger2pp")
> +				 (UNSPEC_MMA_PMXVI16GER2SPP	"pmdmxvi16ger2spp")
> +				 (UNSPEC_MMA_PMXVF16GER2PP	"pmdmxvf16ger2pp")
> +				 (UNSPEC_MMA_PMXVF16GER2PN	"pmdmxvf16ger2pn")
> +				 (UNSPEC_MMA_PMXVF16GER2NP	"pmdmxvf16ger2np")
> +				 (UNSPEC_MMA_PMXVF16GER2NN	"pmdmxvf16ger2nn")
> +				 (UNSPEC_MMA_PMXVBF16GER2PP	"pmdmxvbf16ger2pp")
> +				 (UNSPEC_MMA_PMXVBF16GER2PN	"pmdmxvbf16ger2pn")
> +				 (UNSPEC_MMA_PMXVBF16GER2NP	"pmdmxvbf16ger2np")
> +				 (UNSPEC_MMA_PMXVBF16GER2NN	"pmdmxvbf16ger2nn")])
> +
>  (define_int_attr vvi4i4		[(UNSPEC_MMA_PMXVF32GER		"pmxvf32ger")])
>  
> +(define_int_attr vvi4i4_dm	[(UNSPEC_MMA_PMXVF32GER		"pmdmxvf32ger")])
> +
>  (define_int_attr avvi4i4	[(UNSPEC_MMA_PMXVF32GERPP	"pmxvf32gerpp")
>  				 (UNSPEC_MMA_PMXVF32GERPN	"pmxvf32gerpn")
>  				 (UNSPEC_MMA_PMXVF32GERNP	"pmxvf32gernp")
>  				 (UNSPEC_MMA_PMXVF32GERNN	"pmxvf32gernn")])
>  
> +(define_int_attr avvi4i4_dm	[(UNSPEC_MMA_PMXVF32GERPP	"pmdmxvf32gerpp")
> +				 (UNSPEC_MMA_PMXVF32GERPN	"pmdmxvf32gerpn")
> +				 (UNSPEC_MMA_PMXVF32GERNP	"pmdmxvf32gernp")
> +				 (UNSPEC_MMA_PMXVF32GERNN	"pmdmxvf32gernn")])
> +
>  (define_int_attr pvi4i2		[(UNSPEC_MMA_PMXVF64GER		"pmxvf64ger")])
>  
> +(define_int_attr pvi4i2_dm	[(UNSPEC_MMA_PMXVF64GER		"pmdmxvf64ger")])
> +
>  (define_int_attr apvi4i2	[(UNSPEC_MMA_PMXVF64GERPP	"pmxvf64gerpp")
>  				 (UNSPEC_MMA_PMXVF64GERPN	"pmxvf64gerpn")
>  				 (UNSPEC_MMA_PMXVF64GERNP	"pmxvf64gernp")
>  				 (UNSPEC_MMA_PMXVF64GERNN	"pmxvf64gernn")])
>  
> +(define_int_attr apvi4i2_dm	[(UNSPEC_MMA_PMXVF64GERPP	"pmdmxvf64gerpp")
> +				 (UNSPEC_MMA_PMXVF64GERPN	"pmdmxvf64gerpn")
> +				 (UNSPEC_MMA_PMXVF64GERNP	"pmdmxvf64gernp")
> +				 (UNSPEC_MMA_PMXVF64GERNN	"pmdmxvf64gernn")])
> +
>  (define_int_attr vvi4i4i4	[(UNSPEC_MMA_PMXVI8GER4		"pmxvi8ger4")])
>  
> +(define_int_attr vvi4i4i4_dm	[(UNSPEC_MMA_PMXVI8GER4		"pmdmxvi8ger4")])
> +
>  (define_int_attr avvi4i4i4	[(UNSPEC_MMA_PMXVI8GER4PP	"pmxvi8ger4pp")
>  				 (UNSPEC_MMA_PMXVI8GER4SPP	"pmxvi8ger4spp")])
>  
> +(define_int_attr avvi4i4i4_dm	[(UNSPEC_MMA_PMXVI8GER4PP	"pmdmxvi8ger4pp")
> +				 (UNSPEC_MMA_PMXVI8GER4SPP	"pmdmxvi8ger4spp")])
>  
>  ;; Vector pair support.  OOmode can only live in VSRs.
>  (define_expand "movoo"
> @@ -629,7 +667,10 @@ (define_insn "mma_<vv>"
>  		    (match_operand:V16QI 2 "vsx_register_operand" "wa,v,?wa")]
>  		    MMA_VV))]
>    "TARGET_MMA"
> -  "<vv> %A0,%x1,%x2"
> +  "@
> +   dm<vv> %A0,%x1,%x2
> +   <vv> %A0,%x1,%x2
> +   <vv> %A0,%x1,%x2"
>    [(set_attr "type" "mma")
>     (set_attr "isa" "dm,not_dm,not_dm")])
>  
> @@ -650,7 +691,10 @@ (define_insn "mma_<pv>"
>  		    (match_operand:V16QI 2 "vsx_register_operand" "wa,v,?wa")]
>  		    MMA_PV))]
>    "TARGET_MMA"
> -  "<pv> %A0,%x1,%x2"
> +  "@
> +   dm<pv> %A0,%x1,%x2
> +   <pv> %A0,%x1,%x2
> +   <pv> %A0,%x1,%x2"
>    [(set_attr "type" "mma")
>     (set_attr "isa" "dm,not_dm,not_dm")])
>  
> @@ -661,7 +705,10 @@ (define_insn "mma_<apv>"
>  		    (match_operand:V16QI 3 "vsx_register_operand" "wa,v,?wa")]
>  		    MMA_APV))]
>    "TARGET_MMA"
> -  "<apv> %A0,%x2,%x3"
> +  "@
> +   dm<apv> %A0,%x2,%x3
> +   <apv> %A0,%x2,%x3
> +   <apv> %A0,%x2,%x3"
>    [(set_attr "type" "mma")
>     (set_attr "isa" "dm,not_dm,not_dm")])
>  
> @@ -674,7 +721,10 @@ (define_insn "mma_<vvi4i4i8>"
>  		    (match_operand:SI 5 "u8bit_cint_operand" "n,n,n")]
>  		    MMA_VVI4I4I8))]
>    "TARGET_MMA"
> -  "<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
> +  "@
> +   dm<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5

typo?  I think you meant <vvi4i4i8_dm>, but it doesn't matter any more with the
above suggestion.

> +   <vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
> +   <vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -703,7 +753,10 @@ (define_insn "mma_<vvi4i4i2>"
>  		    (match_operand:SI 5 "const_0_to_3_operand" "n,n,n")]
>  		    MMA_VVI4I4I2))]
>    "TARGET_MMA"
> -  "<vvi4i4i2> %A0,%x1,%x2,%3,%4,%5"
> +  "@
> +   <vvi4i4i2_dm> %A0,%x1,%x2,%3,%4,%5
> +   <vvi4i4i2> %A0,%x1,%x2,%3,%4,%5
> +   <vvi4i4i2> %A0,%x1,%x2,%3,%4,%5"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -718,7 +771,10 @@ (define_insn "mma_<avvi4i4i2>"
>  		    (match_operand:SI 6 "const_0_to_3_operand" "n,n,n")]
>  		    MMA_AVVI4I4I2))]
>    "TARGET_MMA"
> -  "<avvi4i4i2> %A0,%x2,%x3,%4,%5,%6"
> +  "@
> +   <avvi4i4i2_dm> %A0,%x2,%x3,%4,%5,%6
> +   <avvi4i4i2> %A0,%x2,%x3,%4,%5,%6
> +   <avvi4i4i2> %A0,%x2,%x3,%4,%5,%6"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -731,7 +787,10 @@ (define_insn "mma_<vvi4i4>"
>  		    (match_operand:SI 4 "const_0_to_15_operand" "n,n,n")]
>  		    MMA_VVI4I4))]
>    "TARGET_MMA"
> -  "<vvi4i4> %A0,%x1,%x2,%3,%4"
> +  "@
> +   <vvi4i4_dm> %A0,%x1,%x2,%3,%4
> +   <vvi4i4> %A0,%x1,%x2,%3,%4
> +   <vvi4i4> %A0,%x1,%x2,%3,%4"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -745,7 +804,10 @@ (define_insn "mma_<avvi4i4>"
>  		    (match_operand:SI 5 "const_0_to_15_operand" "n,n,n")]
>  		    MMA_AVVI4I4))]
>    "TARGET_MMA"
> -  "<avvi4i4> %A0,%x2,%x3,%4,%5"
> +  "@
> +   <avvi4i4_dm> %A0,%x2,%x3,%4,%5
> +   <avvi4i4> %A0,%x2,%x3,%4,%5
> +   <avvi4i4> %A0,%x2,%x3,%4,%5"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -758,7 +820,10 @@ (define_insn "mma_<pvi4i2>"
>  		    (match_operand:SI 4 "const_0_to_3_operand" "n,n,n")]
>  		    MMA_PVI4I2))]
>    "TARGET_MMA"
> -  "<pvi4i2> %A0,%x1,%x2,%3,%4"
> +  "@
> +   <pvi4i2_dm> %A0,%x1,%x2,%3,%4
> +   <pvi4i2> %A0,%x1,%x2,%3,%4
> +   <pvi4i2> %A0,%x1,%x2,%3,%4"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -772,7 +837,10 @@ (define_insn "mma_<apvi4i2>"
>  		    (match_operand:SI 5 "const_0_to_3_operand" "n,n,n")]
>  		    MMA_APVI4I2))]
>    "TARGET_MMA"
> -  "<apvi4i2> %A0,%x2,%x3,%4,%5"
> +  "@
> +   <apvi4i2_dm> %A0,%x2,%x3,%4,%5
> +   <apvi4i2> %A0,%x2,%x3,%4,%5
> +   <apvi4i2> %A0,%x2,%x3,%4,%5"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -786,7 +854,10 @@ (define_insn "mma_<vvi4i4i4>"
>  		    (match_operand:SI 5 "const_0_to_15_operand" "n,n,n")]
>  		    MMA_VVI4I4I4))]
>    "TARGET_MMA"
> -  "<vvi4i4i4> %A0,%x1,%x2,%3,%4,%5"
> +  "@
> +   <vvi4i4i4_dm> %A0,%x1,%x2,%3,%4,%5
> +   <vvi4i4i4> %A0,%x1,%x2,%3,%4,%5
> +   <vvi4i4i4> %A0,%x1,%x2,%3,%4,%5"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> @@ -801,7 +872,10 @@ (define_insn "mma_<avvi4i4i4>"
>  		    (match_operand:SI 6 "const_0_to_15_operand" "n,n,n")]
>  		    MMA_AVVI4I4I4))]
>    "TARGET_MMA"
> -  "<avvi4i4i4> %A0,%x2,%x3,%4,%5,%6"
> +  "@
> +   <avvi4i4i4_dm> %A0,%x2,%x3,%4,%5,%6
> +   <avvi4i4i4> %A0,%x2,%x3,%4,%5,%6
> +   <avvi4i4i4> %A0,%x2,%x3,%4,%5,%6"
>    [(set_attr "type" "mma")
>     (set_attr "prefixed" "yes")
>     (set_attr "isa" "dm,not_dm,not_dm")])
> diff --git a/gcc/testsuite/gcc.target/powerpc/dm-double-test.c b/gcc/testsuite/gcc.target/powerpc/dm-double-test.c
> new file mode 100644
> index 00000000000..66c19779585
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/dm-double-test.c
> @@ -0,0 +1,194 @@
> +/* Test derived from mma-double-1.c, modified for dense math.  */
> +/* { dg-do compile } */
> +/* { dg-require-effective-target powerpc_dense_math_ok } */
> +/* { dg-options "-mdejagnu-cpu=future -O2" } */
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <altivec.h>
> +
> +typedef unsigned char vec_t __attribute__ ((vector_size (16)));
> +typedef double v4sf_t __attribute__ ((vector_size (16)));
> +#define SAVE_ACC(ACC, ldc, J)  \
> +	  __builtin_mma_disassemble_acc (result, ACC); \
> +	  rowC = (v4sf_t *) &CO[0*ldc+J]; \
> +          rowC[0] += result[0]; \
> +          rowC = (v4sf_t *) &CO[1*ldc+J]; \
> +          rowC[0] += result[1]; \
> +          rowC = (v4sf_t *) &CO[2*ldc+J]; \
> +          rowC[0] += result[2]; \
> +          rowC = (v4sf_t *) &CO[3*ldc+J]; \
> +	  rowC[0] += result[3];
> +
> +void
> +DM (int m, int n, int k, double *A, double *B, double *C)
> +{
> +  __vector_quad acc0, acc1, acc2, acc3, acc4, acc5, acc6, acc7;
> +  v4sf_t result[4];
> +  v4sf_t *rowC;
> +  for (int l = 0; l < n; l += 4)
> +    {
> +      double *CO;
> +      double *AO;
> +      AO = A;
> +      CO = C;
> +      C += m * 4;
> +      for (int j = 0; j < m; j += 16)
> +	{
> +	  double *BO = B;
> +	  __builtin_mma_xxsetaccz (&acc0);
> +	  __builtin_mma_xxsetaccz (&acc1);
> +	  __builtin_mma_xxsetaccz (&acc2);
> +	  __builtin_mma_xxsetaccz (&acc3);
> +	  __builtin_mma_xxsetaccz (&acc4);
> +	  __builtin_mma_xxsetaccz (&acc5);
> +	  __builtin_mma_xxsetaccz (&acc6);
> +	  __builtin_mma_xxsetaccz (&acc7);
> +	  unsigned long i;
> +
> +	  for (i = 0; i < k; i++)
> +	    {
> +	      vec_t *rowA = (vec_t *) & AO[i * 16];
> +	      __vector_pair rowB;
> +	      vec_t *rb = (vec_t *) & BO[i * 4];
> +	      __builtin_mma_assemble_pair (&rowB, rb[1], rb[0]);
> +	      __builtin_mma_xvf64gerpp (&acc0, rowB, rowA[0]);
> +	      __builtin_mma_xvf64gerpp (&acc1, rowB, rowA[1]);
> +	      __builtin_mma_xvf64gerpp (&acc2, rowB, rowA[2]);
> +	      __builtin_mma_xvf64gerpp (&acc3, rowB, rowA[3]);
> +	      __builtin_mma_xvf64gerpp (&acc4, rowB, rowA[4]);
> +	      __builtin_mma_xvf64gerpp (&acc5, rowB, rowA[5]);
> +	      __builtin_mma_xvf64gerpp (&acc6, rowB, rowA[6]);
> +	      __builtin_mma_xvf64gerpp (&acc7, rowB, rowA[7]);
> +	    }
> +	  SAVE_ACC (&acc0, m, 0);
> +	  SAVE_ACC (&acc2, m, 4);
> +	  SAVE_ACC (&acc1, m, 2);
> +	  SAVE_ACC (&acc3, m, 6);
> +	  SAVE_ACC (&acc4, m, 8);
> +	  SAVE_ACC (&acc6, m, 12);
> +	  SAVE_ACC (&acc5, m, 10);
> +	  SAVE_ACC (&acc7, m, 14);
> +	  AO += k * 16;
> +	  BO += k * 4;
> +	  CO += 16;
> +	}
> +      B += k * 4;
> +    }
> +}
> +
> +void
> +init (double *matrix, int row, int column)
> +{
> +  for (int j = 0; j < column; j++)
> +    {
> +      for (int i = 0; i < row; i++)
> +	{
> +	  matrix[j * row + i] = (i * 16 + 2 + j) / 0.123;
> +	}
> +    }
> +}
> +
> +void
> +init0 (double *matrix, double *matrix1, int row, int column)
> +{
> +  for (int j = 0; j < column; j++)
> +    for (int i = 0; i < row; i++)
> +      matrix[j * row + i] = matrix1[j * row + i] = 0;
> +}
> +
> +
> +void
> +print (const char *name, const double *matrix, int row, int column)
> +{
> +  printf ("Matrix %s has %d rows and %d columns:\n", name, row, column);
> +  for (int i = 0; i < row; i++)
> +    {
> +      for (int j = 0; j < column; j++)
> +	{
> +	  printf ("%f ", matrix[j * row + i]);
> +	}
> +      printf ("\n");
> +    }
> +  printf ("\n");
> +}
> +
> +int
> +main (int argc, char *argv[])
> +{
> +  int rowsA, colsB, common;
> +  int i, j, k;
> +  int ret = 0;
> +
> +  for (int t = 16; t <= 128; t += 16)
> +    {
> +      for (int t1 = 4; t1 <= 16; t1 += 4)
> +	{
> +	  rowsA = t;
> +	  colsB = t1;
> +	  common = 1;
> +	  /* printf ("Running test for rows = %d,cols = %d\n", t, t1); */
> +	  double A[rowsA * common];
> +	  double B[common * colsB];
> +	  double C[rowsA * colsB];
> +	  double D[rowsA * colsB];
> +
> +
> +	  init (A, rowsA, common);
> +	  init (B, common, colsB);
> +	  init0 (C, D, rowsA, colsB);
> +	  DM (rowsA, colsB, common, A, B, C);
> +
> +	  for (i = 0; i < colsB; i++)
> +	    {
> +	      for (j = 0; j < rowsA; j++)
> +		{
> +		  D[i * rowsA + j] = 0;
> +		  for (k = 0; k < common; k++)
> +		    {
> +		      D[i * rowsA + j] +=
> +			A[k * rowsA + j] * B[k + common * i];
> +		    }
> +		}
> +	    }
> +	  for (i = 0; i < colsB; i++)
> +	    {
> +	      for (j = 0; j < rowsA; j++)
> +		{
> +		  for (k = 0; k < common; k++)
> +		    {
> +		      if (D[i * rowsA + j] != C[i * rowsA + j])
> +			{
> +			  printf ("Error %d,%d,%d\n",i,j,k);
> +			  ret++;
> +			}
> +		    }
> +		}
> +	    }
> +	  if (ret)
> +	    {
> +	      print ("A", A, rowsA, common);
> +	      print ("B", B, common, colsB);
> +	      print ("C", C, rowsA, colsB);
> +	      print ("D", D, rowsA, colsB);
> +	    }
> +	}
> +    }
> +  
> +#ifdef VERBOSE
> +  if (ret)
> +    printf ("DM double test fail: %d errors\n",ret);
> +  else
> +    printf ("DM double test success: 0 DM errors\n");
> +#else
> +  if (ret)
> +    abort();
> +#endif
> +      
> +  return ret;
> +}
> +
> +/* { dg-final { scan-assembler {\mdmsetdmrz\M}      } } */
> +/* { dg-final { scan-assembler {\mdmxvf64gerpp\M}   } } */
> +/* { dg-final { scan-assembler {\mdmxxextfdmr512\M} } } */
> +
> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
> index 1b4a3fb18df..2dec3682a2f 100644
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -7101,6 +7101,25 @@ proc check_effective_target_power10_ok { } {
>      }
>  }
>  
> +# Return 1 if this is a PowerPC target supporting -mcpu=future or -mdense-math

s/ or -mdense-math//

The others look good to me, thanks!

BR,
Kewen

> +# which enables the dense math operations.
> +proc check_effective_target_powerpc_dense_math_ok { } {
> +	return [check_no_compiler_messages_nocache powerpc_dense_math_ok assembly {
> +		__vector_quad vq;
> +		void test (void)
> +		{
> +		#ifndef __PPC_DMR__
> +		#error "target does not have dense math support."
> +		#else
> +		/* Make sure we have dense math support.  */
> +		  __vector_quad dmr;
> +		  __asm__ ("dmsetaccz %A0" : "=wD" (dmr));
> +		  vq = dmr;
> +		#endif
> +		}
> +	} "-mcpu=future"]
> +}
> +
>  # Return 1 if this is a PowerPC target supporting -mfloat128 via either
>  # software emulation on power7/power8 systems or hardware support on power9.
>  


  parent reply	other threads:[~2024-02-04  5:47 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-05 23:27 Repost [PATCH 0/6] PowerPC Future patches Michael Meissner
2024-01-05 23:35 ` Repost [PATCH 1/6] Add -mcpu=future Michael Meissner
2024-01-19 18:43   ` Ping " Michael Meissner
2024-01-23  8:44   ` Repost " Kewen.Lin
2024-02-06  6:01     ` Michael Meissner
2024-02-07  9:21       ` Kewen.Lin
2024-02-07 19:58         ` Michael Meissner
2024-02-20 10:35           ` Kewen.Lin
2024-02-21  7:19             ` Michael Meissner
2024-02-26 10:46               ` Kewen.Lin
2024-02-23 17:57             ` Segher Boessenkool
2024-02-08 18:42         ` Segher Boessenkool
2024-02-08 18:35       ` Segher Boessenkool
2024-02-08 20:10   ` Segher Boessenkool
2024-01-05 23:37 ` Repost [PATCH 2/6] PowerPC: Make -mcpu=future enable -mblock-ops-vector-pair Michael Meissner
2024-01-19 18:44   ` Ping " Michael Meissner
2024-01-23  8:54   ` Repost " Kewen.Lin
2024-01-05 23:38 ` Repost [PATCH 3/6] PowerPC: Add support for accumulators in DMR registers Michael Meissner
2024-01-19 18:46   ` Ping " Michael Meissner
2024-01-25  9:28   ` Repost " Kewen.Lin
2024-02-07  0:06     ` Michael Meissner
2024-02-07  9:38       ` Kewen.Lin
2024-02-08  0:26         ` Michael Meissner
2024-01-05 23:39 ` Repost [PATCH 4/6] PowerPC: Make MMA insns support " Michael Meissner
2024-01-19 18:47   ` Ping " Michael Meissner
2024-02-04  3:21   ` Repost " Kewen.Lin
2024-02-07  3:31     ` Michael Meissner
2024-01-05 23:40 ` Repost [PATCH 5/6] PowerPC: Switch to dense math names for all MMA operations Michael Meissner
2024-01-19 18:48   ` Ping " Michael Meissner
2024-02-04  5:47   ` Kewen.Lin [this message]
2024-02-07 20:01     ` Repost " Michael Meissner
2024-01-05 23:42 ` Repost [PATCH 6/6] PowerPC: Add support for 1,024 bit DMR registers Michael Meissner
2024-01-19 18:49   ` Ping " Michael Meissner
2024-02-05  3:58   ` Repost " Kewen.Lin
2024-02-08  0:35     ` Michael Meissner
2024-02-08 18:22 ` Repost [PATCH 0/6] PowerPC Future patches Segher Boessenkool

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50a94e38-540e-7bf0-0f75-1e7f0525e120@linux.ibm.com \
    --to=linkw@linux.ibm.com \
    --cc=bergner@linux.ibm.com \
    --cc=dje.gcc@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=meissner@linux.ibm.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).