Skip to content

Commit 93ff204

Browse files
committed
do it in the target
Signed-off-by: Sarnie, Nick <[email protected]>
1 parent 3812b13 commit 93ff204

File tree

5 files changed

+18
-18
lines changed

5 files changed

+18
-18
lines changed

clang/lib/Basic/Targets/SPIR.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ static const unsigned SPIRDefIsPrivMap[] = {
3737
0, // cuda_device
3838
0, // cuda_constant
3939
0, // cuda_shared
40-
// SYCL address space values for this map are dummy
41-
0, // sycl_global
40+
// Most SYCL address space values for this map are dummy
41+
1, // sycl_global
4242
0, // sycl_global_device
4343
0, // sycl_global_host
4444
0, // sycl_local
@@ -374,6 +374,11 @@ class LLVM_LIBRARY_VISIBILITY SPIRV64TargetInfo : public BaseSPIRVTargetInfo {
374374
const llvm::omp::GV &getGridValue() const override {
375375
return llvm::omp::SPIRVGridValues;
376376
}
377+
378+
std::optional<LangAS> getConstantAddressSpace() const override {
379+
// opencl_constant will map to UniformConstant in SPIR-V
380+
return LangAS::opencl_constant;
381+
}
377382
};
378383

379384
class LLVM_LIBRARY_VISIBILITY SPIRV64AMDGCNTargetInfo final

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5384,11 +5384,6 @@ LangAS CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D) {
53845384
LangAS AS;
53855385
if (OpenMPRuntime->hasAllocateAttributeForGlobalVar(D, AS))
53865386
return AS;
5387-
if (LangOpts.OpenMPIsTargetDevice && getTriple().isSPIRV())
5388-
// SPIR-V globals should map to CrossWorkGroup instead of default
5389-
// AS, as generic/no address space is invalid. This is similar
5390-
// to what is done for HIPSPV.
5391-
return LangAS::opencl_global;
53925387
}
53935388
return getTargetCodeGenInfo().getGlobalVarAddressSpace(*this, D);
53945389
}
@@ -5407,10 +5402,6 @@ LangAS CodeGenModule::GetGlobalConstantAddressSpace() const {
54075402
// UniformConstant storage class is not viable as pointers to it may not be
54085403
// casted to Generic pointers which are used to model HIP's "flat" pointers.
54095404
return LangAS::cuda_device;
5410-
if (LangOpts.OpenMPIsTargetDevice && getTriple().isSPIRV())
5411-
// OpenMP SPIR-V global constants should map to UniformConstant, different
5412-
// from the HIPSPV case above.
5413-
return LangAS::opencl_constant;
54145405
if (auto AS = getTarget().getConstantAddressSpace())
54155406
return *AS;
54165407
return LangAS::Default;

clang/test/CodeGenHLSL/GlobalDestructors.hlsl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ void main(unsigned GI : SV_GroupIndex) {
8787
// NOINLINE-SPIRV: define internal spir_func void @_GLOBAL__D_a() [[IntAttr:\#[0-9]+]]
8888
// NOINLINE-SPIRV-NEXT: entry:
8989
// NOINLINE-SPIRV-NEXT: %0 = call token @llvm.experimental.convergence.entry()
90-
// NOINLINE-SPIRV-NEXT: call spir_func void @_ZN4TailD1Ev(ptr @_ZZ3WagvE1T) [ "convergencectrl"(token %0) ]
91-
// NOINLINE-SPIRV-NEXT: call spir_func void @_ZN6PupperD1Ev(ptr @GlobalPup) [ "convergencectrl"(token %0) ]
90+
// NOINLINE-SPIRV-NEXT: call spir_func void @_ZN4TailD1Ev(ptr addrspacecast (ptr addrspace(1) @_ZZ3WagvE1T to ptr)) [ "convergencectrl"(token %0) ]
91+
92+
// NOINLINE-SPIRV-NEXT: call spir_func void @_ZN6PupperD1Ev(ptr addrspacecast (ptr addrspace(1) @GlobalPup to ptr)) [ "convergencectrl"(token %0) ]
93+
9294
// NOINLINE-SPIRV-NEXT: ret void
9395

9496
// NOINLINE: attributes [[IntAttr]] = {{.*}} alwaysinline

clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
2222
// CHECK-SPIRV: %"class.hlsl::RWStructuredBuffer" = type { target("spirv.VulkanBuffer", [0 x float], 12, 1) }
2323

2424

25-
// CHECK: @_ZL3Buf = internal global %"class.hlsl::StructuredBuffer" poison
26-
// CHECK: @_ZL4Buf2 = internal global %"class.hlsl::RWStructuredBuffer" poison
25+
// CHECK-SPIRV: @_ZL3Buf = internal addrspace(1) global %"class.hlsl::StructuredBuffer" poison
26+
// CHECK-SPIRV: @_ZL4Buf2 = internal addrspace(1) global %"class.hlsl::RWStructuredBuffer" poison
27+
// CHECK-DXIL: @_ZL3Buf = internal{{.*}}global %"class.hlsl::StructuredBuffer" poison
28+
// CHECK-DXIL: @_ZL4Buf2 = internal{{.*}}global %"class.hlsl::RWStructuredBuffer" poison
2729
// CHECK-DXIL: @_ZL4Buf3 = internal global %"class.hlsl::AppendStructuredBuffer" poison, align 4
2830
// CHECK-DXIL: @_ZL4Buf4 = internal global %"class.hlsl::ConsumeStructuredBuffer" poison, align 4
2931
// CHECK-DXIL: @_ZL4Buf5 = internal global %"class.hlsl::RasterizerOrderedStructuredBuffer" poison, align 4
@@ -32,13 +34,13 @@ RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
3234
// CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 0, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_0_0t(i32 0, i32 10, i32 1, i32 0, i1 false)
3335
// CHECK-DXIL: store target("dx.RawBuffer", float, 0, 0) [[H]], ptr @_ZL3Buf, align 4
3436
// CHECK-SPIRV: [[H:%.*]] = call target("spirv.VulkanBuffer", [0 x float], 12, 0) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0f32_12_0t(i32 0, i32 10, i32 1, i32 0, i1 false)
35-
// CHECK-SPIRV: store target("spirv.VulkanBuffer", [0 x float], 12, 0) [[H]], ptr @_ZL3Buf, align 8
37+
// CHECK-SPIRV: store target("spirv.VulkanBuffer", [0 x float], 12, 0) [[H]], ptr addrspace(1) @_ZL3Buf, align 8
3638

3739
// CHECK: define internal void @_init_resource__ZL4Buf2()
3840
// CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_1_0t(i32 1, i32 5, i32 1, i32 0, i1 false)
3941
// CHECK-DXIL: store target("dx.RawBuffer", float, 1, 0) [[H]], ptr @_ZL4Buf2, align 4
4042
// CHECK-SPIRV: [[H:%.*]] = call target("spirv.VulkanBuffer", [0 x float], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0f32_12_1t(i32 1, i32 5, i32 1, i32 0, i1 false)
41-
// CHECK-SPIRV: store target("spirv.VulkanBuffer", [0 x float], 12, 1) [[H]], ptr @_ZL4Buf2, align 8
43+
// CHECK-SPIRV: store target("spirv.VulkanBuffer", [0 x float], 12, 1) [[H]], ptr addrspace(1) @_ZL4Buf2, align 8
4244

4345
// CHECK-DXIL: define internal void @_init_resource__ZL4Buf3()
4446
// CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_1_0t(i32 0, i32 3, i32 1, i32 0, i1 false)

clang/test/OpenMP/spirv_target_addrspace.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ extern int printf(char[]);
55

66
#pragma omp declare target
77
// CHECK: @global = addrspace(1) global i32 0, align 4
8-
// CHECK: @.str = private unnamed_addr addrspace(2) constant [4 x i8] c"foo\00", align 1
8+
// CHECK: @.str = private unnamed_addr addrspace(2) constant [4 x i8] c"foo\00", align 1f
99
int global = 0;
1010
#pragma omp end declare target
1111
int main() {

0 commit comments

Comments
 (0)