[clang] 47ee851 - [clang][Interp][NFC] Context: Add getFloatSemantics()
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 6 01:40:04 PDT 2023
Author: Timm Bäder
Date: 2023-04-06T10:39:49+02:00
New Revision: 47ee8519ec2620ffe376d9b28cba8a2a0a73214a
URL: https://github.com/llvm/llvm-project/commit/47ee8519ec2620ffe376d9b28cba8a2a0a73214a
DIFF: https://github.com/llvm/llvm-project/commit/47ee8519ec2620ffe376d9b28cba8a2a0a73214a.diff
LOG: [clang][Interp][NFC] Context: Add getFloatSemantics()
We use this quite a bit, so add some convenience API for it.
Added:
Modified:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
clang/lib/AST/Interp/Context.cpp
clang/lib/AST/Interp/Context.h
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index a1f6f72c9bfc..3c0992e4fee0 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -92,8 +92,7 @@ bool ByteCodeExprGen<Emitter>::VisitCastExpr(const CastExpr *CE) {
case CK_FloatingCast: {
if (!this->visit(SubExpr))
return false;
- const auto *TargetSemantics =
- &Ctx.getASTContext().getFloatTypeSemantics(CE->getType());
+ const auto *TargetSemantics = &Ctx.getFloatSemantics(CE->getType());
return this->emitCastFP(TargetSemantics, getRoundingMode(CE), CE);
}
@@ -105,8 +104,7 @@ bool ByteCodeExprGen<Emitter>::VisitCastExpr(const CastExpr *CE) {
if (!this->visit(SubExpr))
return false;
- const auto *TargetSemantics =
- &Ctx.getASTContext().getFloatTypeSemantics(CE->getType());
+ const auto *TargetSemantics = &Ctx.getFloatSemantics(CE->getType());
llvm::RoundingMode RM = getRoundingMode(CE);
return this->emitCastIntegralFloating(*FromT, TargetSemantics, RM, CE);
}
@@ -601,8 +599,7 @@ bool ByteCodeExprGen<Emitter>::VisitFloatCompoundAssignOperator(
// If necessary, convert LHS to its computation type.
if (LHS->getType() != LHSComputationType) {
- const auto *TargetSemantics =
- &Ctx.getASTContext().getFloatTypeSemantics(LHSComputationType);
+ const auto *TargetSemantics = &Ctx.getFloatSemantics(LHSComputationType);
if (!this->emitCastFP(TargetSemantics, RM, E))
return false;
@@ -635,8 +632,7 @@ bool ByteCodeExprGen<Emitter>::VisitFloatCompoundAssignOperator(
// If necessary, convert result to LHS's type.
if (LHS->getType() != ResultType) {
- const auto *TargetSemantics =
- &Ctx.getASTContext().getFloatTypeSemantics(LHS->getType());
+ const auto *TargetSemantics = &Ctx.getFloatSemantics(LHS->getType());
if (!this->emitCastFP(TargetSemantics, RM, E))
return false;
diff --git a/clang/lib/AST/Interp/Context.cpp b/clang/lib/AST/Interp/Context.cpp
index 6ede05e0f4c4..ed7ed41b1b24 100644
--- a/clang/lib/AST/Interp/Context.cpp
+++ b/clang/lib/AST/Interp/Context.cpp
@@ -133,6 +133,12 @@ unsigned Context::getCharBit() const {
return Ctx.getTargetInfo().getCharWidth();
}
+/// Simple wrapper around getFloatTypeSemantics() to make code a
+/// little shorter.
+const llvm::fltSemantics &Context::getFloatSemantics(QualType T) const {
+ return Ctx.getFloatTypeSemantics(T);
+}
+
bool Context::Run(State &Parent, Function *Func, APValue &Result) {
InterpState State(Parent, *P, Stk, *this);
State.Current = new InterpFrame(State, Func, /*Caller=*/nullptr, {});
diff --git a/clang/lib/AST/Interp/Context.h b/clang/lib/AST/Interp/Context.h
index e49422e64b87..cbae7fcf2860 100644
--- a/clang/lib/AST/Interp/Context.h
+++ b/clang/lib/AST/Interp/Context.h
@@ -57,6 +57,8 @@ class Context final {
InterpStack &getStack() { return Stk; }
/// Returns CHAR_BIT.
unsigned getCharBit() const;
+ /// Return the floating-point semantics for T.
+ const llvm::fltSemantics &getFloatSemantics(QualType T) const;
/// Classifies an expression.
std::optional<PrimType> classify(QualType T) const;
More information about the cfe-commits
mailing list