Add optimizer setting for fuzzing.

This commit is contained in:
Daniel Kirchner
2021-08-18 10:02:32 +02:00
parent e3bbc3f18b
commit 4c9fcda641
14 changed files with 30 additions and 16 deletions
+2 -1
View File
@@ -38,6 +38,7 @@ void CodeGenerator::assemble(
AsmAnalysisInfo& _analysisInfo,
evmasm::Assembly& _assembly,
langutil::EVMVersion _evmVersion,
bool _forceOldPipeline,
ExternalIdentifierAccess::CodeGenerator _identifierAccessCodeGen,
bool _system,
bool _optimizeStackAllocation
@@ -45,7 +46,7 @@ void CodeGenerator::assemble(
{
EthAssemblyAdapter assemblyAdapter(_assembly);
BuiltinContext builtinContext;
if (_system && _optimizeStackAllocation && _evmVersion > EVMVersion::homestead())
if (!_forceOldPipeline && _system && _optimizeStackAllocation && _evmVersion > EVMVersion::homestead())
{
int oldStackHeight = assemblyAdapter.stackHeight();
assemblyAdapter.setStackHeight(0);
+1
View File
@@ -44,6 +44,7 @@ public:
AsmAnalysisInfo& _analysisInfo,
evmasm::Assembly& _assembly,
langutil::EVMVersion _evmVersion,
bool _forceOldPipeline,
ExternalIdentifierAccess::CodeGenerator _identifierAccess = {},
bool _system = false,
bool _optimizeStackAllocation = false
+5 -5
View File
@@ -31,13 +31,13 @@
using namespace solidity::yul;
using namespace std;
void EVMObjectCompiler::compile(Object& _object, AbstractAssembly& _assembly, EVMDialect const& _dialect, bool _optimize)
void EVMObjectCompiler::compile(Object& _object, AbstractAssembly& _assembly, EVMDialect const& _dialect, bool _optimize, bool _forceOldPipeline)
{
EVMObjectCompiler compiler(_assembly, _dialect);
compiler.run(_object, _optimize);
compiler.run(_object, _optimize, _forceOldPipeline);
}
void EVMObjectCompiler::run(Object& _object, bool _optimize)
void EVMObjectCompiler::run(Object& _object, bool _optimize, bool _forceOldPipeline)
{
BuiltinContext context;
context.currentObject = &_object;
@@ -49,7 +49,7 @@ void EVMObjectCompiler::run(Object& _object, bool _optimize)
auto subAssemblyAndID = m_assembly.createSubAssembly(subObject->name.str());
context.subIDs[subObject->name] = subAssemblyAndID.second;
subObject->subId = subAssemblyAndID.second;
compile(*subObject, *subAssemblyAndID.first, m_dialect, _optimize);
compile(*subObject, *subAssemblyAndID.first, m_dialect, _optimize, _forceOldPipeline);
}
else
{
@@ -63,7 +63,7 @@ void EVMObjectCompiler::run(Object& _object, bool _optimize)
yulAssert(_object.analysisInfo, "No analysis info.");
yulAssert(_object.code, "No code.");
if (_optimize && m_dialect.evmVersion() > langutil::EVMVersion::homestead())
if (!_forceOldPipeline && (_optimize && m_dialect.evmVersion() > langutil::EVMVersion::homestead()))
{
auto stackErrors = OptimizedEVMCodeTransform::run(m_assembly, *_object.analysisInfo, *_object.code, m_dialect, context);
+2 -2
View File
@@ -30,13 +30,13 @@ struct EVMDialect;
class EVMObjectCompiler
{
public:
static void compile(Object& _object, AbstractAssembly& _assembly, EVMDialect const& _dialect, bool _optimize);
static void compile(Object& _object, AbstractAssembly& _assembly, EVMDialect const& _dialect, bool _optimize, bool _forceOldPipeline);
private:
EVMObjectCompiler(AbstractAssembly& _assembly, EVMDialect const& _dialect):
m_assembly(_assembly), m_dialect(_dialect)
{}
void run(Object& _object, bool _optimize);
void run(Object& _object, bool _optimize, bool _forceOldPipeline);
AbstractAssembly& m_assembly;
EVMDialect const& m_dialect;