diff options
author | Melanie Blower <melanie.blower@intel.com> | 2019-12-04 12:23:46 -0800 |
---|---|---|
committer | Melanie Blower <melanie.blower@intel.com> | 2019-12-05 03:48:04 -0800 |
commit | 7f9b5138470db1dc58f3bc05631284c653c9ed7a (patch) | |
tree | 6df6dcd5ce5f7d56fcef6e72ab2c3f287bce860e /clang/lib/Sema/SemaExpr.cpp | |
parent | c16f0b18c13e88fedaa510bc2442bb693a6230c8 (diff) | |
download | bcm5719-llvm-7f9b5138470db1dc58f3bc05631284c653c9ed7a.tar.gz bcm5719-llvm-7f9b5138470db1dc58f3bc05631284c653c9ed7a.zip |
Reapply af57dbf12e54 "Add support for options -frounding-math, ftrapping-math, -ffp-model=, and -ffp-exception-behavior="
Patch was reverted because https://bugs.llvm.org/show_bug.cgi?id=44048
The original patch is modified to set the strictfp IR attribute
explicitly in CodeGen instead of as a side effect of IRBuilder.
In the 2nd attempt to reapply there was a windows lit test fail, the
tests were fixed to use wildcard matching.
Differential Revision: https://reviews.llvm.org/D62731
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 7bbda127a54..c53a4b789be 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -13037,6 +13037,16 @@ ExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc, if (ResultTy.isNull() || LHS.isInvalid() || RHS.isInvalid()) return ExprError(); + if (ResultTy->isRealFloatingType() && + (getLangOpts().getFPRoundingMode() != LangOptions::FPR_ToNearest || + getLangOpts().getFPExceptionMode() != LangOptions::FPE_Ignore)) + // Mark the current function as usng floating point constrained intrinsics + if (FunctionDecl *F = dyn_cast<FunctionDecl>(CurContext)) +{ + F->setUsesFPIntrin(true); + printf("Enclosing function uses fp intrinsics\n"); +} + // Some of the binary operations require promoting operands of half vector to // float vectors and truncating the result back to half vector. For now, we do // this only when HalfArgsAndReturn is set (that is, when the target is arm or |