Skip to content

Bump LLVM to v20 #58142

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

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open

Bump LLVM to v20 #58142

wants to merge 15 commits into from

Conversation

Zentrik
Copy link
Member

@Zentrik Zentrik commented Apr 16, 2025

No description provided.

@Zentrik Zentrik changed the title llvm20 Bump to llvm 20 Apr 16, 2025
@oscardssmith oscardssmith added the compiler:llvm For issues that relate to LLVM label Apr 16, 2025
@Zentrik Zentrik changed the title Bump to llvm 20 Bump LLVM to v20 Apr 16, 2025
@Zentrik Zentrik added building Build system, or building Julia or its dependencies external dependencies Involves LLVM, OpenBLAS, or other linked libraries JLLs labels Apr 16, 2025
@giordano
Copy link
Contributor

Good news: Julia unit tests already pass! Only issues at the moment are

  • asan
    /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/../toolchain/usr/tools/clang++  -shared -fPIC -L/cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib/julia -L/cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib -L/cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib -o /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib/julia/sysbase.so -Wl,--whole-archive /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib/julia/sysbase-o.a -Wl,--no-whole-archive -ljulia-internal -ljulia $([ Linux = WINNT ] && echo '' -lopenlibm -lssp --disable-auto-import --disable-runtime-pseudo-reloc)
     cd /cache/build/builder-amdci5-1/julialang/julia-master/base && if ! JULIA_BINDIR=/cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin WINEPATH="/cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin;$WINEPATH" JULIA_LOAD_PATH='@stdlib' JULIA_PROJECT= JULIA_DEPOT_PATH=':' JULIA_NUM_THREADS=1  /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/julia -O3 -C "native"  --output-o /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib/julia/sys-o.a.tmp  --startup-file=no --warn-overwrite=yes --sysimage /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib/julia/sysbase.so /cache/build/builder-amdci5-1/julialang/julia-master/contrib/generate_precompile.jl 0; then echo '*** This error is usually fixed by running `make clean`. If the error persists, try `make cleanall`. ***'; false; fi
    julia: /workspace/srcdir/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:2910: llvm::Error llvm::orc::ExecutionSession::OL_notifyResolved(llvm::orc::MaterializationResponsibility&, const SymbolMap&): Assertion `(KV.second.getFlags() & ~WeakOrCommon) == (I->second & ~JITSymbolFlags::Common) && "Resolving symbol with incorrect flags"' failed.
    [18984] signal 6 (-6): Aborted
    in expression starting at none:0
    gsignal at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
    abort at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
    unknown function (ip: 0x7f1c05a4440e) at /lib/x86_64-linux-gnu/libc.so.6
    __assert_fail at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
    _ZN4llvm3orc16ExecutionSession17OL_notifyResolvedERNS0_29MaterializationResponsibilityERKNS_8DenseMapINS0_15SymbolStringPtrENS0_17ExecutorSymbolDefENS_12DenseMapInfoIS5_vEENS_6detail12DenseMapPairIS5_S6_EEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc21LinkGraphLinkingLayer10JITLinkCtx14notifyResolvedERNS_7jitlink9LinkGraphE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm7jitlink13JITLinkerBase10linkPhase2ESt10unique_ptrIS1_St14default_deleteIS1_EENS_8ExpectedIS2_INS0_20JITLinkMemoryManager13InFlightAllocES3_IS8_EEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm6detail18UniqueFunctionBaseIvJNS_8ExpectedISt10unique_ptrINS_7jitlink20JITLinkMemoryManager13InFlightAllocESt14default_deleteIS6_EEEEEE8CallImplIZNS4_13JITLinkerBase10linkPhase1ES3_ISD_S7_ISD_EEEUlSA_E0_EEvPvRSA_ at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZZN4llvm3orc26MapperJITLinkMemoryManager8allocateEPKNS_7jitlink12JITLinkDylibERNS2_9LinkGraphENS_15unique_functionIFvNS_8ExpectedISt10unique_ptrINS2_20JITLinkMemoryManager13InFlightAllocESt14default_deleteISC_EEEEEEEENUlNS9_INS0_17ExecutorAddrRangeEEEE_clESK_ at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm6detail18UniqueFunctionBaseIvJNS_8ExpectedINS_3orc17ExecutorAddrRangeEEEEE8CallImplIZNS3_26MapperJITLinkMemoryManager8allocateEPKNS_7jitlink12JITLinkDylibERNS9_9LinkGraphENS_15unique_functionIFvNS2_ISt10unique_ptrINS9_20JITLinkMemoryManager13InFlightAllocESt14default_deleteISI_EEEEEEEEUlS5_E_EEvPvRS5_ at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc21InProcessMemoryMapper7reserveEmNS_15unique_functionIFvNS_8ExpectedINS0_17ExecutorAddrRangeEEEEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc26MapperJITLinkMemoryManager8allocateEPKNS_7jitlink12JITLinkDylibERNS2_9LinkGraphENS_15unique_functionIFvNS_8ExpectedISt10unique_ptrINS2_20JITLinkMemoryManager13InFlightAllocESt14default_deleteISC_EEEEEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm7jitlink13JITLinkerBase10linkPhase1ESt10unique_ptrIS1_St14default_deleteIS1_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm7jitlink15link_ELF_x86_64ESt10unique_ptrINS0_9LinkGraphESt14default_deleteIS2_EES1_INS0_14JITLinkContextES3_IS6_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm7jitlink8link_ELFESt10unique_ptrINS0_9LinkGraphESt14default_deleteIS2_EES1_INS0_14JITLinkContextES3_IS6_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm7jitlink4linkESt10unique_ptrINS0_9LinkGraphESt14default_deleteIS2_EES1_INS0_14JITLinkContextES3_IS6_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc21LinkGraphLinkingLayer4emitESt10unique_ptrINS0_29MaterializationResponsibilityESt14default_deleteIS3_EES2_INS_7jitlink9LinkGraphES4_IS8_EES2_INS_12MemoryBufferES4_ISB_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc18ObjectLinkingLayer4emitESt10unique_ptrINS0_29MaterializationResponsibilityESt14default_deleteIS3_EES2_INS_12MemoryBufferES4_IS7_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc35BasicObjectLayerMaterializationUnit11materializeESt10unique_ptrINS0_29MaterializationResponsibilityESt14default_deleteIS3_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc19MaterializationTask3runEv at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc16ExecutionSession22dispatchOutstandingMUsEv at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc16ExecutionSession17OL_completeLookupESt10unique_ptrINS0_21InProgressLookupStateESt14default_deleteIS3_EESt10shared_ptrINS0_23AsynchronousSymbolQueryEESt8functionIFvRKNS_8DenseMapIPNS0_8JITDylibENS_8DenseSetINS0_15SymbolStringPtrENS_12DenseMapInfoISF_vEEEENSG_ISD_vEENS_6detail12DenseMapPairISD_SI_EEEEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc25InProgressFullLookupState8completeESt10unique_ptrINS0_21InProgressLookupStateESt14default_deleteIS3_EE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc16ExecutionSession19OL_applyQueryPhase1ESt10unique_ptrINS0_21InProgressLookupStateESt14default_deleteIS3_EENS_5ErrorE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc16ExecutionSession6lookupENS0_10LookupKindERKSt6vectorISt4pairIPNS0_8JITDylibENS0_19JITDylibLookupFlagsEESaIS8_EENS0_15SymbolLookupSetENS0_11SymbolStateENS_15unique_functionIFvNS_8ExpectedINS_8DenseMapINS0_15SymbolStringPtrENS0_17ExecutorSymbolDefENS_12DenseMapInfoISI_vEENS_6detail12DenseMapPairISI_SJ_EEEEEEEEESt8functionIFvRKNSH_IS6_NS_8DenseSetISI_SL_EENSK_IS6_vEENSN_IS6_SV_EEEEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    _ZN4llvm3orc16ExecutionSession6lookupERKSt6vectorISt4pairIPNS0_8JITDylibENS0_19JITDylibLookupFlagsEESaIS7_EENS0_15SymbolLookupSetENS0_10LookupKindENS0_11SymbolStateESt8functionIFvRKNS_8DenseMapIS5_NS_8DenseSetINS0_15SymbolStringPtrENS_12DenseMapInfoISI_vEEEENSJ_IS5_vEENS_6detail12DenseMapPairIS5_SL_EEEEEE at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/bin/../lib/libLLVM.so.20.1jl (unknown line)
    findSymbols at /cache/build/builder-amdci5-1/julialang/julia-master/src/jitlayers.cpp:2093
    jl_compile_codeinst_now at /cache/build/builder-amdci5-1/julialang/julia-master/src/jitlayers.cpp:673
    jl_compile_codeinst_impl at /cache/build/builder-amdci5-1/julialang/julia-master/src/jitlayers.cpp:819
    jl_compile_method_internal at /cache/build/builder-amdci5-1/julialang/julia-master/src/gf.c:3013
    _jl_invoke at /cache/build/builder-amdci5-1/julialang/julia-master/src/gf.c:3489
    Dict at ./dict.jl:94
    extendedterminfo at ./terminfo.jl:140
    read at ./terminfo.jl:103
    #read##2 at ./io.jl:507 [inlined]
    #open#331 at ./io.jl:410
    open at ./io.jl:407 [inlined]
    read at ./io.jl:507 [inlined]
    load_terminfo at ./terminfo.jl:293
    exec_options at ./client.jl:282
    _start at ./client.jl:563
    jfptr__start_60375 at /cache/build/builder-amdci5-1/julialang/julia-master/tmp/test-asan/asan/usr/lib/julia/sysbase.so (unknown line)
    _jl_invoke at /cache/build/builder-amdci5-1/julialang/julia-master/src/gf.c:3481
    jl_apply at /cache/build/builder-amdci5-1/julialang/julia-master/src/julia.h:2353 [inlined]
    true_main at /cache/build/builder-amdci5-1/julialang/julia-master/src/jlapi.c:951
    jl_repl_entrypoint at /cache/build/builder-amdci5-1/julialang/julia-master/src/jlapi.c:1111
    main at /cache/build/builder-amdci5-1/julialang/julia-master/cli/loader_exe.c:58
    Allocations: 10408 (Pool: 0; Other: 10408); GC: 0
    
  • analyzegc
    FAIL: Julia-GCChecker :: GCPushPop.cpp (3 of 3)
    ******************** TEST 'Julia-GCChecker :: GCPushPop.cpp' FAILED ********************
    Exit Code: 1
    Command Output (stderr):
    --
    RUN: at line 3: clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-output=text -Xclang -load -Xclang libGCCheckerPlugin.so -Xclang -verify -I/cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/../../src -I/cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/../../src/support -I/cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/../../usr/include ${CLANGSA_FLAGS} ${CLANGSA_CXXFLAGS} ${CPPFLAGS} ${CFLAGS} -Xclang -analyzer-checker=core,julia.GCChecker --analyzer-no-default-checks -x c++ /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp
    + clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-output=text -Xclang -load -Xclang libGCCheckerPlugin.so -Xclang -verify -I/cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/../../src -I/cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/../../src/support -I/cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/../../usr/include --gcc-toolchain=/usr -Xclang -analyzer-checker=core,julia.GCChecker --analyzer-no-default-checks -x c++ /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp
    error: 'expected-warning' diagnostics expected but not seen:
      File /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp Line 11: Non-popped GC frame present at end of function
      File /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp Line 18: Non-popped GC frame present at end of function
    error: 'expected-warning' diagnostics seen but not expected:
      File /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp Line 10: Non-popped GC frame present at end of function [julia.GCChecker]
      Line 17: Non-popped GC frame present at end of function [julia.GCChecker]
    error: 'expected-note' diagnostics expected but not seen:
      File /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp Line 11 (directive at /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp:12): Non-popped GC frame present at end of function
      File /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp Line 18 (directive at /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp:19): Non-popped GC frame present at end of function
    error: 'expected-note' diagnostics seen but not expected:
      File /cache/build/builder-amdci5-5/julialang/julia-master/test/clangsa/GCPushPop.cpp Line 10: Non-popped GC frame present at end of function
      Line 17: Non-popped GC frame present at end of function
    8 errors generated.
    --
    ********************
    ********************
    Failed Tests (1):
      Julia-GCChecker :: GCPushPop.cpp
    

@Zentrik
Copy link
Member Author

Zentrik commented Apr 17, 2025

I guess the asan issue was not in fact fixed upstream

julia/src/jitlayers.cpp

Lines 1989 to 1999 in 37a7541

#if JL_LLVM_VERSION < 200000
#ifdef _COMPILER_ASAN_ENABLED_
// this is a hack to work around a bad assertion:
// /workspace/srcdir/llvm-project/llvm/lib/ExecutionEngine/Orc/Core.cpp:3028: llvm::Error llvm::orc::ExecutionSession::OL_notifyResolved(llvm::orc::MaterializationResponsibility&, const SymbolMap&): Assertion `(KV.second.getFlags() & ~JITSymbolFlags::Common) == (I->second & ~JITSymbolFlags::Common) && "Resolving symbol with incorrect flags"' failed.
// hopefully fixed upstream by e7698a13e319a9919af04d3d693a6f6ea7168a44
static int64_t jl___asan_globals_registered;
orc::SymbolMap asan_crt;
asan_crt[mangle("___asan_globals_registered")] = {ExecutorAddr::fromPtr(&jl___asan_globals_registered), JITSymbolFlags::Common | JITSymbolFlags::Exported};
cantFail(JD.define(orc::absoluteSymbols(asan_crt)));
#endif
#endif

