compatible issue between SPIR and LLVM/Clang 3.9+
SPIR1.2 is defined using LLVM 3.2, and SPIR2.0 is defined using LLVM3.4. And, SPIR is also one of the possible output for SYCL device compiler (and SPIR is chosen in real production computecpp from codeplay) .
But latest LLVM/clang (for example version 3.9) is not compatible with LLVM 3.2/3.4, mainly in two parts:
1. some metadata is changed from module level to function level in llvm 3.9.
for example, the kernel function flag. If spir is pared with llvm/clang 3.9, no kernel function could be found.
2. mangle is changed (fixed to be correct for Itanium ABI) in llvm3.9. see lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160229/151703.html.
with this change, the function name/parameters in spir could not be demangled correctly with llvm3.9.
In open source community, it is nature to follow the new version of llvm/clang, but it conflicts with spir. Do we have any plan to discuss/resolve it? thanks.
If I understand correctly, clang 3.9.0 and 3.9.1 do not support OpenCL on ARM, and there is nothing that can be done after clang+llvm are compiled.
sorry, but does this relative to the compatible issue?
Originally Posted by kisstop
btw, as far as i know, clang compiles opencl kernel from source code to llvm IR, and then it is up to hardware vendor to convert llvm IR to hardware instructions.