Alex Beregszaszi
fcf884f201
Do not ignore fatal error in AsmParser for inline assembly
2019-02-21 16:18:53 +00:00
chriseth
15d275ed37
Merge pull request #6023 from ethereum/assignment-whitespace-op
...
Add extra token for assembly assignment
2019-02-21 14:43:29 +01:00
Mathias Baumann
f395d5bab4
Add extra token for assembly assignment
...
Adding an extra token for := prevents whitespace between : = being valid
2019-02-21 13:58:21 +01:00
chriseth
947215a901
Take builtin functions into account in the compilability checker.
2019-02-21 12:13:42 +01:00
chriseth
00084a9bd7
Merge pull request #6027 from ethereum/failEnErrorListNonEmpty
...
Make analysis success not only dependent on flag but also on error list.
2019-02-20 15:19:48 +01:00
chriseth
372853b192
Make analysis success not only dependent on flag but also on error list.
2019-02-20 14:57:58 +01:00
Alex Beregszaszi
0f1be75f97
Assert for parserResult in optimize in AssemblyStack
2019-02-20 13:54:24 +00:00
chriseth
b4cd2d6a93
Properly detect name clashes with functions before their definition.
2019-02-18 14:51:05 +01:00
Daniel Kirchner
8ca6715e18
More style checks.
2019-02-14 11:41:20 +01:00
chriseth
b1df990a0f
Merge pull request #5990 from ethereum/provideAccessToAssmeblyAST
...
Provide access to assembly ast
2019-02-13 17:38:22 +01:00
chriseth
c5879589af
Merge pull request #5998 from ethereum/codingStyleCheck
...
More coding style checks
2019-02-13 17:36:34 +01:00
chriseth
1a823f0bf8
Fix tabs/spaces.
2019-02-13 17:05:48 +01:00
chriseth
17ea467e5b
Fix style of "const".
2019-02-13 16:34:53 +01:00
chriseth
3a3ed1c6b5
Fix assertion concerning jumps in strict assembly.
2019-02-13 15:57:14 +01:00
chriseth
a344381d5e
Provide access to AssemblyStack's AST.
2019-02-13 14:19:56 +01:00
chriseth
0bd049c849
Adapet uses of AssemblyStack.
2019-02-13 12:23:07 +01:00
chriseth
d073eb1544
Move AssemblyStack to libyul.
2019-02-13 12:23:07 +01:00
chriseth
02373c2225
Adjust uses of AsmCodeGen.
2019-02-13 11:35:49 +01:00
chriseth
1ff6f2c71c
Move AsmCodeGen.
2019-02-13 11:20:15 +01:00
chriseth
83083d2208
Stack compressor.
2019-02-11 15:48:29 +01:00
chriseth
5a34743d88
Allow optimizer steps to run on FunctionDefinition and group suite.
2019-02-11 15:48:29 +01:00
chriseth
b34e104173
Make dialect a shared pointer.
2019-02-11 15:48:29 +01:00
chriseth
22c8d74a8a
Store all stack errors before they are thrown.
2019-02-04 17:32:05 +01:00
chriseth
77baf6caf7
Compilability checker.
2019-02-04 17:32:05 +01:00
chriseth
4f641e3732
Helper function for analysis.
2019-02-04 17:32:05 +01:00
chriseth
dd5b43741c
No-output Assembly.
2019-02-04 17:32:04 +01:00
chriseth
11969cd760
Add some more explicit moves required in some compiler and boost version combinations.
2019-02-04 15:50:41 +01:00
chriseth
17a1e7aed5
Better error message for out of stack in assembly.
2019-01-30 12:24:10 +01:00
Alex Beregszaszi
ee09d54525
Change FIXMEs into TODOs where appropriate
2019-01-29 00:35:23 +00:00
Alex Beregszaszi
2fc7928697
Merge pull request #5864 from ethereum/tuneOptOrder
...
Some optimizer tuning.
2019-01-28 13:50:09 +00:00
chriseth
12e2187661
Some tuning.
2019-01-24 23:06:01 +01:00
chriseth
1fc98b8133
Fix optimizer suite.
2019-01-24 20:42:32 +01:00
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
7d3727bbf7
Merge pull request #5665 from ethereum/cmakeHeaders
...
Add headers to targets in CMakeLists.txt.
2018-12-17 17:47:38 +01:00
Daniel Kirchner
2353f73c39
Add headers to targets in CMakeLists.txt.
2018-12-17 15:01:02 +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
1d274a8924
Merge pull request #5644 from ethereum/noInlineIntoLarge
...
[Yul] Do not inline into already big functions.
2018-12-13 15:57:49 +01:00
chriseth
6101258248
AsmPrinter functions should be const.
2018-12-13 13:00:59 +01:00
chriseth
60a368244a
Do not inline into already big functions.
2018-12-13 12:12:54 +01:00
chriseth
642c69f935
Merge pull request #5641 from ethereum/supportUnassigned
...
[Yul] Support unassigned variables in the SSA value tracker and the data flow analyzer.
2018-12-13 11:33:45 +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
Alex Beregszaszi
c863cbf80d
Add missing header guards
2018-12-12 15:47:05 +00:00
Daniel Kirchner
a18985800f
Fix compilation for certain combinations of boost and gcc.
2018-12-12 07:51:23 +01:00
chriseth
fb3a0ac1c7
Codegen for object access.
2018-12-11 19:24:44 +01:00
chriseth
8d49e53995
Provide Dialect to EVMCodeTransform.
2018-12-11 19:24:31 +01:00
liangdzou
362648a450
Reuse stack slots in Yul to EVM code generation.
2018-12-10 14:28:56 +01:00
chriseth
52ff3c9455
Merge pull request #5607 from enumatech/fix-makefiles
...
WIP: Fix makefiles to silence linker errors
2018-12-07 10:16:49 +01:00
Lionello Lunesu
c51e2b7f46
Fix makefiles
2018-12-07 08:59:02 +08:00
Daniel Kirchner
1eb60cbb39
Add structural simplifier as optimization step for Yul.
2018-12-06 18:37:35 +01:00
chriseth
4b2a64306a
Merge pull request #5587 from ethereum/yulCodeBuiltins
...
Builtin functions to access Yul objects.
2018-12-06 16:49:52 +01:00
chriseth
3fc118ba21
Analyze and compile sub-objects.
2018-12-06 14:32:04 +01:00
chriseth
f6ed29b88b
Extend abstract assembly to be able to handle sub-objects.
2018-12-06 14:32:04 +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
chriseth
1e6c368bba
Merge pull request #5594 from ethereum/fullInlinerNoHoister
...
[Yul] Relax dependency of FullInliner on FunctionHoister.
2018-12-05 12:25:03 +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
Mathias Baumann
6e5160efa0
Relax assertion about jumps in loose mode
2018-12-05 10:25:59 +01:00
chriseth
8b38cf3ed4
Merge pull request #5586 from ethereum/refactorEVMAssembly
...
Refactor evm assembly
2018-12-04 15:55:53 +01:00
chriseth
c8e201e520
Provide Yul Object builtins.
2018-12-04 15:40:50 +01:00
chriseth
0ec7a0e72c
Move AsmCodeGen.
2018-12-04 15:20:23 +01:00
chriseth
852297fa2f
Builtin functions for yul analysis.
2018-12-04 14:50:00 +01:00
chriseth
1746366bb6
Use builtin functions in the yul parser.
2018-12-04 14:49:16 +01:00
chriseth
8654f8f6d4
Merge pull request #5573 from ethereum/builtins
...
[Yul] Introduce the concept of builtin functions.
2018-12-04 14:11:49 +01:00
Daniel Kirchner
1b8a013d4a
Properly recurse in ForLoopInitRewriter
2018-12-04 13:36:25 +01:00
chriseth
99db4e3ff4
Introduce the concept of builtin functions.
2018-12-04 12:06:33 +01:00
chriseth
d829794737
Improve yul error messages around number of arguments and variables.
2018-12-04 11:37:03 +01:00
chriseth
e5582ffea0
Use YulString also in expectAsmIdentifier.
2018-12-03 17:54:25 +01:00
Christian Parpart
c48a5264be
liblangutil: SourceLocation: adds (shared) pointer to underlying CharStream source, eliminating sourceName
...
Also, adapted affecting code to those changes.
2018-11-30 17:07:12 +01:00
chriseth
e016cb99e6
Yul objects.
2018-11-27 15:59:57 +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
3734f40d31
CMake: Isolate libyul into its own static library
2018-11-23 12:37:37 +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
10e6d2897d
Moving files from libsolidity/inlineasm/*.{cpp,h} to libyul/.
2018-11-23 11:16:52 +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
9c6048b0b8
Merge pull request #5333 from ethereum/joinPerformance
...
[Yul] Use map join algorithm for performance.
2018-11-13 12:15:11 +01:00
Daniel Kirchner
74557ceb0e
Deterministic YulStringRepository using string hashes.
2018-11-12 23:43:16 +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
0f2ba3522f
Reset yul string repository.
2018-11-09 15:40:36 +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
chriseth
e2e4a9fe81
New full inliner.
2018-10-16 17:16:03 +02:00
chriseth
a320eec7d3
New simplifier via broken expressions.
2018-10-16 16:18:39 +02:00
chriseth
76db0d69cf
SSA value tracker.
2018-10-16 16:18:39 +02:00
Christian Parpart
04612936c2
Yul: Introduces a block flattening pass + tests
2018-10-15 18:21:34 +02:00
chriseth
0664772ece
Some renaming leftovers.
2018-10-15 12:51:50 +02:00
Christian Parpart
1304361b9c
Renaming namespace dev::julia to dev::yul.
2018-10-15 11:58:51 +02:00
Christian Parpart
9a4bec7e47
Renaming libjulia to libyul
2018-10-15 11:52:35 +02:00