mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Dialect setting for yul optimizer tests.
This commit is contained in:
		
							parent
							
								
									12dac24871
								
							
						
					
					
						commit
						1e59c19166
					
				| @ -60,6 +60,7 @@ | |||||||
| #include <libyul/backends/evm/EVMDialect.h> | #include <libyul/backends/evm/EVMDialect.h> | ||||||
| #include <libyul/backends/evm/EVMMetrics.h> | #include <libyul/backends/evm/EVMMetrics.h> | ||||||
| #include <libyul/backends/wasm/WordSizeTransform.h> | #include <libyul/backends/wasm/WordSizeTransform.h> | ||||||
|  | #include <libyul/backends/wasm/WasmDialect.h> | ||||||
| #include <libyul/AsmPrinter.h> | #include <libyul/AsmPrinter.h> | ||||||
| #include <libyul/AsmParser.h> | #include <libyul/AsmParser.h> | ||||||
| #include <libyul/AsmAnalysis.h> | #include <libyul/AsmAnalysis.h> | ||||||
| @ -98,12 +99,24 @@ YulOptimizerTest::YulOptimizerTest(string const& _filename) | |||||||
| 	file.exceptions(ios::badbit); | 	file.exceptions(ios::badbit); | ||||||
| 
 | 
 | ||||||
| 	m_source = parseSourceAndSettings(file); | 	m_source = parseSourceAndSettings(file); | ||||||
| 	if (m_settings.count("yul")) | 	if (m_settings.count("dialect")) | ||||||
| 	{ | 	{ | ||||||
| 		m_yul = true; | 		auto dialectName = m_settings["dialect"]; | ||||||
| 		m_validatedSettings["yul"] = "true"; | 		if (dialectName == "yul") | ||||||
| 		m_settings.erase("yul"); | 			m_dialect = &Dialect::yul(); | ||||||
|  | 		else if (dialectName == "ewasm") | ||||||
|  | 			m_dialect = &WasmDialect::instance(); | ||||||
|  | 		else if (dialectName == "evm") | ||||||
|  | 			m_dialect = &EVMDialect::strictAssemblyForEVMObjects(dev::test::Options::get().evmVersion()); | ||||||
|  | 		else | ||||||
|  | 			BOOST_THROW_EXCEPTION(runtime_error("Invalid dialect " + dialectName)); | ||||||
|  | 
 | ||||||
|  | 		m_validatedSettings["dialect"] = dialectName; | ||||||
|  | 		m_settings.erase("dialect"); | ||||||
| 	} | 	} | ||||||
|  | 	else | ||||||
|  | 		m_dialect = &EVMDialect::strictAssemblyForEVMObjects(dev::test::Options::get().evmVersion()); | ||||||
|  | 
 | ||||||
