Yul: Adds optimizer pass to make variable names suffix-canonical.

This commit is contained in:
Christian Parpart
2019-03-04 17:26:56 +01:00
committed by Leonardo Alt
parent c3e4c42bbd
commit 609855546e
19 changed files with 536 additions and 211 deletions
+20 -13
View File
@@ -40,10 +40,14 @@
#include <libyul/optimiser/StackCompressor.h>
#include <libyul/optimiser/StructuralSimplifier.h>
#include <libyul/optimiser/RedundantAssignEliminator.h>
#include <libyul/optimiser/VarNameCleaner.h>
#include <libyul/AsmAnalysis.h>
#include <libyul/AsmAnalysisInfo.h>
#include <libyul/AsmData.h>
#include <libyul/AsmPrinter.h>
#include <libyul/backends/evm/NoOutputAssembly.h>
#include <libdevcore/CommonData.h>
using namespace std;
@@ -61,16 +65,16 @@ void OptimiserSuite::run(
Block ast = boost::get<Block>(Disambiguator(*_dialect, _analysisInfo, reservedIdentifiers)(_ast));
(VarDeclInitializer{})(ast);
(FunctionHoister{})(ast);
(BlockFlattener{})(ast);
(FunctionGrouper{})(ast);
VarDeclInitializer{}(ast);
FunctionHoister{}(ast);
BlockFlattener{}(ast);
FunctionGrouper{}(ast);
EquivalentFunctionCombiner::run(ast);
UnusedPruner::runUntilStabilised(*_dialect, ast, reservedIdentifiers);
(ForLoopInitRewriter{})(ast);
(BlockFlattener{})(ast);
ForLoopInitRewriter{}(ast);
BlockFlattener{}(ast);
StructuralSimplifier{*_dialect}(ast);
(BlockFlattener{})(ast);
BlockFlattener{}(ast);
// None of the above can make stack problems worse.
@@ -92,7 +96,7 @@ void OptimiserSuite::run(
{
// still in SSA, perform structural simplification
StructuralSimplifier{*_dialect}(ast);
(BlockFlattener{})(ast);
BlockFlattener{}(ast);
UnusedPruner::runUntilStabilised(*_dialect, ast, reservedIdentifiers);
}
{
@@ -130,10 +134,10 @@ void OptimiserSuite::run(
{
// run full inliner
(FunctionGrouper{})(ast);
FunctionGrouper{}(ast);
EquivalentFunctionCombiner::run(ast);
FullInliner{ast, dispenser}.run();
(BlockFlattener{})(ast);
BlockFlattener{}(ast);
}
{
@@ -143,7 +147,7 @@ void OptimiserSuite::run(
RedundantAssignEliminator::run(*_dialect, ast);
ExpressionSimplifier::run(*_dialect, ast);
StructuralSimplifier{*_dialect}(ast);
(BlockFlattener{})(ast);
BlockFlattener{}(ast);
CommonSubexpressionEliminator{*_dialect}(ast);
SSATransform::run(ast, dispenser);
RedundantAssignEliminator::run(*_dialect, ast);
@@ -171,9 +175,12 @@ void OptimiserSuite::run(
Rematerialiser::run(*_dialect, ast);
UnusedPruner::runUntilStabilised(*_dialect, ast, reservedIdentifiers);
(FunctionGrouper{})(ast);
FunctionGrouper{}(ast);
StackCompressor::run(_dialect, ast);
(BlockFlattener{})(ast);
BlockFlattener{}(ast);
VarNameCleaner{ast, *_dialect, reservedIdentifiers}(ast);
yul::AsmAnalyzer::analyzeStrictAssertCorrect(_dialect, ast);
_ast = std::move(ast);
}