Finish word size transform.

This commit is contained in:
chriseth
2019-06-20 10:42:56 +02:00
parent 096e3fcd37
commit ecab46c707
4 changed files with 55 additions and 7 deletions
+23 -3
View File
@@ -18,6 +18,8 @@
#include <libyul/AsmData.h>
#include <libyul/backends/wasm/WordSizeTransform.h>
#include <libyul/Utilities.h>
#include <libyul/Dialect.h>
#include <libyul/optimiser/NameDisplacer.h>
#include <libdevcore/CommonData.h>
@@ -41,6 +43,10 @@ void WordSizeTransform::operator()(FunctionalInstruction& _ins)
void WordSizeTransform::operator()(FunctionCall& _fc)
{
if (BuiltinFunction const* fun = m_inputDialect.builtin(_fc.functionName.name))
if (fun->literalArguments)
return;
rewriteFunctionCallArguments(_fc.arguments);
}
@@ -48,7 +54,7 @@ void WordSizeTransform::operator()(If& _if)
{
_if.condition = make_unique<Expression>(FunctionCall{
locationOf(*_if.condition),
Identifier{locationOf(*_if.condition), "or_bool"_yulstring}, // TODO make sure this is not used
Identifier{locationOf(*_if.condition), "or_bool"_yulstring},
expandValueToVector(*_if.condition)
});
(*this)(_if.body);
@@ -59,6 +65,18 @@ void WordSizeTransform::operator()(Switch&)
yulAssert(false, "Switch statement not implemented.");
}
void WordSizeTransform::operator()(ForLoop& _for)
{
(*this)(_for.pre);
_for.condition = make_unique<Expression>(FunctionCall{
locationOf(*_for.condition),
Identifier{locationOf(*_for.condition), "or_bool"_yulstring},
expandValueToVector(*_for.condition)
});
(*this)(_for.post);
(*this)(_for.body);
}
void WordSizeTransform::operator()(Block& _block)
{
iterateReplacing(
@@ -142,9 +160,11 @@ void WordSizeTransform::operator()(Block& _block)
);
}
void WordSizeTransform::run(Block& _ast, NameDispenser& _nameDispenser)
void WordSizeTransform::run(Dialect const& _inputDialect, Block& _ast, NameDispenser& _nameDispenser)
{
WordSizeTransform{_nameDispenser}(_ast);
// Free the name `or_bool`.
NameDisplacer{_nameDispenser, {"or_bool"_yulstring}}(_ast);
WordSizeTransform{_inputDialect, _nameDispenser}(_ast);
}
void WordSizeTransform::rewriteVarDeclList(TypedNameList& _nameList)