|
1 | 1 | // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-DXIL
|
2 |
| -// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV |
| 2 | +// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm -DSPIRV -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SPIRV |
3 | 3 |
|
4 |
| -// NOTE: SPIRV codegen for resource types is not yet implemented |
5 | 4 |
|
6 | 5 | StructuredBuffer<float> Buf : register(t10);
|
7 | 6 | RWStructuredBuffer<float> Buf2 : register(u5, space1);
|
| 7 | + |
| 8 | +#ifndef SPIRV |
| 9 | +// NOTE: SPIRV codegen for these resource types is not implemented yet. |
8 | 10 | AppendStructuredBuffer<float> Buf3 : register(u3);
|
9 | 11 | ConsumeStructuredBuffer<float> Buf4 : register(u4);
|
10 | 12 | RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
|
| 13 | +#endif |
| 14 | + |
| 15 | +// CHECK-DXIL: %"class.hlsl::StructuredBuffer" = type { target("dx.RawBuffer", float, 0, 0) } |
| 16 | +// CHECK-DXIL: %"class.hlsl::RWStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 0) } |
| 17 | +// CHECK-DXIL: %"class.hlsl::AppendStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 0) } |
| 18 | +// CHECK-DXIL: %"class.hlsl::ConsumeStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 0) } |
| 19 | +// CHECK-DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 1) } |
| 20 | + |
| 21 | +// CHECK-SPIRV: %"class.hlsl::StructuredBuffer" = type { target("spirv.VulkanBuffer", [0 x float], 12, 0) } |
| 22 | +// CHECK-SPIRV: %"class.hlsl::RWStructuredBuffer" = type { target("spirv.VulkanBuffer", [0 x float], 12, 1) } |
11 | 23 |
|
12 |
| -// CHECK: %"class.hlsl::StructuredBuffer" = type { target("dx.RawBuffer", float, 0, 0) } |
13 |
| -// CHECK: %"class.hlsl::RWStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 0) } |
14 |
| -// CHECK: %"class.hlsl::AppendStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 0) } |
15 |
| -// CHECK: %"class.hlsl::ConsumeStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 0) } |
16 |
| -// CHECK: %"class.hlsl::RasterizerOrderedStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 1) } |
17 | 24 |
|
18 |
| -// CHECK: @_ZL3Buf = internal global %"class.hlsl::StructuredBuffer" poison, align 4 |
19 |
| -// CHECK: @_ZL4Buf2 = internal global %"class.hlsl::RWStructuredBuffer" poison, align 4 |
20 |
| -// CHECK: @_ZL4Buf3 = internal global %"class.hlsl::AppendStructuredBuffer" poison, align 4 |
21 |
| -// CHECK: @_ZL4Buf4 = internal global %"class.hlsl::ConsumeStructuredBuffer" poison, align 4 |
22 |
| -// CHECK: @_ZL4Buf5 = internal global %"class.hlsl::RasterizerOrderedStructuredBuffer" poison, align 4 |
| 25 | +// CHECK: @_ZL3Buf = internal global %"class.hlsl::StructuredBuffer" poison |
| 26 | +// CHECK: @_ZL4Buf2 = internal global %"class.hlsl::RWStructuredBuffer" poison |
| 27 | +// CHECK-DXIL: @_ZL4Buf3 = internal global %"class.hlsl::AppendStructuredBuffer" poison, align 4 |
| 28 | +// CHECK-DXIL: @_ZL4Buf4 = internal global %"class.hlsl::ConsumeStructuredBuffer" poison, align 4 |
| 29 | +// CHECK-DXIL: @_ZL4Buf5 = internal global %"class.hlsl::RasterizerOrderedStructuredBuffer" poison, align 4 |
23 | 30 |
|
24 | 31 | // CHECK: define internal void @_init_resource__ZL3Buf()
|
25 | 32 | // 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)
|
26 | 33 | // CHECK-DXIL: store target("dx.RawBuffer", float, 0, 0) [[H]], ptr @_ZL3Buf, align 4
|
| 34 | +// 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 |
27 | 36 |
|
28 | 37 | // CHECK: define internal void @_init_resource__ZL4Buf2()
|
29 | 38 | // 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)
|
30 | 39 | // CHECK-DXIL: store target("dx.RawBuffer", float, 1, 0) [[H]], ptr @_ZL4Buf2, align 4
|
| 40 | +// 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 |
31 | 42 |
|
32 |
| -// CHECK: define internal void @_init_resource__ZL4Buf3() |
| 43 | +// CHECK-DXIL: define internal void @_init_resource__ZL4Buf3() |
33 | 44 | // 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)
|
34 | 45 | // CHECK-DXIL: store target("dx.RawBuffer", float, 1, 0) [[H]], ptr @_ZL4Buf3, align 4
|
35 | 46 |
|
36 |
| -// CHECK: define internal void @_init_resource__ZL4Buf4() |
| 47 | +// CHECK-DXIL: define internal void @_init_resource__ZL4Buf4() |
37 | 48 | // CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_1_0t(i32 0, i32 4, i32 1, i32 0, i1 false)
|
38 | 49 | // CHECK-DXIL: store target("dx.RawBuffer", float, 1, 0) [[H]], ptr @_ZL4Buf4, align 4
|
39 | 50 |
|
40 |
| -// CHECK: define internal void @_init_resource__ZL4Buf5() |
| 51 | +// CHECK-DXIL: define internal void @_init_resource__ZL4Buf5() |
41 | 52 | // CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 1, 1) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_1_1t(i32 2, i32 1, i32 1, i32 0, i1 false)
|
42 | 53 | // CHECK-DXIL: store target("dx.RawBuffer", float, 1, 1) [[H]], ptr @_ZL4Buf5, align 4
|
43 | 54 |
|
44 |
| -// CHECK: define linkonce_odr void @_ZN4hlsl16StructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
45 |
| -// CHECK-NEXT: entry: |
46 |
| -// CHECK: define linkonce_odr void @_ZN4hlsl18RWStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
47 |
| -// CHECK-NEXT: entry: |
48 |
| -// CHECK: define linkonce_odr void @_ZN4hlsl22AppendStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
49 |
| -// CHECK-NEXT: entry: |
50 |
| -// CHECK: define linkonce_odr void @_ZN4hlsl23ConsumeStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
51 |
| -// CHECK: define linkonce_odr void @_ZN4hlsl33RasterizerOrderedStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
| 55 | +// CHECK: define linkonce_odr void @_ZN4hlsl16StructuredBufferIfEC2Ev(ptr noundef nonnull align {{[48]}} dereferenceable({{[48]}}) %this) |
52 | 56 | // CHECK-NEXT: entry:
|
| 57 | +// CHECK-DXIL: define linkonce_odr void @_ZN4hlsl18RWStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
| 58 | +// CHECK-DXIL-NEXT: entry: |
| 59 | +// CHECK-DXIL: define linkonce_odr void @_ZN4hlsl22AppendStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
| 60 | +// CHECK-DXIL-NEXT: entry: |
| 61 | +// CHECK-DXIL: define linkonce_odr void @_ZN4hlsl23ConsumeStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
| 62 | +// CHECK-DXIL: define linkonce_odr void @_ZN4hlsl33RasterizerOrderedStructuredBufferIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) |
| 63 | +// CHECK-DXIL-NEXT: entry: |
53 | 64 |
|
54 |
| -// CHECK: define internal void @_GLOBAL__sub_I_StructuredBuffers_constructors.hlsl() |
55 |
| -// CHECK: call void @_init_resource__ZL3Buf() |
56 |
| -// CHECK: call void @_init_resource__ZL4Buf2() |
57 |
| -// CHECK: call void @_init_resource__ZL4Buf3() |
58 |
| -// CHECK: call void @_init_resource__ZL4Buf4() |
59 |
| -// CHECK: call void @_init_resource__ZL4Buf5() |
| 65 | +// CHECK: define {{.*}} void @_GLOBAL__sub_I_StructuredBuffers_constructors.hlsl() |
| 66 | +// CHECK: call {{.*}} @_init_resource__ZL3Buf() |
| 67 | +// CHECK: call {{.*}} @_init_resource__ZL4Buf2() |
| 68 | +// CHECK-DXIL: call void @_init_resource__ZL4Buf3() |
| 69 | +// CHECK-DXIL: call void @_init_resource__ZL4Buf4() |
| 70 | +// CHECK-DXIL: call void @_init_resource__ZL4Buf5() |
0 commit comments