chriseth
38cbf8d230
Pass "optimize stack allocation" flag down to the stack compressor.
2019-03-20 15:03:27 +01:00
Christian Parpart
82ced641e5
[Yul] Adds another test case for multiple continue statements within a for-loop
2019-03-18 12:43:20 +01:00
chriseth
500843f9c5
Merge pull request #6242 from ethereum/yul-bc-dataflow
...
Yul dataflow analysis for continue/break statements
2019-03-14 16:34:34 +01:00
Christian Parpart
57bcb8ba83
[yul] Ensures DataFlowAnalyzer works fine with break/continue statements just like without.
2019-03-14 16:18:45 +01:00
chriseth
49d914a391
Fix and test yul stack optimization flag for commandline interface.
2019-03-14 15:34:23 +01:00
Christian Parpart
05e2d362c8
[Yul] Adds break/continue statements and some general tests for for-loop syntax.
2019-03-11 15:05:05 +01:00
chriseth
791fde953d
First simplify switch with known constant expression.
2019-03-06 21:32:55 +01:00
chriseth
21115f8050
Fix visitation order bug for structural simplifier.
2019-03-06 19:34:07 +01:00
Mathias Baumann
21322dae29
YulOpt: Remove empty cases
2019-03-06 19:02:23 +01:00
Mathias Baumann
3ce7069766
YulOpt: Remove empty cases
2019-03-06 18:39:44 +01:00
Mathias Baumann
f6e09d6368
YulOpt: Extend StructuralSimplifier to work with all types
2019-03-05 18:39:27 +01:00
chriseth
3f784d6e00
Do not prepend function name to all variables when inlining.
2019-03-04 18:07:00 +01:00
Christian Parpart
609855546e
Yul: Adds optimizer pass to make variable names suffix-canonical.
2019-03-04 17:26:56 +01:00
Mathias Baumann
c686a65876
Yul Optimizer: reduce switches with const arguments
2019-02-28 15:43:10 +01:00
chriseth
477c53a46f
Fix expression simplifying by moving from SSAValueTracker to DataFlowAnalyzer as a base.
2019-02-27 16:14:39 +01:00
chriseth
70bbdd8fac
Merge pull request #3464 from ethereum/iulia_interp
...
Yul interpreter
2019-02-25 15:38:41 +01:00
chriseth
94e2afff81
Rebase update.
2019-02-25 14:30:34 +01:00
chriseth
5eb155b894
Interpreter tests.
2019-02-25 11:58:36 +01:00
chriseth
7f5b335b47
Make EVM version part of EVM dialect.
2019-02-21 21:59:46 +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
968ca88690
Merge pull request #5872 from ethereum/semantic-tests-split
...
Semantic test infrastructure
2019-02-18 18:13:55 +01:00
chriseth
a344381d5e
Provide access to AssemblyStack's AST.
2019-02-13 14:19:56 +01:00
Erik Kundt
190634e1f9
Implements infrastructure for semantic tests.
2019-02-13 13:05:58 +01:00
chriseth
0bd049c849
Adapet uses of AssemblyStack.
2019-02-13 12:23:07 +01:00
chriseth
91d224dfb6
Merge pull request #5966 from ethereum/AnsiColorized
...
Adapts tests/ to use AnsiColorized (the generalized/moved version of FormattedScope, which in turn is removed in this PR)
2019-02-11 16:41:14 +01:00
Christian Parpart
53f9be8a23
Adapts tests/ to use AnsiColorized (the generalized/moved version of FormattedScope, which in turn is removed in this PR)
2019-02-11 16:00:24 +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
12e2187661
Some tuning.
2019-01-24 23:06:01 +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
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
chriseth
b7ef850955
Update tests.
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
9244b8ea5a
More code for optimizer tuning.
2019-01-08 18:07:14 +01:00
chriseth
5b8b016fae
Use the block flattener.
2019-01-08 16:02:14 +01:00
chriseth
884d51c1f2
Merge pull request #5759 from ethereum/anotherBigTest
...
Another ABI test case for the optimizer.
2019-01-08 16:01:41 +01:00
chriseth
2d19903d1a
Another ABI test case for the optimizer.
2019-01-08 15:14:45 +01:00
chriseth
f5b24a38b8
Make function grouper idempotent.
2019-01-08 15:05:09 +01:00
chriseth
6414d63906
Merge pull request #5716 from ethereum/fixDataSizeOffset
...
Fix data size offset and properly provide builtins.
2019-01-08 00:07:42 +01:00
chriseth
40e1283d72
Merge pull request #5713 from ethereum/addAztek
...
[Yul] Add AZTEK code as test.
2019-01-07 17:25:41 +01:00
chriseth
ace601b8f6
Tests.
2019-01-07 17:23:38 +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
b604b87272
Add AZTEK code as test.
2019-01-07 16:23:35 +01:00
chriseth
2e9c70add0
Use rematerializer if variable is unreferenced or value is "cheap".
2019-01-07 14:03:32 +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
chriseth
fb3a0ac1c7
Codegen for object access.
2018-12-11 19:24:44 +01:00
chriseth
b05d33d771
Tests for stack reusing code generator.
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
chriseth
b7cfa499b0
Add tests.
2018-12-06 14:43:14 +01:00
chriseth
0e8841005c
Merge pull request #5554 from ethereum/cp-SourceReferenceFormatter-refactor
...
[2/3] Refactor SourceReferenceFormatter (split-out data extraction & make use of new SourceLocation knowledge)
2018-12-06 14:01:39 +01:00
Christian Parpart
073b03d90c
liblangutil: refactor SourceReferenceFormatter, splitting out retrieval and making use of new SourceLocation's CharStream knowledge
2018-12-06 14:01:01 +01:00
Mathias Baumann
f4e9c70ecc
Tests for SSAValueTracker ignoring function call on rhs
2018-12-05 18:01:41 +01:00
Mathias Baumann
5d31ad2daf
Test for unhandled default values in expression simplifier
2018-12-05 11:43:02 +01:00
chriseth
852297fa2f
Builtin functions for yul analysis.
2018-12-04 14:50:00 +01:00
chriseth
c3fc2da763
Tests for parser for builtins.
2018-12-04 14:49:16 +01:00
chriseth
961026347d
Use dialect option in yul parser tests.
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
7698b0b63f
Do not stop if there is more than one error.
2018-12-04 11:37:03 +01:00
Christian Parpart
435f7b3b72
liblangutil: Scanner: remove superfluous sourceName field (it's in CharStream already)
...
Also, ParserBase::sourceName() was dead code. Eliminating it should
increase test coverage (how sneaky) :-)
2018-11-30 17:07:17 +01:00
Christian Parpart
22eff22492
liblangutil: extends CharStream to know about the respective (file-)name (and adapt codebase to it)
2018-11-29 12:45:27 +01:00
chriseth
105898b81b
Tests.
2018-11-27 15:59:57 +01:00
chriseth
0b474d5299
Merge pull request #5497 from ethereum/langutil-SourceReferenceFormatter
...
Moving SourceReferenceFormatter into langutil namespace.
2018-11-26 12:44:25 +01:00
Lazaridis
56d5dd4668
decouple TestCase class from test/libsolidity
2018-11-25 02:34:59 +02:00
Christian Parpart
aeb66905de
Moving SourceReferenceFormatter into langutil namespace.
2018-11-24 12:33:36 +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
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
2e025cf917
Update tests.
2018-11-13 13:33:33 +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
af65bac737
Remove trailing whitespace.
2018-11-12 09:15:22 +01:00
chriseth
9709dfe046
Merge pull request #5128 from ethereum/breakUnbreak
...
[Yul] Test case that shows that break / unbreak are more or less inverse
2018-11-09 16:07:20 +01:00
chriseth
0f2ba3522f
Reset yul string repository.
2018-11-09 15:40:36 +01:00
chriseth
5ea514213a
Test case that shows that break/unbreak are more or less inverse.
2018-11-09 15:36:52 +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
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
f08ab77249
Yul: Implements empty-var-decl-propagation
2018-10-26 13:13:57 +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
c676b009e1
Merge pull request #5267 from ethereum/ssatransform
...
SSA transform - first step.
2018-10-19 11:10:08 +02:00
chriseth
5c274a9251
Merge pull request #5260 from ethereum/flattenMore
...
Flatten more.
2018-10-19 11:08:46 +02:00
chriseth
0ebe572f7d
Merge pull request #5258 from ethereum/coverage2
...
Add some simplification tests for operations.
2018-10-19 11:04:56 +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
c34fa43d5b
Test case that shows a CSE bug related to scopes.
2018-10-18 14:54:23 +02:00
chriseth
e8a2d57075
Flatten more.
2018-10-18 00:58:15 +02:00
chriseth
bda154440c
Add some simplification tests for operations.
2018-10-18 00:10:39 +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
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
a435a14e13
Test for crash via inlining.
2018-10-16 17:29:20 +02:00
chriseth
e2e4a9fe81
New full inliner.
2018-10-16 17:16:03 +02:00
chriseth
ffe44536fe
Add a "full simplify" test that applies multiple elementary transforms.
2018-10-16 16:18:39 +02:00
chriseth
a320eec7d3
New simplifier via broken expressions.
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