brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · d92010e Raw
201 lines · plain
1; RUN: opt -S -disable-output -passes="print<dxil-resources>" < %s 2>&1 | FileCheck %s2 3@G = external constant <4 x float>, align 44 5@Zero.str = private unnamed_addr constant [5 x i8] c"Zero\00", align 16@One.str = private unnamed_addr constant [4 x i8] c"One\00", align 17@Two.str = private unnamed_addr constant [4 x i8] c"Two\00", align 18@Three.str = private unnamed_addr constant [6 x i8] c"Three\00", align 19@Four.str = private unnamed_addr constant [5 x i8] c"Four\00", align 110@Array.str = private unnamed_addr constant [6 x i8] c"Array\00", align 111@Five.str = private unnamed_addr constant [5 x i8] c"Five\00", align 112@Six.str = private unnamed_addr constant [4 x i8] c"Six\00", align 113@CB.str = private unnamed_addr constant [3 x i8] c"CB\00", align 114@Constants.str = private unnamed_addr constant [10 x i8] c"Constants\00", align 115 16define void @test_typedbuffer() {17  ; ByteAddressBuffer Buf : register(t8, space1)18  %srv0 = call target("dx.RawBuffer", void, 0, 0)19      @llvm.dx.resource.handlefrombinding(i32 1, i32 8, i32 1, i32 0, ptr @Zero.str)20  ; CHECK: Resource [[SRV0:[0-9]+]]:21  ; CHECK:   Name: Zero22  ; CHECK:   Binding:23  ; CHECK:     Record ID: 024  ; CHECK:     Space: 125  ; CHECK:     Lower Bound: 826  ; CHECK:     Size: 127  ; CHECK:   Class: SRV28  ; CHECK:   Kind: RawBuffer29 30  ; struct S { float4 a; uint4 b; };31  ; StructuredBuffer<S> Buf : register(t2, space4)32  %srv1 = call target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 0, 0)33      @llvm.dx.resource.handlefrombinding(i32 4, i32 2, i32 1, i32 0, ptr @One.str)34  ; CHECK: Resource [[SRV1:[0-9]+]]:35  ; CHECK:   Name: One36  ; CHECK:   Binding:37  ; CHECK:     Record ID: 138  ; CHECK:     Space: 439  ; CHECK:     Lower Bound: 240  ; CHECK:     Size: 141  ; CHECK:   Class: SRV42  ; CHECK:   Kind: StructuredBuffer43  ; CHECK:   Buffer Stride: 3244  ; CHECK:   Alignment: 445 46  ; Buffer<uint4> Buf[24] : register(t3, space5)47  %srv2 = call target("dx.TypedBuffer", <4 x i32>, 0, 0, 0)48      @llvm.dx.resource.handlefrombinding(i32 5, i32 3, i32 24, i32 0, ptr @Two.str)49  ; CHECK: Resource [[SRV2:[0-9]+]]:50  ; CHECK:   Name: Two51  ; CHECK:   Binding:52  ; CHECK:     Record ID: 253  ; CHECK:     Space: 554  ; CHECK:     Lower Bound: 355  ; CHECK:     Size: 2456  ; CHECK:   Class: SRV57  ; CHECK:   Kind: Buffer58  ; CHECK:   Element Type: u3259  ; CHECK:   Element Count: 460 61  ; RWBuffer<int> Buf : register(u7, space2)62  %uav0 = call target("dx.TypedBuffer", i32, 1, 0, 1)63      @llvm.dx.resource.handlefrombinding(i32 2, i32 7, i32 1, i32 0, ptr @Three.str)64  ; CHECK: Resource [[UAV0:[0-9]+]]:65  ; CHECK:   Name: Three66  ; CHECK:   Binding:67  ; CHECK:     Record ID: 068  ; CHECK:     Space: 269  ; CHECK:     Lower Bound: 770  ; CHECK:     Size: 171  ; CHECK:   Globally Coherent: 072  ; CHECK:   Counter Direction: Unknown73  ; CHECK:   Class: UAV74  ; CHECK:   Kind: Buffer75  ; CHECK:   IsROV: 076  ; CHECK:   Element Type: i3277  ; CHECK:   Element Count: 178 79  ; RWBuffer<float4> Buf : register(u5, space3)80  %uav1 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0)81      @llvm.dx.resource.handlefrombinding(i32 3, i32 5, i32 1, i32 0, ptr @Four.str)82  call i32 @llvm.dx.resource.updatecounter(target("dx.TypedBuffer", <4 x float>, 1, 0, 0) %uav1, i8 -1)83  ; CHECK: Resource [[UAV1:[0-9]+]]:84  ; CHECK:   Name: Four85  ; CHECK:   Binding:86  ; CHECK:     Record ID: 187  ; CHECK:     Space: 388  ; CHECK:     Lower Bound: 589  ; CHECK:     Size: 190  ; CHECK:   Globally Coherent: 091  ; CHECK:   Counter Direction: Decrement92  ; CHECK:   Class: UAV93  ; CHECK:   Kind: Buffer94  ; CHECK:   IsROV: 095  ; CHECK:   Element Type: f3296  ; CHECK:   Element Count: 497 98  ; RWBuffer<float4> BufferArray[10] : register(u0, space4)99  ; RWBuffer<float4> Buf = BufferArray[0]100  %uav2_1 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0)101        @llvm.dx.resource.handlefrombinding(i32 4, i32 0, i32 10, i32 0, ptr @Array.str)102  ; RWBuffer<float4> Buf = BufferArray[5]103  %uav2_2 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0)104        @llvm.dx.resource.handlefrombinding(i32 4, i32 0, i32 10, i32 5, ptr @Array.str)105  call i32 @llvm.dx.resource.updatecounter(target("dx.TypedBuffer", <4 x float>, 1, 0, 0) %uav2_2, i8 1)106  ; CHECK: Resource [[UAV2:[0-9]+]]:107  ; CHECK:   Name: Array108  ; CHECK:   Binding:109  ; CHECK:     Record ID: 2110  ; CHECK:     Space: 4111  ; CHECK:     Lower Bound: 0112  ; CHECK:     Size: 10113  ; CHECK:   Globally Coherent: 0114  ; CHECK:   Counter Direction: Increment115  ; CHECK:   Class: UAV116  ; CHECK:   Kind: Buffer117  ; CHECK:   IsROV: 0118  ; CHECK:   Element Type: f32119  ; CHECK:   Element Count: 4120 121  ; RWBuffer<float4> Buf : register(u0, space5)122  %uav3 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0)123      @llvm.dx.resource.handlefrombinding(i32 5, i32 0, i32 1, i32 0, ptr @Five.str)124  call i32 @llvm.dx.resource.updatecounter(target("dx.TypedBuffer", <4 x float>, 1, 0, 0) %uav3, i8 -1)125  call i32 @llvm.dx.resource.updatecounter(target("dx.TypedBuffer", <4 x float>, 1, 0, 0) %uav3, i8 1)126  ; CHECK: Resource [[UAV3:[0-9]+]]:127  ; CHECK:   Name: Five128  ; CHECK:   Binding:129  ; CHECK:     Record ID: 3130  ; CHECK:     Space: 5131  ; CHECK:     Lower Bound: 0132  ; CHECK:     Size: 1133  ; CHECK:   Globally Coherent: 0134  ; CHECK:   Counter Direction: Invalid135  ; CHECK:   Class: UAV136  ; CHECK:   Kind: Buffer137  ; CHECK:   IsROV: 0138  ; CHECK:   Element Type: f32139  ; CHECK:   Element Count: 4140 141  %uav4 = call target("dx.TypedBuffer", double, 1, 0, 0) 142    @llvm.dx.resource.handlefrombinding(i32 5, i32 0, i32 1, i32 0, ptr @Six.str)143  ; CHECK: Resource [[UAV4:[0-9]+]]:144  ; CHECK:   Name: Six145  ; CHECK:   Binding:146  ; CHECK:     Record ID: 4147  ; CHECK:     Space: 5148  ; CHECK:     Lower Bound: 0149  ; CHECK:     Size: 1150  ; CHECK:   Globally Coherent: 0151  ; CHECK:   Counter Direction: Unknown152  ; CHECK:   Class: UAV153  ; CHECK:   Kind: Buffer154  ; CHECK:   IsROV: 0155  ; CHECK:   Element Type: f64 (stored as u32)156  ; CHECK:   Element Count: 1157 158  %cb0 = call target("dx.CBuffer", {float})159     @llvm.dx.resource.handlefrombinding(i32 1, i32 0, i32 1, i32 0, ptr @CB.str)160  ; CHECK: Resource [[CB0:[0-9]+]]:161  ; CHECK:   Name: CB162  ; CHECK:   Binding:163  ; CHECK:     Record ID: 0164  ; CHECK:     Space: 1165  ; CHECK:     Lower Bound: 0166  ; CHECK:     Size: 1167  ; CHECK:   Class: CBV168  ; CHECK:   Kind: CBuffer169  ; CHECK:   CBuffer size: 4170 171  %cb1 = call target("dx.CBuffer", <{ [2 x <{ float, target("dx.Padding", 12) }>], float }>)172     @llvm.dx.resource.handlefrombinding(i32 1, i32 8, i32 1, i32 0, ptr @Constants.str)173  ; CHECK: Resource [[CB1:[0-9]+]]:174  ; CHECK:   Name: Constants175  ; CHECK:   Binding:176  ; CHECK:     Record ID: 1177  ; CHECK:     Space: 1178  ; CHECK:     Lower Bound: 8179  ; CHECK:     Size: 1180  ; CHECK:   Class: CBV181  ; CHECK:   Kind: CBuffer182  ; CHECK:   CBuffer size: 36183 184  ; CHECK-NOT: Resource {{[0-9]+}}:185 186  ret void187}188 189; CHECK-DAG: Call bound to [[SRV0]]: %srv0 =190; CHECK-DAG: Call bound to [[SRV1]]: %srv1 =191; CHECK-DAG: Call bound to [[SRV2]]: %srv2 =192; CHECK-DAG: Call bound to [[UAV0]]: %uav0 =193; CHECK-DAG: Call bound to [[UAV1]]: %uav1 =194; CHECK-DAG: Call bound to [[UAV2]]: %uav2_1 =195; CHECK-DAG: Call bound to [[UAV2]]: %uav2_2 =196; CHECK-DAG: Call bound to [[UAV4]]: %uav4 =197; CHECK-DAG: Call bound to [[CB0]]: %cb0 =198; CHECK-DAG: Call bound to [[CB1]]: %cb1 =199 200attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }201