Skip to content

Commit d92bac8

Browse files
authored
[HLSL] Introduce address space hlsl_constant(2) for constant buffer declarations (llvm#123411)
Introduces a new address space `hlsl_constant(2)` for constant buffer declarations. This address space is applied to declarations inside `cbuffer` block. Later on, it will also be applied to `ConstantBuffer<T>` syntax and the default `$Globals` constant buffer. Clang codegen translates constant buffer declarations to global variables and loads from `hlsl_constant(2)` address space. More work coming soon will include addition of metadata that will map these globals to individual constant buffers and enable their transformation to appropriate constant buffer load intrinsics later on in an LLVM pass. Fixes llvm#123406
1 parent 1b4bd4e commit d92bac8

24 files changed

+148
-155
lines changed

clang/include/clang/Basic/AddressSpaces.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ enum class LangAS : unsigned {
5858

5959
// HLSL specific address spaces.
6060
hlsl_groupshared,
61+
hlsl_constant,
6162

6263
// Wasm specific address spaces.
6364
wasm_funcref,

clang/lib/AST/TypePrinter.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2552,10 +2552,12 @@ std::string Qualifiers::getAddrSpaceAsString(LangAS AS) {
25522552
return "__uptr __ptr32";
25532553
case LangAS::ptr64:
25542554
return "__ptr64";
2555-
case LangAS::wasm_funcref:
2556-
return "__funcref";
25572555
case LangAS::hlsl_groupshared:
25582556
return "groupshared";
2557+
case LangAS::hlsl_constant:
2558+
return "hlsl_constant";
2559+
case LangAS::wasm_funcref:
2560+
return "__funcref";
25592561
default:
25602562
return std::to_string(toTargetAddressSpace(AS));
25612563
}

clang/lib/Basic/Targets/AArch64.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ static const unsigned ARM64AddrSpaceMap[] = {
4444
static_cast<unsigned>(AArch64AddrSpace::ptr32_uptr),
4545
static_cast<unsigned>(AArch64AddrSpace::ptr64),
4646
0, // hlsl_groupshared
47+
0, // hlsl_constant
4748
// Wasm address space values for this target are dummy values,
4849
// as it is only enabled for Wasm targets.
4950
20, // wasm_funcref

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsGenMap = {
5959
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_uptr
6060
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr64
6161
llvm::AMDGPUAS::FLAT_ADDRESS, // hlsl_groupshared
62+
llvm::AMDGPUAS::CONSTANT_ADDRESS, // hlsl_constant
6263
};
6364

6465
const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = {
@@ -74,16 +75,16 @@ const LangASMap AMDGPUTargetInfo::AMDGPUDefIsPrivMap = {
7475
llvm::AMDGPUAS::CONSTANT_ADDRESS, // cuda_constant
7576
llvm::AMDGPUAS::LOCAL_ADDRESS, // cuda_shared
7677
// SYCL address space values for this map are dummy
77-
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_global
78-
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_global_device
79-
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_global_host
80-
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_local
81-
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_private
82-
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_sptr
83-
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_uptr
84-
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr64
85-
llvm::AMDGPUAS::FLAT_ADDRESS, // hlsl_groupshared
86-
78+
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_global
79+
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_global_device
80+
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_global_host
81+
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_local
82+
llvm::AMDGPUAS::FLAT_ADDRESS, // sycl_private
83+
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_sptr
84+
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_uptr
85+
llvm::AMDGPUAS::FLAT_ADDRESS, // ptr64
86+
llvm::AMDGPUAS::FLAT_ADDRESS, // hlsl_groupshared
87+
llvm::AMDGPUAS::CONSTANT_ADDRESS, // hlsl_constant
8788
};
8889
} // namespace targets
8990
} // namespace clang

clang/lib/Basic/Targets/DirectX.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static const unsigned DirectXAddrSpaceMap[] = {
4242
0, // ptr32_uptr
4343
0, // ptr64
4444
3, // hlsl_groupshared
45+
2, // hlsl_constant
4546
// Wasm address space values for this target are dummy values,
4647
// as it is only enabled for Wasm targets.
4748
20, // wasm_funcref

clang/lib/Basic/Targets/NVPTX.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ static const unsigned NVPTXAddrSpaceMap[] = {
4646
0, // ptr32_uptr
4747
0, // ptr64
4848
0, // hlsl_groupshared
49+
0, // hlsl_constant
4950
// Wasm address space values for this target are dummy values,
5051
// as it is only enabled for Wasm targets.
5152
20, // wasm_funcref

clang/lib/Basic/Targets/SPIR.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ static const unsigned SPIRDefIsPrivMap[] = {
4747
0, // ptr32_uptr
4848
0, // ptr64
4949
0, // hlsl_groupshared
50+
2, // hlsl_constant
5051
// Wasm address space values for this target are dummy values,
5152
// as it is only enabled for Wasm targets.
5253
20, // wasm_funcref
@@ -80,6 +81,7 @@ static const unsigned SPIRDefIsGenMap[] = {
8081
0, // ptr32_uptr
8182
0, // ptr64
8283
0, // hlsl_groupshared
84+
0, // hlsl_constant
8385
// Wasm address space values for this target are dummy values,
8486
// as it is only enabled for Wasm targets.
8587
20, // wasm_funcref

clang/lib/Basic/Targets/SystemZ.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static const unsigned ZOSAddressMap[] = {
4242
1, // ptr32_uptr
4343
0, // ptr64
4444
0, // hlsl_groupshared
45+
0, // hlsl_constant
4546
0 // wasm_funcref
4647
};
4748

clang/lib/Basic/Targets/TCE.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = {
5151
0, // ptr32_uptr
5252
0, // ptr64
5353
0, // hlsl_groupshared
54+
0, // hlsl_constant
5455
// Wasm address space values for this target are dummy values,
5556
// as it is only enabled for Wasm targets.
5657
20, // wasm_funcref

clang/lib/Basic/Targets/WebAssembly.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static const unsigned WebAssemblyAddrSpaceMap[] = {
4242
0, // ptr32_uptr
4343
0, // ptr64
4444
0, // hlsl_groupshared
45+
0, // hlsl_constant
4546
20, // wasm_funcref
4647
};
4748

0 commit comments

Comments
 (0)