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: Thu, 11 May 2023 18:21:51 +0000 [thread overview] Message-ID: <bug-102989-4-R3hVHsLJMN@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 --- Comment #36 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Created attachment 55056 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55056&action=edit gcc14-bitint-wip.patch Just WIP on the top of the above patch, which does parsing of the _BitInt type specifier in C and introduces BITINT_TYPE (I'm afraid we can't use INTEGER_TYPE for that, both because it can have different calling/returning convention in different ABIs and because we need more than 16-bit precision for it as well), but still doesn't use it (right where it would create it stops for now and pretends it is integer). I've added also wb/WB suffix parsing on the libcpp side, but that is where I stopped today. Obviously for CPP_N_BITINT we need different interpretation of the number because cpp_interpret_integer can handle at most 128-bit integers (and of course even for the integers that fit into 128-bit with wb/WB suffixes we also want to use the right type; but I guess we can use INTEGER_CSTs for them). I'm afraid we'll need some other TREE_CODE for bit-precise integer constants which don't fit into widest_int (perhaps better for all that don't fit into 128 bits), because the amount of code that assumes wi::to_widest works on INTEGER_CSTs is huge. As I said earlier, I think something during gimplification or soon after it could remap small _BitInts (up to 128-bit resp. 64-bit when TImode isn't supported) to normal integral types except on the function boundaries (where ABI conventions can result in different rules for them), but probably we can't make INTEGER_TYPE <-> BITINT_TYPE conversions useless because _BitInt could be e.g. passed to varargs. Looking at what clang does, they seem to have raised the limit from 128 to 8388608, but in many cases they emit extremely terrible code. Everything is done without library support inline and even for huge numbers it doesn't even use any loops, so is extremely cache unfriendly. I think we should do something like that solely for very small cases, otherwise use loops and either let normal unrolling do its job, or say do 4 limbs in the loop body at a time or something similar. And would be nice if the ranger could at least discover ranges of how many real bits each SSA_NAME can contain (with bits above those being zero or sign extended) so that we could use more efficient additions/subtractions/multiplications/divisions etc.
next prev parent reply other threads:[~2023-05-11 18:21 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 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 [this message] 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-R3hVHsLJMN@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: linkBe 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).