Take special functions that require literals into account.

This commit is contained in:
chriseth
2019-01-07 17:23:38 +01:00
parent 9f5d34af7d
commit 5b73c2ae3b
13 changed files with 58 additions and 17 deletions
+6
View File
@@ -24,6 +24,7 @@
#include <libyul/optimiser/ASTWalker.h>
#include <libyul/AsmData.h>
#include <libyul/Dialect.h>
#include <libdevcore/CommonData.h>
@@ -43,6 +44,11 @@ void ExpressionSplitter::operator()(FunctionalInstruction& _instruction)
void ExpressionSplitter::operator()(FunctionCall& _funCall)
{
if (BuiltinFunction const* builtin = m_dialect.builtin(_funCall.functionName.name))
if (builtin->literalArguments)
// We cannot outline function arguments that have to be literals
return;
for (auto& arg: _funCall.arguments | boost::adaptors::reversed)
outlineExpression(arg);
}