59 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -x hlsl -emit-llvm -o - %s | FileCheck %s2 3using handle_float_t = __hlsl_resource_t [[hlsl::resource_class(UAV)]] [[hlsl::contained_type(float)]];4 5struct CustomResource {6 handle_float_t h;7};8 9// CHECK: %struct.CustomResource = type { target("dx.TypedBuffer", float, 1, 0, 0) }10// CHECK: %"class.hlsl::RWBuffer" = type { target("dx.TypedBuffer", <4 x float>, 1, 0, 0)11// CHECK: %"class.hlsl::StructuredBuffer" = type { target("dx.RawBuffer", %struct.MyStruct, 0, 0)12// CHECK: %struct.MyStruct = type <{ <4 x float>, <2 x i32> }>13 14// CHECK: define hidden void @_Z2fa14CustomResource(ptr noundef byval(%struct.CustomResource) align 1 %a)15// CHECK: call void @_Z4foo114CustomResource(ptr noundef byval(%struct.CustomResource) align 1 %agg.tmp)16// CHECK: declare hidden void @_Z4foo114CustomResource(ptr noundef byval(%struct.CustomResource) align 1)17 18void foo1(CustomResource res);19 20void fa(CustomResource a) {21 foo1(a);22}23 24// CHECK: define hidden void @_Z2fb14CustomResource(ptr noundef byval(%struct.CustomResource) align 1 %a)25void fb(CustomResource a) {26 CustomResource b = a;27}28 29// CHECK: define hidden void @_Z2fcN4hlsl8RWBufferIDv4_fEE(ptr dead_on_return noundef %a)30// CHECK: call void @_Z4foo2N4hlsl8RWBufferIDv4_fEE(ptr dead_on_return noundef %{{.*}})31// CHECK: declare hidden void @_Z4foo2N4hlsl8RWBufferIDv4_fEE(ptr dead_on_return noundef)32void foo2(RWBuffer<float4> buf);33 34void fc(RWBuffer<float4> a) {35 foo2(a);36}37 38void fd(RWBuffer<float4> a) {39 RWBuffer<float4> b = a;40}41 42struct MyStruct {43 float4 f;44 int2 i;45};46 47// CHECK: define hidden void @_Z2feN4hlsl16StructuredBufferI8MyStructEE(ptr dead_on_return noundef %a)48// CHECK: call void @_Z4foo3N4hlsl16StructuredBufferI8MyStructEE(ptr dead_on_return noundef %{{.*}})49// CHECK: declare hidden void @_Z4foo3N4hlsl16StructuredBufferI8MyStructEE(ptr dead_on_return noundef)50void foo3(StructuredBuffer<MyStruct> buf);51 52void fe(StructuredBuffer<MyStruct> a) {53 foo3(a);54}55 56void ff(StructuredBuffer<MyStruct> a) {57 StructuredBuffer<MyStruct> b = a;58}59