Skip to content

Commit fa0b778

Browse files
committed
update mangling based on feedback
1 parent 2ecca53 commit fa0b778

File tree

3 files changed

+21
-36
lines changed

3 files changed

+21
-36
lines changed

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4493,28 +4493,34 @@ void CXXNameMangler::mangleType(const ArrayParameterType *T) {
44934493
}
44944494

44954495
void CXXNameMangler::mangleType(const HLSLAttributedResourceType *T) {
4496-
mangleType(T->getWrappedType());
4496+
llvm::SmallString<64> Str("_Res");
44974497
const HLSLAttributedResourceType::Attributes &Attrs = T->getAttrs();
44984498
// map resource class to HLSL virtual register letter
44994499
switch (Attrs.ResourceClass) {
4500-
case llvm::dxil::ResourceClass::UAV:
4501-
Out << 'u';
4500+
case llvm::dxil::ResourceClass::UAV:
4501+
Str += "_u";
45024502
break;
4503-
case llvm::dxil::ResourceClass::SRV:
4504-
Out << 't';
4503+
case llvm::dxil::ResourceClass::SRV:
4504+
Str += "_t";
45054505
break;
45064506
case llvm::dxil::ResourceClass::CBuffer:
4507-
Out << 'b';
4507+
Str += "_b";
45084508
break;
45094509
case llvm::dxil::ResourceClass::Sampler:
4510-
Out << 's';
4510+
Str += "_s";
45114511
break;
45124512
}
4513-
mangleNumber(Attrs.IsROV);
4514-
mangleNumber(Attrs.RawBuffer);
4513+
mangleVendorQualifier(Str);
4514+
if (Attrs.IsROV)
4515+
mangleVendorQualifier("_ROV");
4516+
if (Attrs.RawBuffer)
4517+
mangleVendorQualifier("_Raw");
45154518

4516-
if (!T->hasContainedType())
4519+
if (!T->hasContainedType()) {
4520+
mangleVendorQualifier("__CT");
45174521
mangleType(T->getContainedType());
4522+
}
4523+
mangleType(T->getWrappedType());
45184524
}
45194525

45204526
void CXXNameMangler::mangleIntegerLiteral(QualType T,

clang/lib/AST/MicrosoftMangle.cpp

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3756,28 +3756,7 @@ void MicrosoftCXXNameMangler::mangleType(const DependentBitIntType *T,
37563756

37573757
void MicrosoftCXXNameMangler::mangleType(const HLSLAttributedResourceType *T,
37583758
Qualifiers, SourceRange Range) {
3759-
mangleType(T->getWrappedType(), SourceRange(), QMM_Escape);
3760-
const HLSLAttributedResourceType::Attributes &Attrs = T->getAttrs();
3761-
// map resource class to HLSL virtual register letter
3762-
switch (Attrs.ResourceClass) {
3763-
case llvm::dxil::ResourceClass::UAV:
3764-
Out << 'u';
3765-
break;
3766-
case llvm::dxil::ResourceClass::SRV:
3767-
Out << 't';
3768-
break;
3769-
case llvm::dxil::ResourceClass::CBuffer:
3770-
Out << 'b';
3771-
break;
3772-
case llvm::dxil::ResourceClass::Sampler:
3773-
Out << 's';
3774-
break;
3775-
}
3776-
mangleNumber(Attrs.IsROV);
3777-
mangleNumber(Attrs.RawBuffer);
3778-
3779-
if (T->hasContainedType())
3780-
mangleType(T->getContainedType(), SourceRange(), QMM_Escape);
3759+
mangleArtificialTagType(TagTypeKind::Struct, "HLSLAttributedResourceType", {"__hlsl"});
37813760
}
37823761

37833762
// <this-adjustment> ::= <no-adjustment> | <static-adjustment> |

clang/test/CodeGenHLSL/builtins/hlsl_resource_t.hlsl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ using handle_float_t = __hlsl_resource_t [[hlsl::resource_class(UAV)]] [[hlsl::c
55
// CHECK: %"class.hlsl::RWBuffer" = type { target("dx.TypedBuffer", <4 x float>, 1, 0, 0)
66
// CHECK: %"class.hlsl::StructuredBuffer" = type { target("dx.RawBuffer", %struct.MyStruct = type { <4 x float>, <2 x i32>, [8 x i8] }, 1, 0)
77

8-
// CHECK: define void @"?fa@@YAXU__hlsl_resource_t@@uA@A@M@Z"(target("dx.TypedBuffer", float, 1, 0, 0) %a)
9-
// CHECK: call void @"?foo1@@YAXU__hlsl_resource_t@@uA@A@M@Z"(target("dx.TypedBuffer", float, 1, 0, 0)
10-
// CHECK: declare void @"?foo1@@YAXU__hlsl_resource_t@@uA@A@M@Z"(target("dx.TypedBuffer", float, 1, 0, 0))
8+
// CHECK: define void @"?fa@@YAXUHLSLAttributedResourceType@__hlsl@@@Z"(target("dx.TypedBuffer", float, 1, 0, 0) %a)
9+
// CHECK: call void @"?foo1@@YAXUHLSLAttributedResourceType@__hlsl@@@Z"(target("dx.TypedBuffer", float, 1, 0, 0) %0)
10+
// CHECK: declare void @"?foo1@@YAXUHLSLAttributedResourceType@__hlsl@@@Z"(target("dx.TypedBuffer", float, 1, 0, 0))
1111

1212
void foo1(handle_float_t res);
1313

1414
void fa(handle_float_t a) {
1515
foo1(a);
1616
}
1717

18-
// CHECK: define void @"?fb@@YAXU__hlsl_resource_t@@uA@A@M@Z"(target("dx.TypedBuffer", float, 1, 0, 0) %a)
18+
// CHECK: define void @"?fb@@YAXUHLSLAttributedResourceType@__hlsl@@@Z"(target("dx.TypedBuffer", float, 1, 0, 0) %a)
1919
void fb(handle_float_t a) {
2020
handle_float_t b = a;
2121
}

0 commit comments

Comments
 (0)