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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits