MCPcopy Create free account
hub / github.com/argotorg/solidity / optimiseProgram

Method optimiseProgram

tools/yulPhaser/ProgramCache.cpp:52–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

50}
51
52Program ProgramCache::optimiseProgram(
53 std::string const& _abbreviatedOptimisationSteps,
54 std::size_t _repetitionCount
55)
56{
57 std::string targetOptimisations = _abbreviatedOptimisationSteps;
58 for (std::size_t i = 1; i < _repetitionCount; ++i)
59 targetOptimisations += _abbreviatedOptimisationSteps;
60
61 std::size_t prefixSize = 0;
62 for (std::size_t i = 1; i <= targetOptimisations.size(); ++i)
63 {
64 auto const& pair = m_entries.find(targetOptimisations.substr(0, i));
65 if (pair != m_entries.end())
66 {
67 pair->second.roundNumber = m_currentRound;
68 ++prefixSize;
69 ++m_hits;
70 }
71 else
72 break;
73 }
74
75 Program intermediateProgram = (
76 prefixSize == 0 ?
77 m_program :
78 m_entries.at(targetOptimisations.substr(0, prefixSize)).program
79 );
80
81 for (std::size_t i = prefixSize + 1; i <= targetOptimisations.size(); ++i)
82 {
83 std::string stepName = OptimiserSuite::stepAbbreviationToNameMap().at(targetOptimisations[i - 1]);
84 intermediateProgram.optimise({stepName});
85
86 m_entries.insert({targetOptimisations.substr(0, i), {intermediateProgram, m_currentRound}});
87 ++m_misses;
88 }
89
90 return intermediateProgram;
91}
92
93void ProgramCache::startRound(std::size_t _roundNumber)
94{

Callers 2

optimisedProgramMethod · 0.80
BOOST_FIXTURE_TEST_CASEFunction · 0.80

Calls 6

atMethod · 0.80
insertMethod · 0.80
sizeMethod · 0.45
findMethod · 0.45
endMethod · 0.45
optimiseMethod · 0.45

Tested by

no test coverage detected