diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2011-10-14 23:23:15 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2011-10-14 23:23:15 +0000 |
commit | aa4a99b4a62615db243f7a5c433169f2fc704420 (patch) | |
tree | 7339705e0bd5e244c9fd7d8386dc8a279cb3ec35 /lib/AST/Type.cpp | |
parent | 43ac6d0922a3408e23d410ccd224c845399bf181 (diff) |
Provide half floating point support as a storage only type.
Lack of half FP was a regression compared to llvm-gcc.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142016 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Type.cpp')
-rw-r--r-- | lib/AST/Type.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index 0e0548db6c..44eeec004f 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -766,9 +766,16 @@ bool Type::hasUnsignedIntegerRepresentation() const { return isUnsignedIntegerType(); } +bool Type::isHalfType() const { + if (const BuiltinType *BT = dyn_cast<BuiltinType>(CanonicalType)) + return BT->getKind() == BuiltinType::Half; + // FIXME: Should we allow complex __fp16? Probably not. + return false; +} + bool Type::isFloatingType() const { if (const BuiltinType *BT = dyn_cast<BuiltinType>(CanonicalType)) - return BT->getKind() >= BuiltinType::Float && + return BT->getKind() >= BuiltinType::Half && BT->getKind() <= BuiltinType::LongDouble; if (const ComplexType *CT = dyn_cast<ComplexType>(CanonicalType)) return CT->getElementType()->isFloatingType(); @@ -1475,6 +1482,7 @@ const char *BuiltinType::getName(const PrintingPolicy &Policy) const { case ULong: return "unsigned long"; case ULongLong: return "unsigned long long"; case UInt128: return "__uint128_t"; + case Half: return "half"; case Float: return "float"; case Double: return "double"; case LongDouble: return "long double"; |