Hello!
I'm trying to make working OpenCL test example in dcompute ~master branch.
All is good, but I get invalidKernelName error.
When I add debug to program.c:59:
writefln("%s", name);
I see mangled name of saxpy function:
_D12dummykernels5saxpyFS3ldc8dcompute__T7PointerVEQBaQz9AddrSpacei1TfZQBefQBzQCcmZv
And if I run
$ spirv-dis .dub/obj/kernels_ocl220_64.spv | grep "_D12dummykernels5saxpyFS3ldc8dcompute__T7PointerVEQBaQz9AddrSpacei1TfZQBefQBzQCcmZv"
I see two definitions of this symbol:
- as OpEntryPoint
and - as opFunction
In https://github.com/bashbaug/SimpleOpenCLSamples I found good 05_spirvkernelfromfile example and there are building logs. If I run
$ ./spirvkernelfromfile -p 1 --file /home/undefer/MyFiles/Projects/TEST/D/gpu/.dub/obj/kernels_ocl220_64.spv
I see the next line:
Kernel <_D12dummykernels5saxpyFS3ldc8dcompute__T7PointerVEQBaQz9AddrSpacei1TfZQBefQBzQCcmZv.1> was successfully vectorized (8)
I.e. the kernel is loaded but by name with suffix ".1". And if I add this suffix to program.c:59 like:
name = name ~ ".1"
The example is working. The sample_kernel64.spv of 05_spirvkernelfromfile loads good without any suffixes to "Test" kernel name. But if I self try compile
$ clang -c -target spir64 -emit-llvm -o sample_kernel.bc sample_kernel.cl
$ llvm-spirv -o sample_kernel.spv sample_kernel.bc
I get the same problem and kernel "Test.1" loads. If I manually remove two lines from assembly version which defines "OpFunction Test" and assembly again:
$ spirv-dis sample_kernel.spv > 2.asm
$ vim 2.asm
$ spirv-as --target-env opencl2.1 -o 2.spv 2.asm
I get working spv-module.
I can't understand if it is problem of ldc2/clang/llvm-spirv and I must go to their bugtracker or it is feature and there exists option to compiler which will stop adding second kernel declaration as function and then I must create pull request to dcompute.