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.

Bootstrapped on s390.  Ok for mainline and releases/gcc-14?

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.
---
 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 d70eaade8ea..e6f5631ed7a 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 3a63213e571..7f6190fa810 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 9abbd761067..daeed91ef97 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)
-- 
2.45.2

Reply via email to