aaron.ballman added inline comments.

================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:8422
 
+def err_int_to_float_bit_int_max_size : Error<
+  "cannot convert '_BitInt' operands of more than %0 bits to floating point">;
----------------
mgehre-amd wrote:
> aaron.ballman wrote:
> > mgehre-amd wrote:
> > > aaron.ballman wrote:
> > > > mgehre-amd wrote:
> > > > > erichkeane wrote:
> > > > > > Can you explain the issue here?  This is supposed to be 
> > > > > > well-defined behavior.
> > > > > I saw `Assertion LC != RTLIB::UNKNOWN_LIBCALL && "Don't know how to 
> > > > > expand this SINT_TO_FP!"' failed.` in the backend. I think we would 
> > > > > need to add library calls for floating to bitint (and vice versa) to 
> > > > > the bitint library to enable that.
> > > > Good catch! I think we'll need to solve that before we can enable wide 
> > > > bit-width support (users are going to expect assignment and 
> > > > initialization to not crash as those are basic builtin operators). 
> > > > FWIW, this is a reproducer from Clang 13 where we still allowed large 
> > > > widths: https://godbolt.org/z/hvzWq1KTK
> > > I don't think I agree. 
> > > 
> > > Right now users will get a diagnostic that _BitInt > 128 bit cannot be 
> > > used. With this PR, they can use them but get a diagnostic when they try 
> > > to convert large _BitInts to floats or back.
> > > I think there is huge value in allowing large _BitInts even when float 
> > > to/from conversion will cause a clang diagnostic because at least in my 
> > > use case that is pretty uncommon,
> > > so I propose to move forward with this PR (lifting the limit on _BitInt 
> > > width) without having the compiler-rt support for float conversions.
> > > Right now users will get a diagnostic that _BitInt > 128 bit cannot be 
> > > used. With this PR, they can use them but get a diagnostic when they try 
> > > to convert large _BitInts to floats or back.
> > 
> > This is certainly better than crashing, no doubt.
> > 
> > > I think there is huge value in allowing large _BitInts even when float 
> > > to/from conversion will cause a clang diagnostic because at least in my 
> > > use case that is pretty uncommon,
> > 
> > That's the problem -- this is a new basic datatype; we can't make 
> > assumptions that our constituent uses cases are the common pattern. My 
> > experience thus far with this feature has been that people are using it for 
> > all sorts of reasons in ways I wouldn't have expected, like as a big int, 
> > as a regular int that doesn't integer promote, as bit-fields, etc.
> > 
> > To me, the bar for whether we allow large bit widths than we do today is: 
> > do all basic mathematical operators on any bit-width work correctly at 
> > runtime without crashing or major compile-time or runtime performance 
> > issues for the given target you want to change the limit for? Assignment 
> > and conversion are basic mathematical operators I'd definitely expect to 
> > work; these aren't weird situations -- assigning a float to an integer 
> > happens with some regularity, so there's no reason to assume it won't 
> > happen when the integer is a larger bit-precise integer: 
> > https://godbolt.org/z/hx5sYbjGK.
> > 
> > I'd *much* rather slow-roll the feature than have people's first impression 
> > be that they can't trust the feature because it's too flaky. The whole 
> > point to the `BITINT_MAXWIDTH` macro is to give the user a reliable way to 
> > know what bit widths are supported; lying will not do us any favors.
> Ok, then let me propose the following:
> - Keep the default max. _BitInt size limit at 128 with this PR
> - Remove the code that emits the float-to-int/int-to-float warnings for bit 
> _BitInts
> - Add a cc1 option -fmax-bitint-size=N to allow overwriting the max. _BitInt 
> size for tests (so we can test big division even when float-to-int isn't 
> there yet)
> 
> What do you think?
> 
I was hoping to avoid something like that, but I think it's not entirely 
unreasonable as a stopgap measure either.

How about we name it `-fexperimental-max-bitint-width=N` to make it clear that 
this option is not expected to stick around forever? (I'd like to not ship a 
release of Clang with this flag). I suppose we'd still have to make sure the 
user doesn't specify a value larger than what LLVM supports, too.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D122234

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to