Skip to content

Commit 0de419a

Browse files
Refactor FP8 types (NFC)
1 parent 019578e commit 0de419a

File tree

7 files changed

+57
-43
lines changed

7 files changed

+57
-43
lines changed

clang/include/clang/Basic/AArch64SVEACLETypes.def

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@
5757
// - IsBF true for vector of brain float elements.
5858
//===----------------------------------------------------------------------===//
5959

60+
#ifndef AARCH64_SCALAR_TYPE
61+
#define AARCH64_SCALAR_TYPE(Name, MangledName, Id, SingletonId, Bits) \
62+
SVE_TYPE(Name, Id, SingletonId)
63+
#endif
64+
6065
#ifndef SVE_VECTOR_TYPE
6166
#define SVE_VECTOR_TYPE(Name, MangledName, Id, SingletonId) \
6267
SVE_TYPE(Name, Id, SingletonId)
@@ -72,6 +77,11 @@
7277
SVE_VECTOR_TYPE_DETAILS(Name, MangledName, Id, SingletonId, NumEls, ElBits, NF, false, false, true)
7378
#endif
7479

80+
#ifndef SVE_VECTOR_TYPE_MFLOAT
81+
#define SVE_VECTOR_TYPE_MFLOAT(Name, MangledName, Id, SingletonId, NumEls, ElBits, NF) \
82+
SVE_VECTOR_TYPE_DETAILS(Name, MangledName, Id, SingletonId, NumEls, ElBits, NF, false, false, false)
83+
#endif
84+
7585
#ifndef SVE_VECTOR_TYPE_FLOAT
7686
#define SVE_VECTOR_TYPE_FLOAT(Name, MangledName, Id, SingletonId, NumEls, ElBits, NF) \
7787
SVE_VECTOR_TYPE_DETAILS(Name, MangledName, Id, SingletonId, NumEls, ElBits, NF, false, true, false)
@@ -97,16 +107,6 @@
97107
SVE_TYPE(Name, Id, SingletonId)
98108
#endif
99109

100-
#ifndef AARCH64_VECTOR_TYPE
101-
#define AARCH64_VECTOR_TYPE(Name, MangledName, Id, SingletonId) \
102-
SVE_TYPE(Name, Id, SingletonId)
103-
#endif
104-
105-
#ifndef AARCH64_VECTOR_TYPE_MFLOAT
106-
#define AARCH64_VECTOR_TYPE_MFLOAT(Name, MangledName, Id, SingletonId, NumEls, ElBits, NF) \
107-
AARCH64_VECTOR_TYPE(Name, MangledName, Id, SingletonId)
108-
#endif
109-
110110
//===- Vector point types -----------------------------------------------===//
111111

