
Implements https://github.com/llvm/wg-hlsl/blob/main/proposals/0026-symbol-visibility.md. The change is to stop using the `hlsl.export` attribute. Instead, symbols with "program linkage" in HLSL will have export linkage with default visibility, and symbols with "external linkage" in HLSL will have export linkage with hidden visibility.
31 lines
1.1 KiB
HLSL
31 lines
1.1 KiB
HLSL
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -std=hlsl202x -emit-llvm -o - -disable-llvm-passes %s | FileCheck %s --check-prefixes=CHECK,DXIL
|
|
// RUN: %clang_cc1 -triple spirv-pc-vulkan1.3-compute -std=hlsl202x -emit-llvm -o - -disable-llvm-passes %s | FileCheck %s --check-prefixes=CHECK,SPIRV
|
|
|
|
struct S {
|
|
static int Value;
|
|
};
|
|
|
|
int S::Value = 1;
|
|
// DXIL: @_ZN1S5ValueE = hidden global i32 1, align 4
|
|
// SPIRV: @_ZN1S5ValueE = hidden addrspace(10) global i32 1, align 4
|
|
|
|
[shader("compute")]
|
|
[numthreads(1,1,1)]
|
|
void main() {
|
|
S s;
|
|
int value1, value2;
|
|
// CHECK: %s = alloca %struct.S, align 1
|
|
// CHECK: %value1 = alloca i32, align 4
|
|
// CHECK: %value2 = alloca i32, align 4
|
|
|
|
// DXIL: [[tmp:%.*]] = load i32, ptr @_ZN1S5ValueE, align 4
|
|
// SPIRV: [[tmp:%.*]] = load i32, ptr addrspace(10) @_ZN1S5ValueE, align 4
|
|
// CHECK: store i32 [[tmp]], ptr %value1, align 4
|
|
value1 = S::Value;
|
|
|
|
// DXIL: [[tmp:%.*]] = load i32, ptr @_ZN1S5ValueE, align 4
|
|
// SPIRV: [[tmp:%.*]] = load i32, ptr addrspace(10) @_ZN1S5ValueE, align 4
|
|
// CHECK: store i32 [[tmp]], ptr %value2, align 4
|
|
value2 = s.Value;
|
|
}
|