Commit Graph

76 Commits

Author SHA1 Message Date
Daniel Kirchner
29f66b2674 Stabilize SSAReverser. 2019-01-17 21:05:32 +01:00
Daniel Kirchner
fd16585724 Undo second SSA transformation and add more tests. 2019-01-17 20:37:43 +01:00
Daniel Kirchner
6de2d92f20 Add SSAReverser to the yul optimiser. 2019-01-17 20:37:43 +01:00
Christian Parpart
065c3c87af
libyul: changing some AST members from shared_ptr<> to unique_ptr<>
* Some spaces look a little more verbose now, but that shouln't be a problem as it also should raise readability, too.
* This makes some use of return-value-optimizations also.
2019-01-16 14:58:59 +01:00
Daniel Kirchner
81f24f24e6 Add equivalent function combiner as Yul optimizer step. 2019-01-15 17:21:03 +01:00
Daniel Kirchner
4c8f8e9491 Disallow mismatching types in switch cases and detect duplicates by value for number literals. 2019-01-15 16:32:21 +01:00
Daniel Kirchner
5a99623fec Avoid explicit conversion from Block to Statement in CodeSize visit. 2019-01-11 12:52:24 +01:00
chriseth
d9c6773664 Adjust inlining thresholds. 2019-01-09 16:57:33 +01:00
chriseth
edda79eec5 Variables are free with regards to code size. 2019-01-09 16:57:33 +01:00
chriseth
5b8b016fae Use the block flattener. 2019-01-08 16:02:14 +01:00
chriseth
f5b24a38b8 Make function grouper idempotent. 2019-01-08 15:05:09 +01:00
chriseth
5b73c2ae3b Take special functions that require literals into account. 2019-01-07 17:23:38 +01:00
chriseth
9222eff08f Make the dialect available everywhere. 2019-01-07 16:41:03 +01:00
chriseth
2e9c70add0 Use rematerializer if variable is unreferenced or value is "cheap". 2019-01-07 14:03:32 +01:00
Christian Parpart
62fe57479e
make use of C++ = default constructor declarations as well as more non-static member initialization syntax. 2018-12-19 11:26:42 +01:00
chriseth
bf7d71d6b3
Merge pull request #5613 from ethereum/yulStringLiterals
[Yul] Use C++ user-defined literals for creating YulString constants.
2018-12-17 14:07:24 +01:00
chriseth
bc22a25a60 Remove VarDeclPropagator. 2018-12-13 16:51:10 +01:00
chriseth
6c6a53a439 Do not create unassigned variables. 2018-12-13 16:51:10 +01:00
chriseth
11209ec48a Add variable declaration initializer. 2018-12-13 16:49:04 +01:00
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