[PATCH] D117238: [C2x] Add BITINT_MAXWIDTH support

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 22 10:12:05 PST 2022


erichkeane added a subscriber: mgehre-amd.
erichkeane added a comment.

In D117238#3338071 <https://reviews.llvm.org/D117238#3338071>, @mariospr wrote:

> In D117238#3270125 <https://reviews.llvm.org/D117238#3270125>, @aaron.ballman wrote:
>
>> Updated to allow targets to specify the max bitwidth. I was aware that the x86 backend had issues with doing division on larger `_BitInt` objects, but it turns out *all* backends fail to support `_BitInt(129)` or wider division. Because division is a pretty common operation on numeric data types, it seemed to be more user-friendly to specify that we only support 128 bits or less. I tried to make it exceptionally clear that I consider this to be a backend bug though -- we will support wider bit widths in the future once backends have been fixed. These changes make that future path easier to opt into.
>
> Hi! I know this question might be very hard to answer but even so I hope you don't mind me trying 😇 ... do you know whether there is any estimation of when `_BitInt(N) / N > 128` will be supported once again in Clang? I'm not an expert at all on this topic (just registered here to comment! 🙂 ) but this hit us in a Chromium-based project which relied on `_BITINT(256)` now that Chromium 100 updated to Clang 15. And while we're already looking into alternative ways of dealing with is (e.g. maybe using Boost's `multiprecision` module), it would be very interesting if we could get a sense (if it's even possible) on how long we could expect the current situation to last.
>
> Again, I understand there might not be a clear answer for this at the moment but, since I'm no expert on the matter and I couldn't figure out myself the exact situation by reading this and other tickets in the tracker I thought, I thought I'd ask just in case.
>
> Thanks in advance regardless of the answer!
> Mario

Hi Mario!  Thank you for inquiring!  As you may know, we disabled _BitInt this large since we couldn't handle division/modulus in the code generators.  There is an RFC currently underway (as of today, we have the patches to start supporting this in the backend!) here: https://discourse.llvm.org/t/rfc-add-support-for-division-of-large-bitint-builtins-selectiondag-globalisel-clang/60329

I'm hopeful that the answer here is 'in the near future'.  @mgehre-amd should be able to at least partially revert this patch once the library changes/llvm code generator changes make it in.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D117238/new/

https://reviews.llvm.org/D117238



More information about the cfe-commits mailing list