Christian Parpart
6b23412fae
C++ namespace cleanup (except tests).
2020-01-07 15:51:50 +01:00
chriseth
aab8b9bc36
Fix redundant assignment removal in combination with break / continue.
2019-12-29 15:53:47 +01:00
chriseth
7db88cfedd
Remove yul::Instruction
.
2019-12-19 23:22:19 +01:00
Alex Beregszaszi
65e59ecd06
Rename EWasm/ewasm/eWasm to Ewasm
2019-12-19 11:36:08 +00:00
rodiazet
d867f5339b
[WASM] add i64.clz and i64.store8 to Wasm dialect and EWasm interpreter.
...
dsads
2019-12-18 19:51:27 +01:00
Alex Beregszaszi
7effc94f24
Rename EVMToEWasmTranslator to EVMToEwasmTranslator
2019-12-18 16:57:45 +00:00
Alex Beregszaszi
018960ebb1
Rename EWasmObjectCompiler to WasmObjectCompiler
2019-12-18 15:59:31 +00:00
Alex Beregszaszi
cec45a7df5
Rename EWasmCodeTransform to WasmCodeTransform
2019-12-18 15:59:31 +00:00
Alex Beregszaszi
7d3ccee921
Fix implementation of getCodeSize in Ewasm
2019-12-18 14:58:28 +00:00
rodiazet
7d8c4c24ee
Add arithmetic test cases for most of EVM->Ewasm translator
2019-12-18 13:58:03 +01:00
chriseth
b6fc703a27
Merge remote-tracking branch 'origin/release' into HEAD
2019-12-17 19:47:59 +01:00
chriseth
7b84e141dc
Descend into for loops when determining call graph.
2019-12-17 13:47:51 +01:00
Alex Beregszaszi
1294c0df99
Rename EWasmAST to WasmAST
2019-12-11 12:08:38 +00:00
Alex Beregszaszi
ae7cc58b55
Rename EWasmToText to TextTransform
2019-12-11 12:08:38 +00:00
Alex Beregszaszi
fbf946e493
Add also smoke tests for opcodes not part of Ewasm
2019-12-10 17:00:45 +00:00
Alex Beregszaszi
7f40ca5a8f
Fix extcodecopy() stub in EVMToEWasm
2019-12-10 17:00:45 +00:00
chriseth
42d9a8e962
Merge remote-tracking branch 'origin/develop' into develop_060
2019-12-04 17:01:44 +01:00
chriseth
bbeb093abf
Detect loops in call graph generator.
2019-12-03 21:38:20 +01:00
chriseth
2f11ac3590
Merge remote-tracking branch 'origin/develop' into develop_060
2019-12-03 21:17:15 +01:00
chriseth
19a6f09cc8
Merge commit '4d2f20570' into develop_060
2019-12-03 21:01:31 +01:00
Alex Beregszaszi
7e8f0a17bc
Replace all solAsserts with yulAsserts in libyul
2019-12-03 17:54:34 +01:00
Mathias L. Baumann
a13416f4da
Merge pull request #7882 from ethereum/libyul-assert
...
Actually throw YulAssertion in yulAssert
2019-12-03 17:39:22 +01:00
Alex Beregszaszi
cab00755e8
Actually throw YulAssertion in yulAssert
2019-12-03 16:40:48 +01:00
Alex Beregszaszi
7ace66ad59
Remove last boost/variant include
2019-12-03 14:44:56 +01:00
chriseth
ccfc1840a9
Allow assembly stack to translate its source.
2019-11-28 16:15:15 +01:00
chriseth
f7fc42d8c3
Merge pull request #7826 from ethereum/develop
...
Merge develop into develop_060
2019-11-28 13:37:19 +01:00
chriseth
301215f186
Merge pull request #7461 from sifmelcara/licm
...
[YulOpt] Implement loop-invariant code motion
2019-11-28 12:00:19 +01:00
mingchuan
db60d123d0
[YulOpt] Implement loop-invariant code motion
2019-11-28 11:59:29 +01:00
chriseth
1ebcc757e1
Merge remote-tracking branch 'origin/develop' into develop_060
2019-11-27 19:14:08 +01:00
chriseth
0bb88dabb7
Restrict usage of plain "new".
2019-11-27 17:55:11 +01:00
chriseth
9e9b643b93
Tune the suite.
2019-11-27 11:56:11 +01:00
chriseth
b0db64ff5b
Merge remote-tracking branch 'origin/develop' into develop_060
2019-11-26 16:19:35 +01:00
chriseth
40b4a876eb
Merge pull request #7778 from ethereum/generic_visitor_cpp17
...
Rewrite GenericVisitor
2019-11-26 16:09:38 +01:00
chriseth
6361e55e2c
Merge pull request #7785 from ethereum/exception-cleanup
...
A lot of tiny cleanups to exceptions
2019-11-26 15:55:11 +01:00
Leonardo Alt
2bfa3a7c97
Rewrite GenericVisitor
2019-11-26 15:55:06 +01:00
Alex Beregszaszi
991fbd2956
Replace uses of BOOST_THROW_EXCEPTION with assertThrow
...
Where appropriate.
2019-11-26 13:07:42 +01:00
Gaith Hallak
4a1e85436b
Allow splitting string literals into multiple parts
2019-11-26 14:41:30 +03:00
chriseth
a00f824479
Merge pull request #7773 from ethereum/develop
...
Merge develop into develop_060
2019-11-21 21:49:22 +01:00
chriseth
f2c6e47038
Merge pull request #7755 from ethereum/fixWasmTransform
...
Fix Wasm transform.
2019-11-20 18:27:21 +01:00
Leonardo Alt
72eff30778
Fix develop 060 merge
2019-11-20 13:49:40 +01:00
Leonardo Alt
389da5228e
Merge remote-tracking branch 'origin/develop' into merge_develop_060
2019-11-20 12:27:40 +01:00
chriseth
5deaac0849
Merge pull request #7740 from ethereum/istanbul
...
Enable support for Istanbul
2019-11-20 10:49:27 +01:00
chriseth
d358af6515
Fix Wasm transform.
2019-11-20 00:02:02 +01:00
Leonardo Alt
be849b3c47
Replace boost::variant by std::variant in libyul
2019-11-19 17:23:18 +01:00
Alex Beregszaszi
840aba8929
Add new gas price for deployed bytecode (EIP2028)
2019-11-19 17:09:18 +01:00
Erik K
94272d44aa
Merge pull request #7745 from ethereum/develop
...
Merge develop into develop_060
2019-11-19 15:30:31 +01:00
chriseth
e70ef0b820
Simplify patterns.
2019-11-15 00:34:01 +01:00
djudjuu
e437443645
Inline assembly to AST json export
2019-11-13 12:13:22 +01:00
Daniel Kirchner
8148619d5b
Merge branch 'develop' into develop_060
2019-11-12 10:32:41 +01:00
Mathias Baumann
e35a23bbcc
Add `switch (..)
to style checker
2019-11-11 17:44:21 +01:00
chriseth
2e5a42836c
Merge pull request #7681 from ethereum/develop
...
Merge develop into develop_060
2019-11-11 16:42:03 +01:00
Christian Parpart
f15d47f165
Yul: Remove obsoleted FunctionalInstruction.
2019-11-11 16:04:39 +01:00
chriseth
fa02667075
Generalize instructions.
2019-11-07 14:33:34 +01:00
chriseth
c0b27d0bc1
Merge pull request #7648 from ethereum/inlineAssemblyShadowing
...
Error on shadowing and invalid names in inline assembly
2019-11-07 13:31:09 +01:00
Daniel Kirchner
0556f64722
Analyze inline assembly variable declarations for invalid or shadowing names.
2019-11-07 13:04:37 +01:00
chriseth
64cad825e3
Fix build by adding return.
2019-11-06 22:16:06 +01:00
chriseth
21e65076b3
Merge pull request #7650 from ethereum/develop
...
Merge develop into develop_060
2019-11-06 21:56:55 +01:00
chriseth
e275bb88f0
Fix windows build.
2019-11-06 02:06:19 +01:00
chriseth
e79a32e9d5
Wasm to binary assembly stack.
2019-11-05 20:02:42 +01:00
chriseth
081845d775
EWasm binary transform.
2019-11-05 19:58:55 +01:00
chriseth
46ac16d25c
Merge remote-tracking branch 'origin/develop' into develop_060
2019-11-04 19:09:11 +01:00
chriseth
62aa20137c
Merge pull request #7600 from ethereum/TypeConversionOnTheFly
...
[WASM] Inject type conversions on the fly if needed.
2019-11-04 16:20:57 +01:00
Christian Parpart
cf82bc04d2
Fix compilation error on CI (due to "possibly uninitialized field member").
2019-11-04 13:45:26 +01:00
chriseth
a964a2026b
Merge pull request #7602 from ethereum/fixWasmTypes
...
Fix types of wasm builtins.
2019-11-04 13:04:25 +01:00
chriseth
8337de5189
[WASM] Inject type conversions on the fly if needed.
2019-11-01 15:44:39 +01:00
chriseth
8780f2d595
Merge pull request #7604 from ethereum/datasizeOffsetSingle
...
[WASM] datasize and dataoffset only return a single value.
2019-11-01 15:39:50 +01:00
chriseth
02d5b7c18a
Run literal rematerializer before for loop condition out of body.
2019-11-01 14:01:56 +01:00
chriseth
1cc5a03e42
Fix bug in unsimplifier.
2019-11-01 14:01:56 +01:00
chriseth
61a2d44f38
Conditional unsimplifier
2019-11-01 14:01:56 +01:00
chriseth
19ccdfb0b3
No into body.
2019-11-01 14:01:56 +01:00
chriseth
5d6e983be3
Conditional simplifier.
2019-11-01 14:01:56 +01:00
chriseth
e1438b72ad
Fix types of wasm builtins.
2019-11-01 13:54:01 +01:00
chriseth
7f1593baa0
[WASM] datasize and dataoffset only return a single value.
2019-11-01 13:52:49 +01:00
Christian Parpart
112e63fe15
libyul: AST cleanup, eliminating dead Instruction AST type.
2019-11-01 12:32:25 +01:00
chriseth
21227d748c
Update polyfill and set name.
2019-10-31 18:51:19 +01:00
chriseth
42b8c98567
Merge remote-tracking branch 'origin/develop' into develop_060
2019-10-31 18:03:25 +01:00
chriseth
04c62e2dc3
Fix local and globals wast functions.
2019-10-31 17:41:31 +01:00
chriseth
d605f89167
Merge pull request #7548 from ethereum/fixWasmLayout
...
Wasm: Fix layout for text conversion.
2019-10-29 17:52:34 +01:00
chriseth
f98925d8b6
Remove `leave
` at end of function.
2019-10-29 14:32:16 +01:00
chriseth
ceb8ee9124
[Yul] leave statement.
2019-10-29 14:32:16 +01:00
chriseth
edf1e83fda
Merge remote-tracking branch 'origin/develop' into develop_060
2019-10-28 15:21:49 +01:00
chriseth
607bf24afe
Merge pull request #7386 from ethereum/060-strict-inline-assembly
...
Defaulting to strict inline assembly (instead of loose)
2019-10-28 12:48:58 +01:00
Christian Parpart
df729b3084
Make use of C++17 std::optional<> instead of boost::optional<>.
2019-10-28 11:39:30 +01:00
Christian Parpart
f45c3124f8
libyul: Small code improvements.
2019-10-25 15:39:44 +02:00
Christian Parpart
2890e4888f
AsmAnalyzer: Eliminate dead code.
2019-10-25 15:39:16 +02:00
Christian Parpart
ee5826b261
AsmAnalyzer: Improve warnOnInstructions(...) implementation.
2019-10-25 15:01:27 +02:00
Christian Parpart
2390b1bfd4
AsmParser: Fix error handling in function call parsing.
2019-10-25 15:01:27 +02:00
Christian Parpart
7fe0f58445
AsmAnalyzer: Only perform further analysis when still in success state (to avoid false positives)
2019-10-25 15:01:27 +02:00
Christian Parpart
a6e34bd441
Assembly: Revive warning on not-yet-available EVM instructions in (strict) inline assembly.
2019-10-25 15:01:26 +02:00
Christian Parpart
044eb2d161
Assembly: Finally removing AsmFlavour::Loose
2019-10-25 15:01:26 +02:00
Christian Parpart
3c1d12b16c
Assembly: Remove errorTypeForLoose property from AsmAnalyzer.
2019-10-25 15:01:26 +02:00
Christian Parpart
6659720776
Assembly: Remove checkLooseFeature(...) from AsmAnalyzer.
2019-10-25 15:01:26 +02:00
Christian Parpart
3df5dbbca4
Assembly: Remove some explicit checks for Loose Assembly
2019-10-25 15:01:26 +02:00
Christian Parpart
d659dbd49c
Assembly: Defaulting Dialect's flavor to Strict
2019-10-25 15:01:26 +02:00
Christian Parpart
dc2adb3d9d
Assembly: Removing EVMDialect::looseAssemblyForEVM().
2019-10-25 15:01:26 +02:00
Christian Parpart
fdbbf75e78
Assembly: Removing some more strict-assembly syntax from parser.
2019-10-25 15:01:26 +02:00
Christian Parpart
e23998fc6e
Assembly: Remove Label instruction.
2019-10-25 15:01:25 +02:00
Christian Parpart
5e8d348f66
Assembly: Remove StackAssignment instruction.
2019-10-25 15:01:25 +02:00
chriseth
f399d8415f
Fix layout for text conversion.
2019-10-23 16:43:29 +02:00
chriseth
f8ade0122a
Remove label from expression and add br_if.
2019-10-17 13:15:18 +02:00
chriseth
0657aff937
Remove continue from wasm.
2019-10-17 13:15:17 +02:00
chriseth
45705b0e29
Debug optimizer steps.
2019-10-16 14:06:18 +02:00
chriseth
9ce1ca2340
Refactor Optimiser Steps Interface.
2019-09-24 14:52:01 +02:00
mingchuan
520a3ccfff
[YulOpt] declare SSA var when control flow joins
2019-09-17 13:22:02 +02:00
chriseth
7a79742f3d
Out of body again.
2019-09-17 12:30:15 +02:00
chriseth
2d601a4f23
Merge pull request #7414 from ethereum/refactorSSA
...
Refactor SSA transform.
2019-09-13 17:55:39 +02:00
chriseth
20bada4c60
Refactor SSA transform.
2019-09-12 20:07:39 +02:00
Daniel Kirchner
f86c5da202
Fix SSA reverser in special case of declaration followed by self-assignment.
2019-09-12 18:17:13 +02:00
chriseth
4f80117eef
Use builtin iszero for for loop condition rewriting.
2019-09-12 10:26:16 +02:00
chriseth
fcfe829534
Introduce LiteralRematerializer and thus simplify StructuralSimplifier.
2019-09-11 19:50:24 +02:00
Dimitry
fd3ae0b24a
add chainid and selfbalance to lllc
2019-09-09 23:35:36 +03:00
Bhargava Shastry
09fa31ccc5
yul: Add new optimizer rules for create and create2 builtins
2019-09-09 17:06:56 +02:00
chriseth
a8e8eaebcd
Fix load resolver and properly take side-effects of user-defined
...
functions into account.
2019-09-04 19:16:54 +02:00
chriseth
edbec012ae
Activate load resolver.
2019-09-04 19:16:54 +02:00
chriseth
127bcfc69d
Take user function side-effects into account for unused pruner.
2019-09-02 17:41:51 +02:00
chriseth
1c5845e3f2
Side-effects of user-defined functions.
2019-09-02 17:41:51 +02:00
chriseth
a2a06d0318
Side effects propagator.
2019-08-15 16:30:05 +02:00
chriseth
bb4e7de38c
Merge pull request #7234 from ethereum/extractSideEffects
...
[Yul] Extract side-effects into their own struct.
2019-08-14 16:00:17 +02:00
chriseth
7d30fbdef0
Extract side effects into their own struct.
2019-08-14 15:06:10 +02:00
Bhargava Shastry
ddc3ce0eae
Avoid aggregate initialization of EWasmToText class
2019-08-14 13:40:46 +02:00
chriseth
e396dc7246
Properly set storage and memory after erasing potentially destroyed keys
2019-08-13 18:43:15 +02:00
chriseth
823f06625a
Merge pull request #7230 from ethereum/callgraph_generator
...
Callgraph generator.
2019-08-13 18:04:56 +02:00
chriseth
57125de9ef
Remove ContainsMSize from side-effect-collector.
2019-08-13 13:34:33 +02:00
mingchuan
53af4e082e
Callgraph generator.
2019-08-13 12:49:32 +02:00
mingchuan
46387eaea2
[Yul] ExpressionInliner: avoid duplicating high cost expressions
2019-08-05 11:48:32 +02:00
dm4
4dc368db3a
Fix typo in Yul optimizer
2019-07-22 16:25:47 +08:00
chriseth
15cba9163e
Merge pull request #7106 from ethereum/fixMSizeOpt
...
Do not overwrite allowMSizeOptimization
2019-07-17 18:17:40 +02:00
chriseth
35ca6ef5ed
Merge pull request #7079 from ethereum/moreWorkOnEWasmExternals
...
Add eWasm externals.
2019-07-16 14:51:43 +02:00
chriseth
a0a0a34a21
Do not overwrite allowMSizeOptimization
2019-07-16 10:13:18 +02:00
chriseth
6c31a5f3dd
Improve formatting.
2019-07-11 17:37:23 +02:00
chriseth
e3433aa4eb
Add eWasm externals.
2019-07-11 17:37:23 +02:00
chriseth
869d69d293
Supply full object to stack compressor and Optimizer Suite.
2019-07-10 18:49:42 +02:00
chriseth
2a5280faa0
Check availability of data objects already in analysis phase.
2019-07-10 18:49:42 +02:00
Christian Parpart
7ba9537ae1
yul::reindent() to reindent with spaces instead of tabs (width: 4)
2019-07-08 11:43:11 +02:00
chriseth
4976b3ec67
More work on eWasm polyfill.
2019-07-01 13:05:20 +02:00
chriseth
d9db193249
Provide meta-information about eWasm builtins.
2019-07-01 13:01:18 +02:00
chriseth
e2bfb1a663
Translation of switch statement for wasm backend.
2019-06-27 13:02:35 +02:00
chriseth
8cd197e572
Support "datasize" and "dataoffset" with literals in eWasm.
2019-06-25 19:07:38 +02:00
chriseth
67f11104c1
EVM to eWasm translator.
2019-06-25 19:06:18 +02:00
chriseth
a3e816e198
Merge pull request #6807 from ethereum/storageKnowledge
...
Knowledge about storage and memory.
2019-06-24 14:09:21 +02:00
Christian Parpart
0fd1db533e
yul: adds reindent() function to reindent yul source code and makes use of it in IRGenerator.
...
This function does count curly and round braces and reindents
accordingly the beginning of each line.
It does consider line-comments (// and ///) but not multiline comments (/* ... */).
2019-06-24 12:53:50 +02:00
chriseth
2b979cba38
Also optimize memory.
2019-06-20 18:43:37 +02:00
chriseth
8572600401
Implement knowledge base.
2019-06-20 18:43:37 +02:00
chriseth
1f9d11c644
Knowledge about storage.
2019-06-20 18:43:37 +02:00
chriseth
ecab46c707
Finish word size transform.
2019-06-20 10:42:56 +02:00
chriseth
d4a6844e64
Merge pull request #6970 from ethereum/ewasmBoilerplate
...
Some eWasm boilerplate code.
2019-06-19 19:12:48 +02:00
chriseth
d9d1c4a312
Merge pull request #6967 from ethereum/nameDisplacer
...
[Yul] Name displacer.
2019-06-19 18:56:54 +02:00
chriseth
b704abdd75
Some eWasm boilerplate code.
2019-06-19 18:21:58 +02:00
chriseth
8edf9e4baf
Merge pull request #6666 from vedant1811/issue-5405
...
Group function definitions
2019-06-19 18:03:40 +02:00
chriseth
d7b366ff46
Name displacer.
2019-06-19 14:55:38 +02:00
chriseth
5675b742ec
Merge pull request #6960 from ethereum/fixAsmParser
...
Asm Parser: Properly consider tokens when checking for clashes with builtins.
2019-06-19 10:57:46 +02:00
chriseth
cc5045a56e
[Yul] Run optimizer on all dialects.
2019-06-19 10:01:16 +02:00
Vedant Agarwala
5d6cbd97df
[Yul] Directly jump over a series of function definitions
...
Implement a AbstractAssembly::setStackHeight function
Update the tests
Update Changelog
2019-06-19 12:40:11 +08:00
chriseth
211cd2a0b3
Fix Asm parser.
2019-06-18 18:54:34 +02:00
chriseth
aed979604c
Fix unused pruner.
2019-06-18 17:40:18 +02:00
chriseth
6cb6fe35ef
Make Yul optimizer not fail for wasm.
2019-06-17 18:42:47 +02:00
Daniel Kirchner
6368cd4c82
AsmParser: disallow trailing commas in function call arguments.
2019-06-06 13:16:27 +02:00
Christian Parpart
b80cc42a7c
yul: AsmPrinter fix when appending type name but no type-name is available.
2019-06-05 11:57:16 +02:00
chriseth
c9e2d388b5
Merge pull request #6848 from ethereum/invertibleRelation
...
Implement references using InvertibleRelation as data structure.
2019-05-29 13:34:10 +02:00
chriseth
a3f721bbcc
Merge pull request #6583 from ethereum/reset_yulstringrepo
...
Reset YulStringRepository regularly
2019-05-28 14:20:53 +02:00
chriseth
2276b567b1
Merge pull request #6840 from ethereum/discoverMSize
...
Only remove msize-modifying instructions if msize is not used.
2019-05-28 13:16:55 +02:00
Bhargava Shastry
dbae0fa939
Reset Yul string repository before each compilation.
2019-05-28 13:12:39 +02:00
chriseth
d7b5ea6761
Allow msize optimization only if it is not present.
2019-05-28 12:54:32 +02:00
chriseth
afe887adc1
Split MovableChecker and introduce SideEffectsUpToMSize.
2019-05-28 12:54:32 +02:00
chriseth
cee1340113
Add mini-interpreter to check representation.
2019-05-28 11:35:07 +02:00
chriseth
1c16124a09
Constant optimiser for Yul.
2019-05-28 11:35:07 +02:00
chriseth
4407af53b5
Gas meter for Yul expressions.
2019-05-28 11:34:47 +02:00
chriseth
4061ad0a7b
Implement references using InvertibleRelation as data structure.
2019-05-27 22:55:59 +02:00
chriseth
e5902c58a4
Merge pull request #6777 from sifmelcara/loop-cond-rewriter
...
[YulOpt] Implement ForLoopConditionIntoBody
2019-05-23 12:51:51 +02:00
chriseth
8569c2bba7
Merge pull request #6819 from ethereum/noRecursiveRematCompressor
...
Do not rematerialize recursively.
2019-05-23 12:49:23 +02:00
chriseth
0f146ce55a
Do not rematerialize recursively.
2019-05-23 12:03:39 +02:00
chriseth
97fa21841d
Use different way to fall back to FunctionalInstruction for loose assembly.
2019-05-23 11:30:12 +02:00
chriseth
9a00729ce7
Provide dialect to Parser and InlineAssembly AST nodes.
2019-05-23 00:24:58 +02:00
chriseth
fb2b3bb2b9
Reduce misleading stack height error message.
2019-05-23 00:24:58 +02:00
chriseth
1e3878121a
Do not inline recursive functions.
2019-05-22 18:15:21 +02:00
mingchuan
a86b00e8d0
[YulOpt] Implement ForLoopConditionIntoBody
2019-05-22 21:32:18 +08:00
chriseth
1dc15d5864
Modify parser and optimizer.
2019-05-20 17:32:56 +02:00
chriseth
46d9df7574
Add EVM opcodes as builtins.
2019-05-20 16:46:31 +02:00
chriseth
003c170989
Add EVM instructions as builtin functions.
2019-05-20 16:46:31 +02:00
chriseth
8daa281d3d
Merge pull request #6776 from ethereum/equivalentFunctionHashes
...
Use block hashes in EquivalentFunctionDetector.
2019-05-20 14:35:39 +02:00
chriseth
0731abd3f6
Merge pull request #6782 from ethereum/makeVectorEWasmCodeTransform
...
Use make_vector in EWasmCodeTransform.
2019-05-20 13:07:56 +02:00
Daniel Kirchner
39670abe4d
Use make_vector in EWasmCodeTransform.
2019-05-17 14:13:43 +02:00
chriseth
4f3b7b232b
Merge pull request #6774 from ethereum/dialectRefactor
...
Dialect refactor
2019-05-17 14:00:09 +02:00
chriseth
4bdb981224
Make dialect const& and allocate single instances statically.
2019-05-17 12:54:24 +02:00
Daniel Kirchner
05c210772a
Make use of make_vector where possible.
2019-05-17 10:08:53 +02:00
Daniel Kirchner
3c66a56e60
Use block hashes in EquivalentFunctionDetector.
2019-05-17 08:39:42 +02:00
chriseth
570db164c9
Make Dialect const.
2019-05-16 21:51:54 +02:00
chriseth
9a387380b3
Move generation of builtin functions to helper.
2019-05-16 21:51:54 +02:00
chriseth
7de150924c
Extract subIDs from Dialect to allow it being const.
2019-05-16 21:51:54 +02:00
chriseth
aa24e12054
Remove side-effect-free expressions, and not only movable expressions.
2019-05-16 12:30:05 +02:00
chriseth
e8a88b13e4
Introduce side-effect-free as relaxed version of movable.
2019-05-16 12:30:05 +02:00
Daniel Kirchner
a10501bb7d
Merge pull request #6725 from AndreyBronin/develop
...
GCC 9.1 build fix. error: redundant move in return statement
2019-05-15 11:37:20 +02:00
Andrey Bronin
4eb37fe631
fix warning in GCC 9.1: redundant move in return statement
2019-05-14 17:44:28 +03:00
chriseth
439a225cee
Simplify single-run for loops to if statements.
2019-05-13 18:58:36 +02:00
chriseth
99e96c2d66
Refactor termination detection.
2019-05-13 18:58:36 +02:00
chriseth
d9831c8b96
Split structural simplifier.
2019-05-13 10:26:57 +02:00
chriseth
3f55b52a88
Unify suffixes.
2019-05-09 17:07:18 +02:00
chriseth
eaee4412da
Implement word size transform for if.
2019-05-09 16:55:39 +02:00
chriseth
0532a8cef2
Format short blocks and loops on a single line.
2019-05-08 13:28:00 +02:00
chriseth
7ab8cc60c9
Merge pull request #6556 from ethereum/wasmCodeTransform
...
Prototype for Wasm code transform
2019-05-07 17:48:48 +02:00
mingchuan
f7ccdb6447
Implement WordSizeTransform
...
This transformation turns every u256 variable into four u64 variable.
Purpose is to transpile EVMDialect yul to WasmDialect yul.
2019-05-03 01:51:56 +08:00
chriseth
01d1d08fea
Implement switch.
2019-05-02 18:39:54 +02:00
chriseth
c3705f268c
Add global variables and support multi-return and multi-assignment.
2019-05-02 18:37:13 +02:00
chriseth
61e36cbfaa
Activate ewasm dialect in commandline interface.
2019-05-02 18:36:48 +02:00
chriseth
f6c6871bce
EWasm to text transformation.
2019-05-02 18:36:47 +02:00
chriseth
ec27f484a1
Prototype for Wasm code transform into in-memory representation.
2019-05-02 18:33:59 +02:00
chriseth
d763e09f07
Merge pull request #6547 from ethereum/wasmPrototype
...
[Yul] Wasm dialect.
2019-04-29 10:11:14 +02:00
chriseth
578d618065
Merge pull request #6594 from ethereum/adjustCodeMetric
...
Increase code cost for branching statements.
2019-04-29 09:48:59 +02:00
chriseth
ec0b78595d
[Yul] Wasm dialect.
2019-04-25 17:27:17 +02:00
chriseth
cdf60c3be8
Merge pull request #6593 from ethereum/catchFatalErrorsInAnalysis
...
[Yul] Catch fatal errors in analysis.
2019-04-25 17:08:46 +02:00
chriseth
bf104f718f
Increase code cost for branching statements.
2019-04-25 17:08:11 +02:00
chriseth
f9ec1231b6
Support period as part of identifiers for Yul and Inline Assembly.
2019-04-25 16:48:16 +02:00
chriseth
d5c54e9107
[Yul] Catch fatal errors in analysis.
2019-04-25 11:34:56 +02:00
chriseth
b6bb3ae482
Merge pull request #6555 from sifmelcara/break-for-loop
...
[Yul] Disallow function definitions inside for loop init blocks
2019-04-25 11:20:44 +02:00
chriseth
f26cdea6ca
Disallow Yul function definitions inside for loop init blocks.
2019-04-25 10:32:00 +02:00
chriseth
6292adbde6
Merge pull request #6580 from ethereum/doNotGenerateInstructionsAsNmes
...
Prevent instructions to be generated as names.
2019-04-24 22:07:05 +02:00
chriseth
0af8d758a5
Prevent instructions to be generated as names.
2019-04-24 14:35:21 +02:00
mingchuan
5d93c492fe
[Yul] More accurate error messages for break/continue
2019-04-23 10:15:19 +02:00
chriseth
aad4373da4
Disable redundent assign eliminator for deeply nested loops.
2019-04-23 09:50:25 +02:00
chriseth
b02fbc5d02
Merge pull request #6503 from ethereum/inlineAsm-yul
...
Inline asm yul
2019-04-18 17:15:09 +02:00
Mathias Baumann
3d061c83d7
IR: Generate inline asm blocks
2019-04-18 16:49:19 +02:00
dm4
b2c812c794
[libyul] fix typo
2019-04-18 19:07:06 +08:00
hydai
d5b65fbf5b
[Yul] Output an error of a switch case which contains string literals longer than 32 chars
2019-04-17 22:17:18 +08:00
fnatic
5b6ed7a97c
Removing scope rules for pre block in 'For Loops'
2019-04-17 05:58:40 +05:30
chriseth
fb06451f45
Add assertion that DeadCodeEliminator needs ForLoopInitRewriter.
2019-04-15 23:26:56 +02:00
mingchuan
d49733dfc3
Fix variable decl scope issue in DeadCodeEliminator
...
FoorLoopInitRewriter needs to be run before DeadCodeEliminator.
2019-04-10 19:00:29 +08:00
chriseth
0d2ae84081
Use move semantics.
2019-04-05 13:41:39 +02:00
chriseth
054c16aa05
[Yul] Fix registration of functions in scopes.
2019-04-05 13:41:38 +02:00
chriseth
d20b3c9f9f
Function grouper is a requirement for the VarNameCleaner.
2019-04-05 13:41:38 +02:00
chriseth
887112b1b0
Fix SSA for multi-assignments.
2019-04-04 12:06:04 +02:00
Mathias Baumann
e20acf5d0a
Yul Optimizer: Remove dead code
2019-04-01 17:16:04 +02:00
chriseth
3264e9abf0
Make optimiser settings available to assembly stack.
2019-03-28 18:24:13 +01:00
chriseth
e82dcd1f91
Fix namespace.
2019-03-28 14:55:50 +01:00
chriseth
2b0c653f57
Merge pull request #6241 from ethereum/yul-bc-codegen
...
Yul codegen for break & continue statements
2019-03-28 14:48:50 +01:00
chriseth
529aca5cbd
Merge pull request #6407 from ethereum/changeNamespace
...
Remove "using namespace" from header and move Instruction to dev::eth.
2019-03-28 14:32:07 +01:00
Christian Parpart
b8c6274179
[yul] Implements EVM codegen for break/continue plus respective tests & ChangeLog entry.
2019-03-28 14:09:25 +01:00
chriseth
2308904f68
Remove "using namespace" from header and move Instruction to dev::eth.
2019-03-28 13:48:11 +01:00
chriseth
6d8e84c93e
Merge pull request #6315 from ethereum/yul-for-continue-tests
...
[Yul] RedundantAssignEliminator adoptions for continue/break AST nodes
2019-03-28 12:18:02 +01:00
chriseth
91f96c299e
More logic about control flow with continue and about finalize. Remove BlockScope.
2019-03-27 22:16:31 +01:00
Christian Parpart
a1ec49409d
Yul] RedundantAssignEliminator: Implements break/continue handling within ForLoop.
2019-03-26 17:36:43 +01:00
Alex Beregszaszi
c26ffa737e
Use move semantics on StackToDeepError
2019-03-26 16:15:16 +00:00
chriseth
caddce6ef0
Detect duplicate cases based on integer value of case label.
2019-03-25 12:38:22 +01:00
chriseth
8514c0bc60
Provide max iterations for stack compressor as parameter.
2019-03-20 15:07:05 +01:00
chriseth
aa9a2935ac
Properly determine whether a variable can be eliminated or not.
2019-03-20 15:07:05 +01:00
chriseth
38cbf8d230
Pass "optimize stack allocation" flag down to the stack compressor.
2019-03-20 15:03:27 +01:00
chriseth
93027c40b6
Merge pull request #6322 from ethereum/asm-datasize-exception-fix
...
Improve exception information in Yul function datasize(name) and dataoffset(name).
2019-03-20 10:50:49 +01:00
Alex Beregszaszi
5245a66d91
Merge pull request #6318 from ethereum/signal-failure-and-such
...
Allow simplification patterns to signal failure
2019-03-20 03:38:51 +00:00
Christian Parpart
7f7f44dd63
Improve exception information in Yul function datasize(name) and dataoffset(name).
...
Makes sure we properly throw a detailed exception instead of an out_of_range from std::map.
2019-03-19 17:17:32 +01:00
Alex Beregszaszi
f95388011b
Allow simplification patterns to signal failure
2019-03-19 15:51:52 +01:00
Christian Parpart
89f1dbfbb6
[Yul] Refactors RedundantAssignEliminator for future changes wrt. break/continue statements.
2019-03-19 12:24:45 +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
chriseth
6d1ed93247
Use stack optimizations.
2019-03-14 15:34:23 +01:00
chriseth
62d8080a19
Update optimiser readme.
2019-03-12 22:02:09 +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
be52aa3181
YulOpt: Move if-branches into functions
2019-03-06 19:01:05 +01:00
Mathias Baumann
3ce7069766
YulOpt: Remove empty cases
2019-03-06 18:39:44 +01:00
Mathias Baumann
433175b19e
YulOpt: Add comment about optimization
2019-03-06 18:39:44 +01:00
Mathias Baumann
db3bea7b56
Use reference for so we have to type less
2019-03-06 18:39:44 +01:00
chriseth
831353c590
Merge pull request #6172 from ethereum/runYulOptAsLongAsHelpful
...
[Yul] Run yul optimizer until it has no effect anymore.
2019-03-06 11:41:22 +01:00
chriseth
f35694f655
Run yul optimizer until it has no effect anymore.
2019-03-05 20:30:13 +01:00
Mathias Baumann
f6e09d6368
YulOpt: Extend StructuralSimplifier to work with all types
2019-03-05 18:39:27 +01:00
Mathias Baumann
a52b50d770
libyul: Change assertThrow() to yulAssert()
2019-03-05 18:39:27 +01:00
Mathias Baumann
921d52bfcd
Move Literal to u256 conversions to extra functions
...
That way we can reuse them at different places
2019-03-05 18:39:27 +01:00
chriseth
d0ab5454f8
Merge pull request #6171 from ethereum/ignorePrefixWhileInlining
...
Do not prepend function name to all variables when inlining.
2019-03-05 11:36:53 +01:00
Alex Beregszaszi
c64d42e6f5
Use currentToken()/advance() helpers from ParserBase consistently in AsmParser
2019-03-04 22:56:36 +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
Alex Beregszaszi
9fc7706537
Change unreachable parser error to assertion in AsmParser
2019-03-04 15:08:46 +01:00
chriseth
8f5e12c192
Make unavailable opcodes errors.
2019-02-28 22:20:01 +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
9b7d793407
Fix windows build.
2019-02-26 19:43:24 +01:00
Alex Beregszaszi
cb7b053a4a
Consider extcodehash as part of Constantinople
2019-02-26 12:40:31 +00:00
Alex Beregszaszi
5fc8e29fff
More granular error reporting in warnOnInstruction in AsmAnalysis
2019-02-26 12:39:15 +00:00
chriseth
62e650dc42
Remove cpp files without symbols.
2019-02-25 17:23:11 +01:00
Leonardo Alt
2405b2151a
EVMVersion in langutil namespace instead of solidity
2019-02-25 15:29:57 +01:00
chriseth
8aeebf7fcd
Merge pull request #6071 from ethereum/moveEVMVersionToEVMDialect
...
Make EVM version part of EVM dialect.
2019-02-25 11:56:53 +01:00
chriseth
7f5b335b47
Make EVM version part of EVM dialect.
2019-02-21 21:59:46 +01:00
chriseth
91fb2d094d
Clear state when entering new function.
2019-02-21 20:04:20 +01:00
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