diff --git a/libevmasm/Assembly.cpp b/libevmasm/Assembly.cpp index 5b6e2a86f..00f78faa4 100644 --- a/libevmasm/Assembly.cpp +++ b/libevmasm/Assembly.cpp @@ -31,6 +31,8 @@ #include #include +#include + #include #include @@ -344,6 +346,7 @@ map const& Assembly::optimiseInternal( std::set _tagsReferencedFromOutside ) { + Json::Value blockTrace(Json::ValueType::arrayValue); if (m_tagReplacements) return *m_tagReplacements; @@ -456,6 +459,22 @@ map const& Assembly::optimiseInternal( if (shouldReplace) { + { + Json::Value blockOptimationTrace(Json::ValueType::objectValue); + blockOptimationTrace["kind"] = "cse"; + { + Assembly origBlock(m_creation, m_name); + origBlock.m_items.assign(orig, iter); + blockOptimationTrace["pre"] = origBlock.assemblyJSON({}, false); + } + { + Assembly optimizedBlock(m_creation, m_name); + optimizedBlock.m_items.assign(optimisedChunk.begin(), optimisedChunk.end()); + blockOptimationTrace["post"] = optimizedBlock.assemblyJSON({}, false); + } + blockTrace.append(blockOptimationTrace); + } + count++; optimisedItems += optimisedChunk; } @@ -478,6 +497,12 @@ map const& Assembly::optimiseInternal( *this ); + for (auto const& trace: blockTrace) + { + std::ofstream output("/tmp/blockTrace.json", std::ios_base::app|std::ios_base::out); + output << jsonPrint(trace, JsonFormat{JsonFormat::Pretty}) << "," << std::endl; + } + m_tagReplacements = std::move(tagReplacements); return *m_tagReplacements; }