|
1 | 1 | ; RUN: opt -S -dxil-resource-implicit-binding %s | FileCheck %s
|
2 | 2 |
|
3 | 3 | ; Resources defined (with random order of handlefromimplicitbinding calls):
|
4 |
| -; RWBuffer<float> A : register(u5); // defaults to space0 |
5 |
| -; RWBuffer<int> B[]; // gets u6 (unbounded range) |
6 |
| -; RWBuffer<float> C[4] : register(space5); // gets u0 in space5 |
7 |
| -; RWBuffer<int> D[] : register(space5); // gets u4 in space5 |
8 |
| -; RWBuffer<float> E[3] : register(space10); // gets u0, space10 |
9 |
| -; StructuredBuffer<int> F : register(space3);; // gets t0 in space3 |
| 4 | +; RWBuffer<float> A : register(u5); // defaults to space0 |
| 5 | +; RWBuffer<int> B[]; // gets u6 (unbounded range) |
| 6 | +; RWBuffer<float> C[4] : registcer(space5); // gets u0 in space5 |
| 7 | +; RWBuffer<int> D[] : register(space5); // gets u4 in space5 |
| 8 | +; RWBuffer<float> E[3] : register(space10); // gets u0, space10 |
| 9 | +; StructuredBuffer<int> F : register(space3); // gets t0 in space3 |
10 | 10 |
|
11 | 11 | target triple = "dxil-pc-shadermodel6.6-compute"
|
12 | 12 |
|
13 | 13 | define void @test_many_spaces() {
|
14 | 14 |
|
15 |
| -; RWBuffer<float> A : register(u1); |
| 15 | +; RWBuffer<float> A : register(u5); |
16 | 16 | %bufA = call target("dx.TypedBuffer", float, 1, 0, 0)
|
17 |
| - @llvm.dx.resource.handlefrombinding(i32 0, i32 1, i32 1, i32 0, i1 false) |
| 17 | + @llvm.dx.resource.handlefrombinding(i32 0, i32 5, i32 1, i32 0, i1 false) |
18 | 18 | ; no change to llvm.dx.resource.handlefrombinding
|
19 | 19 | ; CHECK: %bufA = call target("dx.TypedBuffer", float, 1, 0, 0)
|
20 |
| -; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 1, i32 1, i32 0, i1 false) |
| 20 | +; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 5, i32 1, i32 0, i1 false) |
21 | 21 |
|
22 |
| -; RWBuffer<float> B[]; |
23 |
| -%bufB = call target("dx.TypedBuffer", float, 1, 0, 0) |
| 22 | +; RWBuffer<int> B[]; |
| 23 | +%bufB = call target("dx.TypedBuffer", i32, 1, 0, 0) |
24 | 24 | @llvm.dx.resource.handlefromimplicitbinding(i32 100, i32 0, i32 -1, i32 0, i1 false)
|
25 |
| -; CHECK: %{{.*}} = call target("dx.TypedBuffer", float, 1, 0, 0) |
26 |
| -; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 6, i32 -1, i32 0, i1 false) |
| 25 | +; CHECK: %{{.*}} = call target("dx.TypedBuffer", i32, 1, 0, 0) |
| 26 | +; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0_0t(i32 0, i32 6, i32 -1, i32 0, i1 false) |
27 | 27 |
|
28 |
| -; RWBuffer<int> C : register(u5); |
29 |
| - %bufC = call target("dx.TypedBuffer", i32, 1, 0, 0) |
30 |
| - @llvm.dx.resource.handlefrombinding(i32 0, i32 5, i32 1, i32 0, i1 false) |
31 |
| -; no change to llvm.dx.resource.handlefrombinding |
32 |
| -; CHECK: %bufC = call target("dx.TypedBuffer", i32, 1, 0, 0) |
33 |
| -; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0_0t(i32 0, i32 5, i32 1, i32 0, i1 false) |
| 28 | +; RWBuffer<float> C[4] : register(space5); |
| 29 | +%bufC = call target("dx.TypedBuffer", i32, 1, 0, 0) |
| 30 | + @llvm.dx.resource.handlefromimplicitbinding(i32 101, i32 5, i32 4, i32 0, i1 false) |
| 31 | +; CHECK: %{{.*}} = call target("dx.TypedBuffer", i32, 1, 0, 0) |
| 32 | +; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0_0t(i32 5, i32 0, i32 4, i32 0, i1 false) |
34 | 33 |
|
35 |
| -; ; RWBuffer<float> D[3]; |
36 |
| - %bufD = call target("dx.TypedBuffer", float, 1, 0, 0) |
37 |
| - @llvm.dx.resource.handlefromimplicitbinding(i32 101, i32 0, i32 3, i32 1, i1 false) |
| 34 | +; RWBuffer<int> D[] : register(space5); |
| 35 | + %bufD = call target("dx.TypedBuffer", i32, 1, 0, 0) |
| 36 | + @llvm.dx.resource.handlefromimplicitbinding(i32 102, i32 5, i32 -1, i32 0, i1 false) |
| 37 | +; CHECK: %{{.*}} = call target("dx.TypedBuffer", i32, 1, 0, 0) |
| 38 | +; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0_0t(i32 5, i32 4, i32 -1, i32 0, i1 false) |
| 39 | + |
| 40 | +; RWBuffer<float> E[3] : register(space10); // gets u0, space10 |
| 41 | +%bufE = call target("dx.TypedBuffer", float, 1, 0, 0) |
| 42 | + @llvm.dx.resource.handlefromimplicitbinding(i32 103, i32 10, i32 4, i32 0, i1 false) |
38 | 43 | ; CHECK: %{{.*}} = call target("dx.TypedBuffer", float, 1, 0, 0)
|
39 |
| -; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 2, i32 3, i32 1, i1 false) |
| 44 | +; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 10, i32 0, i32 4, i32 0, i1 false) |
| 45 | + |
| 46 | +; StructuredBuffer<int> F : register(space3); // gets t0 in space3 |
| 47 | +%bufF = call target("dx.RawBuffer", i32, 0, 0) |
| 48 | + @llvm.dx.resource.handlefromimplicitbinding(i32 104, i32 3, i32 1, i32 0, i1 false) |
| 49 | +; CHECK: %{{.*}} = call target("dx.RawBuffer", i32, 0, 0) |
| 50 | +; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i32_0_0t(i32 3, i32 0, i32 1, i32 0, i1 false) |
40 | 51 |
|
41 | 52 | ; CHECK-NOT: @llvm.dx.resource.handlefromimplicitbinding
|
42 | 53 | ret void
|
43 | 54 | }
|
44 |
| - |
|
0 commit comments