From 0a2f2ceacf9b4e1585e44fa45c72c5cfdd74015f Mon Sep 17 00:00:00 2001 From: Modestas Valauskas Date: Tue, 26 May 2026 00:56:04 -0700 Subject: [PATCH] [vm/compiler] Stop ConstantPropagator phi join at NonConstant. Short-circuit the per-predecessor Join loop in ConstantPropagator::VisitPhi once the running join has reached top. Measured on a naive 49 KLOC generated lexer with --huge_method_cutoff gates lifted: AOT compile drops from ~21s to ~11s (about 47%). Work towards https://github.com/dart-lang/sdk/issues/63230 TEST=ci Change-Id: I3103253bdba93252d4b7abcb25819a52f75b2058 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/505402 Auto-Submit: Modestas Valauskas Reviewed-by: Slava Egorov Reviewed-by: Martin Kustermann Commit-Queue: Martin Kustermann --- runtime/vm/compiler/backend/constant_propagator.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc index 65a8fb0941a..b82b65d197a 100644 --- a/runtime/vm/compiler/backend/constant_propagator.cc +++ b/runtime/vm/compiler/backend/constant_propagator.cc @@ -395,6 +395,8 @@ void ConstantPropagator::VisitPhi(PhiInstr* instr) { if (reachable_->Contains( block->PredecessorAt(pred_idx)->preorder_number())) { Join(&value, instr->InputAt(pred_idx)->definition()->constant_value()); + // Once top is reached, further Joins cannot change the value. + if (IsNonConstant(value)) break; } } SetValue(instr, value);