xref: /llvm-project/libclc/r600/lib/image/read_image_impl.ll (revision 3889c36d3fcc9d1fc7b8426ab8dae05214bf9ba3)
1*3889c36dSJan Veselytarget 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*3889c36dSJan Vesely
33d349ea9SJan Vesely%opencl.image2d_t = type opaque
43d349ea9SJan Vesely
53d349ea9SJan Veselydeclare <4 x float> @llvm.R600.tex(<4 x float>, i32, i32, i32, i32, i32, i32,
63d349ea9SJan Vesely                                   i32, i32, i32) readnone
73d349ea9SJan Veselydeclare i32 @llvm.OpenCL.image.get.resource.id.2d(
83d349ea9SJan Vesely  %opencl.image2d_t addrspace(1)*) nounwind readnone
93d349ea9SJan Veselydeclare i32 @llvm.OpenCL.sampler.get.resource.id(i32) readnone
103d349ea9SJan Vesely
113d349ea9SJan Veselydefine <4 x float> @__clc_v4f_from_v2f(<2 x float> %v) alwaysinline {
123d349ea9SJan Vesely  %e0 = extractelement <2 x float> %v, i32 0
133d349ea9SJan Vesely  %e1 = extractelement <2 x float> %v, i32 1
143d349ea9SJan Vesely  %res.0 = insertelement <4 x float> undef,  float %e0, i32 0
153d349ea9SJan Vesely  %res.1 = insertelement <4 x float> %res.0, float %e1, i32 1
163d349ea9SJan Vesely  %res.2 = insertelement <4 x float> %res.1, float 0.0, i32 2
173d349ea9SJan Vesely  %res.3 = insertelement <4 x float> %res.2, float 0.0, i32 3
183d349ea9SJan Vesely  ret <4 x float> %res.3
193d349ea9SJan Vesely}
203d349ea9SJan Vesely
213d349ea9SJan Veselydefine <4 x float> @__clc_read_imagef_tex(
223d349ea9SJan Vesely    %opencl.image2d_t addrspace(1)* nocapture %img,
233d349ea9SJan Vesely    i32 %sampler, <2 x float> %coord) alwaysinline {
243d349ea9SJan Veselyentry:
253d349ea9SJan Vesely  %coord_v4 = call <4 x float> @__clc_v4f_from_v2f(<2 x float> %coord)
263d349ea9SJan Vesely  %smp_id = call i32 @llvm.OpenCL.sampler.get.resource.id(i32 %sampler)
273d349ea9SJan Vesely  %img_id = call i32 @llvm.OpenCL.image.get.resource.id.2d(
283d349ea9SJan Vesely      %opencl.image2d_t addrspace(1)* %img)
293d349ea9SJan Vesely  %tex_id = add i32 %img_id, 2    ; First 2 IDs are reserved.
303d349ea9SJan Vesely
313d349ea9SJan Vesely  %coord_norm = and i32 %sampler, 1
323d349ea9SJan Vesely  %is_norm = icmp eq i32 %coord_norm, 1
333d349ea9SJan Vesely  br i1 %is_norm, label %NormCoord, label %UnnormCoord
343d349ea9SJan VeselyNormCoord:
353d349ea9SJan Vesely  %data.norm = call <4 x float> @llvm.R600.tex(
363d349ea9SJan Vesely      <4 x float> %coord_v4,
373d349ea9SJan Vesely      i32 0, i32 0, i32 0,        ; Offset.
383d349ea9SJan Vesely      i32 2, i32 %smp_id,
393d349ea9SJan Vesely      i32 1, i32 1, i32 1, i32 1) ; Normalized coords.
403d349ea9SJan Vesely  ret <4 x float> %data.norm
413d349ea9SJan VeselyUnnormCoord:
423d349ea9SJan Vesely  %data.unnorm = call <4 x float> @llvm.R600.tex(
433d349ea9SJan Vesely      <4 x float> %coord_v4,
443d349ea9SJan Vesely      i32 0, i32 0, i32 0,        ; Offset.
453d349ea9SJan Vesely      i32 %tex_id, i32 %smp_id,
463d349ea9SJan Vesely      i32 0, i32 0, i32 0, i32 0) ; Unnormalized coords.
473d349ea9SJan Vesely  ret <4 x float> %data.unnorm
483d349ea9SJan Vesely}
49