rjmccall added a comment.

In D144454#4157717 <https://reviews.llvm.org/D144454#4157717>, @xiongji90 wrote:

> In D144454#4142253 <https://reviews.llvm.org/D144454#4142253>, @rjmccall 
> wrote:
>
>> New builtins should be documented in the user manual.
>>
>> There are standard pragmas for changing the rounding mode, right?  What's 
>> the interaction between the ability to set this dynamically with a builtin 
>> call and those pragmas?
>
> Hi, @rjmccall 
> Current status is LLVM has added llvm.get.rounding and llvm.set.rounding 
> intrinsic and has also added "__builtin_flt_rounds" for llvm.get.rounding but 
> there is no corresponding for llvm.set.rounding intrinisc. According to 
> original patch to add llvm.set.rounding: https://reviews.llvm.org/D74729 and 
> LLVM document for this intrinsic: https://llvm.org/docs/LangRef.html#id1506
> The introduction of llvm.set.rounding intrinsic can provide same 
> functionality as C library function "fesetround" and avoid unnecessary 
> dependency on C library. Currently, this intrinsic can't benefit C/C++ 
> developers since we don't have a corresponding builtin and we even can't add 
> a C/C++ test for this intrinsic.

If this builtin is defined to have the same behavior as `fesetround`, the 
obvious name would be `__builtin_fesetround`.  You seem to have patterned it 
off of `__builtin_flt_rounds`, but that is not an arbitrarily-chosen name, it's 
taken from the standard `FLT_ROUNDS` macro and is expected to work as an 
implementation of it.

We already understand how `fesetround` is supposed to interact with the 
standard pragmas about the FP environment, so that indirectly answers that part 
of my question.  I assume you've modeled your intrinsic correctly in LLVM so 
that the optimizer understands it can't reorder the environment-sensitive math 
intrinsics around calls to the new intrinsic?

If this builtin is just an intrinsic implementation of `fesetround`, I don't 
think we need further documentation of it.

I assume the intrinsic is only implemented on certain targets?  If so, we might 
need to restrict uses of the builtin as well (and make sure that 
`__has_builtin` only returns true on those targets).



================
Comment at: clang/test/CodeGen/builtins.c:283
+  res = __builtin_flt_rounds_set(1);
+  // CHECK: call void @llvm.set.rounding(
 }
----------------
xiongji90 wrote:
> rjmccall wrote:
> > Just for completeness, please test that this gets the result of the 
> > expression.
> Hi, @rjmccall 
> I updated the test to check "llvm.set.rounding" string with input, does it 
> meet your requirement?
> Thanks very much.
Yes, thank you.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D144454

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

Reply via email to