112112
SVE_VECTOR_TYPE_INT("__SVInt8_t", "__SVInt8_t", SveInt8, SveInt8Ty, 16, 8, 1, true)
@@ -125,8 +125,7 @@ SVE_VECTOR_TYPE_FLOAT("__SVFloat64_t", "__SVFloat64_t", SveFloat64, SveFloat64Ty
125125

126126
SVE_VECTOR_TYPE_BFLOAT("__SVBfloat16_t", "__SVBfloat16_t", SveBFloat16, SveBFloat16Ty, 8, 16, 1)
127127

128-
// This is a 8 bits opaque type.
129-
SVE_VECTOR_TYPE_INT("__SVMfloat8_t", "__SVMfloat8_t", SveMFloat8, SveMFloat8Ty, 16, 8, 1, false)
128+
SVE_VECTOR_TYPE_MFLOAT("__SVMfloat8_t", "__SVMfloat8_t", SveMFloat8, SveMFloat8Ty, 16, 8, 1)
130129

131130
//
132131
// x2
@@ -148,7 +147,7 @@ SVE_VECTOR_TYPE_FLOAT("__clang_svfloat64x2_t", "svfloat64x2_t", SveFloat64x2, Sv
148147

149148
SVE_VECTOR_TYPE_BFLOAT("__clang_svbfloat16x2_t", "svbfloat16x2_t", SveBFloat16x2, SveBFloat16x2Ty, 8, 16, 2)
150149

151-
SVE_VECTOR_TYPE_INT("__clang_svmfloat8x2_t", "svmfloat8x2_t", SveMFloat8x2, SveMFloat8x2Ty, 16, 8, 2, false)
150+
SVE_VECTOR_TYPE_MFLOAT("__clang_svmfloat8x2_t", "svmfloat8x2_t", SveMFloat8x2, SveMFloat8x2Ty, 16, 8, 2)
152151

153152
//
154153
// x3
@@ -170,7 +169,7 @@ SVE_VECTOR_TYPE_FLOAT("__clang_svfloat64x3_t", "svfloat64x3_t", SveFloat64x3, Sv
170169

171170
SVE_VECTOR_TYPE_BFLOAT("__clang_svbfloat16x3_t", "svbfloat16x3_t", SveBFloat16x3, SveBFloat16x3Ty, 8, 16, 3)
172171

173-
SVE_VECTOR_TYPE_INT("__clang_svmfloat8x3_t", "svmfloat8x3_t", SveMFloat8x3, SveMFloat8x3Ty, 16, 8, 3, false)
172+
SVE_VECTOR_TYPE_MFLOAT("__clang_svmfloat8x3_t", "svmfloat8x3_t", SveMFloat8x3, SveMFloat8x3Ty, 16, 8, 3)
174173

175174
//
176175
// x4
@@ -192,23 +191,23 @@ SVE_VECTOR_TYPE_FLOAT("__clang_svfloat64x4_t", "svfloat64x4_t", SveFloat64x4, Sv
192191

193192
SVE_VECTOR_TYPE_BFLOAT("__clang_svbfloat16x4_t", "svbfloat16x4_t", SveBFloat16x4, SveBFloat16x4Ty, 8, 16, 4)
194193

195-
SVE_VECTOR_TYPE_INT("__clang_svmfloat8x4_t", "svmfloat8x4_t", SveMFloat8x4, SveMFloat8x4Ty, 16, 8, 4, false)
194+
SVE_VECTOR_TYPE_MFLOAT("__clang_svmfloat8x4_t", "svmfloat8x4_t", SveMFloat8x4, SveMFloat8x4Ty, 16, 8, 4)
196195

197196
SVE_PREDICATE_TYPE_ALL("__SVBool_t", "__SVBool_t", SveBool, SveBoolTy, 16, 1)
198197
SVE_PREDICATE_TYPE_ALL("__clang_svboolx2_t", "svboolx2_t", SveBoolx2, SveBoolx2Ty, 16, 2)
199198
SVE_PREDICATE_TYPE_ALL("__clang_svboolx4_t", "svboolx4_t", SveBoolx4, SveBoolx4Ty, 16, 4)
200199

201200
SVE_OPAQUE_TYPE("__SVCount_t", "__SVCount_t", SveCount, SveCountTy)
202201

203-
AARCH64_VECTOR_TYPE_MFLOAT("__mfp8", "__mfp8", MFloat8, MFloat8Ty, 1, 8, 1)
202+
AARCH64_SCALAR_TYPE("__mfp8", "__mfp8", MFloat8, MFloat8Ty, 8)
204203

205204
#undef SVE_VECTOR_TYPE
205+
#undef SVE_VECTOR_TYPE_MFLOAT
206206
#undef SVE_VECTOR_TYPE_BFLOAT
207207
#undef SVE_VECTOR_TYPE_FLOAT
208208
#undef SVE_VECTOR_TYPE_INT
209209
#undef SVE_PREDICATE_TYPE
210210
#undef SVE_PREDICATE_TYPE_ALL
211211
#undef SVE_OPAQUE_TYPE
212-
#undef AARCH64_VECTOR_TYPE_MFLOAT
213-
#undef AARCH64_VECTOR_TYPE
212+
#undef AARCH64_SCALAR_TYPE
214213
#undef SVE_TYPE

clang/lib/AST/ASTContext.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2269,11 +2269,10 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {
22692269
Width = 0; \
22702270
Align = 16; \
22712271
break;
2272-
#define AARCH64_VECTOR_TYPE_MFLOAT(Name, MangledName, Id, SingletonId, NumEls, \
2273-
ElBits, NF) \
2272+
#define AARCH64_SCALAR_TYPE(Name, MangledName, Id, SingletonId, Bits) \
22742273
case BuiltinType::Id: \
2275-
Width = NumEls * ElBits * NF; \
2276-
Align = NumEls * ElBits; \
2274+
Width = Bits; \
2275+
Align = Bits; \
22772276
break;
22782277
#include "clang/Basic/AArch64SVEACLETypes.def"
22792278
#define PPC_VECTOR_TYPE(Name, Id, Size) \
@@ -4395,15 +4394,14 @@ ASTContext::getBuiltinVectorTypeInfo(const BuiltinType *Ty) const {
43954394
ElBits, NF) \
43964395
case BuiltinType::Id: \
43974396
return {BFloat16Ty, llvm::ElementCount::getScalable(NumEls), NF};
4397+
#define SVE_VECTOR_TYPE_MFLOAT(Name, MangledName, Id, SingletonId, NumEls, \
4398+
ElBits, NF) \
4399+
case BuiltinType::Id: \
4400+
return {MFloat8Ty, llvm::ElementCount::getScalable(NumEls), NF};
43984401
#define SVE_PREDICATE_TYPE_ALL(Name, MangledName, Id, SingletonId, NumEls, NF) \
43994402
case BuiltinType::Id: \
44004403
return {BoolTy, llvm::ElementCount::getScalable(NumEls), NF};
4401-
#define AARCH64_VECTOR_TYPE_MFLOAT(Name, MangledName, Id, SingletonId, NumEls, \
4402-
ElBits, NF) \
4403-
case BuiltinType::Id: \
4404-
return {getIntTypeForBitwidth(ElBits, false), \
4405-
llvm::ElementCount::getFixed(NumEls), NF};
4406-
#define SVE_OPAQUE_TYPE(Name, MangledName, Id, SingletonId)
4404+
#define SVE_TYPE(Name, Id, SingletonId)
44074405
#include "clang/Basic/AArch64SVEACLETypes.def"
44084406

44094407
#define RVV_VECTOR_TYPE_INT(Name, Id, SingletonId, NumEls, ElBits, NF, \
@@ -4465,11 +4463,16 @@ QualType ASTContext::getScalableVectorType(QualType EltTy, unsigned NumElts,
44654463
EltTySize == ElBits && NumElts == (NumEls * NF) && NumFields == 1) { \
44664464
return SingletonId; \
44674465
}
4466+
#define SVE_VECTOR_TYPE_MFLOAT(Name, MangledName, Id, SingletonId, NumEls, \
4467+
ElBits, NF) \
4468+
if (EltTy->isMFloat8Type() && EltTySize == ElBits && \
4469+
NumElts == (NumEls * NF) && NumFields == 1) { \
4470+
return SingletonId; \
4471+
}
44684472
#define SVE_PREDICATE_TYPE_ALL(Name, MangledName, Id, SingletonId, NumEls, NF) \
44694473
if (EltTy->isBooleanType() && NumElts == (NumEls * NF) && NumFields == 1) \
44704474
return SingletonId;
4471-
#define SVE_OPAQUE_TYPE(Name, MangledName, Id, SingletonId)
4472-
#define AARCH64_VECTOR_TYPE(Name, MangledName, Id, SingletonId)
4475+
#define SVE_TYPE(Name, Id, SingletonId)
44734476
#include "clang/Basic/AArch64SVEACLETypes.def"
44744477
} else if (Target->hasRISCVVTypes()) {
44754478
uint64_t EltTySize = getTypeSize(EltTy);
@@ -12234,6 +12237,9 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context,
1223412237
case 'p':
1223512238
Type = Context.getProcessIDType();
1223612239
break;
12240+
case 'm':
12241+
Type = Context.MFloat8Ty;
12242+
break;
1223712243
}
1223812244

