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.
>
next prev 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).