| 159 | } |
| 160 | |
| 161 | void eliminateVariables( |
| 162 | Dialect const& _dialect, |
| 163 | Block& _ast, |
| 164 | std::map<YulName, int> const& _numVariables, |
| 165 | bool _allowMSizeOptimization |
| 166 | ) |
| 167 | { |
| 168 | RematCandidateSelector selector{_dialect}; |
| 169 | selector(_ast); |
| 170 | std::map<YulName, std::map<size_t, std::vector<YulName>>> candidates = selector.candidates(); |
| 171 | |
| 172 | std::set<YulName> varsToEliminate; |
| 173 | for (auto const& [functionName, numVariables]: _numVariables) |
| 174 | { |
| 175 | yulAssert(numVariables > 0); |
| 176 | varsToEliminate += chooseVarsToEliminate(candidates[functionName], static_cast<size_t>(numVariables)); |
| 177 | } |
| 178 | |
| 179 | Rematerialiser::run(_dialect, _ast, std::move(varsToEliminate)); |
| 180 | // Do not remove functions. |
| 181 | std::set<YulName> allFunctions = NameCollector{_ast, NameCollector::OnlyFunctions}.names(); |
| 182 | UnusedPruner::runUntilStabilised(_dialect, _ast, _allowMSizeOptimization, nullptr, allFunctions); |
| 183 | } |
| 184 | |
| 185 | void eliminateVariablesOptimizedCodegen( |
| 186 | Dialect const& _dialect, |
no test coverage detected