From 678b21fc5be3a8a7051598ea348a328323317fb2 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki Date: Fri, 27 May 2022 17:08:31 +0900 Subject: [PATCH 1/2] Revert "fix #45440, improve the robustness of concrete-evaled callsite inlining (#45451)" This reverts commit 08a9c12f829b0c1f2a9d65882543fda7d18347f0. --- base/compiler/ssair/inlining.jl | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 1294fabfed74c..8b9cdfe7cf21a 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -788,20 +788,20 @@ end function compileable_specialization(et::Union{EdgeTracker, Nothing}, match::MethodMatch, effects::Effects) mi = specialize_method(match; compilesig=true) + mi !== nothing && et !== nothing && push!(et, mi::MethodInstance) mi === nothing && return nothing - et !== nothing && push!(et, mi) return InvokeCase(mi, effects) end function compileable_specialization(et::Union{EdgeTracker, Nothing}, linfo::MethodInstance, effects::Effects) mi = specialize_method(linfo.def::Method, linfo.specTypes, linfo.sparam_vals; compilesig=true) + mi !== nothing && et !== nothing && push!(et, mi::MethodInstance) mi === nothing && return nothing - et !== nothing && push!(et, mi) return InvokeCase(mi, effects) end -function compileable_specialization(et::Union{EdgeTracker, Nothing}, result::InferenceResult, effects::Effects) - return compileable_specialization(et, result.linfo, effects) +function compileable_specialization(et::Union{EdgeTracker, Nothing}, (; linfo)::InferenceResult, effects::Effects) + return compileable_specialization(et, linfo, effects) end function resolve_todo(todo::InliningTodo, state::InliningState, flag::UInt8) @@ -1283,11 +1283,7 @@ function handle_const_call!( any_fully_covered |= match.fully_covers if isa(result, ConcreteResult) case = concrete_result_item(result, state) - if case === nothing - handled_all_cases = false - else - push!(cases, InliningCase(result.mi.specTypes, case)) - end + push!(cases, InliningCase(result.mi.specTypes, case)) elseif isa(result, ConstPropResult) handled_all_cases &= handle_const_prop_result!(result, argtypes, flag, state, cases, true) else From 0ee25849d1f3322852eae42ba3eb20b312dc079d Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki Date: Fri, 27 May 2022 17:14:44 +0900 Subject: [PATCH 2/2] follow #45440, add assertion to check concrete-eval call is compileable --- base/compiler/ssair/inlining.jl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 8b9cdfe7cf21a..c350614789c73 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -788,20 +788,20 @@ end function compileable_specialization(et::Union{EdgeTracker, Nothing}, match::MethodMatch, effects::Effects) mi = specialize_method(match; compilesig=true) - mi !== nothing && et !== nothing && push!(et, mi::MethodInstance) mi === nothing && return nothing + et !== nothing && push!(et, mi) return InvokeCase(mi, effects) end function compileable_specialization(et::Union{EdgeTracker, Nothing}, linfo::MethodInstance, effects::Effects) mi = specialize_method(linfo.def::Method, linfo.specTypes, linfo.sparam_vals; compilesig=true) - mi !== nothing && et !== nothing && push!(et, mi::MethodInstance) mi === nothing && return nothing + et !== nothing && push!(et, mi) return InvokeCase(mi, effects) end -function compileable_specialization(et::Union{EdgeTracker, Nothing}, (; linfo)::InferenceResult, effects::Effects) - return compileable_specialization(et, linfo, effects) +function compileable_specialization(et::Union{EdgeTracker, Nothing}, result::InferenceResult, effects::Effects) + return compileable_specialization(et, result.linfo, effects) end function resolve_todo(todo::InliningTodo, state::InliningState, flag::UInt8) @@ -1332,7 +1332,9 @@ end function concrete_result_item(result::ConcreteResult, state::InliningState) if !isdefined(result, :result) || !is_inlineable_constant(result.result) - return compileable_specialization(state.et, result.mi, result.effects) + case = compileable_specialization(state.et, result.mi, result.effects) + @assert case !== nothing "concrete evaluation should never happen for uncompileable callsite" + return case end @assert result.effects === EFFECTS_TOTAL return ConstantCase(quoted(result.result))