mbox series

[0/3,v2] rs6000: Add support for Matrix-Multiply Assist (MMA) built-in functions.

Message ID df586e9d-e39a-f1c1-08ad-660d412035fd@linux.ibm.com
Headers show
Series rs6000: Add support for Matrix-Multiply Assist (MMA) built-in functions. | expand

Message

Peter Bergner June 18, 2020, 8:42 p.m. UTC
POWER ISA 3.1 added new Matrix-Multiply Assist (MMA) instructions.
The following patch set adds support for generating these instructions
through built-in functions which are enabled with the -mmma option.

The patch1 and patch1+patch2+patch3 have been bootstrapped and regtested on
powerpc64le-linux with no regressions.  In addition, patch1+patch2+patch3
has been bootstrapped and regtested on powerpc64-linux (BE), also without
regressions.  I'll note that I split the testsuite changes into their own
patch for review purposes, but I plan on committing patch2 and patch3 together.

Changes since v1:
  Patch 1/3:
    - Modified verbiage in mma.md per Will's suggestion.
    - Modified rs6000_split_multireg_move to correctly handle BE PXImode
      and POImode moves.
  Patch 2/3:
    - Updated ChangeLog entry per Segher's suggestion.
    - Updated doc/extend.texi with correct built-in names for
      __builtin_vsx_xvcvspbf16 and __builtin_vsx_xvcvbf16sp.
  Patch 3/3:
    - No changes.

Peter

Comments

Peter Bergner June 24, 2020, 7:28 p.m. UTC | #1
On 6/18/20 3:42 PM, Peter Bergner wrote:
> POWER ISA 3.1 added new Matrix-Multiply Assist (MMA) instructions.
> The following patch set adds support for generating these instructions
> through built-in functions which are enabled with the -mmma option.
> 
> The patch1 and patch1+patch2+patch3 have been bootstrapped and regtested on
> powerpc64le-linux with no regressions.  In addition, patch1+patch2+patch3
> has been bootstrapped and regtested on powerpc64-linux (BE), also without
> regressions.  I'll note that I split the testsuite changes into their own
> patch for review purposes, but I plan on committing patch2 and patch3 together.
> 
> Changes since v1:
>   Patch 1/3:
>     - Modified verbiage in mma.md per Will's suggestion.
>     - Modified rs6000_split_multireg_move to correctly handle BE PXImode
>       and POImode moves.
>   Patch 2/3:
>     - Updated ChangeLog entry per Segher's suggestion.
>     - Updated doc/extend.texi with correct built-in names for
>       __builtin_vsx_xvcvspbf16 and __builtin_vsx_xvcvbf16sp.
>   Patch 3/3:
>     - No changes.

The committed patches don't seem to have caused any bootstrap issues on trunk
and are pretty independent of the rest of the rs6000 backend, so I'd like
permission to back port the two commits to GCC 10.  Patch 2 makes used of
the u8bit_cint_operand predicate which Kelvin added, but that isn't in GCC 10,
so I need to back port that change too.

The back ports of the MMA patches/commits was straight forward and I'm
currently bootstrapping/regtesting the backports on both powerpc64le-linux
and powerpc64-linux.  Is this (including the hunk below) ok for GCC 10
release branch assuming the tests come back clean?

Peter


    rs6000: Backport u8bit_cint_operand predicate.
    
    2020-05-11  Kelvin Nilsen  <wschmidt@linux.ibm.com>
            Backported from master
            * config/rs6000/predicates.md (u8bit_cint_operand): New predicate.

diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index bf04e4d431f..529c2beb773 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -234,6 +234,11 @@ (define_predicate "u7bit_cint_operand"
   (and (match_code "const_int")
        (match_test "IN_RANGE (INTVAL (op), 0, 127)")))
 
+;; Return 1 if op is an unsigned 8-bit constant integer.
+(define_predicate "u8bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "IN_RANGE (INTVAL (op), 0, 255)")))
+
 ;; Return 1 if op is a signed 8-bit constant integer.
 ;; Integer multiplication complete more quickly
 (define_predicate "s8bit_cint_operand"
Segher Boessenkool June 24, 2020, 7:37 p.m. UTC | #2
Hi!

On Wed, Jun 24, 2020 at 02:28:00PM -0500, Peter Bergner via Gcc-patches wrote:
> On 6/18/20 3:42 PM, Peter Bergner wrote:
> > POWER ISA 3.1 added new Matrix-Multiply Assist (MMA) instructions.
> > The following patch set adds support for generating these instructions
> > through built-in functions which are enabled with the -mmma option.
> > 
> > The patch1 and patch1+patch2+patch3 have been bootstrapped and regtested on
> > powerpc64le-linux with no regressions.  In addition, patch1+patch2+patch3
> > has been bootstrapped and regtested on powerpc64-linux (BE), also without
> > regressions.  I'll note that I split the testsuite changes into their own
> > patch for review purposes, but I plan on committing patch2 and patch3 together.
> > 
> > Changes since v1:
> >   Patch 1/3:
> >     - Modified verbiage in mma.md per Will's suggestion.
> >     - Modified rs6000_split_multireg_move to correctly handle BE PXImode
> >       and POImode moves.
> >   Patch 2/3:
> >     - Updated ChangeLog entry per Segher's suggestion.
> >     - Updated doc/extend.texi with correct built-in names for
> >       __builtin_vsx_xvcvspbf16 and __builtin_vsx_xvcvbf16sp.
> >   Patch 3/3:
> >     - No changes.
> 
> The committed patches don't seem to have caused any bootstrap issues on trunk
> and are pretty independent of the rest of the rs6000 backend, so I'd like
> permission to back port the two commits to GCC 10.  Patch 2 makes used of
> the u8bit_cint_operand predicate which Kelvin added, but that isn't in GCC 10,
> so I need to back port that change too.
> 
> The back ports of the MMA patches/commits was straight forward and I'm
> currently bootstrapping/regtesting the backports on both powerpc64le-linux
> and powerpc64-linux.  Is this (including the hunk below) ok for GCC 10
> release branch assuming the tests come back clean?

Yes, all are okay for 10 as well (incl. Kelvin's backport).  Thanks!

>     rs6000: Backport u8bit_cint_operand predicate.

(No dot at the end of the subject please.)


Segher
Peter Bergner June 25, 2020, 1:15 p.m. UTC | #3
On 6/24/20 2:37 PM, Segher Boessenkool wrote:
> On Wed, Jun 24, 2020 at 02:28:00PM -0500, Peter Bergner via Gcc-patches wrote:
>> The back ports of the MMA patches/commits was straight forward and I'm
>> currently bootstrapping/regtesting the backports on both powerpc64le-linux
>> and powerpc64-linux.  Is this (including the hunk below) ok for GCC 10
>> release branch assuming the tests come back clean?
> 
> Yes, all are okay for 10 as well (incl. Kelvin's backport).  Thanks!
> 
>>     rs6000: Backport u8bit_cint_operand predicate.
> 
> (No dot at the end of the subject please.)

Ok, testing was clean on BE and LE and I made the subject change you requested.
Back port has been pushed to GCC 10.  Thanks!

Peter