@@ -484,24 +484,40 @@ function ci_cache_populate(interp, cache, mi, min_world, max_world)
484484 codeinfos = Pair{CodeInstance, CodeInfo}[]
485485 @static if VERSION >= v" 1.12.0-DEV.1434"
486486 # see typeinfer.jl: typeinf_ext_toplevel
487+ has_compilequeue = VERSION >= v" 1.13.0-DEV.499" || v" 1.12-beta3" <= VERSION < v" 1.13-"
487488 ci = CC. typeinf_ext(interp, mi, CC. SOURCE_MODE_NOT_REQUIRED)
488- inspected = IdSet{CodeInstance}()
489- tocompile = CodeInstance[ci]
490- while ! isempty(tocompile)
491- callee = pop!(tocompile)
492- callee in inspected && continue
493- push!(inspected, callee)
489+ if has_compilequeue
490+ workqueue = CC. CompilationQueue(; interp)
491+ push!(workqueue, ci)
492+ else
493+ workqueue = CodeInstance[ci]
494+ inspected = IdSet{CodeInstance}()
495+ end
496+ while ! isempty(workqueue)
497+ callee = pop!(workqueue)
498+ if has_compilequeue
499+ CC. isinspected(workqueue, callee) && continue
500+ CC. markinspected!(workqueue, callee)
501+ else
502+ callee in inspected && continue
503+ push!(inspected, callee)
504+ end
505+
494506 # now make sure everything has source code, if desired
495507 mi = CC. get_ci_mi(callee)
496- def = mi. def
497508 if CC. use_const_api(callee)
498509 src = CC. codeinfo_for_const(interp, mi, ci. rettype_const)
499510 else
500511 # TODO : typeinf_code could return something with different edges/ages/owner/abi (needing an update to callee), which we don't handle here
501512 src = CC. typeinf_code(interp, mi, true )
502513 end
503514 if src isa CodeInfo
504- CC. collectinvokes!(tocompile, src)
515+ if has_compilequeue
516+ sptypes = CC. sptypes_from_meth_instance(mi)
517+ CC. collectinvokes!(workqueue, src, sptypes)
518+ else
519+ CC. collectinvokes!(workqueue, src)
520+ end
505521 push!(codeinfos, callee => src)
506522 end
507523 end
0 commit comments