22
33target triple = "dxil-pc-shadermodel6.6-compute"
44
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 ) {
67
78 ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
89 ; 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) {
2526 ret void
2627}
2728
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
2872define void @storeint (<4 x i32 > %data , i32 %index ) {
2973
3074 ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
@@ -45,6 +89,7 @@ define void @storeint(<4 x i32> %data, i32 %index) {
4589 ret void
4690}
4791
92+ ; CHECK-LABEL: define void @storehalf
4893define void @storehalf (<4 x half > %data , i32 %index ) {
4994
5095 ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
@@ -68,6 +113,7 @@ define void @storehalf(<4 x half> %data, i32 %index) {
68113 ret void
69114}
70115
116+ ; CHECK-LABEL: define void @storei16
71117define void @storei16 (<4 x i16 > %data , i32 %index ) {
72118
73119 ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
@@ -91,6 +137,7 @@ define void @storei16(<4 x i16> %data, i32 %index) {
91137 ret void
92138}
93139
140+ ; CHECK-LABEL: define void @store_scalarized_floats
94141define void @store_scalarized_floats (float %data0 , float %data1 , float %data2 , float %data3 , i32 %index ) {
95142
96143 ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
0 commit comments