mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add optimizer setting for fuzzing.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
AsmAnalysisInfo& _analysisInfo,
|
||||
evmasm::Assembly& _assembly,
|
||||
langutil::EVMVersion _evmVersion,
|
||||
bool _forceOldPipeline,
|
||||
ExternalIdentifierAccess::CodeGenerator _identifierAccess = {},
|
||||
bool _system = false,
|
||||
bool _optimizeStackAllocation = false
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user