diff options
author | Melanie Blower <melanie.blower@intel.com> | 2021-06-28 12:45:56 -0400 |
---|---|---|
committer | Melanie Blower <melanie.blower@intel.com> | 2021-06-30 09:58:06 -0400 |
commit | e773216f46368cd927a3c67bfa2516913acb75e7 (patch) | |
tree | bfc96a0feb81cb1f3ebef1f39f1bec52b5a5bb79 /clang/lib/Basic/TargetInfo.cpp | |
parent | 0edb87773b1a086cb5bb960f7f4f6ca815bc8bb4 (diff) | |
download | llvm-e773216f46368cd927a3c67bfa2516913acb75e7.zip llvm-e773216f46368cd927a3c67bfa2516913acb75e7.tar.gz llvm-e773216f46368cd927a3c67bfa2516913acb75e7.tar.bz2 |
[clang][patch] Add builtin __arithmetic_fence and option fprotect-parens
This patch adds a new clang builtin, __arithmetic_fence. The purpose of the
builtin is to provide the user fine control, at the expression level, over
floating point optimization when -ffast-math (-ffp-model=fast) is enabled.
The builtin prevents the optimizer from rearranging floating point expression
evaluation. The new option fprotect-parens has the same effect on
parenthesized expressions, forcing the optimizer to respect the parentheses.
Reviewed By: aaron.ballman, kpn
Differential Revision: https://reviews.llvm.org/D100118
Diffstat (limited to 'clang/lib/Basic/TargetInfo.cpp')
-rw-r--r-- | clang/lib/Basic/TargetInfo.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp index 4c2859e..88086fa 100644 --- a/clang/lib/Basic/TargetInfo.cpp +++ b/clang/lib/Basic/TargetInfo.cpp @@ -430,6 +430,11 @@ void TargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) { // its corresponding signed type. PaddingOnUnsignedFixedPoint |= Opts.PaddingOnUnsignedFixedPoint; CheckFixedPointBits(); + + if (Opts.ProtectParens && !checkArithmeticFenceSupported()) { + Diags.Report(diag::err_opt_not_valid_on_target) << "-fprotect-parens"; + Opts.ProtectParens = false; + } } bool TargetInfo::initFeatureMap( |