@@ -4,8 +4,9 @@ target triple = "dxil-pc-shadermodel6.6-compute"
44
55declare void @use_float4 (<4 x float >)
66declare void @use_float (float )
7+ declare void @use_float1 (<1 x float >)
78
8- ; CHECK-LABEL: define void @load_float4
9+ ; CHECK-LABEL: define void @load_float4(
910define void @load_float4 (i32 %index , i32 %elemindex ) {
1011 %buffer = call target ("dx.TypedBuffer" , <4 x float >, 1 , 0 , 0 )
1112 @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4f32_1_0_0 (
@@ -35,3 +36,48 @@ define void @load_float4(i32 %index, i32 %elemindex) {
3536
3637 ret void
3738}
39+
40+ ; CHECK-LABEL: define void @load_float(
41+ define void @load_float (i32 %index , i32 %elemindex ) {
42+ %buffer = call target ("dx.TypedBuffer" , float , 1 , 0 , 0 )
43+ @llvm.dx.resource.handlefrombinding (i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
44+
45+ ; CHECK-NOT: @llvm.dx.resource.getpointer
46+ %ptr = call ptr @llvm.dx.resource.getpointer (
47+ target ("dx.TypedBuffer" , float , 1 , 0 , 0 ) %buffer , i32 %index )
48+
49+ ; CHECK: %[[LOAD:.*]] = call { float, i1 } @llvm.dx.resource.load.typedbuffer.f32.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %buffer, i32 %index)
50+ ; CHECK: %[[VALUE:.*]] = extractvalue { float, i1 } %[[LOAD]], 0
51+ ; CHECK: call void @use_float(float %[[VALUE]])
52+ %data = load float , ptr %ptr
53+ call void @use_float (float %data )
54+
55+ ; CHECK: %[[LOAD:.*]] = call { float, i1 } @llvm.dx.resource.load.typedbuffer.f32.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %buffer, i32 %index)
56+ ; CHECK: %[[VALUE:.*]] = extractvalue { float, i1 } %[[LOAD]], 0
57+ ; CHECK: %[[VEC:.*]] = insertelement <1 x float> poison, float %[[VALUE]], i32 0
58+ ; CHECK: call void @use_float1(<1 x float> %[[VEC]])
59+ %vec_data = load <1 x float >, ptr %ptr
60+ call void @use_float1 (<1 x float > %vec_data )
61+
62+ ret void
63+ }
64+
65+ ; CHECK-LABEL: define void @load_float1(
66+ define void @load_float1 (i32 %index ) {
67+ %buffer = call target ("dx.TypedBuffer" , <1 x float >, 1 , 0 , 0 )
68+ @llvm.dx.resource.handlefrombinding (i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
69+
70+ ; CHECK-NOT: @llvm.dx.resource.getpointer
71+ %ptr = call ptr @llvm.dx.resource.getpointer (
72+ target ("dx.TypedBuffer" , <1 x float >, 1 , 0 , 0 ) %buffer , i32 %index )
73+
74+ ; CHECK: %[[LOAD:.*]] = call { <1 x float>, i1 } @llvm.dx.resource.load.typedbuffer.v1f32.tdx.TypedBuffer_v1f32_1_0_0t(target("dx.TypedBuffer", <1 x float>, 1, 0, 0) %buffer, i32 %index)
75+ ; CHECK: %[[VALUE:.*]] = extractvalue { <1 x float>, i1 } %[[LOAD]], 0
76+ ; CHECK: %[[SHUF:.*]] = shufflevector <1 x float> %[[VALUE]], <1 x float> poison, <4 x i32> zeroinitializer
77+ ; CHECK: call void @use_float4(<4 x float> %[[SHUF]])
78+ %load = load <1 x float >, ptr %ptr
79+ %shuf = shufflevector <1 x float > %load , <1 x float > poison, <4 x i32 > zeroinitializer
80+ call void @use_float4 (<4 x float > %shuf )
81+
82+ ret void
83+ }
0 commit comments