diff options
author | Melanie Blower <melanie.blower@intel.com> | 2020-06-26 07:54:01 -0700 |
---|---|---|
committer | Melanie Blower <melanie.blower@intel.com> | 2020-06-26 08:00:08 -0700 |
commit | 9518763d710bfbbf9315fa88972c55898be44a0e (patch) | |
tree | f8dab0c6d06ea0b2fe44ab6db3d5578412d6f41b /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | e086a39c118fa6c1d8d23257ff0f112d000d87fe (diff) | |
download | llvm-9518763d710bfbbf9315fa88972c55898be44a0e.zip llvm-9518763d710bfbbf9315fa88972c55898be44a0e.tar.gz llvm-9518763d710bfbbf9315fa88972c55898be44a0e.tar.bz2 |
Revert "Revert "Modify FPFeatures to use delta not absolute settings""
This reverts commit b55d723ed61052b77e720dcffecac43abe873186.
Reapply Modify FPFeatures to use delta not absolute settings
To solve https://bugs.llvm.org/show_bug.cgi?id=46166 where the
floating point settings in PCH files aren't compatible, rewrite
FPFeatures to use a delta in the settings rather than absolute settings.
With this patch, these floating point options can be benign.
Reviewers: rjmccall
Differential Revision: https://reviews.llvm.org/D81869
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 23208b2d..cfd32d1 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -117,12 +117,12 @@ void CodeGenFunction::SetFPModel() { void CodeGenFunction::SetFastMathFlags(FPOptions FPFeatures) { llvm::FastMathFlags FMF; - FMF.setAllowReassoc(FPFeatures.allowAssociativeMath()); - FMF.setNoNaNs(FPFeatures.noHonorNaNs()); - FMF.setNoInfs(FPFeatures.noHonorInfs()); - FMF.setNoSignedZeros(FPFeatures.noSignedZeros()); - FMF.setAllowReciprocal(FPFeatures.allowReciprocalMath()); - FMF.setApproxFunc(FPFeatures.allowApproximateFunctions()); + FMF.setAllowReassoc(FPFeatures.getAllowFPReassociate()); + FMF.setNoNaNs(FPFeatures.getNoHonorNaNs()); + FMF.setNoInfs(FPFeatures.getNoHonorInfs()); + FMF.setNoSignedZeros(FPFeatures.getNoSignedZero()); + FMF.setAllowReciprocal(FPFeatures.getAllowReciprocal()); + FMF.setApproxFunc(FPFeatures.getAllowApproxFunc()); FMF.setAllowContract(FPFeatures.allowFPContractAcrossStatement()); Builder.setFastMathFlags(FMF); } @@ -137,10 +137,12 @@ CodeGenFunction::CGFPOptionsRAII::CGFPOptionsRAII(CodeGenFunction &CGF, FMFGuard.emplace(CGF.Builder); - auto NewRoundingBehavior = FPFeatures.getRoundingMode(); + llvm::RoundingMode NewRoundingBehavior = + static_cast<llvm::RoundingMode>(FPFeatures.getRoundingMode()); CGF.Builder.setDefaultConstrainedRounding(NewRoundingBehavior); auto NewExceptionBehavior = - ToConstrainedExceptMD(FPFeatures.getExceptionMode()); + ToConstrainedExceptMD(static_cast<LangOptions::FPExceptionModeKind>( + FPFeatures.getFPExceptionMode())); CGF.Builder.setDefaultConstrainedExcept(NewExceptionBehavior); CGF.SetFastMathFlags(FPFeatures); @@ -159,13 +161,13 @@ CodeGenFunction::CGFPOptionsRAII::CGFPOptionsRAII(CodeGenFunction &CGF, if (OldValue != NewValue) CGF.CurFn->addFnAttr(Name, llvm::toStringRef(NewValue)); }; - mergeFnAttrValue("no-infs-fp-math", FPFeatures.noHonorInfs()); - mergeFnAttrValue("no-nans-fp-math", FPFeatures.noHonorNaNs()); - mergeFnAttrValue("no-signed-zeros-fp-math", FPFeatures.noSignedZeros()); - mergeFnAttrValue( - "unsafe-fp-math", - FPFeatures.allowAssociativeMath() && FPFeatures.allowReciprocalMath() && - FPFeatures.allowApproximateFunctions() && FPFeatures.noSignedZeros()); + mergeFnAttrValue("no-infs-fp-math", FPFeatures.getNoHonorInfs()); + mergeFnAttrValue("no-nans-fp-math", FPFeatures.getNoHonorNaNs()); + mergeFnAttrValue("no-signed-zeros-fp-math", FPFeatures.getNoSignedZero()); + mergeFnAttrValue("unsafe-fp-math", FPFeatures.getAllowFPReassociate() && + FPFeatures.getAllowReciprocal() && + FPFeatures.getAllowApproxFunc() && + FPFeatures.getNoSignedZero()); } CodeGenFunction::CGFPOptionsRAII::~CGFPOptionsRAII() { |