JuliaLang / julia

The Julia Programming Language
https://julialang.org/
MIT License
45.44k stars 5.46k forks source link

Creating a random array results in a segfault in LLVM on A64FX with 512-bit vectors #44263

Closed giordano closed 1 year ago

giordano commented 2 years ago
$ JULIA_LLVM_ARGS="-aarch64-sve-vector-bits-min=512" gdb ./julia-7889b2a6a2/bin/julia 
GNU gdb (GDB) Red Hat Enterprise Linux 8.2-11.el8
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "aarch64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./julia-7889b2a6a2/bin/julia...done.
(gdb) run
Starting program: /snx11273/home/ri-mgiordano/nightly/julia-7889b2a6a2/bin/julia 
Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-101.el8.aarch64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0xffffa7e3f1d0 (LWP 657038)]
[many more threads...]
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.8.0-DEV.1572 (2022-02-16)
 _/ |\__'_|_|_|\__'_|  |  Commit 7889b2a6a2 (2 days old master)
|__/                   |

julia> rand()
0.6032305895028276

julia> rand(1)

Thread 1 "julia" received signal SIGSEGV, Segmentation fault.
0x0000ffffac923fb8 in __memcpy_generic () from /lib64/libc.so.6
(gdb) where 
#0  0x0000ffffac923fb8 in __memcpy_generic () from /lib64/libc.so.6
#1  0x0000ffffa89aa260 in computeForAddCarry(llvm::KnownBits const&, llvm::KnownBits const&, bool, bool) () from /snx11273/home/ri-mgiordano/nightly/julia-7889b2a6a2/bin/../lib/julia/libLLVM-13jl.so
#2  0x00000000006e8090 in ?? ()
Backtrace stopped: not enough registers or memory available to unwind further

The segfaults seems to be in code generation, because also @code_llvm rand(1) crashes.

Note: this happens only in master, but not julia v1.7.2. Might be related to the upgrade of LLVM to v13.0.1

vchuravy commented 2 years ago

We don't guarantee alignment bigger than 16. It is weird that the crash is in the libc though, if we had codegen'd a variant that blindly uses 512 bits vectors it might have required a stronger alignment.

giordano commented 2 years ago

