Zhigang Gong [Tue, 26 Feb 2013 09:30:25 +0000 (17:30 +0800)]
Import gbm internal header files.
Prepartion to support cl_khr_gl_sharing extension. I
decide to use egl/gbm/dri2 image extension to implement
it.
The reason why we need to import gbm internal header files
is that gbm doesn't initialize the image extension by default
with x11 platform. As it doesn't know the default display and
the context when create a gbm device. We have to use its internal
structure to initialize the image extension properly after the
gbm device's creation. We are not the only one to do that way,
the EGL drm platform does the same thing.
To avoid dependencies to the whole mesa source package, I have
to copy the related header files here.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Tested-by: Homer Hsing <homer.xing@intel.com>
Zhigang Gong [Fri, 22 Feb 2013 09:21:07 +0000 (17:21 +0800)]
Implement OCL extension initizliation.
We don't have an extension checking and initialization implemenation.
Now add it. For the mandatory extensions for OCL1.2 as below:
cl_khr_global_int32_base_atomics
cl_khr_global_int32_extended_atomics
cl_khr_local_int32_base_atomics
cl_khr_local_int32_extended_atomics
cl_khr_byte_addressable_store
cl_khr_fp64 (for backward compatibility if
double precision is supported)
It seems that we only support the byte addressable store extension.
We still need to write new test case for it to prove whether we really
support it.
For all the other mandatory extensions, we need to implement them if we
want to comply with OCL1.2 specification.
For the optional extensions, currently we only support cl_khr_gl_sharing.
Actually, we are not fully support it. Current implementation is a hack
fashion. I'll change to use upstream mesa to implement it. For now, just
enable this extension.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Tested-by: Homer Hsing <homer.xing@intel.com>
Zhigang Gong [Thu, 21 Feb 2013 11:33:55 +0000 (19:33 +0800)]
Find GBM/EGL library at build time.
We will change to use EGL_KHR_gl_texture_2D_image and GBM library
to implement OCL and OGL interoperation. We need to check GBM.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Tested-by: Homer Hsing <homer.xing@intel.com>
Feng, Boqun [Fri, 1 Mar 2013 05:30:19 +0000 (13:30 +0800)]
backend: Add LLVM stable version support
support current llvm stable version 3.2
modify cmake file to check the version of llvm provided by system or
configured by LLVM_INSTALL_DIR, and add a macro define in the format
LLVM_<MAJOR><MINOR> according the version, this macro can be used for
llvm version-specific code.
Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Homer Hsing <homer.xing@intel.com>
Zhigang Gong [Wed, 19 Dec 2012 06:18:23 +0000 (14:18 +0800)]
Keep consistent naming rule for LLVM_XXX Cmake variables.
Also fixed inconsistent indentation in FindLLVM.cmake and
remove some unecessary blank lines. Based on patch from
guanqun.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Lu Guanqun [Wed, 19 Dec 2012 03:31:42 +0000 (11:31 +0800)]
fix compilation errors when it can't find correct library dirs
The reason is that we specify `LLVM_LIBRARY_DIRS` in
`backend/src/CMakeLists.txt`, while in `FindLLVM.cmake`, we name it wrong.
Zhigang Gong [Tue, 18 Dec 2012 08:45:36 +0000 (16:45 +0800)]
Refine CMake to check llvm version.
This branch need llvm 3.3 or newer version. We need to modify the cmake to
check the version. This commit also fixed some minor bugs in the find_packages,
and removed those useless files.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Zhigang Gong [Fri, 22 Feb 2013 10:04:18 +0000 (18:04 +0800)]
Don't use display :0.0 manually.
Pass a NULL DISPLAY, the library will use the DISPLAY environment
which should be what we want it to do.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Reviewed-by: Homer Hsing <homer.xing@intel.com>
Zhigang Gong [Tue, 11 Dec 2012 06:29:10 +0000 (14:29 +0800)]
CMake fixup.
Add a FindLLVM to handle the llvm package finding function.
Fixed the broken CMake files in backend.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Lu Guanqun [Wed, 26 Dec 2012 08:38:41 +0000 (16:38 +0800)]
update headers to OpenCL 1.2 standards
The header files are downloaded from this link:
http://www.khronos.org/registry/cl/
And there are several other fixes due to this header update:
- change cl_mem_type to cl_mem_object_type
- change CL_INVALID_MEM to CL_INVALID_MEM_OBJECT
- change CL_INVALID_TEXTURE to CL_INVALID_IMAGE_DESCRIPTOR
- change CL_MEM_ALLOCATION_FAILURE to CL_MEM_OBJECT_ALLOCATION_FAILURE
Signed-off-by: Lu Guanqun <guanqun.lu@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Lu Guanqun [Tue, 25 Dec 2012 05:26:55 +0000 (13:26 +0800)]
fix assertion when two kernels exist in cl file
The root cause is that it fails to increment `currID` when traversing hash map.
Signed-off-by: Lu Guanqun <guanqun.lu@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Lu Guanqun [Tue, 25 Dec 2012 03:43:44 +0000 (11:43 +0800)]
output file name and kernel name when cl_kernel_init() fails
This would help ease the debugging process a lot.
Signed-off-by: Lu Guanqun <guanqun.lu@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Homer Hsing [Tue, 25 Dec 2012 00:53:39 +0000 (08:53 +0800)]
support vector data load/store for char,short,long
Signed-off-by: Homer Hsing <homer.xing@intel.com>
Feng, Boqun [Wed, 28 Nov 2012 08:21:10 +0000 (16:21 +0800)]
Change to Clang/LLVM ToT(Top of the Tree)
Two minor changed in this patch
1.files that use llvm new api.
backend/src/llvm/llvm_{gen_backend,passes}.cpp
2.change backend IR from ptx32 to nvptx.
all test cases in utest passed [SUSSECC], but may give wrong output.
for example, app_mandelbrot makes a wrong picture.
silk's cl_gl_fill passed.
revision of Clang/LLVM components:
llvm r168773
clang r168774
compiler-rt r168700
Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong>
Zhigang Gong [Mon, 17 Dec 2012 07:21:11 +0000 (15:21 +0800)]
Fixed compilation warnings.
__STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are in cflags,
we don't need to put them in source file. Otherwise, it causes
redefine warnings. Reported by guanqun.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Xing, Homer [Wed, 12 Dec 2012 08:37:28 +0000 (16:37 +0800)]
Ignore OpenCL kernel copied from Intel OpenCL SDK
just modify .gitignore, to ignore OpenCL kernel copied from Intel OpenCL SDK
Homer Hsing [Mon, 10 Dec 2012 01:02:02 +0000 (09:02 +0800)]
support OpenCL 1.1 relational builtin functions "all","any"
Homer Hsing [Mon, 10 Dec 2012 00:41:01 +0000 (08:41 +0800)]
support OpenCL 1.1 relational builtin function "signbit"
Homer Hsing [Fri, 7 Dec 2012 01:56:21 +0000 (09:56 +0800)]
support some OpenCL 1.1 relational built-in functions
support isfinite, isinf, isnan, isnormal, islessgreater, isordered, isunordered
Homer Hsing [Fri, 7 Dec 2012 01:17:07 +0000 (09:17 +0800)]
add missing #define in ocl_stdlib.h: INLINE_OVERLOADABLE and OVERLOADABLE
use INLINE_OVERLOADABLE in DECL
Homer Hsing [Fri, 7 Dec 2012 01:10:05 +0000 (09:10 +0800)]
support some of OpenCL 1.1 relational built-in functions
support isequal, isnotequal, isgreater, isgreaterequal, isless, islessequal
also fix typo (these typo does not cause bug)
Homer Hsing [Thu, 6 Dec 2012 08:24:55 +0000 (16:24 +0800)]
support OpenCL 1.1 kernel_exec preprocessor macro
Homer Hsing [Thu, 6 Dec 2012 08:20:04 +0000 (16:20 +0800)]
test case for __kernel_exec
Homer Hsing [Thu, 6 Dec 2012 08:19:32 +0000 (16:19 +0800)]
support OpenCL 1.1 __kernel_exec preprocessor macro
Homer Hsing [Thu, 6 Dec 2012 08:00:13 +0000 (16:00 +0800)]
pass build-options of clBuildProgram to clang compiler
Homer Hsing [Thu, 6 Dec 2012 06:42:59 +0000 (14:42 +0800)]
add OpenCL 1.1 preprocessor macros ENDIAN_LITTLE
Homer Hsing [Thu, 6 Dec 2012 03:18:51 +0000 (11:18 +0800)]
support OpenCL 1.1 other built-in data types
Homer Hsing [Thu, 6 Dec 2012 03:14:58 +0000 (11:14 +0800)]
a more general typedef for size_t and ptrdiff_t
Homer Hsing [Thu, 6 Dec 2012 01:33:55 +0000 (09:33 +0800)]
support OpenCL 1.1 floating-point macros
Homer Hsing [Thu, 6 Dec 2012 01:18:27 +0000 (09:18 +0800)]
support some OpenCL 1.1 preprocessor directives & macros
Homer Hsing [Thu, 6 Dec 2012 01:05:44 +0000 (09:05 +0800)]
add test case for bool const, and vector component addressing
Homer Hsing [Thu, 6 Dec 2012 00:53:31 +0000 (08:53 +0800)]
support OpenCL 1.1 built-in scalar data types, built-in vector data types
Homer Hsing [Thu, 29 Nov 2012 01:41:46 +0000 (09:41 +0800)]
test OpenCL 1.1 Vector Data Load/Store Functions
Homer Hsing [Thu, 29 Nov 2012 01:40:50 +0000 (09:40 +0800)]
test OpenCL 1.1 Async Copies and Prefetch Functions
Homer Hsing [Mon, 26 Nov 2012 07:27:53 +0000 (15:27 +0800)]
Test OpenCL 1.1 Geometric Builtin Functions
Homer Hsing [Mon, 26 Nov 2012 07:20:58 +0000 (15:20 +0800)]
test OpenCL 1.1 Relational Built-in Functions
Homer Hsing [Mon, 26 Nov 2012 07:13:07 +0000 (15:13 +0800)]
Enable build-in vector data types test in kernels/compiler_data_types.cl
Homer Hsing [Fri, 23 Nov 2012 00:51:48 +0000 (08:51 +0800)]
test OpenCL 1.1 Synchronization, explicit memory fence
Homer Hsing [Fri, 23 Nov 2012 00:45:59 +0000 (08:45 +0800)]
test OpenCL 1.1 sampler declaration fields
Homer Hsing [Thu, 22 Nov 2012 08:21:02 +0000 (16:21 +0800)]
Test case for OpenCL 1.1 Sampler Objects
Homer Hsing [Thu, 22 Nov 2012 01:07:36 +0000 (09:07 +0800)]
Test case for OpenCL 1.1 Atomic Functions
Homer Hsing [Thu, 22 Nov 2012 00:56:02 +0000 (08:56 +0800)]
test case for OpenCL 1.1 function qualifiers
Homer Hsing [Thu, 22 Nov 2012 00:50:28 +0000 (08:50 +0800)]
test case for OpenCL 1.1 conversion & type casting
Homer Hsing [Thu, 22 Nov 2012 00:42:48 +0000 (08:42 +0800)]
Test case for OpenCL 1.1 address space qualifier
Homer Hsing [Wed, 21 Nov 2012 06:51:39 +0000 (14:51 +0800)]
Test case for OpenCL 1.1 integer built-in functions
Homer Hsing [Wed, 21 Nov 2012 06:42:31 +0000 (14:42 +0800)]
Test case for OpenCL 1.1 structure attributes
Homer Hsing [Tue, 20 Nov 2012 03:01:31 +0000 (11:01 +0800)]
Test case for OpenCL 1.1 Preprocessor Directives & Macros
Homer Hsing [Tue, 20 Nov 2012 02:49:10 +0000 (10:49 +0800)]
Test case for OpenCL 1.1 math constants
Homer Hsing [Tue, 20 Nov 2012 02:27:42 +0000 (10:27 +0800)]
Test case for OpenCL 1.1 workitem builtin functions
Homer Hsing [Tue, 20 Nov 2012 01:51:03 +0000 (09:51 +0800)]
Test case for OpenCL 1.1 supported data types
Homer Hsing [Tue, 20 Nov 2012 01:31:17 +0000 (09:31 +0800)]
Add test case, OpenCL 1.1 Math Built-in Functions
Homer Hsing [Mon, 19 Nov 2012 08:17:31 +0000 (16:17 +0800)]
test creating program objects, build program executable, build options, query program objects
Homer Hsing [Fri, 2 Nov 2012 05:06:52 +0000 (13:06 +0800)]
Fix up README.md
miss a line "cd build" in section "How to build"
Zhigang Gong [Wed, 28 Nov 2012 08:01:26 +0000 (16:01 +0800)]
new test case from Nanhai.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Zhigang Gong [Fri, 16 Nov 2012 07:29:37 +0000 (15:29 +0800)]
First implementation for extension cl_khr_gl_sharing.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Zhigang Gong [Fri, 16 Nov 2012 07:22:36 +0000 (15:22 +0800)]
Remove glext.h.
It's part of ogl not ocl.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Zhigang Gong [Fri, 29 Mar 2013 10:35:12 +0000 (18:35 +0800)]
Only llvm3.0 and 3.1 have TargetData.h.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Zhigang Gong [Fri, 29 Mar 2013 10:26:31 +0000 (18:26 +0800)]
Fixed a potential Null pointer reference in emitMovForPHI.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Benjamin Segovia [Sat, 17 Nov 2012 02:10:07 +0000 (18:10 -0800)]
Updated comment on lost copy since it is supported now
Benjamin Segovia [Sat, 17 Nov 2012 02:05:59 +0000 (18:05 -0800)]
Implemented a work around for LLVM / clang 3.2. They handle swizzle of constant
vectors in a weird way such that the final LLVM code uses ConstantExpr which are
not supported yet. So, I modified the kernels to make them work.
Still two kernels are not working. They basically use undefined values which are
actually used. I am not supporting such case right now. It would be the
opportunity to simplify all this.
LLVM 3.2 works now. I needed to deactivate fmulall though. The code does not
seem to be correct. Well, I am not sure. May be related to the llvm+clang
version I have.
Benjamin Segovia [Fri, 16 Nov 2012 19:24:23 +0000 (11:24 -0800)]
Improved llvm 3.2 support (remove some warnings using nasty macros)
Benjamin Segovia [Fri, 16 Nov 2012 03:59:53 +0000 (19:59 -0800)]
Fixed lost copy issue when deSSAing the code. Yeah for even more MOV!!
global copy propagation is overdue!
Benjamin Segovia [Wed, 14 Nov 2012 04:55:06 +0000 (20:55 -0800)]
Added complete support for barrier (and use of SLM)
Added some tests to assert this functionnality
Benjamin Segovia [Tue, 13 Nov 2012 04:48:00 +0000 (20:48 -0800)]
Started to implement OpenCL barrier() function
Benjamin Segovia [Sat, 10 Nov 2012 04:50:58 +0000 (20:50 -0800)]
Started the boiler plate for barrier (and fences) instructions
Improved the comment on the instruction selection
Benjamin Segovia [Sat, 10 Nov 2012 04:28:17 +0000 (20:28 -0800)]
Removed MAD instruction in the IR
Benjamin Segovia [Sat, 10 Nov 2012 04:16:24 +0000 (20:16 -0800)]
Added support for __local pointer in kernel arguments. This require to add more
features in the run-time and proper support in the rest of the compiler
Benjamin Segovia [Fri, 9 Nov 2012 09:26:51 +0000 (01:26 -0800)]
Updated README since LLVM 3.1 is supported and LLVM 3.2 is almost supported
Benjamin Segovia [Fri, 9 Nov 2012 09:25:29 +0000 (01:25 -0800)]
Improved the comment on the LLVM pass
Benjamin Segovia [Fri, 9 Nov 2012 09:05:16 +0000 (01:05 -0800)]
Fixed more warning with LLVM 3.2
Redisabled LLVM 3.2. There are still problems. Some kernels output wrong code.
It is certainly the lost copy issue.
Benjamin Segovia [Fri, 9 Nov 2012 08:52:47 +0000 (00:52 -0800)]
Fixed inverted assertion
Benjamin Segovia [Fri, 9 Nov 2012 08:46:08 +0000 (00:46 -0800)]
Added a lengthy comment on the LLVM to Gen IR translation
Benjamin Segovia [Fri, 9 Nov 2012 08:30:35 +0000 (00:30 -0800)]
Forbid use of LLVM 3.2 since there are still issues with the code generated by
clang 3.2
Benjamin Segovia [Fri, 9 Nov 2012 08:29:08 +0000 (00:29 -0800)]
Fixed a warning when compiling with LLVM 3.1
Replaced invocatiopn of clang with dirty "system()" by a cleaner "popen()". The
cleanest solution should to use the clang API
Benjamin Segovia [Fri, 9 Nov 2012 08:06:21 +0000 (00:06 -0800)]
Finished proper support for LLVM 3.1
All tests pass
Benjamin Segovia [Fri, 9 Nov 2012 07:56:57 +0000 (23:56 -0800)]
Fixed a bug in llvm Gen backend
Benjamin Segovia [Fri, 9 Nov 2012 07:38:27 +0000 (23:38 -0800)]
Fixed preprocessor defines for LLVM 3.0
Benjamin Segovia [Fri, 9 Nov 2012 06:58:18 +0000 (22:58 -0800)]
Cleaned some old bitrot code in llvm_gen_backend
Started to implement support for llvm 3.2. There are problems for complex
kernels with this version. Maybe the lost copy issue.
Benjamin Segovia [Fri, 9 Nov 2012 03:22:48 +0000 (19:22 -0800)]
Enabled assertions and internal errors for the compiler. The compiler missed too
many things to turn that off
Benjamin Segovia [Fri, 9 Nov 2012 03:06:35 +0000 (19:06 -0800)]
Added support for llvm 3.1
Cleaned up some warnings
Forced pedantic option removal in the Makefile
Benjamin Segovia [Fri, 9 Nov 2012 00:24:26 +0000 (16:24 -0800)]
Fixed a leak in the code using libdrm_intel
Benjamin Segovia [Thu, 8 Nov 2012 05:50:28 +0000 (21:50 -0800)]
Made a quick pass to clean up a bit the headers (there is way too many "INLINE"
methods in this code)
Benjamin Segovia [Thu, 8 Nov 2012 05:24:05 +0000 (21:24 -0800)]
Removed one useless rforeach for the basic blocks
Benjamin Segovia [Thu, 8 Nov 2012 05:10:30 +0000 (21:10 -0800)]
Removed old bits of ir::Instruction
Benjamin Segovia [Thu, 8 Nov 2012 05:03:05 +0000 (21:03 -0800)]
Started to revamp ir::Instruction class to make it use intrusive_list instead
Benjamin Segovia [Wed, 7 Nov 2012 08:41:20 +0000 (00:41 -0800)]
Added supports for loads and stores of float8/float16
Benjamin Segovia [Wed, 7 Nov 2012 07:55:21 +0000 (23:55 -0800)]
Implemented merge of identical immediates per basic block
Benjamin Segovia [Wed, 7 Nov 2012 07:09:17 +0000 (23:09 -0800)]
Added a new menger sponge with no shadow (just to have an extra kernel a bit
simpler than menger sponge itself)
Benjamin Segovia [Wed, 7 Nov 2012 07:02:07 +0000 (23:02 -0800)]
Added support for select instructions with embedded compares
Added missing Julia missing tests
Benjamin Segovia [Wed, 7 Nov 2012 03:02:22 +0000 (19:02 -0800)]
Changed style of the comment for insn scheduling
Benjamin Segovia [Wed, 7 Nov 2012 02:59:42 +0000 (18:59 -0800)]
Made the zero cycle strategy work. This stronly limits the register pressure.
Added a simpler version of Julia.
Added a lengthy comment on the instruction scheduling strategy
Benjamin Segovia [Wed, 7 Nov 2012 01:47:26 +0000 (17:47 -0800)]
Added a additional rule for MADs. When we try to avoid spilling, we do not
generate MADs
Benjamin Segovia [Wed, 7 Nov 2012 01:42:51 +0000 (17:42 -0800)]
Added more features to the instruction scheduler to support both pre-register
allocation and post-register allocation scheduling
Well, we really need to implement something really good for the pre-reg
allocation scheduling to avoid spilling (which is not supported anyway today)
Benjamin Segovia [Tue, 6 Nov 2012 06:32:13 +0000 (22:32 -0800)]
Fixed a potential bug with cvar
Fixed MAD related cvar initialization in c++ pre-main
Benjamin Segovia [Tue, 6 Nov 2012 06:03:52 +0000 (22:03 -0800)]
Added julia set
Improved a bit the MOV removal pass
Benjamin Segovia [Tue, 6 Nov 2012 04:39:43 +0000 (20:39 -0800)]
Added three kernels from Inigo website. Be aware that glsl mod functions is not
the same as ocl one... Damn :-)
Benjamin Segovia [Tue, 6 Nov 2012 01:49:48 +0000 (17:49 -0800)]
Farctorized the code for the kernels I picked up from Inigo websites
Benjamin Segovia [Tue, 6 Nov 2012 01:01:59 +0000 (17:01 -0800)]
Removed the remaining bits of the Gen specific extensions. Much cleaner code
now.
Benjamin Segovia [Mon, 5 Nov 2012 23:41:58 +0000 (15:41 -0800)]
Started to remove support for gen extensions. This was basically a quick fire
and forget code to play a bit with ideas similar to what NV proposed. The goal
is to make the code we have as much clear as we can. So, I just removed
everything.
Benjamin Segovia [Mon, 5 Nov 2012 23:29:58 +0000 (15:29 -0800)]
Removed the remaining bits of the c++ simulator. We only need the support for
real hardware here. Nothing more.