We should try and get this fixed upstream
Zentrik added a commit that referenced this pull request Apr 17, 2025
Fix #57021. Split out from #58142, not sure if there is a better way to fix this.
Zentrik added a commit that referenced this pull request Apr 17, 2025
Fix #57021. Split out from #58142, not sure if there is a better way to fix this.
@Zentrik
Copy link
Member Author

Zentrik commented Apr 17, 2025

@nanosoldier runbenchmarks(ALL, vs=":master")

@nanosoldier
Copy link
Collaborator

Your benchmark job has completed - possible performance regressions were detected. A full report can be found here.

@giordano
Copy link
Contributor

Seems to be usual mixed bag of regressions and improvements, but with no major regressions for once. And SIMD benchmarks appear to have some significant boost.

@Zentrik
Copy link
Member Author

Zentrik commented Apr 18, 2025

Can't think of an easy way to make the change to the gc push pop test (88a55e9) compatible with llvm <= 19.

Also, I don't understand when nbytes is uninitialized after the call to __builtin_mul_overflow in

#include <stddef.h>

int test(size_t nel, size_t elsz) {
  size_t nbytes;
  int overflow = __builtin_mul_overflow(nel, elsz, &nbytes);
  int overflow2 = __builtin_add_overflow(nel, nbytes, &nbytes);
  return overflow * overflow2;
}
clang++: warning: argument unused during compilation: '-S' [-Wunused-command-line-argument]
<source>:6:19: warning: 2nd function call argument is an uninitialized value [core.CallAndMessage]
    6 |   int overflow2 = __builtin_add_overflow(nel, nbytes, &nbytes);
      |                   ^                           ~~~~~~
