G.3 Intermediate language programs

The Intermediate Language (IL) is partly compiled code and enables developers to distribute OpenCL kernel code without distributing the CL source code. IL code is also portable between different OpenCL platforms.

IL code uses the SPIR-V format to store the intermediate form where the compiler has parsed the code and produced a form of "virtual machine code". This "virtual machine code" can be further processed to make real machine code for a specific platform.

To compile the SPIR-V, use a general purpose OpenCL to SPIR-V compiler. The compiled SPIR-V is stored as a binary file or an array of bytes in the OpenCL application code to pass to the clCreateProgramWithIL function.


Compiling OpenCL to SPIR-V can be done in two ways, either using Clang and llvm-spirv:

clang -Xclang -finclude-default-header -cl-std=CL2.0 --target=spir[64]-unknown-unknown
-emit-llvm -c -O0 -o <file.bc> <file.cl>
llvm-spirv -o <file.spv> <file.bc>

Or for customers with access to the mali_clcc offline compiler, by using mali_clcc:

mali_clcc -emit=spir-v file.cl

Optionally, use -b32 or -b64 to specify a 32-bit or 64-bit version of the code. Set the -b32 or -b64 option to the same as the OpenCL application code, so a 32-bit application uses 32-bit OpenCL code.


Clang and llvm-spirv are available from https://github.com/KhronosGroup/SPIRV-LLVM-Translator.
Non-ConfidentialPDF file icon PDF version101574_0302_00_en
Copyright © 2019 Arm Limited or its affiliates. All rights reserved.