@@ -4,8 +4,9 @@ target triple = "dxil-pc-shadermodel6.6-compute"
4
4
5
5
declare void @use_float4 (<4 x float >)
6
6
declare void @use_float (float )
7
+ declare void @use_float1 (<1 x float >)
7
8
8
- ; CHECK-LABEL: define void @load_float4
9
+ ; CHECK-LABEL: define void @load_float4(
9
10
define void @load_float4 (i32 %index , i32 %elemindex ) {
10
11
%buffer = call target ("dx.TypedBuffer" , <4 x float >, 1 , 0 , 0 )
11
12
@llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4f32_1_0_0 (
@@ -35,3 +36,48 @@ define void @load_float4(i32 %index, i32 %elemindex) {
35
36
36
37
ret void
37
38
}
39
+
40
+ ; CHECK-LABEL: define void @load_float(
41
+ define void @load_float (i32 %index ) {
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