Commit Graph

323 Commits

Author SHA1 Message Date
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