Commit Graph
257 Commits
Author SHA1 Message Date
chriseth b11d413720 Consider return variables to be zero initially. 2018-12-13 16:02:30 +01:00
chriseth 60a368244a Do not inline into already big functions. 2018-12-13 12:12:54 +01:00
Daniel Kirchner 5ac7620045 Use C++ user-defined literals for creating YulString constants. 2018-12-12 18:45:43 +01:00
chriseth 9557dd7e74 Support unassigned variables in the SSA value tracker and the data flow analyzer. 2018-12-12 18:06:28 +01:00
Daniel Kirchner a18985800f Fix compilation for certain combinations of boost and gcc. 2018-12-12 07:51:23 +01:00
liangdzou 362648a450 Reuse stack slots in Yul to EVM code generation. 2018-12-10 14:28:56 +01:00
Daniel Kirchner 1eb60cbb39 Add structural simplifier as optimization step for Yul. 2018-12-06 18:37:35 +01:00
Mathias Baumann d0204eef2f SSAValueTracker should only use nullptr for default values 2018-12-05 18:01:41 +01:00
chriseth 32c9da9419 Merge pull request #5593 from ethereum/issue-5384
Fix expression simplifier asserting on default values
2018-12-05 17:58:23 +01:00
Daniel Kirchner 538d707439 Relax dependency of FullInliner on FunctionHoister. 2018-12-05 11:53:31 +01:00
Mathias Baumann 54846ed0a7 Fix expression simplifier asserting on default values 2018-12-05 11:43:02 +01:00
Daniel Kirchner 1b8a013d4a Properly recurse in ForLoopInitRewriter 2018-12-04 13:36:25 +01:00
Christian Parpart 8dd0338d12 Remove superfluous libyul/ASTDataForward.h and include libyul/AsmDataForward directly instead. 2018-11-23 14:29:05 +01:00
Christian Parpart ec47c8946b Isolating libyul library API into its own namespace yul. 2018-11-23 14:29:00 +01:00
Christian Parpart 713d94476e Reorder some include files and group <libyul/>'s together (as much as possible) 2018-11-23 12:37:19 +01:00
Christian Parpart 0f4ed52a71 Rewrite header paths to adapt to recent git mv of libsolidity/inlineasm to libyul 2018-11-23 11:18:57 +01:00
Christian Parpart d67322a186 Introduce namespace langutil in liblangutil directory.
Also:
- Use {}-style list initialisation for SourceLocation construction
- Introduce new system includes
- Changes the API of the Scanner to take source as value (with move) as opposed to as a reference
2018-11-21 19:13:44 +00:00
Christian Parpart 87821c53c3 Isolating files shared between Yul- and Solidity language frontend. 2018-11-21 18:58:12 +00:00
Alex Beregszaszi c9ee30294c Merge pull request #5444 from Mordax/issue-5168-rmvirtual
Removing redundant virtual from override function declaration
2018-11-21 15:16:08 +00:00
mordax ea8b7d803e Removing redundant virtual from override function declaration
Remove trailing whitespace

Remove changelog change
2018-11-21 14:37:32 +00:00
Christian Parpart f705a45d43 [Yul] Implements a pass to rewrite for-loop's pre block into the parent's Block. 2018-11-16 13:15:41 +01:00
chriseth b1454433b2 Remove variables that go out of scope from data structure. 2018-11-12 23:00:37 +01:00
chriseth faa7b61d76 Use map join algorithm for performance. 2018-11-12 23:00:37 +01:00
chriseth fa44d20721 Remove side-effect-free statements. 2018-11-08 18:14:36 +01:00
chriseth cd11f7cfac Merge pull request #5325 from ethereum/fixDataFlow
[Yul] Fix data flow analyzer for function definitions.
2018-11-08 12:52:51 +01:00
chriseth b801e61611 Merge pull request #5365 from ethereum/improveNameDispenser
[Yul] Use single counter for name dispenser for performance reasons.
2018-11-08 12:24:21 +01:00
chriseth 37766ee8e4 Add VarDeclPropagator to full suite and interactive optimizer. 2018-11-07 23:19:42 +01:00
chriseth 845899e305 Use single counter for name dispenser for performance reasons. 2018-11-07 23:09:33 +01:00
chriseth b2b11eaa00 Fix data flow analyzer for function definitions. 2018-11-07 20:32:55 +01:00
chriseth 674e17c2a8 Performance: Replace string by special single-copy YulString class. 2018-11-07 19:30:27 +01:00
Christian Parpart ab0de38f16 Eliminate byte-typedef and use uint8_t in all their places instead.
This change is made to (easily) be forward compatible with future C++
standards, in order to allow compiling the code with newer standards at
some point in the future.

