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: Fri, 12 May 2023 07:46:59 +0000 [thread overview] Message-ID: <bug-102989-4-qieGJWn4OL@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 #38 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I guess there are other options. If we could make wide_int/widest_int non-POD, one option would be to turn their storage into a union of the normal small case we use now everywhere (i.e. fixed one) and one where the val array is not stored directly in the storage but pointed to by some pointer. E.g. class GTY(()) wide_int_storage { private: HOST_WIDE_INT val[WIDE_INT_MAX_ELTS]; unsigned int len; unsigned int precision; could be private: union { HOST_WIDE_INT val[WIDE_INT_MAX_ELTS]; HOST_WIDE_INT *valp; }; unsigned int len; unsigned int precision; and decide which one is which based on len > WIDE_INT_MAX_ELTS or something similar. Or, if we can't affort to make it non-POD, perhaps valp would refer to obstack destroyed at the end of each pass or something similar. Another problem is with INTEGER_CST (note, if we lower this stuff before expansion hopefully we wouldn't need something similar for rtxes). Currently INTEGER_CST has: /* The number of HOST_WIDE_INTs in an INTEGER_CST. */ struct { /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in its native precision. */ unsigned char unextended; /* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to wider precisions based on its TYPE_SIGN. */ unsigned char extended; /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in offset_int precision, with smaller integers being extended according to their TYPE_SIGN. This is equal to one of the two fields above but is cached for speed. */ unsigned char offset; } int_length; Now, this obviously limits the largest representable constants to 0xFF HOST_WIDE_INTs, i.e. at most 16320 bits. We have 8 spare bits there, so one possibility would be to add a flag there and if that flag is true, ignore int_length.{unextended,extended,offset} fields and instead stick that info somewhere into the val array. Or kill TREE_INT_CST_OFFSET_NUNITS (replace it with TREE_INT_CST_EXT_NUNITS (t) <= OFFSET_INT_ELTS ? TREE_INT_CST_EXT_NUNITS (t) : TREE_INT_CST_NUNITS (t)) and turn unextended/extended into unsigned short. Then we can handle at most _BitInt(4194240), slightly more than 2 times lower than what LLVM chose, I guess that would be still acceptable.
next prev parent reply other threads:[~2023-05-12 7:47 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 2023-05-11 22:10 ` joseph at codesourcery dot com 2023-05-12 7:46 ` jakub at gcc dot gnu.org [this message] 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-qieGJWn4OL@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).