[PATCH] D87528: Enable '#pragma STDC FENV_ACCESS' in frontend cf. D69272 - Work in Progress

Serge Pavlov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 25 01:40:36 PDT 2020


sepavloff added inline comments.


================
Comment at: clang/test/CodeGen/fp-floatcontrol-pragma.cpp:154
+  if (i<0)
+  return 1.0 + 2.0;
+  // Check that floating point constant folding doesn't occur if
----------------
In this particular case we know for sure that the result does not depend on rounding mode and no FP exceptions occurs, so it is safe to constfold the expression.

Expressions like `1.0 / 0.0` or `1.0F + 0x0.000001p0F` indeed may require execution in runtime, depending on the required exception handling. I would propose to connect their const-evaluability with `FPExceptionMode` and set the latter to `strict` whenever `AllowFEnvAccess` is set to `true`. 


================
Comment at: clang/test/CodeGen/pragma-fenv_access.c:9
+// CHECK-LABEL: @func_01
+// CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
+
----------------
Shall the rounding mode be `dynamic` rather than `tonearest`? If `#pragma STDC FENV_ACCESS ON` is specified, it means FP environment may be changed in arbitrary way and we cannot expect any particular rounding mode. Probably the environment was changed in the caller of `func_01`.


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

https://reviews.llvm.org/D87528



More information about the cfe-commits mailing list