================
@@ -2800,7 +2800,8 @@ fn -> other_fn -> other_fn ; fn is norecurse
     optimizations that require assumptions about the floating-point rounding
     mode or that might alter the state of floating-point status flags that
     might otherwise be set or cleared by calling this function. LLVM will
-    not introduce any new floating-point instructions that may trap.
+    not introduce any new floating-point instructions that may trap. All
+    function definitions that contain strictfp calls must be marked strictfp.
----------------
artagnon wrote:

Ah, I see. Can you explain the reasoning for the special-casing constrained FP 
intrinsics? Isn't strictfp an FP environment that frontends can activate using 
something like `#pragma STDC FENV_ACCESS ON`? If so, there are two choices:

1. The environment is turned on in the caller function, and we convert all 
applicable FP intrinsics to their constrained variants in Clang, and give them 
to LLVM. In this case, Clang's Builder has an inherent strictfp state that's 
flipped on, and everything it will emit is strictfp, including non-intrinsic 
calls. Yes, strictfp calls inhibit inlining, as it would lead to an incorrect 
optimization?
2. The environment is turned off in the caller function, and Clang's Builder 
has the strictfp state turned off, which means that we will never create 
constrained variants or strictfp non-intrinsic calls. Sure, it can be turned on 
in a non-intrinsic callee function, but the caller itself is unaffected, and 
non-intrinsic callees can still be inlined in the caller?

https://github.com/llvm/llvm-project/pull/211769
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to