1223912245
// If there are modifiers and if we're allowed to parse them, go for it.

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3433,7 +3433,7 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
34333433
type_name = MangledName; \
34343434
Out << (type_name == Name ? "u" : "") << type_name.size() << type_name; \
34353435
break;
3436-
#define AARCH64_VECTOR_TYPE(Name, MangledName, Id, SingletonId) \
3436+
#define AARCH64_SCALAR_TYPE(Name, MangledName, Id, SingletonId, Bits) \
34373437
case BuiltinType::Id: \
34383438
type_name = MangledName; \
34393439
Out << (type_name == Name ? "u" : "") << type_name.size() << type_name; \
@@ -3917,6 +3917,7 @@ void CXXNameMangler::mangleNeonVectorType(const VectorType *T) {
39173917
case BuiltinType::Float: EltName = "float32_t"; break;
39183918
case BuiltinType::Half: EltName = "float16_t"; break;
39193919
case BuiltinType::BFloat16: EltName = "bfloat16_t"; break;
3920+
case BuiltinType::MFloat8: EltName = "mfloat8_t"; break;
39203921
default:
39213922
llvm_unreachable("unexpected Neon vector element type");
39223923
}
@@ -4096,6 +4097,10 @@ void CXXNameMangler::mangleAArch64FixedSveVectorType(const VectorType *T) {
40964097
case BuiltinType::BFloat16:
40974098
TypeName = "__SVBfloat16_t";
40984099
break;
4100+
case BuiltinType::MFloat8:
4101+
TypeName = "__SVMfloat8_t";
4102+
break;
4103+
40994104
default:
41004105
llvm_unreachable("unexpected element type for fixed-length SVE vector!");
41014106
}