* Removed the `using byte = uint8_t;` line from Common.h
* Mechanically change all uses of `byte` to `uint8_t`.

Tested with GCC 7.3 in C++11/14/17 modes :-)
2018-11-07 12:17:57 +01:00
chriseth acf92930ba Merge pull request #5247 from ethereum/yul-vardecl-propagation
Yul: Implements empty-var-decl-propagation
2018-10-28 20:46:34 +01:00
Christian Parpart 1264290d57 [Yul] ExpressionJoiner: code cleanup
* ensure public API is only containing `run(Block&)`, all the rest is private API / implementation details
* adding some comments to class data members to quicker understand their meaning
* eliminate unnecessary `operator()(If&)` as it's not changing default behaviour of `ASTModifier`
* simplify readability of `visit(Expression&)`'s impl, also moving assert's into "isLatestStatementVarDeclOf", as this one is already ensuring exactly that.
* ctor impl's use of ReferenceCounter use shortened.
* renamed and improved `isLatestStatementVarDeclOf` to better match its meaning (especially since it's only used once)
2018-10-26 13:53:37 +02:00
Christian Parpart f08ab77249 Yul: Implements empty-var-decl-propagation 2018-10-26 13:13:57 +02:00
chriseth f714b0dd7c Merge pull request #5242 from ethereum/someChecks
Some well-formedness checks for the Yul AST.
2018-10-25 12:44:28 +02:00
chriseth 60f1d52f59 Full suite tests. 2018-10-24 18:02:08 +02:00
chriseth b3911798b3 Redundant assign eliminator. 2018-10-24 13:24:25 +02:00
chriseth 19be6cd818 Some well-formedness checks for the Yul AST. 2018-10-22 15:52:26 +02:00
chriseth c676b009e1 Merge pull request #5267 from ethereum/ssatransform
SSA transform - first step.
2018-10-19 11:10:08 +02:00
chriseth 7dffb0f3ee Merge pull request #5270 from ethereum/inlineFlexible
Make full inliner more flexible.
2018-10-18 19:02:04 +02:00
chriseth 465845b7a7 SSA transform - first step. 2018-10-18 18:56:22 +02:00
chriseth b2725aa913 Make full inliner more flexible. 2018-10-18 14:57:09 +02:00
chriseth 48749146da Fix a bug in CSE where a variable that was already out of scope was used. 2018-10-18 14:55:51 +02:00
chriseth 7609e2871e Merge pull request #5240 from ethereum/limitDispenserSize
[Yul] Limit name length created by dispenser
2018-10-17 22:54:38 +02:00
chriseth c6a6e9ac5d Merge pull request #5232 from ethereum/inlineHeuristic
[Yul] Add simple inlining heuristic
2018-10-17 17:22:46 +02:00
chriseth 732d09cef1 Limit size of generated names and add convenience constructors. 2018-10-17 17:21:55 +02:00
chriseth 16c2a775fd Handle externally supplied variables correctly in disambiguator. 2018-10-17 14:12:11 +02:00
chriseth 5e01d767d0 Prevent externally used functions from being removed. 2018-10-17 14:12:10 +02:00
chriseth 9fb5feed05 Use metrics in the full inliner. 2018-10-17 14:11:20 +02:00
chriseth 2ab6430303 Inline each function separately. 2018-10-16 17:32:21 +02:00