From 24633251ddbcbaf2f19159dd3a9177ef03137673 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Fri, 11 Oct 2024 12:18:14 +0000 Subject: [PATCH] More compiler adjust --- Manifest.toml | 2 +- src/analysis/compiler.jl | 3 ++- src/analysis/interpreter.jl | 21 +++++++-------------- src/transform/common.jl | 2 +- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 68ddab4..3d16ae7 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -444,7 +444,7 @@ version = "1.15.1" [[deps.Diffractor]] deps = ["AbstractDifferentiation", "ChainRules", "ChainRulesCore", "Combinatorics", "Cthulhu", "InteractiveUtils", "OffsetArrays", "PrecompileTools", "StaticArrays", "StructArrays"] -git-tree-sha1 = "d8c1250845869e3f5c997161fc32654ef10a3832" +git-tree-sha1 = "2a9b827fce47e27ef32471df18a96dc4ff1123bd" repo-rev = "kf/compileradjust" repo-url = "https://github.com/JuliaDiff/Diffractor.jl.git" uuid = "9f5e2b26-1114-432f-b630-d3fe2085c51c" diff --git a/src/analysis/compiler.jl b/src/analysis/compiler.jl index 91217c7..8b91323 100644 --- a/src/analysis/compiler.jl +++ b/src/analysis/compiler.jl @@ -717,7 +717,8 @@ end record_ir!(debug_config, "pre_incidence_propagation", ir) # TODO better work here? - method_info = CC.MethodInfo(#=propagate_inbounds=#true, nothing) + (nargs, isva) = isa(mi.def, Method) ? (mi.def.nargs, mi.def.isva) : (0, false) + method_info = CC.SpecInfo(nargs, isva, #=propagate_inbounds=#true, nothing) min_world = world = get_inference_world(interp) max_world = get_world_counter() if caller !== nothing diff --git a/src/analysis/interpreter.jl b/src/analysis/interpreter.jl index 93ace4f..66f5dc1 100644 --- a/src/analysis/interpreter.jl +++ b/src/analysis/interpreter.jl @@ -305,11 +305,7 @@ widenincidence(@nospecialize(x)) = x end end arginfo = ArgInfo(arginfo.fargs, map(widenincidence, arginfo.argtypes)) - r = Diffractor.fwd_abstract_call_gf_by_type(interp, f, arginfo, si, sv, ret) - return Future{CallMeta}(CC.isready(r) ? ret : r, interp, sv) do _, interp, sv - r[] !== nothing && return r[] - return ret[] - end + return Diffractor.fwd_abstract_call_gf_by_type(interp, f, arginfo, si, sv, ret) end @override function CC.abstract_call_method(interp::DAEInterpreter, @@ -447,9 +443,9 @@ end # TODO propagate debug configurations here @override function CC.optimize(interp::DAEInterpreter, opt::OptimizationState, caller::InferenceResult) - ir = CC.run_passes_ipo_safe(opt.src, opt, caller) + ir = CC.run_passes_ipo_safe(opt.src, opt) ir = run_dae_passes(interp, ir) - CC.ipo_dataflow_analysis!(interp, ir, caller) + CC.ipo_dataflow_analysis!(interp, opt, ir, caller) if interp.ipo_analysis_mode result = ipo_dae_analysis!(interp, ir, caller.linfo, caller) if result !== nothing @@ -528,14 +524,10 @@ end src === nothing && return nothing (; inferred, ir) = src::DAECache (isa(inferred, CodeInfo) && isa(ir, IRCode)) || return nothing - method_info = CC.MethodInfo(inferred) + method_info = CC.SpecInfo(inferred) ir = copy(ir) (; min_world, max_world) = inferred - if Base.__has_internal_change(v"1.12-alpha", :codeinfonargs) - argtypes = CC.va_process_argtypes(CC.optimizer_lattice(interp), argtypes, inferred.nargs, inferred.isva) - elseif VERSION >= v"1.12.0-DEV.341" - argtypes = CC.va_process_argtypes(CC.optimizer_lattice(interp), argtypes, mi) - end + argtypes = CC.va_process_argtypes(CC.optimizer_lattice(interp), argtypes, inferred.nargs, inferred.isva) return IRInterpretationState(interp, method_info, ir, mi, argtypes, world, min_world, max_world) end @@ -1224,7 +1216,8 @@ function infer_ir!(ir, interp::AbstractInterpreter, mi::MethodInstance) end end - method_info = CC.MethodInfo(#=propagate_inbounds=#true, nothing) + (nargs, isva) = isa(mi.def, Method) ? (mi.def.nargs, mi.def.isva) : (0, false) + method_info = CC.SpecInfo(nargs, isva, #=propagate_inbounds=#true, nothing) min_world = world = get_inference_world(interp) max_world = get_world_counter() irsv = IRInterpretationState(interp, method_info, ir, mi, ir.argtypes, world, min_world, max_world) diff --git a/src/transform/common.jl b/src/transform/common.jl index d25a05c..97d9129 100644 --- a/src/transform/common.jl +++ b/src/transform/common.jl @@ -57,7 +57,7 @@ function remap_info(remap_ir!, info) if isa(result, CC.SemiConcreteResult) let ir = copy(result.ir) remap_ir!(ir) - CC.SemiConcreteResult(result.mi, ir, result.effects) + CC.SemiConcreteResult(result.mi, ir, result.effects, result.spec_info) end elseif isa(result, CC.ConstPropResult) if isa(result.result.src, DAECache)