Commit Graph

749 Commits

Author SHA1 Message Date
Alex Beregszaszi
1e2bfbd6b2 Enable the -Wextra-semi warning 2020-12-04 17:21:19 +01:00
Daniel Kirchner
96a50b52e2 Add storage load/store functions to Yul dialect. 2020-12-03 19:10:05 +01:00
chriseth
d56a7bb89e
Merge pull request #10489 from ethereum/develop
Merge develop into breaking.
2020-12-03 18:11:12 +01:00
chriseth
e04cc80438
Merge pull request #9555 from ethereum/yul-parser-refactor
Yul parser refactor
2020-12-03 18:07:31 +01:00
chriseth
27e44b85e3
Merge pull request #10419 from ethereum/bug-namesimplifier
Fix a bug in NameSimplifier.
2020-12-03 17:52:40 +01:00
chriseth
5071709b25 Remove FunctionCall from ElementaryOperation. 2020-12-03 17:47:47 +01:00
Alex Beregszaszi
61ed1f1986 cleanup 2020-12-03 17:15:45 +01:00
Alex Beregszaszi
6c0a3bd043 Ensure that builtins must be executed 2020-12-03 17:15:44 +01:00
Alex Beregszaszi
e2a756a705 Remove dead code 2020-12-03 17:15:44 +01:00
Alex Beregszaszi
baa7251f1d More clean up 2020-12-03 17:14:49 +01:00
Alex Beregszaszi
75e0057388 Rename parseElementaryOperation to parseLiteralOrIdentifier 2020-12-03 17:14:49 +01:00
Alex Beregszaszi
3da2b67b67 simplify parser 2020-12-03 17:14:49 +01:00
hrkrshnn
3efac3eef0 NameSimplifier is removed from steps available to users. 2020-12-02 13:48:01 +01:00
hrkrshnn
5a15a4a6bd Fix a bug in NameSimplifier.
A new name created by NameSimplifier could also be created by NameDispenser, since the knowledge of
the new name was not stored in NameSimplifier.
2020-12-02 13:48:01 +01:00
chriseth
9a5902f9d7 Merge remote-tracking branch 'origin/develop' into breaking 2020-12-02 12:28:02 +01:00
chriseth
e10712c173
Merge pull request #10454 from ethereum/ewasm-cleanup
[ewasm] Clean up some builtins and fix text representation of `select`
2020-12-01 17:34:48 +01:00
chriseth
8279d90ba2
Merge pull request #10403 from ethereum/rename-asmdata
Rename AsmData* to AST*
2020-12-01 14:33:11 +01:00
Alex Beregszaszi
04cf4867fe [ewasm] Clean up opcodes/builtins in the binary encoder
Also make sure that `i32.drop/i64.drop` won't silently drop its arguments, as they may have side-effects.
2020-12-01 12:50:54 +00:00
Alex Beregszaszi
a29a7ad680 [ewasm] Properly encode i32/i64.select in the text format 2020-12-01 11:22:38 +00:00
chriseth
6de7eaba95 Merge remote-tracking branch 'origin/develop' into breaking 2020-12-01 10:50:13 +01:00
hrkrshnn
cf6fe5a777 NameDispenser: Added three public functions.
The private function `illegalName` was converted into a public function.

A new public getter function `usedNames()` returns a reference to `m_usedNames`.

A public function reset that would change all `m_usedNames` to *only* the names that are used in the
AST. Also resets the counter. This will be used before the final NameSimplifier step in the
optimization phase.

