@@ -1466,21 +1466,27 @@ function handle_const_prop_result!(cases::Vector{InliningCase},
1466
1466
return true
1467
1467
end
1468
1468
1469
- function handle_semi_concrete_result! (cases:: Vector{InliningCase} , result:: SemiConcreteResult ,
1470
- @nospecialize (info:: CallInfo ), flag:: UInt8 , state:: InliningState ;
1471
- allow_abstract:: Bool )
1469
+ function semiconcrete_result_item (result:: SemiConcreteResult ,
1470
+ @nospecialize (info:: CallInfo ), flag:: UInt8 , state:: InliningState )
1472
1471
mi = result. mi
1473
- spec_types = mi. specTypes
1474
- allow_abstract || isdispatchtuple (spec_types) || return false
1475
- validate_sparams (mi. sparam_vals) || return false
1476
1472
if ! state. params. inlining || is_stmt_noinline (flag)
1477
1473
et = InliningEdgeTracker (state. et, nothing )
1478
- item = compileable_specialization (mi, result. effects, et, info;
1474
+ return compileable_specialization (mi, result. effects, et, info;
1479
1475
compilesig_invokes= state. params. compilesig_invokes)
1480
- item === nothing && return false
1481
1476
else
1482
- item = InliningTodo (mi, result. ir, result. effects)
1477
+ return InliningTodo (mi, result. ir, result. effects)
1483
1478
end
1479
+ end
1480
+
1481
+ function handle_semi_concrete_result! (cases:: Vector{InliningCase} , result:: SemiConcreteResult ,
1482
+ @nospecialize (info:: CallInfo ), flag:: UInt8 , state:: InliningState ;
1483
+ allow_abstract:: Bool )
1484
+ mi = result. mi
1485
+ spec_types = mi. specTypes
1486
+ allow_abstract || isdispatchtuple (spec_types) || return false
1487
+ validate_sparams (mi. sparam_vals) || return false
1488
+ item = semiconcrete_result_item (result, info, flag, state)
1489
+ item === nothing && return false
1484
1490
push! (cases, InliningCase (spec_types, item))
1485
1491
return true
1486
1492
end
@@ -1538,7 +1544,14 @@ function handle_opaque_closure_call!(todo::Vector{Pair{Int,Any}},
1538
1544
elseif isa (result, ConcreteResult)
1539
1545
item = concrete_result_item (result, info, state)
1540
1546
else
1541
- item = analyze_method! (info. match, sig. argtypes, info, flag, state; allow_typevars= false )
1547
+ if isa (result, SemiConcreteResult)
1548
+ result = inlining_policy (state. interp, result, info, flag, result. mi, sig. argtypes)
1549
+ end
1550
+ if isa (result, SemiConcreteResult)
1551
+ item = semiconcrete_result_item (result, info, flag, state)
1552
+ else
1553
+ item = analyze_method! (info. match, sig. argtypes, info, flag, state; allow_typevars= false )
1554
+ end
1542
1555
end
1543
1556
handle_single_case! (todo, ir, idx, stmt, item, state. params)
1544
1557
return nothing
0 commit comments