<source>:4:3: note: 'nbytes' declared without an initial value
    4 |   size_t nbytes;
      |   ^~~~~~~~~~~~~
<source>:5:18: note: Assuming overflow
    5 |   int overflow = __builtin_mul_overflow(nel, elsz, &nbytes);
      |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:6:19: note: 2nd function call argument is an uninitialized value
    6 |   int overflow2 = __builtin_add_overflow(nel, nbytes, &nbytes);
      |                   ^                           ~~~~~~
1 warning generated.
Compiler returned: 0

Doesn't seem like a bug in clang given it's explicitly tested for https://github.com/llvm/llvm-project/blob/c609cd2df981d1fcbdfefa1e2601b965b9670630/clang/test/Analysis/builtin_overflow_notes.c#L26.
Bug in llvm llvm/llvm-project#136292.

@Zentrik
Copy link
Member Author

Zentrik commented Apr 19, 2025

Last static analyzer failure seems to be it complaining that cache is not a root array when a is written to it in:

julia/src/typemap.c

Lines 289 to 306 in da99461

static void mtcache_hash_insert(_Atomic(jl_genericmemory_t*) *cache, jl_value_t *parent, jl_value_t *key, jl_typemap_t *val)
{
int inserted = 0;
jl_genericmemory_t *a = jl_atomic_load_relaxed(cache);
if (a == (jl_genericmemory_t*)jl_an_empty_memory_any) {
a = jl_alloc_memory_any(16);
jl_atomic_store_release(cache, a);
if (parent)
jl_gc_wb(parent, a);
}
a = jl_eqtable_put(a, key, val, &inserted);
assert(inserted);
if (a != jl_atomic_load_relaxed(cache)) {
jl_atomic_store_release(cache, a);
if (parent)
jl_gc_wb(parent, a);
}
}

