From b7cfe88e88cb4f46308de89cf3f0c81bfe624128 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 30 Jun 2008 18:32:54 +0000 Subject: Make a few related changes: 1) add a new ASTContext::getFloatTypeSemantics method. 2) Use it from SemaExpr.cpp, CodeGenTypes.cpp and other places. 3) Change the TargetInfo.h get*Format methods to return their fltSemantics byref instead of by pointer. 4) Change CodeGenFunction::EmitBuiltinExpr to allow builtins which sometimes expand specially and othertimes fall back to libm. 5) Add support for __builtin_nan("") to codegen, cases that don't pass in an empty string are currently lowered to libm calls. 6) Fix codegen of __builtin_infl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52914 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenTypes.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'lib/CodeGen/CodeGenTypes.cpp') diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp index 9074e8179c..41ec2dd0f7 100644 --- a/lib/CodeGen/CodeGenTypes.cpp +++ b/lib/CodeGen/CodeGenTypes.cpp @@ -168,18 +168,18 @@ const llvm::Type *CodeGenTypes::ConvertReturnType(QualType T) { return ConvertType(T); } -static const llvm::Type* getTypeForFormat(const llvm::fltSemantics * format) { - if (format == &llvm::APFloat::IEEEsingle) +static const llvm::Type* getTypeForFormat(const llvm::fltSemantics &format) { + if (&format == &llvm::APFloat::IEEEsingle) return llvm::Type::FloatTy; - if (format == &llvm::APFloat::IEEEdouble) + if (&format == &llvm::APFloat::IEEEdouble) return llvm::Type::DoubleTy; - if (format == &llvm::APFloat::IEEEquad) + if (&format == &llvm::APFloat::IEEEquad) return llvm::Type::FP128Ty; - if (format == &llvm::APFloat::PPCDoubleDouble) + if (&format == &llvm::APFloat::PPCDoubleDouble) return llvm::Type::PPC_FP128Ty; - if (format == &llvm::APFloat::x87DoubleExtended) + if (&format == &llvm::APFloat::x87DoubleExtended) return llvm::Type::X86_FP80Ty; - assert(9 && "Unknown float format!"); + assert(0 && "Unknown float format!"); return 0; } @@ -218,11 +218,9 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { static_cast(Context.getTypeSize(T))); case BuiltinType::Float: - return getTypeForFormat(Context.Target.getFloatFormat()); case BuiltinType::Double: - return getTypeForFormat(Context.Target.getDoubleFormat()); case BuiltinType::LongDouble: - return getTypeForFormat(Context.Target.getLongDoubleFormat()); + return getTypeForFormat(Context.getFloatTypeSemantics(T)); } break; } -- cgit v1.2.3-18-g5258