brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 9dd0228 Raw
46 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -emit-llvm -disable-llvm-passes -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,DXIL2// RUN-DISABLED: %clang_cc1 -triple spirv-vulkan-library -finclude-default-header -emit-llvm -disable-llvm-passes -o - %s | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SPIRV3 4// NOTE: SPIRV codegen for resource methods is not yet implemented5 6ByteAddressBuffer Buf : register(t0);7RWByteAddressBuffer RWBuf : register(u0);8 9// DXIL: %"class.hlsl::ByteAddressBuffer" = type { target("dx.RawBuffer", i8, 0, 0) }10// DXIL: %"class.hlsl::RWByteAddressBuffer" = type { target("dx.RawBuffer", i8, 1, 0) }11 12// DXIL: @Buf = internal global %"class.hlsl::ByteAddressBuffer" poison13// DXIL: @RWBuf = internal global %"class.hlsl::RWByteAddressBuffer" poison14 15export uint TestGetDimensions() {16    uint dim1, dim2;17    Buf.GetDimensions(dim1);18    RWBuf.GetDimensions(dim2);19    return dim1 + dim2;20}21 22// CHECK: define {{.*}} @TestGetDimensions()()23// CHECK: call void @hlsl::ByteAddressBuffer::GetDimensions(unsigned int&)(ptr {{.*}} @Buf, ptr{{.*}})24// CHECK: call void @hlsl::RWByteAddressBuffer::GetDimensions(unsigned int&)(ptr{{.*}} @RWBuf, ptr{{.*}})25// CHECK: add26// CHECK: ret27 28// CHECK: define {{.*}} void @hlsl::ByteAddressBuffer::GetDimensions(unsigned int&)(ptr {{.*}} %this, {{.*}} %dim)29// CHECK: %[[HANDLE_PTR:.*]] = getelementptr inbounds nuw %"class.hlsl::ByteAddressBuffer", ptr %{{.*}}, i32 0, i32 030// CHECK-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 0, 0), ptr %[[HANDLE_PTR]]31// CHECK-NEXT: %[[DIMPTR:.*]] = load ptr, ptr %dim.addr32// DXIL-NEXT: %[[DIM:.*]] = call i32 @llvm.dx.resource.getdimensions.x.tdx.RawBuffer_i8_0_0t(target("dx.RawBuffer", i8, 0, 0) %[[HANDLE]])33// CHECK-NEXT: store i32 %[[DIM]], ptr %[[DIMPTR]]34// CHECK-NEXT: ret void35 36// CHECK: define {{.*}} void @hlsl::RWByteAddressBuffer::GetDimensions(unsigned int&)(ptr {{.*}} %this, ptr noalias {{.*}} %dim)37// CHECK: %[[HANDLE_PTR:.*]] = getelementptr inbounds nuw %"class.hlsl::RWByteAddressBuffer", ptr %{{.*}}, i32 0, i32 038// CHECK-NEXT: %[[HANDLE:.*]] = load target("dx.RawBuffer", i8, 1, 0), ptr %[[HANDLE_PTR]]39// CHECK-NEXT: %[[DIMPTR:.*]] = load ptr, ptr %dim.addr40// DXIL-NEXT: %[[DIM:.*]] = call i32 @llvm.dx.resource.getdimensions.x.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0) %[[HANDLE]])41// CHECK-NEXT: store i32 %[[DIM]], ptr %[[DIMPTR]]42// CHECK-NEXT: ret void43 44// DXIL: declare i32 @llvm.dx.resource.getdimensions.x.tdx.RawBuffer_i8_0_0t(target("dx.RawBuffer", i8, 0, 0))45// DXIL: declare i32 @llvm.dx.resource.getdimensions.x.tdx.RawBuffer_i8_1_0t(target("dx.RawBuffer", i8, 1, 0))46