-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
can't link double-float modules with soft-float modules #1
Comments
Hello @alexfanqi, I have the same issue. Have you solved it? |
Yes, I haven't test out this with pocl yet, but this is a general issue I have worked out. Some configs need to be passed into llvm mc backend, ie. Cpu name, Target feature and targetabi. Try use lastest llvm main branch. LLVM <=14 detects cpu name as generic, but riscv backend only recognises generic-rv64/32. Target feature detection is not complete yet, so better to pass it in manually. Targetabi needs to be passed in mcoption. Passing by metadata in ir should work as well, but there was a bug before that should be fixed by latest llvm. See my port of julia for example alexfanqi/julia@073d7f6 |
The segmentation fault can be observed with llvm-10, llvm-11 and llvm-12 and seems to be fixed in llvm-13. It happens on the architectures armhf and armel (both 32-bit) always and on x86_64 sporadically. The test segfaults only on the first run (i.e. the kernel is not yet in pocl's kernel cache) while it passes on subsequent execution (with something already in the kernel cache), emitting only some llvm diagnostics: inlinable function call in a function with debug info must have a !dbg location %11 = call i32 @_Z12get_local_idj(i32 0) inlinable function call in a function with debug info must have a !dbg location %19 = call i32 @_Z12get_local_idj(i32 1) inlinable function call in a function with debug info must have a !dbg location %27 = call i32 @_Z12get_local_idj(i32 2) The backtrace of the segmentation fault as observed with llvm-10 and pocl 1.6: #0 getEmissionKind () at .../llvm/include/llvm/IR/DebugInfoMetadata.h:1244 #1 initialize () at .../llvm/lib/CodeGen/LexicalScopes.cpp:53 #2 0xb14102f0 in computeIntervals () at .../llvm/lib/CodeGen/LiveDebugVariables.cpp:979 #3 runOnMachineFunction () at .../llvm/lib/CodeGen/LiveDebugVariables.cpp:996 #4 runOnMachineFunction () at .../llvm/lib/CodeGen/LiveDebugVariables.cpp:1023 #5 0xb14856c8 in runOnFunction () at .../llvm/lib/CodeGen/MachineFunctionPass.cpp:73 #6 0xb12ff494 in runOnFunction () at .../llvm/lib/IR/LegacyPassManager.cpp:1481 #7 0xb12ff750 in runOnModule () at .../llvm/lib/IR/LegacyPassManager.cpp:1517 #8 0xb12ffba8 in runOnModule () at .../llvm/lib/IR/LegacyPassManager.cpp:1582 #9 run () at .../llvm/lib/IR/LegacyPassManager.cpp:1694 #10 0xb6e64c82 in pocl_llvm_codegen (Device=Device@entry=0xdb0010, Modp=0x1361838, Output=Output@entry=0xbefde86c, OutputSize=OutputSize@entry=0xbefde880) at ./lib/CL/pocl_llvm_wg.cc:624 #11 0xb6e291de in llvm_codegen (output=output@entry=0xdeb898 "...BMDHA/Sdot_kernel/0-0-0/Sdot_kernel.so", device_i=device_i@entry=0, kernel=kernel@entry=0xbefe0240, device=0xdb0010, command=command@entry=0xbefe0278, specialize=specialize@entry=0) at ./lib/CL/devices/common.c:158 #12 0xb6e2ae44 in pocl_check_kernel_disk_cache (command=command@entry=0xbefe0278, specialized=specialized@entry=0) at ./lib/CL/devices/common.c:958 #13 0xb6e2b262 in pocl_check_kernel_dlhandle_cache (command=0xbefe0278, initial_refcount=0, specialize=0) at ./lib/CL/devices/common.c:1081 #14 0xb6e033d4 in program_compile_dynamic_wg_binaries (program=program@entry=0xd8ab88) at ./lib/CL/pocl_build.c:179 #15 0xb6e13f20 in get_binary_sizes (sizes=0xbefe0384, program=0xd8ab88) at ./lib/CL/clGetProgramInfo.c:36 #16 POclGetProgramInfo (program=0xd8ab88, param_name=4453, param_value_size=128, param_value=0xbefe0384, param_value_size_ret=0xbefe0380) at ./lib/CL/clGetProgramInfo.c:115 #17 0x00473070 in main () at 975931.c:238 pocl/pocl#889 https://bugs.debian.org/975931
Hello,
First off, Merry Christmas and big thanks for bringing out this great project to enhance OpenCL support in riscv.
I was trying to compile natively on a Hifive Unmatched board with a few patches from main pocl/pocl repo to allow compilation on llvm 11+. I defined -DLLC_HOST_CPU=sifive-u74. But when I run
poclcc -o kernel.pocl kernel.cl
to compile the kernel, I got linker errorscan't link double-float modules with soft-float modules
. readelf reports the generated tempfile-xx-xx.so.o in kcache is indeed soft float. My whole machine is running on -march=rv64gc -mabi=lp64d.I have tried specifying
CFLAGS="-mabi=lp64d" -DEXTRA_HOST_LLC_FLAGS="-target-abi lp64d -mattr=+d"
and add
ss << "-target-abi lp64d -target-feature +d -mattr=+d";
to lib/CL/pocl_llvm_build.cc, but the error is still there.Do you have any idea how I can get around this issue?
The text was updated successfully, but these errors were encountered: