Author: tstellar Date: Mon Sep 21 09:59:56 2015 New Revision: 248161 URL: http://llvm.org/viewvc/llvm-project?rev=248161&view=rev Log: r600: Add image writing builtins.
Patch by: Zoltan Gilian Added: libclc/trunk/r600/lib/image/write_image_impl.ll libclc/trunk/r600/lib/image/write_imagef.cl libclc/trunk/r600/lib/image/write_imagei.cl libclc/trunk/r600/lib/image/write_imageui.cl Modified: libclc/trunk/generic/include/clc/image/image.h libclc/trunk/r600/lib/SOURCES Modified: libclc/trunk/generic/include/clc/image/image.h URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/image/image.h?rev=248161&r1=248160&r2=248161&view=diff ============================================================================== --- libclc/trunk/generic/include/clc/image/image.h (original) +++ libclc/trunk/generic/include/clc/image/image.h Mon Sep 21 09:59:56 2015 @@ -15,6 +15,13 @@ _CLC_OVERLOAD _CLC_DECL int get_image_ch _CLC_OVERLOAD _CLC_DECL int2 get_image_dim (image2d_t image); _CLC_OVERLOAD _CLC_DECL int4 get_image_dim (image3d_t image); +_CLC_OVERLOAD _CLC_DECL void +write_imagef(image2d_t image, int2 coord, float4 color); +_CLC_OVERLOAD _CLC_DECL void +write_imagei(image2d_t image, int2 coord, int4 color); +_CLC_OVERLOAD _CLC_DECL void +write_imageui(image2d_t image, int2 coord, uint4 color); + _CLC_OVERLOAD _CLC_DECL float4 read_imagef(image2d_t image, sampler_t sampler, int2 coord); _CLC_OVERLOAD _CLC_DECL float4 Modified: libclc/trunk/r600/lib/SOURCES URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/SOURCES?rev=248161&r1=248160&r2=248161&view=diff ============================================================================== --- libclc/trunk/r600/lib/SOURCES (original) +++ libclc/trunk/r600/lib/SOURCES Mon Sep 21 09:59:56 2015 @@ -20,3 +20,7 @@ image/read_imagef.cl image/read_imagei.cl image/read_imageui.cl image/read_image_impl.ll +image/write_imagef.cl +image/write_imagei.cl +image/write_imageui.cl +image/write_image_impl.ll Added: libclc/trunk/r600/lib/image/write_image_impl.ll URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/image/write_image_impl.ll?rev=248161&view=auto ============================================================================== --- libclc/trunk/r600/lib/image/write_image_impl.ll (added) +++ libclc/trunk/r600/lib/image/write_image_impl.ll Mon Sep 21 09:59:56 2015 @@ -0,0 +1,52 @@ +%opencl.image2d_t = type opaque +%opencl.image3d_t = type opaque + +declare i32 @llvm.OpenCL.image.get.resource.id.2d( + %opencl.image2d_t addrspace(1)*) nounwind readnone +declare i32 @llvm.OpenCL.image.get.resource.id.3d( + %opencl.image3d_t addrspace(1)*) nounwind readnone + +declare void @llvm.r600.rat.store.typed(<4 x i32> %color, <4 x i32> %coord, i32 %rat_id) + +define void @__clc_write_imageui_2d( + %opencl.image2d_t addrspace(1)* nocapture %img, + <2 x i32> %coord, <4 x i32> %color) #0 { + + ; Coordinate int2 -> int4. + %e0 = extractelement <2 x i32> %coord, i32 0 + %e1 = extractelement <2 x i32> %coord, i32 1 + %coord.0 = insertelement <4 x i32> undef, i32 %e0, i32 0 + %coord.1 = insertelement <4 x i32> %coord.0, i32 %e1, i32 1 + %coord.2 = insertelement <4 x i32> %coord.1, i32 0, i32 2 + %coord.3 = insertelement <4 x i32> %coord.2, i32 0, i32 3 + + ; Get RAT ID. + %img_id = call i32 @llvm.OpenCL.image.get.resource.id.2d( + %opencl.image2d_t addrspace(1)* %img) + %rat_id = add i32 %img_id, 1 + + ; Call store intrinsic. + call void @llvm.r600.rat.store.typed(<4 x i32> %color, <4 x i32> %coord.3, i32 %rat_id) + ret void +} + +define void @__clc_write_imagei_2d( + %opencl.image2d_t addrspace(1)* nocapture %img, + <2 x i32> %coord, <4 x i32> %color) #0 { + call void @__clc_write_imageui_2d( + %opencl.image2d_t addrspace(1)* nocapture %img, + <2 x i32> %coord, <4 x i32> %color) + ret void +} + +define void @__clc_write_imagef_2d( + %opencl.image2d_t addrspace(1)* nocapture %img, + <2 x i32> %coord, <4 x float> %color) #0 { + %color.i32 = bitcast <4 x float> %color to <4 x i32> + call void @__clc_write_imageui_2d( + %opencl.image2d_t addrspace(1)* nocapture %img, + <2 x i32> %coord, <4 x i32> %color.i32) + ret void +} + +attributes #0 = { alwaysinline } Added: libclc/trunk/r600/lib/image/write_imagef.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/image/write_imagef.cl?rev=248161&view=auto ============================================================================== --- libclc/trunk/r600/lib/image/write_imagef.cl (added) +++ libclc/trunk/r600/lib/image/write_imagef.cl Mon Sep 21 09:59:56 2015 @@ -0,0 +1,9 @@ +#include <clc/clc.h> + +_CLC_DECL void __clc_write_imagef_2d(image2d_t image, int2 coord, float4 color); + +_CLC_OVERLOAD _CLC_DEF void +write_imagef(image2d_t image, int2 coord, float4 color) +{ + __clc_write_imagef_2d(image, coord, color); +} Added: libclc/trunk/r600/lib/image/write_imagei.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/image/write_imagei.cl?rev=248161&view=auto ============================================================================== --- libclc/trunk/r600/lib/image/write_imagei.cl (added) +++ libclc/trunk/r600/lib/image/write_imagei.cl Mon Sep 21 09:59:56 2015 @@ -0,0 +1,9 @@ +#include <clc/clc.h> + +_CLC_DECL void __clc_write_imagei_2d(image2d_t image, int2 coord, int4 color); + +_CLC_OVERLOAD _CLC_DEF void +write_imagei(image2d_t image, int2 coord, int4 color) +{ + __clc_write_imagei_2d(image, coord, color); +} Added: libclc/trunk/r600/lib/image/write_imageui.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/image/write_imageui.cl?rev=248161&view=auto ============================================================================== --- libclc/trunk/r600/lib/image/write_imageui.cl (added) +++ libclc/trunk/r600/lib/image/write_imageui.cl Mon Sep 21 09:59:56 2015 @@ -0,0 +1,9 @@ +#include <clc/clc.h> + +_CLC_DECL void __clc_write_imageui_2d(image2d_t image, int2 coord, uint4 color); + +_CLC_OVERLOAD _CLC_DEF void +write_imageui(image2d_t image, int2 coord, uint4 color) +{ + __clc_write_imageui_2d(image, coord, color); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits