2
2
3
3
target triple = "dxil-pc-shadermodel6.6-compute"
4
4
5
- define void @storefloat (<4 x float > %data , i32 %index ) {
5
+ ; CHECK-LABEL: define void @storefloats
6
+ define void @storefloats (<4 x float > %data , i32 %index ) {
6
7
7
8
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
8
9
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
@@ -25,6 +26,49 @@ define void @storefloat(<4 x float> %data, i32 %index) {
25
26
ret void
26
27
}
27
28
29
+ ; CHECK-LABEL: define void @storeonefloat
30
+ define void @storeonefloat (float %data , i32 %index ) {
31
+
32
+ ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
33
+ ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
34
+ %buffer = call target ("dx.TypedBuffer" , float , 1 , 0 , 0 )
35
+ @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_f32_1_0_0 (
36
+ i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
37
+
38
+ ; The temporary casts should all have been cleaned up
39
+ ; CHECK-NOT: %dx.resource.casthandle
40
+
41
+ ; CHECK: call void @dx.op.bufferStore.f32(i32 69, %dx.types.Handle [[HANDLE]], i32 %index, i32 undef, float %data, float %data, float %data, float %data, i8 15){{$}}
42
+ call void @llvm.dx.resource.store.typedbuffer (
43
+ target ("dx.TypedBuffer" , float , 1 , 0 , 0 ) %buffer ,
44
+ i32 %index , float %data )
45
+
46
+ ret void
47
+ }
48
+
49
+ ; CHECK-LABEL: define void @storetwofloat
50
+ define void @storetwofloat (<2 x float > %data , i32 %index ) {
51
+
52
+ ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
53
+ ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
54
+ %buffer = call target ("dx.TypedBuffer" , <2 x float >, 1 , 0 , 0 )
55
+ @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v2f32_1_0_0 (
56
+ i32 0 , i32 0 , i32 1 , i32 0 , i1 false )
57
+
58
+ ; The temporary casts should all have been cleaned up
59
+ ; CHECK-NOT: %dx.resource.casthandle
60
+
61
+ ; CHECK: [[DATA0_0:%.*]] = extractelement <2 x float> %data, i32 0
62
+ ; CHECK: [[DATA0_1:%.*]] = extractelement <2 x float> %data, i32 1
63
+ ; CHECK: call void @dx.op.bufferStore.f32(i32 69, %dx.types.Handle [[HANDLE]], i32 %index, i32 undef, float [[DATA0_0]], float [[DATA0_1]], float [[DATA0_0]], float [[DATA0_0]], i8 15){{$}}
64
+ call void @llvm.dx.resource.store.typedbuffer (
65
+ target ("dx.TypedBuffer" , <2 x float >, 1 , 0 , 0 ) %buffer ,
66
+ i32 %index , <2 x float > %data )
67
+
68
+ ret void
69
+ }
70
+
71
+ ; CHECK-LABEL: define void @storeint
28
72
define void @storeint (<4 x i32 > %data , i32 %index ) {
29
73
30
74
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
@@ -45,6 +89,7 @@ define void @storeint(<4 x i32> %data, i32 %index) {
45
89
ret void
46
90
}
47
91
92
+ ; CHECK-LABEL: define void @storehalf
48
93
define void @storehalf (<4 x half > %data , i32 %index ) {
49
94
50
95
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
@@ -68,6 +113,7 @@ define void @storehalf(<4 x half> %data, i32 %index) {
68
113
ret void
69
114
}
70
115
116
+ ; CHECK-LABEL: define void @storei16
71
117
define void @storei16 (<4 x i16 > %data , i32 %index ) {
72
118
73
119
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
@@ -91,6 +137,7 @@ define void @storei16(<4 x i16> %data, i32 %index) {
91
137
ret void
92
138
}
93
139
140
+ ; CHECK-LABEL: define void @store_scalarized_floats
94
141
define void @store_scalarized_floats (float %data0 , float %data1 , float %data2 , float %data3 , i32 %index ) {
95
142
96
143
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
0 commit comments