mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	OptimiserSuite: Replace full step names in run() with abbreviations
This commit is contained in:
		
							parent
							
								
									9d7df5db69
								
							
						
					
					
						commit
						9db7d2bde9
					
				| @ -93,161 +93,30 @@ void OptimiserSuite::run( | ||||
| 
 | ||||
| 	OptimiserSuite suite(_dialect, reservedIdentifiers, Debug::None, ast); | ||||
| 
 | ||||
| 	suite.runSequence({ | ||||
| 		VarDeclInitializer::name, | ||||
| 		FunctionHoister::name, | ||||
| 		BlockFlattener::name, | ||||
| 		ForLoopInitRewriter::name, | ||||
| 		DeadCodeEliminator::name, | ||||
| 		FunctionGrouper::name, | ||||
| 		EquivalentFunctionCombiner::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 		BlockFlattener::name, | ||||
| 		ControlFlowSimplifier::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ConditionalUnsimplifier::name, | ||||
| 		StructuralSimplifier::name, | ||||
| 		ControlFlowSimplifier::name, | ||||
| 		ForLoopConditionIntoBody::name, | ||||
| 		BlockFlattener::name | ||||
| 	}, ast); | ||||
| 	suite.runSequence( | ||||
| 		"dhfoDgvulfnTUtnIf"            // None of these can make stack problems worse
 | ||||
| 		"(" | ||||
| 			"xarrscLM"                 // Turn into SSA and simplify
 | ||||
| 			"cCTUtTOntnfDIul"          // Perform structural simplification
 | ||||
| 			"Lcul"                     // Simplify again
 | ||||
| 			"Vcul jj"                  // Reverse SSA
 | ||||
| 
 | ||||
| 	// None of the above can make stack problems worse.
 | ||||
| 			// should have good "compilability" property here.
 | ||||
| 
 | ||||
| 	suite.runSequenceUntilStable({ | ||||
| 		// Turn into SSA and simplify
 | ||||
| 		ExpressionSplitter::name, | ||||
| 		SSATransform::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		ExpressionSimplifier::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		LoadResolver::name, | ||||
| 		LoopInvariantCodeMotion::name, | ||||
| 
 | ||||
| 		// perform structural simplification
 | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		ConditionalSimplifier::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ConditionalUnsimplifier::name, | ||||
| 		StructuralSimplifier::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ForLoopConditionOutOfBody::name, | ||||
| 		ControlFlowSimplifier::name, | ||||
| 		StructuralSimplifier::name, | ||||
| 		ControlFlowSimplifier::name, | ||||
| 		BlockFlattener::name, | ||||
| 		DeadCodeEliminator::name, | ||||
| 		ForLoopConditionIntoBody::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		// simplify again
 | ||||
| 		LoadResolver::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		// reverse SSA
 | ||||
| 		SSAReverser::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		ExpressionJoiner::name, | ||||
| 		ExpressionJoiner::name, | ||||
| 
 | ||||
| 		// should have good "compilability" property here.
 | ||||
| 
 | ||||
| 		// run functional expression inliner
 | ||||
| 		ExpressionInliner::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		// Prune a bit more in SSA
 | ||||
| 		ExpressionSplitter::name, | ||||
| 		SSATransform::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		// Turn into SSA again and simplify
 | ||||
| 		ExpressionSplitter::name, | ||||
| 		SSATransform::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		LoadResolver::name, | ||||
| 
 | ||||
| 		// run full inliner
 | ||||
| 		FunctionGrouper::name, | ||||
| 		EquivalentFunctionCombiner::name, | ||||
| 		FullInliner::name, | ||||
| 		BlockFlattener::name, | ||||
| 
 | ||||
| 		// SSA plus simplify
 | ||||
| 		ConditionalSimplifier::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ConditionalUnsimplifier::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		SSATransform::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		LoadResolver::name, | ||||
| 		ExpressionSimplifier::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ForLoopConditionOutOfBody::name, | ||||
| 		StructuralSimplifier::name, | ||||
| 		BlockFlattener::name, | ||||
| 		DeadCodeEliminator::name, | ||||
| 		ControlFlowSimplifier::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		SSATransform::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		RedundantAssignEliminator::name, | ||||
| 		ForLoopConditionIntoBody::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 	}, ast); | ||||
| 
 | ||||
| 	// Make source short and pretty.
 | ||||
| 
 | ||||
| 	suite.runSequence({ | ||||
| 		ExpressionJoiner::name, | ||||
| 		Rematerialiser::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 		ExpressionJoiner::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 		ExpressionJoiner::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		SSAReverser::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ForLoopConditionOutOfBody::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 
 | ||||
| 		ExpressionJoiner::name, | ||||
| 		Rematerialiser::name, | ||||
| 		UnusedPruner::name, | ||||
| 		CircularReferencesPruner::name, | ||||
| 	}, ast); | ||||
| 			"eul"                      // Run functional expression inliner
 | ||||
| 			"xarulrul"                 // Prune a bit more in SSA
 | ||||
| 			"xarrcL"                   // Turn into SSA again and simplify
 | ||||
| 			"gvif"                     // Run full inliner
 | ||||
| 			"CTUcarrLsTOtfDncarrIulc"  // SSA plus simplify
 | ||||
| 		")" | ||||
| 		"jmuljuljul VcTOcul jmul",     // Make source short and pretty
 | ||||
| 		ast | ||||
| 	); | ||||
| 
 | ||||
| 	// This is a tuning parameter, but actually just prevents infinite loops.
 | ||||
| 	size_t stackCompressorMaxIterations = 16; | ||||
| 	suite.runSequence(vector<string>{ | ||||
| 		FunctionGrouper::name, | ||||
| 	}, ast); | ||||
| 	suite.runSequence("g", ast); | ||||
| 
 | ||||
| 	// We ignore the return value because we will get a much better error
 | ||||
| 	// message once we perform code generation.
 | ||||
| 	StackCompressor::run( | ||||
| @ -256,16 +125,7 @@ void OptimiserSuite::run( | ||||
| 		_optimizeStackAllocation, | ||||
| 		stackCompressorMaxIterations | ||||
| 	); | ||||
| 	suite.runSequence({ | ||||
| 		BlockFlattener::name, | ||||
| 		DeadCodeEliminator::name, | ||||
| 		ControlFlowSimplifier::name, | ||||
| 		LiteralRematerialiser::name, | ||||
| 		ForLoopConditionOutOfBody::name, | ||||
| 		CommonSubexpressionEliminator::name, | ||||
| 
 | ||||
| 		FunctionGrouper::name, | ||||
| 	}, ast); | ||||
| 	suite.runSequence("fDnTOc g", ast); | ||||
| 
 | ||||
| 	if (EVMDialect const* dialect = dynamic_cast<EVMDialect const*>(&_dialect)) | ||||
| 	{ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user