public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <rguenther@suse.de>
To: Jakub Jelinek <jakub@redhat.com>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] libgcc: Use may_alias attribute in bitint handlers
Date: Thu, 11 Jan 2024 09:35:49 +0100 (CET)	[thread overview]
Message-ID: <5qq80qp9-ps16-p7s3-1385-rqo9r0n368pn@fhfr.qr> (raw)
In-Reply-To: <ZZ+kwBq3N0gXC/LO@tucnak>

On Thu, 11 Jan 2024, Jakub Jelinek wrote:

> Hi!
> 
> As discussed on IRC, the following patch uses may_alias attribute, so that
> on targets like aarch64 where abi_limb_mode != limb_mode the library
> accesses the limbs (half limbs of the ABI) in the arrays with conservative
> alias set.
> 
> So far tested on x86_64-linux with
> make check-gcc check-g++ -j32 -k GCC_TEST_RUN_EXPENSIVE=1 RUNTESTFLAGS="GCC_TEST_RUN_EXPENSIVE=1 dg.exp='*bitint* pr112673.c builtin-stdc-bit-*.c pr112566-2.c pr112511.c' dg-torture.exp=*bitint* dfp.exp=*bitint*"
> Ok for trunk if it passes full bootstrap/regtest?

OK.

Richard.

> 2024-01-11  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* libgcc2.h (UBILtype): New typedef with may_alias attribute.
> 	(__mulbitint3, __divmodbitint4): Use UBILtype * instead of
> 	UWtype * and const UBILtype * instead of const UWtype *.
> 	* libgcc2.c (bitint_reduce_prec, bitint_mul_1, bitint_addmul_1,
> 	__mulbitint3, bitint_negate, bitint_submul_1, __divmodbitint4):
> 	Likewise.
> 	* soft-fp/bitint.h (UBILtype): Change define into a typedef with
> 	may_alias attribute.
> 
> --- libgcc/libgcc2.h.jj	2024-01-03 12:07:28.134370411 +0100
> +++ libgcc/libgcc2.h	2024-01-11 08:42:02.417235956 +0100
> @@ -402,10 +402,12 @@ extern UDWtype __udivmoddi4 (UDWtype, UD
>  #if (defined(__BITINT_MAXWIDTH__) \
>       && (defined(L_mulbitint3) || defined(L_divmodbitint4)))
>  /* _BitInt support.  */
> -extern void __mulbitint3 (UWtype *, SItype, const UWtype *, SItype,
> -			  const UWtype *, SItype);
> -extern void __divmodbitint4 (UWtype *, SItype, UWtype *, SItype,
> -			     const UWtype *, SItype, const UWtype *, SItype);
> +typedef UWtype __attribute__((__may_alias__)) UBILtype;
> +extern void __mulbitint3 (UBILtype *, SItype, const UBILtype *, SItype,
> +			  const UBILtype *, SItype);
> +extern void __divmodbitint4 (UBILtype *, SItype, UBILtype *, SItype,
> +			     const UBILtype *, SItype, const UBILtype *,
> +			     SItype);
>  #endif
>  
>  /* __negdi2 is static inline when building other libgcc2 portions.  */
> --- libgcc/libgcc2.c.jj	2024-01-03 12:07:29.323353753 +0100
> +++ libgcc/libgcc2.c	2024-01-11 08:44:56.260727411 +0100
> @@ -1309,7 +1309,7 @@ __udivdi3 (UDWtype n, UDWtype d)
>     some narrower _BitInt value, reduce precision.  */
>  
>  static inline __attribute__((__always_inline__)) SItype
> -bitint_reduce_prec (const UWtype **p, SItype prec)
> +bitint_reduce_prec (const UBILtype **p, SItype prec)
>  {
>    UWtype mslimb;
>    SItype i;
> @@ -1421,7 +1421,7 @@ bitint_reduce_prec (const UWtype **p, SI
>  /* D = S * L.  */
>  
>  static UWtype
> -bitint_mul_1 (UWtype *d, const UWtype *s, UWtype l, SItype n)
> +bitint_mul_1 (UBILtype *d, const UBILtype *s, UWtype l, SItype n)
>  {
>    UWtype sv, hi, lo, c = 0;
>    do
> @@ -1440,7 +1440,7 @@ bitint_mul_1 (UWtype *d, const UWtype *s
>  /* D += S * L.  */
>  
>  static UWtype
> -bitint_addmul_1 (UWtype *d, const UWtype *s, UWtype l, SItype n)
> +bitint_addmul_1 (UBILtype *d, const UBILtype *s, UWtype l, SItype n)
>  {
>    UWtype sv, hi, lo, c = 0;
>    do
> @@ -1465,9 +1465,9 @@ bitint_addmul_1 (UWtype *d, const UWtype
>     positive.  */
>  
>  void
> -__mulbitint3 (UWtype *ret, SItype retprec,
> -	      const UWtype *u, SItype uprec,
> -	      const UWtype *v, SItype vprec)
> +__mulbitint3 (UBILtype *ret, SItype retprec,
> +	      const UBILtype *u, SItype uprec,
> +	      const UBILtype *v, SItype vprec)
>  {
>    uprec = bitint_reduce_prec (&u, uprec);
>    vprec = bitint_reduce_prec (&v, vprec);
> @@ -1480,7 +1480,7 @@ __mulbitint3 (UWtype *ret, SItype retpre
>        || (avprec > auprec && !(uprec >= 0 && vprec < 0)))
>      {
>        SItype p;
> -      const UWtype *t;
> +      const UBILtype *t;
>        p = uprec; uprec = vprec; vprec = p;
>        p = auprec; auprec = avprec; avprec = p;
>        t = u; u = v; v = t;
> @@ -1643,7 +1643,7 @@ __mulbitint3 (UWtype *ret, SItype retpre
>  /* D = -S.  */
>  
>  static void
> -bitint_negate (UWtype *d, const UWtype *s, SItype n)
> +bitint_negate (UBILtype *d, const UBILtype *s, SItype n)
>  {
>    UWtype c = 1;
>    do
> @@ -1660,7 +1660,7 @@ bitint_negate (UWtype *d, const UWtype *
>  /* D -= S * L.  */
>  
>  static UWtype
> -bitint_submul_1 (UWtype *d, const UWtype *s, UWtype l, SItype n)
> +bitint_submul_1 (UBILtype *d, const UBILtype *s, UWtype l, SItype n)
>  {
>    UWtype sv, hi, lo, c = 0;
>    do
> @@ -1687,10 +1687,10 @@ bitint_submul_1 (UWtype *d, const UWtype
>     should be 0.  */
>  
>  void
> -__divmodbitint4 (UWtype *q, SItype qprec,
> -		 UWtype *r, SItype rprec,
> -		 const UWtype *u, SItype uprec,
> -		 const UWtype *v, SItype vprec)
> +__divmodbitint4 (UBILtype *q, SItype qprec,
> +		 UBILtype *r, SItype rprec,
> +		 const UBILtype *u, SItype uprec,
> +		 const UBILtype *v, SItype vprec)
>  {
>    uprec = bitint_reduce_prec (&u, uprec);
>    vprec = bitint_reduce_prec (&v, vprec);
> @@ -1747,7 +1747,7 @@ __divmodbitint4 (UWtype *q, SItype qprec
>    if (qn >= qn2)
>      qn2 = 0;
>    USItype sz = un + 1 + vn + qn2;
> -  UWtype *buf = __builtin_alloca (sz * sizeof (UWtype));
> +  UBILtype *buf = __builtin_alloca (sz * sizeof (UWtype));
>    USItype uidx, vidx;
>  #if __LIBGCC_BITINT_ORDER__ == __ORDER_BIG_ENDIAN__
>    uidx = un - 1;
> @@ -1768,9 +1768,9 @@ __divmodbitint4 (UWtype *q, SItype qprec
>      __builtin_memcpy (buf + un + 1, v, vn * sizeof (UWtype));
>    if (vp)
>      buf[un + 1 + BITINT_END (0, vn - 1)] &= (((UWtype) 1 << vp) - 1);
> -  UWtype *u2 = buf;
> -  UWtype *v2 = u2 + un + 1;
> -  UWtype *q2 = v2 + vn;
> +  UBILtype *u2 = buf;
> +  UBILtype *v2 = u2 + un + 1;
> +  UBILtype *q2 = v2 + vn;
>    if (!qn2)
>      q2 = q + BITINT_END (qn - (un - vn + 1), 0);
>  
> --- libgcc/soft-fp/bitint.h.jj	2023-09-06 17:42:14.501093073 +0200
> +++ libgcc/soft-fp/bitint.h	2024-01-11 08:39:09.590746494 +0100
> @@ -33,19 +33,19 @@ see the files COPYING3 and COPYING.RUNTI
>  #if BIL_UNITS_PER_WORD == 8
>  #define BIL_TYPE_SIZE (8 * __CHAR_BIT__)
>  #define BILtype		DItype
> -#define UBILtype	UDItype
> +typedef UDItype __attribute__ ((__may_alias__)) UBILtype;
>  #elif BIL_UNITS_PER_WORD == 4
>  #define BIL_TYPE_SIZE (4 * __CHAR_BIT__)
>  #define BILtype		SItype
> -#define UBILtype	USItype
> +typedef USItype __attribute__ ((__may_alias__)) UBILtype;
>  #elif BIL_UNITS_PER_WORD == 2
>  #define BIL_TYPE_SIZE (2 * __CHAR_BIT__)
>  #define BILtype		HItype
> -#define UBILtype	UHItype
> +typedef UHItype __attribute__ ((__may_alias__)) UBILtype;
>  #else
>  #define BIL_TYPE_SIZE __CHAR_BIT__
>  #define BILtype		QItype
> -#define UBILtype	UQItype
> +typedef UQItype __attribute__ ((__may_alias__)) UBILtype;
>  #endif
>  
>  /* If *P is zero or sign extended (the latter only for PREC < 0) from
> 
> 	Jakub
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

      reply	other threads:[~2024-01-11  8:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-11  8:20 Jakub Jelinek
2024-01-11  8:35 ` Richard Biener [this message]

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=5qq80qp9-ps16-p7s3-1385-rqo9r0n368pn@fhfr.qr \
    --to=rguenther@suse.de \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    /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).