43 lines · plain
1; RUN: opt -S -dxil-resource-implicit-binding %s | FileCheck %s2 3; Resources defined4; RWBuffer<float> A : register(u1);5; RWBuffer<float> B[]; // gets u6 (unbounded range)6; RWBuffer<int> C : register(u5);7; RWBuffer<float> D[3]; // gets u2 because it fits between A and C but not before A8 9target triple = "dxil-pc-shadermodel6.6-compute"10 11define void @test_unbounded_arrays() {12 13; RWBuffer<float> A : register(u1);14 %bufA = call target("dx.TypedBuffer", float, 1, 0, 0)15 @llvm.dx.resource.handlefrombinding(i32 0, i32 1, i32 1, i32 0, ptr null)16; no change to llvm.dx.resource.handlefrombinding17; CHECK: %bufA = call target("dx.TypedBuffer", float, 1, 0, 0)18; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 1, i32 1, i32 0, ptr null)19 20; RWBuffer<float> B[];21%bufB = call target("dx.TypedBuffer", float, 1, 0, 0)22 @llvm.dx.resource.handlefromimplicitbinding(i32 100, i32 0, i32 -1, i32 0, ptr null)23; CHECK: %{{.*}} = call target("dx.TypedBuffer", float, 1, 0, 0)24; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 6, i32 -1, i32 0, ptr null)25 26; RWBuffer<int> C : register(u5);27 %bufC = call target("dx.TypedBuffer", i32, 1, 0, 0)28 @llvm.dx.resource.handlefrombinding(i32 0, i32 5, i32 1, i32 0, ptr null)29; no change to llvm.dx.resource.handlefrombinding30; CHECK: %bufC = call target("dx.TypedBuffer", i32, 1, 0, 0)31; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0_0t(i32 0, i32 5, i32 1, i32 0, ptr null)32 33; ; RWBuffer<float> D[3];34 %bufD = call target("dx.TypedBuffer", float, 1, 0, 0)35 @llvm.dx.resource.handlefromimplicitbinding(i32 101, i32 0, i32 3, i32 1, ptr null)36; CHECK: %{{.*}} = call target("dx.TypedBuffer", float, 1, 0, 0)37; CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0t(i32 0, i32 2, i32 3, i32 1, ptr null)38 39; CHECK-NOT: @llvm.dx.resource.handlefromimplicitbinding40 ret void41}42 43