Called from

julia/src/typemap.c

Lines 1384 to 1394 in da99461

static void jl_typemap_memory_insert_(
jl_typemap_t *map, _Atomic(jl_genericmemory_t*) *pcache, jl_value_t *key, jl_typemap_entry_t *newrec,
jl_value_t *parent, int8_t tparam, int8_t offs, jl_value_t *doublesplit)
{
jl_genericmemory_t *cache = jl_atomic_load_relaxed(pcache);
_Atomic(jl_value_t*) *pml = mtcache_hash_lookup_bp(cache, key);
if (pml == NULL)
mtcache_hash_insert(pcache, parent, key, (jl_typemap_t*)newrec);
else
jl_typemap_insert_generic(map, pml, (jl_value_t*) cache, newrec, tparam, offs + (doublesplit ? 0 : 1), doublesplit);
}
, which is called from

julia/src/typemap.c

Lines 1298 to 1321 in da99461

jl_value_t *cache = doublesplit ? jl_an_empty_memory_any : (jl_value_t*)jl_new_typemap_level();
jl_typemap_entry_t *next = NULL;
JL_GC_PUSH3(&cache, &next, &ml);
while (ml != (void*)jl_nothing) {
next = jl_atomic_load_relaxed(&ml->next);
jl_atomic_store_relaxed(&ml->next, (jl_typemap_entry_t*)jl_nothing);
// n.b. this is being done concurrently with lookups!
// TODO: is it safe to be doing this concurrently with lookups?
if (doublesplit) {
jl_value_t *key = jl_unwrap_unionall((jl_value_t*)ml->sig);
size_t len = jl_nparams(key);
if (offs < len-1)
key = jl_tparam(key, offs);
else
key = jl_tparam(key, len-1);
if (jl_is_vararg(key))
key = jl_unwrap_vararg(key);
if (key == (jl_value_t*)jl_typeofbottom_type)
key = (jl_value_t*)jl_assume(jl_typeofbottom_type)->super;
if (tparam) {
assert(jl_is_type_type(key));
key = jl_tparam0(key);
}
jl_typemap_memory_insert_(map, (_Atomic(jl_genericmemory_t*)*)&cache, key, ml, NULL, 0, offs, NULL);
with doublesplit != 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
building Build system, or building Julia or its dependencies compiler:llvm For issues that relate to LLVM external dependencies Involves LLVM, OpenBLAS, or other linked libraries JLLs
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants