VarAction2: Use reserve and shrink_to_fit for DSG adjusts vector

This commit is contained in:
Jonathan G Rennison
2023-08-17 21:20:17 +01:00
parent 129691dcc7
commit c49651ae7b
2 changed files with 7 additions and 0 deletions

View File

@@ -6014,6 +6014,9 @@ static void NewSpriteGroup(ByteReader *buf)
/* Continue reading var adjusts while bit 5 is set. */ /* Continue reading var adjusts while bit 5 is set. */
} while (HasBit(varadjust, 5)); } while (HasBit(varadjust, 5));
/* shrink_to_fit will be called later */
group->adjusts.reserve(current_adjusts.size());
for (const DeterministicSpriteGroupAdjust &adjust : current_adjusts) { for (const DeterministicSpriteGroupAdjust &adjust : current_adjusts) {
group->adjusts.push_back(adjust); group->adjusts.push_back(adjust);
OptimiseVarAction2Adjust(va2_opt_state, info, group, group->adjusts.back()); OptimiseVarAction2Adjust(va2_opt_state, info, group, group->adjusts.back());

View File

@@ -2745,6 +2745,8 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state,
OptimiseVarAction2DeterministicSpriteGroupExpensiveVars(group, info.scope_feature); OptimiseVarAction2DeterministicSpriteGroupExpensiveVars(group, info.scope_feature);
} }
} }
if (!dse_candidate) group->adjusts.shrink_to_fit();
} }
static std::bitset<256> HandleVarAction2DeadStoreElimination(DeterministicSpriteGroup *group, VarAction2GroupVariableTracking *var_tracking, bool no_changes) static std::bitset<256> HandleVarAction2DeadStoreElimination(DeterministicSpriteGroup *group, VarAction2GroupVariableTracking *var_tracking, bool no_changes)
@@ -3141,6 +3143,8 @@ void HandleVarAction2OptimisationPasses()
if (group->dsg_flags & DSGF_CHECK_INSERT_JUMP) { if (group->dsg_flags & DSGF_CHECK_INSERT_JUMP) {
OptimiseVarAction2DeterministicSpriteResolveJumps(group); OptimiseVarAction2DeterministicSpriteResolveJumps(group);
} }
group->adjusts.shrink_to_fit();
} }
} }