| 	if (m_settings.count("step")) | 	if (m_settings.count("step")) | ||||||
| 	{ | 	{ | ||||||
| 		m_validatedSettings["step"] = m_settings["step"]; | 		m_validatedSettings["step"] = m_settings["step"]; | ||||||
| @ -350,7 +363,7 @@ TestCase::TestResult YulOptimizerTest::run(ostream& _stream, string const& _line | |||||||
| 		return TestResult::FatalError; | 		return TestResult::FatalError; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	m_obtainedResult = AsmPrinter{m_yul}(*m_ast) + "\n"; | 	m_obtainedResult = AsmPrinter{m_dialect->flavour == AsmFlavour::Yul}(*m_ast) + "\n"; | ||||||
| 
 | 
 | ||||||
| 	if (m_optimizerStep != m_validatedSettings["step"]) | 	if (m_optimizerStep != m_validatedSettings["step"]) | ||||||
| 	{ | 	{ | ||||||
| @ -406,7 +419,7 @@ bool YulOptimizerTest::parse(ostream& _stream, string const& _linePrefix, bool c | |||||||
| { | { | ||||||
| 	AssemblyStack stack( | 	AssemblyStack stack( | ||||||
| 		dev::test::Options::get().evmVersion(), | 		dev::test::Options::get().evmVersion(), | ||||||
| 		m_yul ? AssemblyStack::Language::Yul : AssemblyStack::Language::StrictAssembly, | 		m_dialect->flavour == AsmFlavour::Yul ? AssemblyStack::Language::Yul : AssemblyStack::Language::StrictAssembly, | ||||||
| 		dev::solidity::OptimiserSettings::none() | 		dev::solidity::OptimiserSettings::none() | ||||||
| 	); | 	); | ||||||
| 	if (!stack.parseAndAnalyze("", m_source) || !stack.errors().empty()) | 	if (!stack.parseAndAnalyze("", m_source) || !stack.errors().empty()) | ||||||
| @ -415,7 +428,6 @@ bool YulOptimizerTest::parse(ostream& _stream, string const& _linePrefix, bool c | |||||||
| 		printErrors(_stream, stack.errors()); | 		printErrors(_stream, stack.errors()); | ||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| 	m_dialect = m_yul ? &Dialect::yul() : &EVMDialect::strictAssemblyForEVMObjects(dev::test::Options::get().evmVersion()); |  | ||||||
| 	m_ast = stack.parserResult()->code; | 	m_ast = stack.parserResult()->code; | ||||||
| 	m_analysisInfo = stack.parserResult()->analysisInfo; | 	m_analysisInfo = stack.parserResult()->analysisInfo; | ||||||
| 	return true; | 	return true; | ||||||
|  | |||||||
| @ -71,7 +71,6 @@ private: | |||||||
| 	static void printErrors(std::ostream& _stream, langutil::ErrorList const& _errors); | 	static void printErrors(std::ostream& _stream, langutil::ErrorList const& _errors); | ||||||
| 
 | 
 | ||||||
| 	std::string m_source; | 	std::string m_source; | ||||||
| 	bool m_yul = false; |  | ||||||
| 	std::string m_optimizerStep; | 	std::string m_optimizerStep; | ||||||
| 	std::string m_expectation; | 	std::string m_expectation; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { let a:u256, b:u256 } | //     { let a:u256, b:u256 } | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { | //     { | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { let a:u256, b:u256, c:u256 } | //     { let a:u256, b:u256, c:u256 } | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| { { let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256 } { let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256 } } | { { let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256 } { let aanteuhdaoneudbrgkjiuaothduiathudaoeuh:u256 } } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { | //     { | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { } | { } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { } | // { } | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { let a:u256, b:u256, c:u256 } | //     { let a:u256, b:u256, c:u256 } | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| { { let a:u256 } { let a:u256 } } | { { let a:u256 } { let a:u256 } } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { let a:u256 } | //     { let a:u256 } | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| { { let a:u256 let a_1:u256 } { let a:u256 } } | { { let a:u256 let a_1:u256 } { let a:u256 } } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { | //     { | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: disambiguator | // step: disambiguator | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { | //     { | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: expressionInliner | // step: expressionInliner | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function f() -> x:u256 | //     function f() -> x:u256 | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: expressionInliner | // step: expressionInliner | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function f(a:u256) -> x:u256 | //     function f(a:u256) -> x:u256 | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| { let a:u256 { } function f() -> x:bool { let b:u256 := 4:u256 {} for {} f() {} {} } } | { let a:u256 { } function f() -> x:bool { let b:u256 := 4:u256 {} for {} f() {} {} } } | ||||||
| // ==== | // ==== | ||||||
| // step: functionGrouper | // step: functionGrouper | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { | //     { | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionGrouper | // step: functionGrouper | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { | //     { | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionGrouper | // step: functionGrouper | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { let a:u256 } | //     { let a:u256 } | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionGrouper | // step: functionGrouper | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     { let a:u256 } | //     { let a:u256 } | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionHoister | // step: functionHoister | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     let a:u256 | //     let a:u256 | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionHoister | // step: functionHoister | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     let a:u256 | //     let a:u256 | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionHoister | // step: functionHoister | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     let a:u256 | //     let a:u256 | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: functionHoister | // step: functionHoister | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     let a:u256 | //     let a:u256 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: mainFunction | // step: mainFunction | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function main() | //     function main() | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: mainFunction | // step: mainFunction | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function main() | //     function main() | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: mainFunction | // step: mainFunction | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function main() | //     function main() | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ | |||||||
| } | } | ||||||
| // ==== | // ==== | ||||||
| // step: mainFunction | // step: mainFunction | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function main() | //     function main() | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| {} | {} | ||||||
| // ==== | // ==== | ||||||
| // step: mainFunction | // step: mainFunction | ||||||
| // yul: true | // dialect: yul | ||||||
| // ---- | // ---- | ||||||
| // { | // { | ||||||
| //     function main() | //     function main() | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user