Open nalimilan opened 6 years ago
Hm that is peculiar __multi3
is part of glibc
, that is a MUL_I128
has the libc configuration changed?
No this is a part of gcc/compiler_rt. GCC doesn't seem to have this for ARM though.
Also note that the signature of this function is long long __multi3 (long long a, long long b)
, which is 64bit on arm. I don't see why LLVM should ask for this.
FWIW, I've found this: https://github.com/numba/numba/issues/969 and https://github.com/numba/numba/pull/1068.
It is necessary for working around an issue in LLVM (see issue #969). The symbol does not exist in 32-bit platform, and should not be used by LLVM. However, optimization passes will create i65 multiplication that is then lowered to __multi3.
The LLVM bug is still open: https://bugs.llvm.org/show_bug.cgi?id=20871
Any idea which commits I could try to revert?
Looks like the road of least resistant it to do https://reviews.llvm.org/D38668 for ARM 32bit as well...
All the code for this exists in https://github.com/llvm-project/llvm-project/tree/master/compiler-rt, if we build it with clang and set -DCRT_HAS_128BIT
. How do we feel about building and linking that? Unfortunately, the TargetLowering class (ala https://reviews.llvm.org/D38668) is not accessible to us to adjust to these issues directly.
Previous attempt at that was https://github.com/JuliaLang/julia/pull/18734
I used to be able to run tests without failure on ARM when building the Fedora RPM for Julia 1.0.0, after skipping some tests (numbers, ccall, vecelement, stress, errorshow and threads, but let's keep that for another issue). But with 1.0.1, there's a new failure in the Distributed test:
This is with
USE_SYSTEM_LLVM=0
, but with custom CFLAGS (which are the same as those used to build 1.0.0). Full log at https://kojipkgs.fedoraproject.org//work/tasks/5654/29975654/build.log