public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "jakub at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/102989] Implement C2x's n2763 (_BitInt)
Date: Wed, 26 Oct 2022 06:50:28 +0000	[thread overview]
Message-ID: <bug-102989-4-aDqzThRPlC@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-102989-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102989

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org,
                   |                            |rsandifo at gcc dot gnu.org

--- Comment #23 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Seems LLVM currently only supports _BitInt up to 128, which is kind of useless
for users, those sizes can be easily handled as bitfields and performing normal
arithmetics on them.
As for implementation, I'd like to brainstorm about it a little bit.
I'd say we want a new tree code for it, say BITINT_TYPE.  TYPE_PRECISION
unfortunately is only 10-bit, that is not enough, so it would need the full
precision to be specified somewhere else.  And have targetm specify the ABI
details (size of a limb (which would need to be exposed to libgcc with
-fbuilding-libgcc), unless it is everywhere the same whether the limbs are
least significant to most significant or vice versa, and whether the highest
limb is sign/zero extended or unspecified beyond the precision.
We'll need to handle the wide constants somehow, but we have a problem with
wide ints that widest_int is not wide enough to handle arbitrarily long
constants.
Shall the type be a GIMPLE reg type?
I assume for _BitInt <= 128 (or when TImode isn't supported <= 64) we just want
to keep the new type on the function parameter/return value boundaries and use
INTEGER_TYPEs from say gimplification.
What about the large ones?  Say for arbitrary size generic vectors we keep them
in SSA form until late (generic vector lowering) and at that point lower,
perhaps we could do the same for _BitInt?  The unary as well as most of binary
operations  can be handled by simple loops over extraction of limbs from the
large number, then there is multiplication and division/modulo.  I think the
latter is why LLVM restricts it to 128 bits right now,
https://gcc.gnu.org/pipermail/gcc/2022-May/thread.html#238657
was an proposal from the LLVM side but I don't see it being actually further
developed and don't see it on LLVM trunk.
I wonder if for these libgcc APIs (and, is just __divmod/__udivmod enough, or
do we want also multiplication, or for -Os purposes also other APIs?) it
wouldn't be better to have more GMP/mpn like APIs where we don't specify number
of limbs like in the above thread, but number of bits and perhaps don't specify
it just for one argument but for multiple, so that we can then for the lowering
match sign/zero extensions of the arguments and can handle say _BitInt(2048) /
_BitInt(16) efficiently.
Thoughts on this?

  parent reply	other threads:[~2022-10-26  6:50 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-28 17:41 [Bug c/102989] New: Add Clang's _ExtInt(N) colomar.6.4.3 at gmail dot com
2021-10-28 17:54 ` [Bug c/102989] " colomar.6.4.3 at gmail dot com
2021-10-28 17:57 ` colomar.6.4.3 at gmail dot com
2021-10-28 17:57 ` colomar.6.4.3 at gmail dot com
2021-10-28 18:01 ` jakub at gcc dot gnu.org
2021-10-28 18:11 ` colomar.6.4.3 at gmail dot com
2021-10-28 21:41 ` joseph at codesourcery dot com
2021-10-28 21:47 ` [Bug c/102989] Implement C2x's n2763 (_BitInt) pinskia at gcc dot gnu.org
2021-10-28 21:49 ` pinskia at gcc dot gnu.org
2021-11-11 19:42 ` pinskia at gcc dot gnu.org
2021-11-11 19:58 ` colomar.6.4.3 at gmail dot com
2021-11-11 21:27 ` joseph at codesourcery dot com
2022-10-25 12:14 ` jakub at gcc dot gnu.org
2022-10-25 15:25 ` hjl.tools at gmail dot com
2022-10-25 20:32 ` joseph at codesourcery dot com
2022-10-25 20:42 ` hjl.tools at gmail dot com
2022-10-25 20:45 ` jakub at gcc dot gnu.org
2022-10-25 21:05 ` segher at gcc dot gnu.org
2022-10-25 21:05 ` hjl.tools at gmail dot com
2022-10-25 21:09 ` pinskia at gcc dot gnu.org
2022-10-25 21:10 ` jakub at gcc dot gnu.org
2022-10-25 21:30 ` segher at gcc dot gnu.org
2022-10-25 21:50 ` segher at gcc dot gnu.org
2022-10-26  6:29 ` uweigand at gcc dot gnu.org
2022-10-26  6:50 ` jakub at gcc dot gnu.org [this message]
2022-10-26  8:35 ` redi at gcc dot gnu.org
2022-10-26 17:29 ` joseph at codesourcery dot com
2022-10-28  9:47 ` rguenth at gcc dot gnu.org
2022-10-28 10:32 ` jakub at gcc dot gnu.org
2022-10-28 10:51 ` rguenther at suse dot de
2022-10-28 11:02 ` colomar.6.4.3 at gmail dot com
2022-10-28 17:27 ` pinskia at gcc dot gnu.org
2022-10-28 20:31 ` joseph at codesourcery dot com
2022-10-28 20:39 ` joseph at codesourcery dot com
2023-04-09 19:59 ` leni536 at gmail dot com
2023-04-12 22:17 ` george at bott dot gg
2023-05-11 18:00 ` jakub at gcc dot gnu.org
2023-05-11 18:21 ` jakub at gcc dot gnu.org
2023-05-11 22:10 ` joseph at codesourcery dot com
2023-05-12  7:46 ` jakub at gcc dot gnu.org
2023-05-12  8:41 ` rguenth at gcc dot gnu.org
2023-05-16 16:20 ` jakub at gcc dot gnu.org
2023-05-17  7:22 ` rguenth at gcc dot gnu.org
2023-05-23 12:04 ` jakub at gcc dot gnu.org
2023-05-24 11:48 ` jakub at gcc dot gnu.org
2023-05-24 12:46 ` rguenther at suse dot de
2023-05-24 13:16 ` jakub at gcc dot gnu.org
2023-05-24 13:29 ` rguenther at suse dot de
2023-05-24 14:18 ` jakub at gcc dot gnu.org
2023-05-24 14:57 ` rguenther at suse dot de
2023-05-24 15:31 ` jakub at gcc dot gnu.org
2023-05-26 16:13 ` jakub at gcc dot gnu.org
2023-05-26 16:16 ` jakub at gcc dot gnu.org
2023-05-26 17:11 ` jakub at gcc dot gnu.org
2023-06-02 10:39 ` jakub at gcc dot gnu.org
2023-06-02 10:43 ` rguenther at suse dot de
2023-06-02 10:53 ` jakub at gcc dot gnu.org
2023-06-02 17:06 ` jakub at gcc dot gnu.org
2023-06-05  7:14 ` rguenth at gcc dot gnu.org
2023-06-05  7:34 ` jakub at gcc dot gnu.org
2023-06-05  7:43 ` rguenth at gcc dot gnu.org
2023-06-05  7:58 ` jakub at gcc dot gnu.org
2023-06-05  8:21 ` rguenther at suse dot de
2023-06-05  8:33 ` jakub at gcc dot gnu.org
2023-06-06  7:13 ` rguenth at gcc dot gnu.org
2023-06-15 11:28 ` jakub at gcc dot gnu.org
2023-06-15 18:02 ` jakub at gcc dot gnu.org
2023-06-19 17:40 ` jakub at gcc dot gnu.org
2023-06-20 20:04 ` jakub at gcc dot gnu.org
2023-06-22 19:47 ` jakub at gcc dot gnu.org
2023-06-23 17:03 ` jakub at gcc dot gnu.org
2023-06-26 18:48 ` jakub at gcc dot gnu.org
2023-06-28 17:21 ` jakub at gcc dot gnu.org
2023-06-29 17:01 ` jakub at gcc dot gnu.org
2023-06-30 19:22 ` jakub at gcc dot gnu.org
2023-07-05 17:23 ` jakub at gcc dot gnu.org
2023-07-07 14:26 ` jakub at gcc dot gnu.org
2023-07-07 17:59 ` jakub at gcc dot gnu.org
2023-07-11 11:20 ` jakub at gcc dot gnu.org
2023-07-12 16:28 ` jakub at gcc dot gnu.org
2023-07-13 18:03 ` jakub at gcc dot gnu.org
2023-07-14 11:18 ` jakub at gcc dot gnu.org
2023-07-14 11:18 ` jakub at gcc dot gnu.org
2023-07-14 17:19 ` jakub at gcc dot gnu.org
2023-07-17 10:21 ` jakub at gcc dot gnu.org
2023-07-17 18:06 ` jakub at gcc dot gnu.org
2023-07-18 11:07 ` jakub at gcc dot gnu.org
2023-07-18 15:45 ` jakub at gcc dot gnu.org
2023-07-20 15:51 ` jakub at gcc dot gnu.org
2023-07-21 17:10 ` jakub at gcc dot gnu.org
2023-07-25 14:40 ` jakub at gcc dot gnu.org
2023-07-26 13:04 ` jakub at gcc dot gnu.org
2023-07-26 17:41 ` jakub at gcc dot gnu.org
2023-07-27 15:18 ` jakub at gcc dot gnu.org
2023-08-10  7:22 ` cvs-commit at gcc dot gnu.org
2023-08-10  7:23 ` cvs-commit at gcc dot gnu.org
2023-08-10 15:30 ` cvs-commit at gcc dot gnu.org
2023-08-14 21:55 ` tmgross at umich dot edu
2023-09-06 15:57 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:57 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:57 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:57 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:57 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:57 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-06 15:58 ` cvs-commit at gcc dot gnu.org
2023-09-07  9:21 ` cvs-commit at gcc dot gnu.org
2023-10-12 14:07 ` cvs-commit at gcc dot gnu.org
2023-10-14  7:38 ` cvs-commit at gcc dot gnu.org
2023-10-14 22:38 ` gaius at gcc dot gnu.org
2023-11-01  8:17 ` gaius at gcc dot gnu.org
2023-11-01  9:06 ` cvs-commit at gcc dot gnu.org

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=bug-102989-4-aDqzThRPlC@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.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).