Make Yul optimizer not fail for wasm.

This commit is contained in:
chriseth
2019-06-17 18:42:47 +02:00
parent 8260ae1397
commit 6cb6fe35ef
17 changed files with 321 additions and 210 deletions
+12 -9
View File
@@ -31,6 +31,7 @@
#include <libyul/backends/evm/EVMCodeTransform.h>
#include <libyul/backends/evm/EVMDialect.h>
#include <libyul/backends/evm/EVMObjectCompiler.h>
#include <libyul/backends/evm/EVMMetrics.h>
#include <libyul/backends/wasm/WasmDialect.h>
#include <libyul/backends/wasm/EWasmObjectCompiler.h>
#include <libyul/optimiser/Metrics.h>
@@ -146,15 +147,17 @@ void AssemblyStack::optimize(Object& _object, bool _isCreation)
for (auto& subNode: _object.subObjects)
if (auto subObject = dynamic_cast<Object*>(subNode.get()))
optimize(*subObject, false);
EVMDialect const& dialect = dynamic_cast<EVMDialect const&>(languageToDialect(m_language, m_evmVersion));
GasMeter meter(dialect, _isCreation, m_optimiserSettings.expectedExecutionsPerDeployment);
OptimiserSuite::run(
dialect,
meter,
*_object.code,
*_object.analysisInfo,
m_optimiserSettings.optimizeStackAllocation
);
if (EVMDialect const* dialect = dynamic_cast<EVMDialect const*>(&languageToDialect(m_language, m_evmVersion)))
{
GasMeter meter(*dialect, _isCreation, m_optimiserSettings.expectedExecutionsPerDeployment);
OptimiserSuite::run(
*dialect,
meter,
*_object.code,
*_object.analysisInfo,
m_optimiserSettings.optimizeStackAllocation
);
}
}
MachineAssemblyObject AssemblyStack::assemble(Machine _machine) const