190e84113SJustin Bogner; RUN: opt -S -dxil-op-lower %s | FileCheck %s 290e84113SJustin Bogner 390e84113SJustin Bognertarget triple = "dxil-pc-shadermodel6.6-compute" 490e84113SJustin Bogner 590e84113SJustin Bognerdefine void @storefloat(<4 x float> %data, i32 %index) { 690e84113SJustin Bogner 719ad7dd8SHelena Kotas ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, 819ad7dd8SHelena Kotas ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]] 990e84113SJustin Bogner %buffer = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0) 10aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4f32_1_0_0( 1190e84113SJustin Bogner i32 0, i32 0, i32 1, i32 0, i1 false) 1290e84113SJustin Bogner 1390e84113SJustin Bogner ; The temporary casts should all have been cleaned up 14aa07f922SJustin Bogner ; CHECK-NOT: %dx.resource.casthandle 1590e84113SJustin Bogner 1690e84113SJustin Bogner ; CHECK: [[DATA0_0:%.*]] = extractelement <4 x float> %data, i32 0 1790e84113SJustin Bogner ; CHECK: [[DATA0_1:%.*]] = extractelement <4 x float> %data, i32 1 1890e84113SJustin Bogner ; CHECK: [[DATA0_2:%.*]] = extractelement <4 x float> %data, i32 2 1990e84113SJustin Bogner ; CHECK: [[DATA0_3:%.*]] = extractelement <4 x float> %data, i32 3 20*011b6186SFinn Plummer ; 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_2]], float [[DATA0_3]], i8 15){{$}} 21aa07f922SJustin Bogner call void @llvm.dx.resource.store.typedbuffer( 2290e84113SJustin Bogner target("dx.TypedBuffer", <4 x float>, 1, 0, 0) %buffer, 2390e84113SJustin Bogner i32 %index, <4 x float> %data) 2490e84113SJustin Bogner 2590e84113SJustin Bogner ret void 2690e84113SJustin Bogner} 2790e84113SJustin Bogner 2890e84113SJustin Bognerdefine void @storeint(<4 x i32> %data, i32 %index) { 2990e84113SJustin Bogner 3019ad7dd8SHelena Kotas ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, 3119ad7dd8SHelena Kotas ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]] 3290e84113SJustin Bogner %buffer = call target("dx.TypedBuffer", <4 x i32>, 1, 0, 0) 33aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4i32_1_0_0( 3490e84113SJustin Bogner i32 0, i32 0, i32 1, i32 0, i1 false) 3590e84113SJustin Bogner 3690e84113SJustin Bogner ; CHECK: [[DATA0_0:%.*]] = extractelement <4 x i32> %data, i32 0 3790e84113SJustin Bogner ; CHECK: [[DATA0_1:%.*]] = extractelement <4 x i32> %data, i32 1 3890e84113SJustin Bogner ; CHECK: [[DATA0_2:%.*]] = extractelement <4 x i32> %data, i32 2 3990e84113SJustin Bogner ; CHECK: [[DATA0_3:%.*]] = extractelement <4 x i32> %data, i32 3 40*011b6186SFinn Plummer ; CHECK: call void @dx.op.bufferStore.i32(i32 69, %dx.types.Handle [[HANDLE]], i32 %index, i32 undef, i32 [[DATA0_0]], i32 [[DATA0_1]], i32 [[DATA0_2]], i32 [[DATA0_3]], i8 15){{$}} 41aa07f922SJustin Bogner call void @llvm.dx.resource.store.typedbuffer( 4290e84113SJustin Bogner target("dx.TypedBuffer", <4 x i32>, 1, 0, 0) %buffer, 4390e84113SJustin Bogner i32 %index, <4 x i32> %data) 4490e84113SJustin Bogner 4590e84113SJustin Bogner ret void 4690e84113SJustin Bogner} 4790e84113SJustin Bogner 4890e84113SJustin Bognerdefine void @storehalf(<4 x half> %data, i32 %index) { 4990e84113SJustin Bogner 5019ad7dd8SHelena Kotas ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, 5119ad7dd8SHelena Kotas ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]] 5290e84113SJustin Bogner %buffer = call target("dx.TypedBuffer", <4 x half>, 1, 0, 0) 53aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4f16_1_0_0( 5490e84113SJustin Bogner i32 0, i32 0, i32 1, i32 0, i1 false) 5590e84113SJustin Bogner 5690e84113SJustin Bogner ; The temporary casts should all have been cleaned up 57aa07f922SJustin Bogner ; CHECK-NOT: %dx.resource.casthandle 5890e84113SJustin Bogner 5990e84113SJustin Bogner ; CHECK: [[DATA0_0:%.*]] = extractelement <4 x half> %data, i32 0 6090e84113SJustin Bogner ; CHECK: [[DATA0_1:%.*]] = extractelement <4 x half> %data, i32 1 6190e84113SJustin Bogner ; CHECK: [[DATA0_2:%.*]] = extractelement <4 x half> %data, i32 2 6290e84113SJustin Bogner ; CHECK: [[DATA0_3:%.*]] = extractelement <4 x half> %data, i32 3 63*011b6186SFinn Plummer ; CHECK: call void @dx.op.bufferStore.f16(i32 69, %dx.types.Handle [[HANDLE]], i32 %index, i32 undef, half [[DATA0_0]], half [[DATA0_1]], half [[DATA0_2]], half [[DATA0_3]], i8 15){{$}} 64aa07f922SJustin Bogner call void @llvm.dx.resource.store.typedbuffer( 6590e84113SJustin Bogner target("dx.TypedBuffer", <4 x half>, 1, 0, 0) %buffer, 6690e84113SJustin Bogner i32 %index, <4 x half> %data) 6790e84113SJustin Bogner 6890e84113SJustin Bogner ret void 6990e84113SJustin Bogner} 7090e84113SJustin Bogner 7190e84113SJustin Bognerdefine void @storei16(<4 x i16> %data, i32 %index) { 7290e84113SJustin Bogner 7319ad7dd8SHelena Kotas ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, 7419ad7dd8SHelena Kotas ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]] 7590e84113SJustin Bogner %buffer = call target("dx.TypedBuffer", <4 x i16>, 1, 0, 0) 76aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4i16_1_0_0( 7790e84113SJustin Bogner i32 0, i32 0, i32 1, i32 0, i1 false) 7890e84113SJustin Bogner 7990e84113SJustin Bogner ; The temporary casts should all have been cleaned up 80aa07f922SJustin Bogner ; CHECK-NOT: %dx.resource.casthandle 8190e84113SJustin Bogner 8290e84113SJustin Bogner ; CHECK: [[DATA0_0:%.*]] = extractelement <4 x i16> %data, i32 0 8390e84113SJustin Bogner ; CHECK: [[DATA0_1:%.*]] = extractelement <4 x i16> %data, i32 1 8490e84113SJustin Bogner ; CHECK: [[DATA0_2:%.*]] = extractelement <4 x i16> %data, i32 2 8590e84113SJustin Bogner ; CHECK: [[DATA0_3:%.*]] = extractelement <4 x i16> %data, i32 3 86*011b6186SFinn Plummer ; CHECK: call void @dx.op.bufferStore.i16(i32 69, %dx.types.Handle [[HANDLE]], i32 %index, i32 undef, i16 [[DATA0_0]], i16 [[DATA0_1]], i16 [[DATA0_2]], i16 [[DATA0_3]], i8 15){{$}} 87aa07f922SJustin Bogner call void @llvm.dx.resource.store.typedbuffer( 8890e84113SJustin Bogner target("dx.TypedBuffer", <4 x i16>, 1, 0, 0) %buffer, 8990e84113SJustin Bogner i32 %index, <4 x i16> %data) 9090e84113SJustin Bogner 9190e84113SJustin Bogner ret void 9290e84113SJustin Bogner} 932c88ac9dSJustin Bogner 942c88ac9dSJustin Bognerdefine void @store_scalarized_floats(float %data0, float %data1, float %data2, float %data3, i32 %index) { 952c88ac9dSJustin Bogner 962c88ac9dSJustin Bogner ; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, 972c88ac9dSJustin Bogner ; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]] 982c88ac9dSJustin Bogner %buffer = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0) 99aa07f922SJustin Bogner @llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_v4f32_1_0_0( 1002c88ac9dSJustin Bogner i32 0, i32 0, i32 1, i32 0, i1 false) 1012c88ac9dSJustin Bogner 1022c88ac9dSJustin Bogner ; We shouldn't end up with any inserts/extracts. 1032c88ac9dSJustin Bogner ; CHECK-NOT: insertelement 1042c88ac9dSJustin Bogner ; CHECK-NOT: extractelement 1052c88ac9dSJustin Bogner 1062c88ac9dSJustin Bogner ; CHECK: call void @dx.op.bufferStore.f32(i32 69, %dx.types.Handle [[HANDLE]], i32 %index, i32 undef, float %data0, float %data1, float %data2, float %data3, i8 15) 1072c88ac9dSJustin Bogner %vec.upto0 = insertelement <4 x float> poison, float %data0, i64 0 1082c88ac9dSJustin Bogner %vec.upto1 = insertelement <4 x float> %vec.upto0, float %data1, i64 1 1092c88ac9dSJustin Bogner %vec.upto2 = insertelement <4 x float> %vec.upto1, float %data2, i64 2 1102c88ac9dSJustin Bogner %vec = insertelement <4 x float> %vec.upto2, float %data3, i64 3 111aa07f922SJustin Bogner call void @llvm.dx.resource.store.typedbuffer( 1122c88ac9dSJustin Bogner target("dx.TypedBuffer", <4 x float>, 1, 0, 0) %buffer, 1132c88ac9dSJustin Bogner i32 %index, <4 x float> %vec) 1142c88ac9dSJustin Bogner 1152c88ac9dSJustin Bogner ret void 1162c88ac9dSJustin Bogner} 117