https://gcc.gnu.org/g:e903ada5e8881acec734eb3f89c3644bbd8da7e9

commit r14-10582-ge903ada5e8881acec734eb3f89c3644bbd8da7e9
Author: Stefan Schulze Frielinghaus <stefa...@gcc.gnu.org>
Date:   Wed Aug 14 20:12:35 2024 +0200

    s390: Fix high-level builtins vec_gfmsum{,_accum}_128
    
    Starting with r14-9449-g9f2b16ce1efef0 builtins were streamlined with
    those in LLVM.  In particular s390_vgfm{,a}g have been changed from
    UV16QI to UINT128 in order to match those in LLVM.  However, these
    low-level builtins are directly used by the high-level builtins
    vec_gfmsum{,_accum}_128 which expect UV16QI instead.  Therefore,
    introduce new low-level builtins s390_vgfm{,a}g_128 and make use of
    them, respectively.
    
    gcc/ChangeLog:
    
            * config/s390/s390-builtin-types.def (BT_FN_UV16QI_UV2DI_UV2DI):
            New.
            (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI): New.
            * config/s390/s390-builtins.def (s390_vgfmg_128): New.
            (s390_vgfmag_128): New.
            * config/s390/vecintrin.h (vec_gfmsum_128): Use s390_vgfmg_128.
            (vec_gfmsum_accum_128): Use s390_vgfmag_128.
    
    (cherry picked from commit e8a7142a697c5d2673adea33ba23af82a89c9559)

Diff:
---
 gcc/config/s390/s390-builtin-types.def | 2 ++
 gcc/config/s390/s390-builtins.def      | 2 ++
 gcc/config/s390/vecintrin.h            | 4 ++--
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/gcc/config/s390/s390-builtin-types.def 
b/gcc/config/s390/s390-builtin-types.def
index d70eaade8eab..e6f5631ed7ae 100644
--- a/gcc/config/s390/s390-builtin-types.def
+++ b/gcc/config/s390/s390-builtin-types.def
@@ -221,6 +221,7 @@ DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHAR_UCHAR, BT_UV16QI, 
BT_UCHAR, BT_UCHAR)
 DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, BT_INTPTR)
 DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UCHAR, BT_UV16QI, BT_UV16QI, BT_UCHAR)
 DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_2 (BT_FN_UV16QI_UV2DI_UV2DI, BT_UV16QI, BT_UV2DI, BT_UV2DI)
 DEF_FN_TYPE_2 (BT_FN_UV16QI_UV8HI_UV8HI, BT_UV16QI, BT_UV8HI, BT_UV8HI)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_UCHAR_UCHAR, BT_UV2DI, BT_UCHAR, BT_UCHAR)
 DEF_FN_TYPE_2 (BT_FN_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_ULONGLONG, BT_INT)
@@ -299,6 +300,7 @@ DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UCHAR_INT, BT_UV16QI, 
BT_UV16QI, BT_UCHAR, BT
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INT, BT_UV16QI, BT_UV16QI, 
BT_UV16QI, BT_INT)
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, 
BT_UV16QI, BT_INTPTR)
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI, 
BT_UV16QI, BT_UV16QI)
+DEF_FN_TYPE_3 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI, BT_UV16QI, BT_UV2DI, BT_UV2DI, 
BT_UV16QI)
 DEF_FN_TYPE_3 (BT_FN_UV16QI_UV8HI_UV8HI_INTPTR, BT_UV16QI, BT_UV8HI, BT_UV8HI, 
BT_INTPTR)
 DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_UV2DI, 
BT_ULONGLONG, BT_INT)
 DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI_INT, BT_UV2DI, BT_UV2DI, BT_UV2DI, 
BT_INT)
diff --git a/gcc/config/s390/s390-builtins.def 
b/gcc/config/s390/s390-builtins.def
index 3a63213e5719..7f6190fa8103 100644
--- a/gcc/config/s390/s390-builtins.def
+++ b/gcc/config/s390/s390-builtins.def
@@ -1666,6 +1666,7 @@ B_DEF      (s390_vgfmb,                 vec_gfmsumv16qi,  
  0,
 B_DEF      (s390_vgfmh,                 vec_gfmsumv8hi,     0,                 
 B_VX,               0,                  BT_FN_UV4SI_UV8HI_UV8HI)
 B_DEF      (s390_vgfmf,                 vec_gfmsumv4si,     0,                 
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI)
 B_DEF      (s390_vgfmg,                 vec_gfmsum_128,     0,                 
 B_VX,               0,                  BT_FN_UINT128_UV2DI_UV2DI)
+B_DEF      (s390_vgfmg_128,             vec_gfmsum_128,     0,                 
 B_VX,               0,                  BT_FN_UV16QI_UV2DI_UV2DI)
 
 OB_DEF     (s390_vec_gfmsum_accum,      
s390_vec_gfmsum_accum_u8,s390_vec_gfmsum_accum_u32,B_VX,    
BT_FN_OV4SI_OV4SI_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_gfmsum_accum_u8,   s390_vgfmab,        0,                 
 0,                  BT_OV_UV8HI_UV16QI_UV16QI_UV8HI)
@@ -1676,6 +1677,7 @@ B_DEF      (s390_vgfmab,                
vec_gfmsum_accumv16qi,0,
 B_DEF      (s390_vgfmah,                vec_gfmsum_accumv8hi,0,                
 B_VX,               0,                  BT_FN_UV4SI_UV8HI_UV8HI_UV4SI)
 B_DEF      (s390_vgfmaf,                vec_gfmsum_accumv4si,0,                
 B_VX,               0,                  BT_FN_UV2DI_UV4SI_UV4SI_UV2DI)
 B_DEF      (s390_vgfmag,                vec_gfmsum_accum_128,0,                
 B_VX,               0,                  BT_FN_UINT128_UV2DI_UV2DI_UINT128)
+B_DEF      (s390_vgfmag_128,            vec_gfmsum_accum_128,0,                
 B_VX,               0,                  BT_FN_UV16QI_UV2DI_UV2DI_UV16QI)
 
 OB_DEF     (s390_vec_abs,               s390_vec_abs_s8,    s390_vec_abs_dbl,  
 B_VX,               BT_FN_OV4SI_OV4SI)
 OB_DEF_VAR (s390_vec_abs_s8,            s390_vlpb,          0,                 
 0,                  BT_OV_V16QI_V16QI)
diff --git a/gcc/config/s390/vecintrin.h b/gcc/config/s390/vecintrin.h
index 9abbd7610678..daeed91ef972 100644
--- a/gcc/config/s390/vecintrin.h
+++ b/gcc/config/s390/vecintrin.h
@@ -98,8 +98,8 @@ __lcbb(const void *ptr, int bndry)
 #define vec_splat_u64 __builtin_s390_vec_splat_u64
 #define vec_splat_s64 __builtin_s390_vec_splat_s64
 #define vec_checksum __builtin_s390_vcksm
-#define vec_gfmsum_128 __builtin_s390_vgfmg
-#define vec_gfmsum_accum_128 __builtin_s390_vgfmag
+#define vec_gfmsum_128 __builtin_s390_vgfmg_128
+#define vec_gfmsum_accum_128 __builtin_s390_vgfmag_128
 #define vec_ceil(X)   __builtin_s390_vfi((X), 4, 6)
 #define vec_roundp(X) __builtin_s390_vfi((X), 4, 6)
 #define vec_floor(X)  __builtin_s390_vfi((X), 4, 7)

Reply via email to