Some more breadcrumbs while debugging with Valentin. This is where it segfaults:

  >│0xffffac923fb8 <__memcpy_generic+232>   ldp    x12, x13, [x1]
   │0xffffac923fbc <__memcpy_generic+236>   sub    x1, x1, x14
   │0xffffac923fc0 <__memcpy_generic+240>   add    x2, x2, x14
   │0xffffac923fc4 <__memcpy_generic+244>   ldp    x6, x7, [x1, #16]
   │0xffffac923fc8 <__memcpy_generic+248>   stp    x12, x13, [x0]
   │0xffffac923fcc <__memcpy_generic+252>   ldp    x8, x9, [x1, #32]
   │0xffffac923fd0 <__memcpy_generic+256>   ldp    x10, x11, [x1, #48]
   │0xffffac923fd4 <__memcpy_generic+260>   ldp    x12, x13, [x1, #64]!
   │0xffffac923fd8 <__memcpy_generic+264>   subs   x2, x2, #0x90
   │0xffffac923fdc <__memcpy_generic+268>   b.ls   0xffffac924008 <__memcpy_generic+312>  // b.plast
   │0xffffac923fe0 <__memcpy_generic+272>   stp    x6, x7, [x3, #16]
   │0xffffac923fe4 <__memcpy_generic+276>   ldp    x6, x7, [x1, #16]
   │0xffffac923fe8 <__memcpy_generic+280>   stp    x8, x9, [x3, #32]
   │0xffffac923fec <__memcpy_generic+284>   ldp    x8, x9, [x1, #32]
   │0xffffac923ff0 <__memcpy_generic+288>   stp    x10, x11, [x3, #48]
   │0xffffac923ff4 <__memcpy_generic+292>   ldp    x10, x11, [x1, #48]
   │0xffffac923ff8 <__memcpy_generic+296>   stp    x12, x13, [x3, #64]!
   │0xffffac923ffc <__memcpy_generic+300>   ldp    x12, x13, [x1, #64]!
   │0xffffac924000 <__memcpy_generic+304>   subs   x2, x2, #0x40
   │0xffffac924004 <__memcpy_generic+308>   b.hi   0xffffac923fe0 <__memcpy_generic+272>  // b.pmore
   │0xffffac924008 <__memcpy_generic+312>   ldp    x1, x2, [x4, #-64]
   │0xffffac92400c <__memcpy_generic+316>   stp    x6, x7, [x3, #16]
   │0xffffac924010 <__memcpy_generic+320>   ldp    x6, x7, [x4, #-48]
   │0xffffac924014 <__memcpy_generic+324>   stp    x8, x9, [x3, #32]
   │0xffffac924018 <__memcpy_generic+328>   ldp    x8, x9, [x4, #-32]
   │0xffffac92401c <__memcpy_generic+332>   stp    x10, x11, [x3, #48]
   │0xffffac924020 <__memcpy_generic+336>   ldp    x10, x11, [x4, #-16]
   │0xffffac924024 <__memcpy_generic+340>   stp    x12, x13, [x3, #64]
   │0xffffac924028 <__memcpy_generic+344>   stp    x1, x2, [x5, #-64]
   │0xffffac92402c <__memcpy_generic+348>   stp    x6, x7, [x5, #-48]

Output of

JULIA_LLVM_ARGS="-aarch64-sve-vector-bits-min=512 -print-after-all -print-module-scope" ./julia -e 'rand(1)'

at https://gist.githubusercontent.com/giordano/dc38c6f22e4d4d9bc6d2cc0277ce6d10/raw/154af48873dfa85dc760982be07a463c7b8386a8/llvm-segfault-a64fx-rand-print-after-all.log

Output of

JULIA_LLVM_ARGS="-aarch64-sve-vector-bits-min=512 -print-before-all -print-module-scope" ./julia -e 'rand(1)'

at https://gist.githubusercontent.com/giordano/dc38c6f22e4d4d9bc6d2cc0277ce6d10/raw/154af48873dfa85dc760982be07a463c7b8386a8/llvm-segfault-a64fx-rand-print-before-all.log

Compiling julia from source with the following Make.user

FORCE_ASSERTIONS=1
LLVM_ASSERTIONS=1
override JULIA_BUILD_MODE=debug

LLVM_DEBUG=2
USE_BINARYBUILDER_LLVM=0

I get

julia/deps/srccache/llvm-julia-13.0.1-0/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:5121: virtual llvm::SDValue llvm::AArch64TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, const llvm::SmallVectorImpl<llvm::ISD::InputArg>&, const llvm::SDLoc&, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const: Assertion `!Res && "Call operand has unhandled type"' failed.

Full output at https://gist.github.com/giordano/35d05c0d148fa1eae62e044ca6108eb9

giordano commented 2 years ago

There is some "progress": in julia nightly the segfault isn't in libc but in llvm:

julia> rand(1)

Thread 1 "julia" received signal SIGSEGV, Segmentation fault.
0x0000ffffa8e41a94 in llvm::EVT::isExtended64BitVector() const () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so
Full backtrace in gdb ``` julia> rand(1) Thread 1 "julia" received signal SIGSEGV, Segmentation fault. 0x0000ffffa8e41a94 in llvm::EVT::isExtended64BitVector() const () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so (gdb) where #0 0x0000ffffa8e41a94 in llvm::EVT::isExtended64BitVector() const () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #1 0x0000ffffaa9aaf6c in llvm::AArch64TargetLowering::LowerFormalArguments(llvm::SDValue, unsigned int, bool, llvm::SmallVectorImpl const&, llvm::SDLoc const&, llvm::SelectionDAG&, llvm::SmallVectorImpl&) const () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #2 0x0000ffffa8ff5a50 in llvm::SelectionDAGISel::LowerArguments(llvm::Function const&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #3 0x0000ffffa9062c84 in llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #4 0x0000ffffa9063e1c in llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) [clone .part.914] () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #5 0x0000ffffa8bea7dc in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #6 0x0000ffffa895db2c in llvm::FPPassManager::runOnFunction(llvm::Function&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #7 0x0000ffffa895dd68 in llvm::FPPassManager::runOnModule(llvm::Module&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #8 0x0000ffffa895e75c in llvm::legacy::PassManagerImpl::run(llvm::Module&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #9 0x0000ffffaa36d15c in llvm::orc::SimpleCompiler::operator()(llvm::Module&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #10 0x0000ffffabd61d78 in (anonymous namespace)::CompilerT::operator() (this=0x6736a0, M=...) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:983 #11 0x0000ffffaa3c9d54 in llvm::orc::IRCompileLayer::emit(std::unique_ptr >, llvm::orc::ThreadSafeModule) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #12 0x0000ffffaa3ca518 in llvm::orc::IRTransformLayer::emit(std::unique_ptr >, llvm::orc::ThreadSafeModule) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #13 0x0000ffffabd6a0bc in JuliaOJIT::OptSelLayerT::emit (this=0xfffffffeb548, R=..., TSM=...) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:522 #14 0x0000ffffaa3d332c in llvm::orc::BasicIRLayerMaterializationUnit::materialize(std::unique_ptr >) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #15 0x0000ffffaa3857a0 in llvm::orc::MaterializationTask::run() () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #16 0x0000ffffaa36d5d4 in void llvm::detail::UniqueFunctionBase > >::CallImpl >)>(void*, std::unique_ptr >&) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #17 0x0000ffffaa3858b8 in llvm::orc::ExecutionSession::dispatchOutstandingMUs() () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #18 0x0000ffffaa389ce8 in llvm::orc::ExecutionSession::OL_completeLookup(std::unique_ptr >, std::shared_ptr, std::function >, llvm::DenseMapInfo, llvm::detail::DenseMapPair > > > const&)>) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #19 0x0000ffffaa38aafc in llvm::orc::InProgressFullLookupState::complete(std::unique_ptr >) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #20 0x0000ffffaa37b788 in llvm::orc::ExecutionSession::OL_applyQueryPhase1(std::unique_ptr >, llvm::Error) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #21 0x0000ffffaa385b44 in llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind, std::vector, std::allocator > > const&, llvm::orc::SymbolLookupSet, llvm::orc::SymbolState, llvm::unique_function, llvm::detail::DenseMapPair > >)>, std::function >, llvm::DenseMapInfo, llvm::detail::DenseMapPair > > > const&)>) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #22 0x0000ffffaa385cf0 in llvm::orc::ExecutionSession::lookup(std::vector, std::allocator > > const&, llvm::orc::SymbolLookupSet const&, llvm::orc::LookupKind, llvm::orc::SymbolState, std::function >, llvm::DenseMapInfo, llvm::detail::DenseMapPair > > > const&)>) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #23 0x0000ffffaa38604c in llvm::orc::ExecutionSession::lookup(std::vector, std::allocator > > const&, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #24 0x0000ffffaa386430 in llvm::orc::ExecutionSession::lookup(llvm::ArrayRef, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #25 0x0000ffffaa386668 in llvm::orc::ExecutionSession::lookup(llvm::ArrayRef, llvm::StringRef, llvm::orc::SymbolState) () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/bin/../lib/julia/libLLVM-14jl.so #26 0x0000ffffabd65a6c in JuliaOJIT::addModule (this=0xfffffffebd48, TSM=...) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:1148 #27 0x0000ffffabd67490 in jl_add_to_ee (M=..., NewExports=..., Queued=..., ToMerge=..., depth=depth@entry=1) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:1523 #28 0x0000ffffabd68248 in jl_add_to_ee (NewExports=..., M=...) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:1545 #29 _jl_compile_codeinst (codeinst=codeinst@entry=0xffff91ac7960, src=src@entry=0xff, world=world@entry=32656, context=...) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:162 --Type for more, q to quit, c to continue without paging-- #30 0x0000ffffabd68fd8 in jl_generate_fptr_impl (mi=, world=32656) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:357 #31 0x0000ffffac270cc0 in jl_compile_method_internal (mi=0xffff91eb5730, world=32656) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2107 #32 0x0000ffffac2719b4 in _jl_invoke (world=32656, mfunc=, nargs=2, args=0xfffffffeca88, F=0xffff874b8bd0 ) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2385 #33 ijl_apply_generic (F=0xffff874b8bd0 , args=args@entry=0xfffffffeca88, nargs=2, nargs@entry=3) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 #34 0x0000ffffac28023c in jl_apply (nargs=4, args=0xfffffffeca80) at /buildworker/worker/package_linuxaarch64/build/src/julia.h:1845 #35 jl_f__call_in_world_total (F=, args=0x64, nargs=5) at /buildworker/worker/package_linuxaarch64/build/src/builtins.c:812 #36 0x0000ffffac271968 in _jl_invoke (world=, mfunc=, nargs=4, args=0xfffffffeca78, F=0xffff87be5a20 ) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2393 #37 ijl_apply_generic (F=0xffff87be5a20 , args=args@entry=0xfffffffeca78, nargs=4) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 #38 0x0000ffffac282064 in jl_apply (nargs=, args=0xfffffffeca70) at /buildworker/worker/package_linuxaarch64/build/src/julia.h:1845 #39 do_apply (args=, nargs=, iterate=0xffff91ea5440) at /buildworker/worker/package_linuxaarch64/build/src/builtins.c:730 #40 0x0000ffff858e809c in julia_concrete_eval_call_12435 () at compiler/abstractinterpretation.jl:785 #41 0x0000ffff85860050 in julia_abstract_call_method_with_const_args_16602 () at compiler/abstractinterpretation.jl:828 #42 0x0000ffff85729630 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:178 #43 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #44 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #45 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #46 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #47 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #48 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #49 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #50 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #51 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #52 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #53 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 #54 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #55 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #56 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #57 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #58 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #59 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #60 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #61 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #62 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #63 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #64 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #65 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 #66 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #67 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #68 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #69 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #70 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #71 0x0000ffff856ef840 in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2269 #72 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #73 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #74 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #75 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #76 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #77 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 --Type for more, q to quit, c to continue without paging-- #78 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #79 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #80 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #81 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #82 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #83 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #84 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #85 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #86 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #87 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #88 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #89 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 #90 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #91 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #92 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #93 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #94 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #95 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #96 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #97 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #98 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #99 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #100 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #101 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 #102 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #103 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #104 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #105 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #106 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #107 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #108 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #109 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #110 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #111 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #112 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #113 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 #114 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #115 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 #116 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #117 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #118 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #119 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #120 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #121 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #122 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #123 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #124 0x0000ffff8586261c in julia_typeinf_edge_12579 () at compiler/typeinfer.jl:907 #125 0x0000ffff858639d8 in julia_abstract_call_method_14631 () at compiler/abstractinterpretation.jl:609 #126 0x0000ffff85729364 in julia_abstract_call_gf_by_type_17705 () at compiler/abstractinterpretation.jl:169 #127 0x0000ffff8570cb5c in julia_abstract_call_known_17238 () at compiler/abstractinterpretation.jl:1746 --Type for more, q to quit, c to continue without paging-- #128 0x0000ffff8572beb8 in julia_abstract_call_17144 () at compiler/abstractinterpretation.jl:1818 #129 0x0000ffff8572c420 in julia_abstract_call_17170 () at compiler/abstractinterpretation.jl:1783 #130 0x0000ffff856ec510 in julia_abstract_eval_statement_14729 () at compiler/abstractinterpretation.jl:1939 #131 0x0000ffff856ef7ec in julia_abstract_eval_basic_statement_13252 () at compiler/abstractinterpretation.jl:2293 #132 0x0000ffff856f2b10 in julia_typeinf_local_13325 () at compiler/abstractinterpretation.jl:2470 #133 0x0000ffff856f5398 in julia_typeinf_nocycle_14111 () at compiler/abstractinterpretation.jl:2568 #134 0x0000ffff856f6060 in julia__typeinf_16548 () at compiler/typeinfer.jl:230 #135 0x0000ffff856f7298 in julia_typeinf_16075 () at compiler/typeinfer.jl:213 #136 0x0000ffff85865a5c in julia_typeinf_ext_13584 () at compiler/typeinfer.jl:1031 #137 0x0000ffff856f7cc8 in julia_typeinf_ext_toplevel_13710 () at compiler/typeinfer.jl:1064 #138 0x0000ffff856f8108 in julia_typeinf_ext_toplevel_13706 () at compiler/typeinfer.jl:1060 #139 0x0000ffff856f814c in jfptr_typeinf_ext_toplevel_13707 () at essentials.jl:13 #140 0x0000ffffac271968 in _jl_invoke (world=, mfunc=, nargs=2, args=0xffffffff7ae8, F=0xffff86ddcab0 ) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2393 #141 ijl_apply_generic (F=0xffff86ddcab0 , args=0xffffffff7ae8, args@entry=0xffffac4f2000 , nargs=nargs@entry=2) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 #142 0x0000ffffac2721c0 in jl_apply (nargs=3, args=0xffffffff7ae0) at /buildworker/worker/package_linuxaarch64/build/src/julia.h:1845 #143 jl_type_infer (mi=mi@entry=0xffff917a1050, world=world@entry=32656, force=force@entry=0) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:317 #144 0x0000ffffabd6907c in jl_generate_fptr_impl (mi=0xffff917a1050, world=32656) at /buildworker/worker/package_linuxaarch64/build/src/jitlayers.cpp:344 #145 0x0000ffffac270cc0 in jl_compile_method_internal (mi=0xffff917a1050, world=32656) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2107 #146 0x0000ffffac2719b4 in _jl_invoke (world=32656, mfunc=, nargs=1, args=0xffffffff7f08, F=0xffff87ab54d0 ) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2385 #147 ijl_apply_generic (F=0xffff87ab54d0 , args=args@entry=0xffffffff7f08, nargs=nargs@entry=1) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 #148 0x0000ffffac28f05c in jl_apply (nargs=2, args=0xffffffff7f00) at /buildworker/worker/package_linuxaarch64/build/src/julia.h:1845 #149 do_call (args=args@entry=0xffff917a5fb8, nargs=nargs@entry=2, s=s@entry=0xffffffff8210) at /buildworker/worker/package_linuxaarch64/build/src/interpreter.c:126 #150 0x0000ffffac28eb3c in eval_value (e=e@entry=0xffff917995d0, s=0xffffffff8210, s@entry=0x0) at /buildworker/worker/package_linuxaarch64/build/src/interpreter.c:215 #151 0x0000ffffac28f5c8 in eval_stmt_value (s=0x0, stmt=) at /buildworker/worker/package_linuxaarch64/build/src/interpreter.c:166 #152 eval_body (stmts=, s=s@entry=0xffffffff8210, ip=ip@entry=0, toplevel=toplevel@entry=1) at /buildworker/worker/package_linuxaarch64/build/src/interpreter.c:612 #153 0x0000ffffac29042c in jl_interpret_toplevel_thunk (m=m@entry=0xffff874f2ff0 , src=0xffff91778a90) at /buildworker/worker/package_linuxaarch64/build/src/interpreter.c:750 #154 0x0000ffffac2af7b4 in jl_toplevel_eval_flex (m=m@entry=0xffff874f2ff0 , e=, fast=fast@entry=1, expanded=expanded@entry=0) at /buildworker/worker/package_linuxaarch64/build/src/toplevel.c:912 #155 0x0000ffffac2b028c in jl_toplevel_eval_flex (m=0xffff874f2ff0 , m@entry=0xffff91799250, e=e@entry=0xffff91799250, fast=fast@entry=1, expanded=expanded@entry=0) at /buildworker/worker/package_linuxaarch64/build/src/toplevel.c:856 #156 0x0000ffffac2b103c in ijl_toplevel_eval (m=m@entry=0xffff91799250, v=v@entry=0xffff91799250) at /buildworker/worker/package_linuxaarch64/build/src/toplevel.c:921 #157 0x0000ffffac2b1154 in ijl_toplevel_eval_in (m=0xffff91799250, ex=0xffff91799250) at /buildworker/worker/package_linuxaarch64/build/src/toplevel.c:971 #158 0x0000ffff8551feec in eval () at boot.jl:370 #159 japi1_eval_user_input_52295 () at /buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:152 #160 0x0000ffff85522a0c in julia_repl_backend_loop_52480 () at /buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:248 #161 0x0000ffff85523eb0 in japi1_#start_repl_backend#46_52448 () at /buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:233 #162 0x0000ffff8556332c in start_repl_backend##kw () at /buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:230 #163 julia_#run_repl#59_52558 () at /buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:372 #164 0x0000ffff85564434 in julia_run_repl_52640 () at /buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:357 #165 0x0000ffff85564448 in jfptr_run_repl_52641 () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/lib/julia/sys.so #166 0x0000ffffac271968 in _jl_invoke (world=, mfunc=, nargs=2, args=0xffffffff8d80, F=0xffff86d44480 ) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2393 #167 ijl_apply_generic (F=0xffff86d44480 , args=0xffffffff8d80, nargs=2) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 #168 0x0000ffff85a8b8e0 in julia_#980_24933 () at client.jl:415 #169 0x0000ffff85a8b98c in jfptr_YY.980_24934 () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/lib/julia/sys.so #170 0x0000ffffac271968 in _jl_invoke (world=, mfunc=, nargs=1, args=0xffffffff91b8, F=0xffff914e42d0) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2393 #171 ijl_apply_generic (F=0xffff914e42d0, args=args@entry=0xffffffff91b8, nargs=nargs@entry=1) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 --Type for more, q to quit, c to continue without paging-- #172 0x0000ffffac27ff84 in jl_apply (nargs=2, args=0xffffffff91b0) at /buildworker/worker/package_linuxaarch64/build/src/julia.h:1845 #173 jl_f__call_latest (F=, args=0xffffffff91b0, nargs=2) at /buildworker/worker/package_linuxaarch64/build/src/builtins.c:774 #174 0x0000ffff85a3fe84 in julia_run_main_repl_37522 () at client.jl:400 #175 0x0000ffff85a46c60 in julia_exec_options_47830 () at client.jl:314 #176 0x0000ffff85a47038 in julia__start_49440 () at client.jl:516 #177 0x0000ffff85a4713c in jfptr.start_49441 () from /snx11273/home/ri-mgiordano/nightly/julia-9b83dd8920/lib/julia/sys.so #178 0x0000ffffac271968 in _jl_invoke (world=, mfunc=, nargs=0, args=0xffffffffb278, F=0xffff86e0c880 ) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2393 #179 ijl_apply_generic (F=0xffff86e0c880 , args=0xffffffffb278, args@entry=0xffffffffb2c8, nargs=nargs@entry=0) at /buildworker/worker/package_linuxaarch64/build/src/gf.c:2575 #180 0x0000ffffac2d7760 in jl_apply (nargs=1, args=0xffffffffb2c0) at /buildworker/worker/package_linuxaarch64/build/src/julia.h:1845 #181 true_main (argc=, argv=) at /buildworker/worker/package_linuxaarch64/build/src/jlapi.c:567 #182 0x0000ffffac2d8138 in jl_repl_entrypoint (argc=, argv=0xffffffffb728) at /buildworker/worker/package_linuxaarch64/build/src/jlapi.c:711 #183 0x00000000004008cc in main (argc=, argv=) at /buildworker/worker/package_linuxaarch64/build/cli/loader_exe.c:59 ```

The second frame of the stacktrace is in llvm::AArch64TargetLowering::LowerFormalArguments, the same function which was hitting the assertion in the message above.

Edit: backtrace looks very similar to https://github.com/JuliaLang/julia/issues/43069#issuecomment-968116013.

giordano commented 1 year ago

This is now working:

$ JULIA_LLVM_ARGS="-aarch64-sve-vector-bits-min=512" julia -q
julia> rand(1)
1-element Vector{Float64}:
 0.36115625072266977

julia> rand(1)
1-element Vector{Float64}:
 0.7807049948989053

julia> versioninfo()
Julia Version 1.10.0-DEV.77
Commit 5da8d5f17ad (2022-11-30 11:11 UTC)
Platform Info:
  OS: Linux (aarch64-linux-gnu)
  CPU: 48 × unknown
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, a64fx)
  Threads: 1 on 48 virtual cores
Environment:
  JULIA_LLVM_ARGS = -aarch64-sve-vector-bits-min=512

Also, there is generally no need to use -aarch64-sve-vector-bits-min=512 anymore, autovectorisation works well out-of-the-box with LLVM 14 (Julia v1.9+)