aboutsummaryrefslogtreecommitdiffstats
path: root/Assembly.cpp
diff options
context:
space:
mode:
authorGav Wood <g@ethdev.com>2015-05-13 05:58:55 +0800
committerGav Wood <g@ethdev.com>2015-05-13 05:58:55 +0800
commit0dc7c9630731d89c9d38a95e4b97af9fb7c57939 (patch)
treeccfc4b7b64b2a9164ee896d8595d41b79355d942 /Assembly.cpp
parentddbb161bf2c38444c5d77d080c948b09e71fef6b (diff)
parent79f8a224ef848d30af3743f5f06c74b45ce1da5e (diff)
downloaddexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.tar
dexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.tar.gz
dexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.tar.bz2
dexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.tar.lz
dexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.tar.xz
dexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.tar.zst
dexon-solidity-0dc7c9630731d89c9d38a95e4b97af9fb7c57939.zip
Merge pull request #1873 from chriseth/sol_unifyBlocks
Unify blocks that share code.
Diffstat (limited to 'Assembly.cpp')
-rw-r--r--Assembly.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/Assembly.cpp b/Assembly.cpp
index abcd4451..1011392b 100644
--- a/Assembly.cpp
+++ b/Assembly.cpp
@@ -24,6 +24,7 @@
#include <libdevcore/Log.h>
#include <libevmasm/CommonSubexpressionEliminator.h>
#include <libevmasm/ControlFlowGraph.h>
+#include <libevmasm/BlockDeduplicator.h>
#include <json/json.h>
using namespace std;
using namespace dev;
@@ -348,8 +349,17 @@ Assembly& Assembly::optimise(bool _enable)
copy(orig, iter, back_inserter(optimisedItems));
}
}
+
if (optimisedItems.size() < m_items.size())
+ {
m_items = move(optimisedItems);
+ count++;
+ }
+
+ // This only modifies PushTags, we have to run again to actually remove code.
+ BlockDeduplicator dedup(m_items);
+ if (dedup.deduplicate())
+ count++;
}
}