The first two functions were added so that `NameSimplifier` could use it instead of traversing the AST
using `NameCollector` to find used names.
2020-11-30 14:02:57 +01:00
Alex Beregszaszi
a7ee1355bd [ewasm] Use select instruction where appropriate 2020-11-30 12:10:32 +00:00
Alex Beregszaszi
9640cfd77e [ewasm] Add i32.select/i64.select 2020-11-30 11:58:33 +00:00
chriseth
a5a560e163
Merge pull request #10417 from ethereum/onlyClearForAssignment
DataFlowAnalyzer: Only clear known values for assignment.
2020-11-30 12:02:28 +01:00
chriseth
75b1624180
Merge pull request #10404 from ethereum/ewasm-eq-simplify
[ewasm] Change eq() in polyfill to branch-less version
2020-11-30 11:54:45 +01:00
chriseth
45307a24d6
Merge pull request #10416 from ethereum/speedUpByMovingAssertion
Superspeed.
2020-11-30 11:35:20 +01:00
Alex Beregszaszi
06af2fb38a [ewasm] Change eq() in polyfill to branch-less version 2020-11-27 22:47:55 +00:00
chriseth
21c35924df Only clear for assignment. 2020-11-26 18:32:13 +01:00
chriseth
111eaa1e9b Superspeed. 2020-11-26 17:38:01 +01:00
chriseth
ac9b31d623 Abort early if the optimizer sequence is empty. 2020-11-26 16:41:20 +01:00
Alex Beregszaszi
a22077f736 Rename AsmData -> AST
Also attempt to only include ASTForward where appropriate.
2020-11-25 17:58:02 +00:00
chriseth
a0a02f2307 Merge remote-tracking branch 'origin/develop' into breaking 2020-11-23 19:28:08 +01:00
Alex Beregszaszi
f76ac0a753 [wasm] Document what StringLiteral is 2020-11-20 21:16:56 +00:00
Alexander Arlt
9d6296eca4 [ewasm] Polyfill: calldataload & calldatacopy. 2020-11-20 13:46:04 -05:00
chriseth
a7db4fa4a5 Merge remote-tracking branch 'origin/develop' into breaking 2020-11-18 20:05:02 +01:00
Alexander Arlt
c0d28492c3 [ewasm] Polyfill: Rename endian_swap -> bswap. 2020-11-17 21:30:06 -05:00
Alexander Arlt
19f764bf65 Split ewasm polyfill functions into different files. 2020-11-17 19:27:44 -05:00
chriseth
0a31a6bc36
Merge pull request #10258 from ethereum/develop
Merge develop into breaking.
2020-11-11 13:36:17 +01:00
Alex Beregszaszi
6f6bcdd526 [ewasm] Display custom sections as hex string in the text output 2020-11-10 23:48:24 +01:00
chriseth
da92fe548e Merge remote-tracking branch 'origin/develop' into breaking 2020-11-10 13:48:32 +01:00
Alex Beregszaszi
6e11754c8b [ewasm] Support compiling data subobjects 2020-11-09 17:47:12 +00:00
Alex Beregszaszi
e41700e5f7 [ewasm] Clarify custom section handling in BinaryTransform 2020-11-09 17:47:01 +00:00
Alex Beregszaszi
cd08dab4e6 [ewasm] Allow compiling Yul without "main" 2020-11-09 16:36:29 +00:00
chriseth
ce50f05fc1 Merge remote-tracking branch 'origin/develop' into HEAD 2020-10-29 16:44:47 +01:00
Alex Beregszaszi
1e7dcb0bbf Use yulAssert instead of astAssert 2020-10-29 14:21:12 +00:00
Alex Beregszaszi
e4133815e9 Remove explicit yul:: namespacing in AsmJsonImporter 2020-10-29 14:07:43 +00:00
Alex Beregszaszi
1ab6340828 Move AsmJsonImporter from libsolidity to libyul
It is next to AsmJsonConverter now and interdependencies are shrunk.
2020-10-29 14:06:34 +00:00
chriseth
e93a84ccd4 Merge remote-tracking branch 'origin/develop' into HEAD 2020-10-28 18:19:31 +01:00
chriseth
b18d5ab257 Fix move bug. 2020-10-28 17:21:08 +01:00
chriseth
fb40f29594
Merge pull request #10133 from ethereum/asm-error-codes
Split error codes for EVM opcodes
2020-10-28 13:00:23 +01:00
Alex Beregszaszi
24d8c2ed90 Split error codes for EVM opcodes 2020-10-28 11:45:46 +00:00
Alex Beregszaszi
13652bd4a9 [ewasm] Add assertion for datasize/dataoffset in BinaryTransform 2020-10-27 17:43:31 +00:00
Alex Beregszaszi
6d79a8885f [ewasm] Implement stop() in EVM->Ewasm translator 2020-10-27 17:09:30 +00:00
chriseth
bfd267459c Panic codes. 2020-10-22 19:25:55 +02:00
Daniel Kirchner
0dca223b45 Add another argument to setimmutable and the AssignImmutable opcode, allowing to modify code at any memory offset. 2020-10-15 18:14:41 +02:00
Daniel Kirchner
61a03036fe Refactor stack to memory mover in preparation of moving function arguments. 2020-10-13 12:20:04 +02:00
chriseth
d513e05ce9
Merge pull request #9961 from ethereum/stackLimitEvaderRefactor2
StackToMemoryMover: encapsulate memory offset tracking into its own class.
2020-10-08 19:56:44 +02:00
chriseth
70ebc0a13c
Merge pull request #9960 from ethereum/stackLimitEvaderRefactor
StackLimitEvader: Track unreachable variables globally instead of per function.
2020-10-08 19:01:26 +02:00
Daniel Kirchner
5442a7ade2 Always run the FunctionHoister as part of the optimizer Suite. 2020-10-06 22:30:37 +02:00
Daniel Kirchner
c8a7098f2f StackToMemoryMover: encapsulate memory offset tracking into its own class. 2020-10-06 11:10:43 +02:00
Daniel Kirchner
0b87849bcb Track unreachable variables globally instead of per function. 2020-10-06 10:38:26 +02:00
Alexander Arlt
b6e1415509 Add LEB128 encoding functions & tests. 2020-09-28 16:06:19 -05:00
Daniel Kirchner
f3c2d6cfdc Move memory load and store functions to the dialect. 2020-09-17 22:13:27 +02:00
Daniel Kirchner
48f620fb50 Reverse the order of the memory offsets assigned to variables. 2020-09-17 22:13:27 +02:00
Daniel Kirchner
976abf4715 Easy review fixes. 2020-09-17 22:13:27 +02:00
Daniel Kirchner
f4b42d1c72 Add stack limit evader. 2020-09-17 22:13:27 +02:00
chriseth
6e2d2feb10 Small fixes wrt ReasoningBasedSimplifier. 2020-09-16 18:08:54 +02:00
chriseth
bfd3ab23e2 Disallow optimizer steps that require SMT if none is available. 2020-09-15 15:57:59 +02:00
chriseth
9bcc2f1713 Make ReasoningBasedSimplifier available as step. 2020-09-15 15:57:59 +02:00
chriseth
f73fb726af Reasoning based optimizer. 2020-09-15 15:57:58 +02:00
chriseth
552a5f0913
Merge pull request #9314 from ethereum/inlineStartingFromLeaves
Handle "leaf functions" first in full inliner.
2020-09-14 20:22:48 +02:00
chriseth
8e39110a30 Remove flag. 2020-09-14 17:35:04 +02:00
chriseth
42c26e0bf5 Inline tiny functions first. 2020-09-10 17:01:20 +02:00
chriseth
f102feaf09 Handle "leaf functions" first in full inliner. 2020-09-10 17:01:19 +02:00
chriseth
6101bdf7e2 Name simplifier. 2020-09-10 16:23:29 +02:00
Harikrishnan Mulackal
d166c2540a Fix typo block 2020-09-07 17:24:03 +02:00
Harikrishnan Mulackal
e2fd41f097 Implemented UnusedFunctionArgumentPruner 2020-09-03 13:15:38 +02:00
Alex Beregszaszi
2426616859 Disallow language keywords to be used as identifiers by NameDispenser and VarNameCleaner
Also introduce isRestrictedIdentifier helper in OptimizerUtilities
2020-08-31 12:52:17 +01:00
Alex Beregszaszi
7ef9591e64 Expose hex literal to the Yul parser
This allows nicer error messages.
2020-08-28 19:34:52 +01:00
Alex Beregszaszi
4366ede889 Introduce Leave as a keyword for Yul 2020-08-28 19:34:52 +01:00
Alex Beregszaszi
caa329066e Do not emit Solidity-only tokens in the Scanner for Yul
And simplfiy AsmParser greatly.
2020-08-28 19:34:52 +01:00
Alex Beregszaszi
64c73baee9 Use only advance() and not with a mix of m_scanner->next() 2020-08-28 19:34:52 +01:00
Alex Beregszaszi
dd44fc1f06 Use explicit yul namespace in WasmCodeTransform 2020-08-27 19:49:30 +01:00
Alex Beregszaszi
fdf68a9525 Add some asserts to WasmCodeTransform 2020-08-27 19:49:30 +01:00
Alex Beregszaszi
4e5b403c37 Introduce RightArrow (->) token in the scanner 2020-08-27 12:28:27 +01:00
chriseth
e72afcba47 Fix inlining order to correspond to source order. 2020-08-26 10:20:18 +02:00
Harikrishnan Mulackal
5c6e7f03b4 Extended LoopInvariantCodeMotion for storage and state 2020-08-19 12:41:29 +02:00
Harikrishnan Mulackal
3cbe65e4f3 Refactor SideEffects struct 2020-08-18 14:53:59 +02:00
Alex Beregszaszi
3a617f9cf2 Validate expected literal kind for yul::Dialect builtins
Co-authored-by: Daniel Kirchner <daniel@ekpyron.org>
2020-08-05 11:37:04 +01:00
Alex Beregszaszi
f6a57af809 Add LiteralKind to Dialect.literalArguments
Co-authored-by: Daniel Kirchner <daniel@ekpyron.org>
2020-08-05 11:37:00 +01:00
Alex Beregszaszi
24bb6252ac Merge Parser::instructions() into EVMDialect 2020-07-29 13:15:54 +01:00
Alex Beregszaszi
d41fc31046 Do not use Parser::instructions() but depend on the dialect in NameDispenser and VarNameCleaner 2020-07-29 13:15:54 +01:00
Alex Beregszaszi
d9cb8c8c5e Add ScannerKind and replace supportPeriodInIdentifier 2020-07-28 12:31:08 +01:00
Alex Beregszaszi
291c00c3de Remove errenous error duplication and move some tests around 2020-07-28 10:45:27 +01:00
chriseth
b1f79072df Fix stack compressor wrt literal arguments. 2020-07-23 14:03:51 +02:00
chriseth
6bb6783d39 Merge remote-tracking branch 'origin/develop' into breaking 2020-07-22 15:26:44 +02:00
Djordje Mijovic
6f97e6153c [yul] Adding support for accessing subobjects via .
Co-authored-by: Kamil Śliwak <kamil.sliwak@codepoets.it>
2020-07-21 17:56:11 +02:00
Djordje Mijovic
952101996c Removing expectDeposit() from AsmAnalysis as unused function 2020-07-21 12:55:05 +02:00
chriseth
9be5ed1220 Merge remote-tracking branch 'origin/develop' into breaking 2020-07-21 11:35:28 +02:00
chriseth
1c9179683e
Merge pull request #9433 from ethereum/reportAllStackErrors
Report all stack errors
2020-07-20 15:44:51 +02:00