xref: /llvm-project/libclc/r600/lib/image/write_image_impl.ll (revision 3889c36d3fcc9d1fc7b8426ab8dae05214bf9ba3)
1target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64"
2
3%opencl.image2d_t = type opaque
4%opencl.image3d_t = type opaque
5
6declare i32 @llvm.OpenCL.image.get.resource.id.2d(
7  %opencl.image2d_t addrspace(1)*) nounwind readnone
8declare i32 @llvm.OpenCL.image.get.resource.id.3d(
9  %opencl.image3d_t addrspace(1)*) nounwind readnone
10
11declare void @llvm.r600.rat.store.typed(<4 x i32> %color, <4 x i32> %coord, i32 %rat_id)
12
13define void @__clc_write_imageui_2d(
14    %opencl.image2d_t addrspace(1)* nocapture %img,
15    <2 x i32> %coord, <4 x i32> %color) #0 {
16
17  ; Coordinate int2 -> int4.
18  %e0 = extractelement <2 x i32> %coord, i32 0
19  %e1 = extractelement <2 x i32> %coord, i32 1
20  %coord.0 = insertelement <4 x i32> undef,    i32 %e0, i32 0
21  %coord.1 = insertelement <4 x i32> %coord.0, i32 %e1, i32 1
22  %coord.2 = insertelement <4 x i32> %coord.1, i32 0,  i32 2
23  %coord.3 = insertelement <4 x i32> %coord.2, i32 0,  i32 3
24
25  ; Get RAT ID.
26  %img_id = call i32 @llvm.OpenCL.image.get.resource.id.2d(
27      %opencl.image2d_t addrspace(1)* %img)
28  %rat_id = add i32 %img_id, 1
29
30  ; Call store intrinsic.
31  call void @llvm.r600.rat.store.typed(<4 x i32> %color, <4 x i32> %coord.3, i32 %rat_id)
32  ret void
33}
34
35define void @__clc_write_imagei_2d(
36    %opencl.image2d_t addrspace(1)* nocapture %img,
37    <2 x i32> %coord, <4 x i32> %color) #0 {
38  call void @__clc_write_imageui_2d(
39      %opencl.image2d_t addrspace(1)* nocapture %img,
40      <2 x i32> %coord, <4 x i32> %color)
41  ret void
42}
43
44define void @__clc_write_imagef_2d(
45    %opencl.image2d_t addrspace(1)* nocapture %img,
46    <2 x i32> %coord, <4 x float> %color) #0 {
47  %color.i32 = bitcast <4 x float> %color to <4 x i32>
48  call void @__clc_write_imageui_2d(
49      %opencl.image2d_t addrspace(1)* nocapture %img,
50      <2 x i32> %coord, <4 x i32> %color.i32)
51  ret void
52}
53
54attributes #0 = { alwaysinline }
55