Skip to content

Commit 9c2e1d8

Browse files
committed
[Clang] Add and use mangleVendorType helper. NFC.
1 parent 1e23a61 commit 9c2e1d8

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ class CXXNameMangler {
468468
void mangleLambdaSig(const CXXRecordDecl *Lambda);
469469
void mangleModuleNamePrefix(StringRef Name, bool IsPartition = false);
470470
void mangleVendorQualifier(StringRef Name);
471+
void mangleVendorType(StringRef Name);
471472

472473
private:
473474

@@ -2871,6 +2872,10 @@ void CXXNameMangler::mangleVendorQualifier(StringRef name) {
28712872
Out << 'U' << name.size() << name;
28722873
}
28732874

2875+
void CXXNameMangler::mangleVendorType(StringRef name) {
2876+
Out << 'u' << name.size() << name;
2877+
}
2878+
28742879
void CXXNameMangler::mangleRefQualifier(RefQualifierKind RefQualifier) {
28752880
// <ref-qualifier> ::= R # lvalue reference
28762881
// ::= O # rvalue-reference
@@ -3389,8 +3394,7 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
33893394
if (T->getKind() == BuiltinType::SveBFloat16 && \
33903395
isCompatibleWith(LangOptions::ClangABI::Ver17)) { \
33913396
/* Prior to Clang 18.0 we used this incorrect mangled name */ \
3392-
type_name = "__SVBFloat16_t"; \
3393-
Out << "u" << type_name.size() << type_name; \
3397+
mangleVendorType("__SVBFloat16_t"); \
33943398
} else { \
33953399
type_name = MangledName; \
33963400
Out << (type_name == Name ? "u" : "") << type_name.size() << type_name; \
@@ -3407,35 +3411,30 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
34073411
Out << (type_name == Name ? "u" : "") << type_name.size() << type_name; \
34083412
break;
34093413
#include "clang/Basic/AArch64SVEACLETypes.def"
3410-
#define PPC_VECTOR_TYPE(Name, Id, Size) \
3411-
case BuiltinType::Id: \
3412-
type_name = #Name; \
3413-
Out << 'u' << type_name.size() << type_name; \
3414+
#define PPC_VECTOR_TYPE(Name, Id, Size) \
3415+
case BuiltinType::Id: \
3416+
mangleVendorType(#Name); \
34143417
break;
34153418
#include "clang/Basic/PPCTypes.def"
34163419
// TODO: Check the mangling scheme for RISC-V V.
34173420
#define RVV_TYPE(Name, Id, SingletonId) \
34183421
case BuiltinType::Id: \
3419-
type_name = Name; \
3420-
Out << 'u' << type_name.size() << type_name; \
3422+
mangleVendorType(Name); \
34213423
break;
34223424
#include "clang/Basic/RISCVVTypes.def"
34233425
#define WASM_REF_TYPE(InternalName, MangledName, Id, SingletonId, AS) \
34243426
case BuiltinType::Id: \
3425-
type_name = MangledName; \
3426-
Out << 'u' << type_name.size() << type_name; \
3427+
mangleVendorType(MangledName); \
34273428
break;
34283429
#include "clang/Basic/WebAssemblyReferenceTypes.def"
34293430
#define AMDGPU_TYPE(Name, Id, SingletonId) \
34303431
case BuiltinType::Id: \
3431-
type_name = Name; \
3432-
Out << 'u' << type_name.size() << type_name; \
3432+
mangleVendorType(Name); \
34333433
break;
34343434
#include "clang/Basic/AMDGPUTypes.def"
34353435
#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) \
34363436
case BuiltinType::Id: \
3437-
type_name = #Name; \
3438-
Out << 'u' << type_name.size() << type_name; \
3437+
mangleVendorType(#Name); \
34393438
break;
34403439
#include "clang/Basic/HLSLIntangibleTypes.def"
34413440
}
@@ -4006,8 +4005,9 @@ void CXXNameMangler::mangleAArch64FixedSveVectorType(const VectorType *T) {
40064005
if (T->getVectorKind() == VectorKind::SveFixedLengthPredicate)
40074006
VecSizeInBits *= 8;
40084007

4009-
Out << "9__SVE_VLSI" << 'u' << TypeName.size() << TypeName << "Lj"
4010-
<< VecSizeInBits << "EE";
4008+
Out << "9__SVE_VLSI";
4009+
mangleVendorType(TypeName);
4010+
Out << "Lj" << VecSizeInBits << "EE";
40114011
}
40124012

40134013
void CXXNameMangler::mangleAArch64FixedSveVectorType(
@@ -4107,8 +4107,9 @@ void CXXNameMangler::mangleRISCVFixedRVVVectorType(const VectorType *T) {
41074107
}
41084108
TypeNameOS << "_t";
41094109

4110-
Out << "9__RVV_VLSI" << 'u' << TypeNameStr.size() << TypeNameStr << "Lj"
4111-
<< VecSizeInBits << "EE";
4110+
Out << "9__RVV_VLSI";
4111+
mangleVendorType(TypeNameStr);
4112+
Out << "Lj" << VecSizeInBits << "EE";
41124113
}
41134114

41144115
void CXXNameMangler::mangleRISCVFixedRVVVectorType(
@@ -4207,8 +4208,7 @@ void CXXNameMangler::mangleType(const ConstantMatrixType *T) {
42074208
// Mangle matrix types as a vendor extended type:
42084209
// u<Len>matrix_typeI<Rows><Columns><element type>E
42094210

4210-
StringRef VendorQualifier = "matrix_type";
4211-
Out << "u" << VendorQualifier.size() << VendorQualifier;
4211+
mangleVendorType("matrix_type");
42124212

42134213
Out << "I";
42144214
auto &ASTCtx = getASTContext();
@@ -4226,8 +4226,7 @@ void CXXNameMangler::mangleType(const ConstantMatrixType *T) {
42264226
void CXXNameMangler::mangleType(const DependentSizedMatrixType *T) {
42274227
// Mangle matrix types as a vendor extended type:
42284228
// u<Len>matrix_typeI<row expr><column expr><element type>E
4229-
StringRef VendorQualifier = "matrix_type";
4230-
Out << "u" << VendorQualifier.size() << VendorQualifier;
4229+
mangleVendorType("matrix_type");
42314230

42324231
Out << "I";
42334232
mangleTemplateArgExpr(T->getRowExpr());
@@ -4273,7 +4272,7 @@ void CXXNameMangler::mangleType(const ObjCObjectType *T) {
42734272
StringRef name = I->getName();
42744273
QualOS << name.size() << name;
42754274
}
4276-
Out << 'U' << QualStr.size() << QualStr;
4275+
mangleVendorQualifier(QualStr);
42774276
}
42784277

42794278
mangleType(T->getBaseType());
@@ -4407,8 +4406,6 @@ void CXXNameMangler::mangleType(const UnaryTransformType *T) {
44074406
// If this is dependent, we need to record that. If not, we simply
44084407
// mangle it as the underlying type since they are equivalent.
44094408
if (T->isDependentType()) {
4410-
Out << "u";
4411-
44124409
StringRef BuiltinName;
44134410
switch (T->getUTTKind()) {
44144411
#define TRANSFORM_TYPE_TRAIT_DEF(Enum, Trait) \
@@ -4417,7 +4414,7 @@ void CXXNameMangler::mangleType(const UnaryTransformType *T) {
44174414
break;
44184415
#include "clang/Basic/TransformTypeTraits.def"
44194416
}
4420-
Out << BuiltinName.size() << BuiltinName;
4417+
mangleVendorType(BuiltinName);
44214418
}
44224419

44234420
Out << "I";
@@ -5250,9 +5247,8 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity,
52505247
// <expression> ::= u <source-name> <template-arg>* E # vendor extension
52515248
const TypeTraitExpr *TTE = cast<TypeTraitExpr>(E);
52525249
NotPrimaryExpr();
5253-
Out << 'u';
52545250
llvm::StringRef Spelling = getTraitSpelling(TTE->getTrait());
5255-
Out << Spelling.size() << Spelling;
5251+
mangleVendorType(Spelling);
52565252
for (TypeSourceInfo *TSI : TTE->getArgs()) {
52575253
mangleType(TSI->getType());
52585254
}

0 commit comments

Comments
 (0)