diff options
| -rw-r--r-- | compiler/dex/mir_dataflow.cc | 8 | ||||
| -rw-r--r-- | compiler/dex/mir_optimization.cc | 8 |
2 files changed, 7 insertions, 9 deletions
diff --git a/compiler/dex/mir_dataflow.cc b/compiler/dex/mir_dataflow.cc index 2f17e08974..ed7e1f5edd 100644 --- a/compiler/dex/mir_dataflow.cc +++ b/compiler/dex/mir_dataflow.cc @@ -925,11 +925,17 @@ bool MIRGraph::FindLocalLiveIn(BasicBlock* bb) { int MIRGraph::AddNewSReg(int v_reg) { // Compiler temps always have a subscript of 0 int subscript = (v_reg < 0) ? 0 : ++ssa_last_defs_[v_reg]; - int ssa_reg = GetNumSSARegs(); + uint32_t ssa_reg = GetNumSSARegs(); SetNumSSARegs(ssa_reg + 1); ssa_base_vregs_->Insert(v_reg); ssa_subscripts_->Insert(subscript); DCHECK_EQ(ssa_base_vregs_->Size(), ssa_subscripts_->Size()); + // If we are expanding very late, update use counts too. + if (ssa_reg > 0 && use_counts_.Size() == ssa_reg) { + // Need to expand the counts. + use_counts_.Insert(0); + raw_use_counts_.Insert(0); + } return ssa_reg; } diff --git a/compiler/dex/mir_optimization.cc b/compiler/dex/mir_optimization.cc index 5c1bdf4c40..5cc994f692 100644 --- a/compiler/dex/mir_optimization.cc +++ b/compiler/dex/mir_optimization.cc @@ -286,10 +286,6 @@ CompilerTemp* MIRGraph::GetNewCompilerTemp(CompilerTempType ct_type, bool wide) reg_location_[ssa_reg_high].high_word = 1; reg_location_[ssa_reg_high].s_reg_low = ssa_reg_low; reg_location_[ssa_reg_high].wide = true; - - // A new SSA needs new use counts. - use_counts_.Insert(0); - raw_use_counts_.Insert(0); } num_non_special_compiler_temps_++; @@ -302,10 +298,6 @@ CompilerTemp* MIRGraph::GetNewCompilerTemp(CompilerTempType ct_type, bool wide) reg_location_[ssa_reg_low] = temp_loc; reg_location_[ssa_reg_low].s_reg_low = ssa_reg_low; reg_location_[ssa_reg_low].wide = wide; - - // A new SSA needs new use counts. - use_counts_.Insert(0); - raw_use_counts_.Insert(0); } compiler_temps_.Insert(compiler_temp); |