clang/lib/AST/Type.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2527,9 +2527,7 @@ bool Type::isSVESizelessBuiltinType() const {
25272527
#define SVE_PREDICATE_TYPE(Name, MangledName, Id, SingletonId) \
25282528
case BuiltinType::Id: \
25292529
return true;
2530-
#define AARCH64_VECTOR_TYPE(Name, MangledName, Id, SingletonId) \
2531-
case BuiltinType::Id: \
2532-
return false;
2530+
#define SVE_TYPE(Name, Id, SingletonId)
25332531
#include "clang/Basic/AArch64SVEACLETypes.def"
25342532
default:
25352533
return false;

clang/lib/CodeGen/CodeGenTypes.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -505,15 +505,15 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
505505
case BuiltinType::Id:
506506
#define SVE_PREDICATE_TYPE(Name, MangledName, Id, SingletonId) \
507507
case BuiltinType::Id:
508-
#define AARCH64_VECTOR_TYPE(Name, MangledName, Id, SingletonId) \
509-
case BuiltinType::Id:
510-
#define SVE_OPAQUE_TYPE(Name, MangledName, Id, SingletonId)
508+
#define SVE_TYPE(Name, Id, SingletonId)
511509
#include "clang/Basic/AArch64SVEACLETypes.def"
512510
{
513511
ASTContext::BuiltinVectorTypeInfo Info =
514512
Context.getBuiltinVectorTypeInfo(cast<BuiltinType>(Ty));
515-
auto VTy =
516-
llvm::VectorType::get(ConvertType(Info.ElementType), Info.EC);
513+
auto *EltTy = Info.ElementType->isMFloat8Type()
514+
? llvm::Type::getInt8Ty(getLLVMContext())
515+
: ConvertType(Info.ElementType);
516+
auto *VTy = llvm::VectorType::get(EltTy, Info.EC);
517517
switch (Info.NumVectors) {
518518
default:
519519
llvm_unreachable("Expected 1, 2, 3 or 4 vectors!");
@@ -529,6 +529,9 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
529529
}
530530
case BuiltinType::SveCount:
531531
return llvm::TargetExtType::get(getLLVMContext(), "aarch64.svcount");
532+
case BuiltinType::MFloat8:
533+
return llvm::VectorType::get(llvm::Type::getInt8Ty(getLLVMContext()), 1,
534+
false);
532535
#define PPC_VECTOR_TYPE(Name, Id, Size) \
533536
case BuiltinType::Id: \
534537
ResultType = \

clang/lib/CodeGen/Targets/AArch64.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ AArch64ABIInfo::convertFixedToScalableVectorType(const VectorType *VT) const {
243243

244244
case BuiltinType::SChar:
245245
case BuiltinType::UChar:
246+
case BuiltinType::MFloat8:
246247
return llvm::ScalableVectorType::get(
247248
llvm::Type::getInt8Ty(getVMContext()), 16);
248249

@@ -756,8 +757,10 @@ bool AArch64ABIInfo::passAsPureScalableType(
756757
getContext().getBuiltinVectorTypeInfo(cast<BuiltinType>(Ty));
757758
assert(Info.NumVectors > 0 && Info.NumVectors <= 4 &&
758759
"Expected 1, 2, 3 or 4 vectors!");
759-
auto VTy = llvm::ScalableVectorType::get(CGT.ConvertType(Info.ElementType),
760-
Info.EC.getKnownMinValue());
760+
llvm::Type *EltTy = Info.ElementType->isMFloat8Type()
761+
? llvm::Type::getInt8Ty(getVMContext())
762+
: CGT.ConvertType(Info.ElementType);
763+
auto *VTy = llvm::ScalableVectorType::get(EltTy, Info.EC.getKnownMinValue());
761764

762765
if (CoerceToSeq.size() + Info.NumVectors > 12)
763766
return false;

clang/utils/TableGen/SveEmitter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,15 +448,15 @@ std::string SVEType::builtinBaseType() const {
448448
case TypeKind::PredicatePattern:
449449
return "i";
450450
case TypeKind::Fpm:
451-
return "Wi";
451+
return "UWi";
452452
case TypeKind::Predicate:
453453
return "b";
454454
case TypeKind::BFloat16:
455455
assert(ElementBitwidth == 16 && "Invalid BFloat16!");
456456
return "y";
457457
case TypeKind::MFloat8:
458458
assert(ElementBitwidth == 8 && "Invalid MFloat8!");
459-
return "c";
459+
return "m";
460460
case TypeKind::Float:
461461
switch (ElementBitwidth) {
462462
case 16:

0 commit comments

Comments
 (0)