Index: src/hydrogen-escape-analysis.cc |
diff --git a/src/hydrogen-escape-analysis.cc b/src/hydrogen-escape-analysis.cc |
index 997e4f9445f79ab3f7ba079acb54be1f6e25deb8..20c36800a2a4030e94ba73a7d542d132c7d4b6c1 100644 |
--- a/src/hydrogen-escape-analysis.cc |
+++ b/src/hydrogen-escape-analysis.cc |
@@ -307,7 +307,7 @@ void HEscapeAnalysisPhase::PerformScalarReplacement() { |
number_of_objects_++; |
block_states_.Clear(); |
- // Perform actual analysis steps. |
+ // Perform actual analysis step. |
AnalyzeDataFlow(allocate); |
cumulative_values_ += number_of_values_; |
@@ -321,8 +321,12 @@ void HEscapeAnalysisPhase::Run() { |
// TODO(mstarzinger): We disable escape analysis with OSR for now, because |
// spill slots might be uninitialized. Needs investigation. |
if (graph()->has_osr()) return; |
- CollectCapturedValues(); |
- PerformScalarReplacement(); |
+ for (int i = 0; i < kMaxFixpointIterationCount; i++) { |
+ CollectCapturedValues(); |
+ if (captured_.is_empty()) break; |
+ PerformScalarReplacement(); |
+ captured_.Clear(); |
+ } |
} |