64 lines · plain
1; RUN: opt -S -dxil-op-lower %s | FileCheck %s2 3target triple = "dxil-pc-shadermodel6.6-compute"4 5declare void @f32_user(float)6declare void @f64_user(double)7declare void @f16_user(half)8 9; CHECK-LABEL: define void @loadf3210define void @loadf32() {11 %buffer = call target("dx.CBuffer", <{ float }>)12 @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)13 14 ; CHECK: [[DATA:%.*]] = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %{{.*}}, i32 0)15 %load = call {float, float, float, float} @llvm.dx.resource.load.cbufferrow.4(16 target("dx.CBuffer", <{ float }>) %buffer,17 i32 0)18 %data = extractvalue {float, float, float, float} %load, 019 20 ; CHECK: [[VAL:%.*]] = extractvalue %dx.types.CBufRet.f32 [[DATA]], 021 ; CHECK: call void @f32_user(float [[VAL]])22 call void @f32_user(float %data)23 24 ret void25}26 27; CHECK-LABEL: define void @loadf6428define void @loadf64() {29 %buffer = call30 target("dx.CBuffer", <{ <4 x double> }>)31 @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)32 33 ; CHECK: [[DATA:%.*]] = call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %{{.*}}, i32 1)34 %load = call {double, double} @llvm.dx.resource.load.cbufferrow.2(35 target("dx.CBuffer", <{ <4 x double> }>) %buffer,36 i32 1)37 %data = extractvalue {double, double} %load, 138 39 ; CHECK: [[VAL:%.*]] = extractvalue %dx.types.CBufRet.f64 [[DATA]], 140 ; CHECK: call void @f64_user(double [[VAL]])41 call void @f64_user(double %data)42 43 ret void44}45 46; CHECK-LABEL: define void @loadf1647define void @loadf16() {48 %buffer = call49 target("dx.CBuffer", <{ half }>)50 @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, ptr null)51 52 ; CHECK: [[DATA:%.*]] = call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %{{.*}}, i32 0)53 %load = call {half, half, half, half, half, half, half, half} @llvm.dx.resource.load.cbufferrow.8(54 target("dx.CBuffer", <{ half }>) %buffer,55 i32 0)56 %data = extractvalue {half, half, half, half, half, half, half, half} %load, 057 58 ; CHECK: [[VAL:%.*]] = extractvalue %dx.types.CBufRet.f16.8 [[DATA]], 059 ; CHECK: call void @f16_user(half [[VAL]])60 call void @f16_user(half %data)61 62 ret void63}64