|
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