Skip to content

Commit 1d03b6d

Browse files
committed
fixup! optimizer: Add early finalize calls
1 parent 0a2d405 commit 1d03b6d

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

base/compiler/optimize.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ function early_finalize!(ir::IRCode, estate::EscapeState)
168168
end
169169
end
170170

171-
compact!(ir)
171+
ir
172172
end
173173

174174
mutable struct OptimizationState
@@ -598,7 +598,6 @@ function run_passes(ci::CodeInfo, sv::OptimizationState, caller::InferenceResult
598598
state = analyze_escapes(ir, nargs, false, getter)
599599
cache_escapes!(caller, state)
600600
end
601-
@timeit "Early Finalize" ir = early_finalize!(ir, state)
602601
end
603602
@timeit "Inlining" ir = ssa_inlining_pass!(ir, ir.linetable, sv.inlining, ci.propagate_inbounds)
604603
# @timeit "verify 2" verify_ir(ir)

base/compiler/ssair/passes.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,13 @@ function sroa_pass!(ir::IRCode, nargs::Int, getargescapes::T) where T
590590
elseif isexpr(def, :new)
591591
typ = unwrap_unionall(widenconst(argextype(SSAValue(defidx), compact)))
592592
if typ isa DataType
593-
ismutabletype(typ) && continue # mutable SROA is performed later
593+
if ismutabletype(typ)
594+
if stmt.args[1] isa QuoteNode && stmt.args[1].value == :jl_gc_add_finalizer_th
595+
# Track this for `early_finalize!`
596+
anymutability = true
597+
end
598+
continue # mutable SROA is performed later
599+
end
594600
record_immutable_preserve!(new_preserves, def, compact)
595601
push!(preserved, preserved_arg.id)
596602
end
@@ -880,6 +886,8 @@ function sroa_mutables!(ir::IRCode, nargs::Int, getargescapes::T) where T
880886
end
881887
end
882888

889+
@timeit "Early Finalize" ir = early_finalize!(ir, estate)
890+
883891
return ir
884892
end
885893

0 commit comments

Comments
 (0)