aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/TargetInfo.cpp
diff options
context:
space:
mode:
authorMelanie Blower <melanie.blower@intel.com>2021-06-28 12:45:56 -0400
committerMelanie Blower <melanie.blower@intel.com>2021-06-30 09:58:06 -0400
commite773216f46368cd927a3c67bfa2516913acb75e7 (patch)
treebfc96a0feb81cb1f3ebef1f39f1bec52b5a5bb79 /clang/lib/Basic/TargetInfo.cpp
parent0edb87773b1a086cb5bb960f7f4f6ca815bc8bb4 (diff)
downloadllvm-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.cpp5
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(