qiucf added a comment.

In D92080#2443333 <https://reviews.llvm.org/D92080#2443333>, @craig.topper 
wrote:

> I don't think I understand the whole picture here. Why would only builtins 
> get mutated? Does a call to "modf" still call "modf"? But __builtin_modf will 
> call modf128? Is there a corresponding patch to the runtime libcalls table in 
> the backend? With -ffast-math __builtin_sinl becomes llvm.sin.f128 and the 
> backend will emit a call to sinl if ISD::SIN isn't legal.

We're going to make IEEE `f128` available in Clang on ppc64le. Newest glibc 
already supports 'redirection' from `fmodl` to `fmodf128` (or, `__fmodieee128`) 
by checking some macros determined by current long-double semantics. For these 
LLVM intrinsics, Steven has a patch to fix the correct signature of libcall 
(D91675 <https://reviews.llvm.org/D91675>). Builtin in Clang will generate 
intrinsics under `ffast-math` but function call without the option. That may 
lead to an awkward situation: program is correct under fast-math, but wrong 
under no optimization. So such mutation is needed.

This patch looks reasonable to me for targets with more than one long-double 
format. Or if that's not a right way for the mutation, are there other places 
to implement that?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92080

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

Reply via email to