forked from OSchip/llvm-project
Add image attribute getter builtins
Added get_image_* OpenCL builtins to the headers. Added implementation to the r600 target. Patch by: Zoltan Gilian llvm-svn: 248159
This commit is contained in:
parent
8e261be911
commit
ccc0ec1ddb
|
@ -210,6 +210,10 @@
|
|||
#include <clc/cl_khr_local_int32_extended_atomics/atom_or.h>
|
||||
#include <clc/cl_khr_local_int32_extended_atomics/atom_xor.h>
|
||||
|
||||
/* 6.11.13 Image Read and Write Functions */
|
||||
|
||||
#include <clc/image/image.h>
|
||||
|
||||
/* libclc internal defintions */
|
||||
#ifdef __CLC_INTERNAL
|
||||
#include <math/clc_nextafter.h>
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
_CLC_OVERLOAD _CLC_DECL int get_image_width (image2d_t image);
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_width (image3d_t image);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_height (image2d_t image);
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_height (image3d_t image);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_depth (image3d_t image);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_channel_data_type (image2d_t image);
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_channel_data_type (image3d_t image);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_channel_order (image2d_t image);
|
||||
_CLC_OVERLOAD _CLC_DECL int get_image_channel_order (image3d_t image);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DECL int2 get_image_dim (image2d_t image);
|
||||
_CLC_OVERLOAD _CLC_DECL int4 get_image_dim (image3d_t image);
|
|
@ -133,3 +133,4 @@ shared/vload.cl
|
|||
shared/vstore.cl
|
||||
workitem/get_global_id.cl
|
||||
workitem/get_global_size.cl
|
||||
image/get_image_dim.cl
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
#include <clc/clc.h>
|
||||
|
||||
_CLC_OVERLOAD _CLC_DEF int2 get_image_dim (image2d_t image) {
|
||||
return (int2)(get_image_width(image), get_image_height(image));
|
||||
}
|
||||
_CLC_OVERLOAD _CLC_DEF int4 get_image_dim (image3d_t image) {
|
||||
return (int4)(get_image_width(image), get_image_height(image),
|
||||
get_image_depth(image), 0);
|
||||
}
|
|
@ -10,3 +10,9 @@ workitem/get_global_size.ll
|
|||
workitem/get_work_dim.ll
|
||||
synchronization/barrier.cl
|
||||
synchronization/barrier_impl.ll
|
||||
image/get_image_width.cl
|
||||
image/get_image_height.cl
|
||||
image/get_image_depth.cl
|
||||
image/get_image_channel_data_type.cl
|
||||
image/get_image_channel_order.cl
|
||||
image/get_image_attributes_impl.ll
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
%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 [3 x i32] @llvm.OpenCL.image.get.size.2d(
|
||||
%opencl.image2d_t addrspace(1)*) nounwind readnone
|
||||
declare [3 x i32] @llvm.OpenCL.image.get.size.3d(
|
||||
%opencl.image3d_t addrspace(1)*) nounwind readnone
|
||||
|
||||
declare [2 x i32] @llvm.OpenCL.image.get.format.2d(
|
||||
%opencl.image2d_t addrspace(1)*) nounwind readnone
|
||||
declare [2 x i32] @llvm.OpenCL.image.get.format.3d(
|
||||
%opencl.image3d_t addrspace(1)*) nounwind readnone
|
||||
|
||||
define i32 @__clc_get_image_width_2d(
|
||||
%opencl.image2d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [3 x i32] @llvm.OpenCL.image.get.size.2d(
|
||||
%opencl.image2d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [3 x i32] %1, 0
|
||||
ret i32 %2
|
||||
}
|
||||
define i32 @__clc_get_image_width_3d(
|
||||
%opencl.image3d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [3 x i32] @llvm.OpenCL.image.get.size.3d(
|
||||
%opencl.image3d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [3 x i32] %1, 0
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
define i32 @__clc_get_image_height_2d(
|
||||
%opencl.image2d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [3 x i32] @llvm.OpenCL.image.get.size.2d(
|
||||
%opencl.image2d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [3 x i32] %1, 1
|
||||
ret i32 %2
|
||||
}
|
||||
define i32 @__clc_get_image_height_3d(
|
||||
%opencl.image3d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [3 x i32] @llvm.OpenCL.image.get.size.3d(
|
||||
%opencl.image3d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [3 x i32] %1, 1
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
define i32 @__clc_get_image_depth_3d(
|
||||
%opencl.image3d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [3 x i32] @llvm.OpenCL.image.get.size.3d(
|
||||
%opencl.image3d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [3 x i32] %1, 2
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
define i32 @__clc_get_image_channel_data_type_2d(
|
||||
%opencl.image2d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [2 x i32] @llvm.OpenCL.image.get.format.2d(
|
||||
%opencl.image2d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [2 x i32] %1, 0
|
||||
ret i32 %2
|
||||
}
|
||||
define i32 @__clc_get_image_channel_data_type_3d(
|
||||
%opencl.image3d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [2 x i32] @llvm.OpenCL.image.get.format.3d(
|
||||
%opencl.image3d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [2 x i32] %1, 0
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
define i32 @__clc_get_image_channel_order_2d(
|
||||
%opencl.image2d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [2 x i32] @llvm.OpenCL.image.get.format.2d(
|
||||
%opencl.image2d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [2 x i32] %1, 1
|
||||
ret i32 %2
|
||||
}
|
||||
define i32 @__clc_get_image_channel_order_3d(
|
||||
%opencl.image3d_t addrspace(1)* nocapture %img) #0 {
|
||||
%1 = tail call [2 x i32] @llvm.OpenCL.image.get.format.3d(
|
||||
%opencl.image3d_t addrspace(1)* %img)
|
||||
%2 = extractvalue [2 x i32] %1, 1
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
attributes #0 = { nounwind readnone alwaysinline }
|
|
@ -0,0 +1,13 @@
|
|||
#include <clc/clc.h>
|
||||
|
||||
_CLC_DECL int __clc_get_image_channel_data_type_2d(image2d_t);
|
||||
_CLC_DECL int __clc_get_image_channel_data_type_3d(image3d_t);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_channel_data_type(image2d_t image) {
|
||||
return __clc_get_image_channel_data_type_2d(image);
|
||||
}
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_channel_data_type(image3d_t image) {
|
||||
return __clc_get_image_channel_data_type_3d(image);
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#include <clc/clc.h>
|
||||
|
||||
_CLC_DECL int __clc_get_image_channel_order_2d(image2d_t);
|
||||
_CLC_DECL int __clc_get_image_channel_order_3d(image3d_t);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_channel_order(image2d_t image) {
|
||||
return __clc_get_image_channel_order_2d(image);
|
||||
}
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_channel_order(image3d_t image) {
|
||||
return __clc_get_image_channel_order_3d(image);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#include <clc/clc.h>
|
||||
|
||||
_CLC_DECL int __clc_get_image_depth_3d(image3d_t);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_depth(image3d_t image) {
|
||||
return __clc_get_image_depth_3d(image);
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#include <clc/clc.h>
|
||||
|
||||
_CLC_DECL int __clc_get_image_height_2d(image2d_t);
|
||||
_CLC_DECL int __clc_get_image_height_3d(image3d_t);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_height(image2d_t image) {
|
||||
return __clc_get_image_height_2d(image);
|
||||
}
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_height(image3d_t image) {
|
||||
return __clc_get_image_height_3d(image);
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#include <clc/clc.h>
|
||||
|
||||
_CLC_DECL int __clc_get_image_width_2d(image2d_t);
|
||||
_CLC_DECL int __clc_get_image_width_3d(image3d_t);
|
||||
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_width(image2d_t image) {
|
||||
return __clc_get_image_width_2d(image);
|
||||
}
|
||||
_CLC_OVERLOAD _CLC_DEF int
|
||||
get_image_width(image3d_t image) {
|
||||
return __clc_get_image_width_3d(image);
|
||||
}
|
Loading…
Reference in New Issue