Sachin Grover
b7adb2aa42
Add SPDX license identifier if not present already in source file
...
Fixes : #9220
2020-07-17 20:24:12 +05:30
Daniel Kirchner
99d831d7d1
Extract recursive function detection from Semantics into the CallGraph.
2020-07-15 20:30:52 +02:00
chriseth
711ed588d7
Require for loop init rewriter for SSA.
...
Co-authored-by: Harikrishnan Mulackal <webmail.hari@gmail.com>
2020-07-03 19:24:31 +02:00
chriseth
e0b1d8b9bd
Make DataFlowAnalyzer aware of storage / memory slot after sload / mload.
2020-07-01 13:45:25 +02:00
Djordje Mijovic
33e7b24df0
Adding fixes for signedness conversion warnings in libyul
...
Co-authored-by: Kamil Śliwak <kamil.sliwak@codepoets.it>
2020-06-12 10:39:30 +02:00
TrentZ
7eb73b52a1
Rename blacklist for clarity.
2020-06-09 23:43:14 +02:00
chriseth
a06ac0f39f
Merge pull request #8958 from ethereum/evm-version-dependent-rules
...
[yul] Add support for EVM version-dependent rules.
2020-05-27 12:52:51 +02:00
Christian Parpart
b7fa5d5040
Mark EVM instruction pc()
as deprecated when used in inline assembly.
2020-05-27 12:07:23 +02:00
Alexander Arlt
a7b89065ca
[yul] Add support for EVM version-dependent rules.
2020-05-27 11:57:08 +02:00
Kamil Śliwak
d199fc537b
Add configurable weights to CodeSize metric
2020-05-20 16:47:23 +02:00
Daniel Kirchner
c1ed5bbb0f
Update Dockerfiles and CI scripts to Ubuntu 20.04 and simplify them.
2020-05-11 17:35:01 +02:00
chriseth
debee799dc
Merge pull request #8892 from ethereum/boost-cxx11
...
Replace boost/algorithm/cxx11 with C++11 features
2020-05-11 16:29:42 +02:00
Alex Beregszaszi
875415a132
Replace boost/algorithm/cxx11 with C++11 features
2020-05-11 14:27:54 +01:00
Kamil Śliwak
e8aec6de54
More information about --yul-optimizations option in READMEs and docs
2020-05-08 22:29:57 +02:00
chriseth
6fb112fa8e
Remove some unneeded headers.
2020-05-07 01:49:46 +02:00
Kamil Śliwak
c41a832f65
Move the default optimisation steps from OptimiserSuite to OptimiserSettings
...
- Now it's a mandatory parameter in OptimiserSuite::run()
2020-04-24 17:30:56 +02:00
Kamil Śliwak
69b79f848b
OptimiserSuite: Allow validating the optimisation sequence without executing it
...
- Create a separate validateSequence() that can be used independently.
- Tweak the exception messages a bit to be usable as command-line errors
2020-04-24 17:30:56 +02:00
Kamil Śliwak
e2c0e6331c
OptimiserSuite: Define NonStepAbbreviations and use it for extra sanity checks
2020-04-24 17:30:56 +02:00
Kamil Śliwak
5a515240ac
OptimiserSuite: Use brackets instead of parentheses as syntax for repeating abbreviation sequences
...
- We want to start accepting abbreviation sequences on the command line and parentheses would always have to be escaped in that context.
- There wasn't any important reason behind choosing () rather than [] or {} and it still isn't too late to switch.
2020-04-24 17:30:56 +02:00
Kamil Śliwak
9db7d2bde9
OptimiserSuite: Replace full step names in run() with abbreviations
2020-04-16 16:09:15 +02:00
Kamil Śliwak
9d7df5db69
OptimiserSuite: Add a variant of runSequence() that works with a string of abbreviations
2020-04-16 16:09:15 +02:00
Kamil Śliwak
1b4e06605d
OptimiserSuite: Extract the code for repeating a sequence into runSequenceUntilStable()
...
- Define a constant for the maximum number of repeats of the optimisation string
2020-04-16 15:23:38 +02:00
Alexander Arlt
aac7a1e434
Apply modernize-pass-by-value.
2020-04-14 10:32:13 -05:00
Mathias Baumann
5203503583
Allow for per-parameter literalValues builtin functions
2020-04-08 16:41:38 +02:00
Alexander Arlt
cae6e7769f
Apply modernize-use-override.
2020-04-02 18:00:44 -05:00
Djordje Mijovic
c891597204
Adding ssa type check and test for that one
2020-02-24 15:05:19 +01:00
Djordje Mijovic
2efda4129b
Adding test for multi return values including bool in evmTyped dialect. Calling zeroLiteralForType from inliner
2020-02-24 15:05:19 +01:00
chriseth
a52305d3bd
Use bool type in conditional simplifier and for loop condition into body.
2020-02-24 15:05:19 +01:00
Djordje Mijovic
a52c9af5b9
Adding vardecl optimization for boolean types
2020-02-24 15:05:19 +01:00
chriseth
e75cace78d
Properly assign types in control flow simplifier.
2020-02-24 15:05:19 +01:00
chriseth
b9b36cd89e
Properly assign types in ExpressionSplitter.
2020-02-24 15:05:19 +01:00
chriseth
915cb65106
Collect types together with names.
2020-02-24 15:05:19 +01:00
Jason Cobb
6db0d50094
Don't use identifiers starting with an underscore followed by an uppercase letter
2020-02-17 12:44:39 -05:00
chriseth
0e100e7e7e
Merge pull request #8267 from ghallak/prune-unnecessary-funcs
...
[Yul] Prune functions that call each other but are otherwise unreferenced
2020-02-12 11:09:27 +01:00
Gaith Hallak
24d6702986
[Yul] Prune functions that call each other but are otherwise unreferenced
2020-02-11 20:39:32 +03:00
Mathias Baumann
1a3998648c
Run yul optimizer on user code without refs
2020-02-11 13:55:47 +01:00
cameel
4e7c1c7876
OptimiserSuite: Add two maps for converting between step names and abbreviations
...
- Abbreviations match those used in yulopti.
- I considered using boost::bimap but I think it would be an overkill. Two simple maps are good enough in a situation where data is constant and there isn't much of it.
- I could also use InvertibleMap from libsolutil but I don't even need any of its methods since my map is a constant. I also don't need the inverted map to store sets because my values are unique.
- The reverseMap() is generic enough to be moved to some global file with utilities but I don't sure if it's going to actually be useful to others in practice.
2020-02-03 12:22:47 +01:00
cameel
2ee7e6042b
OptimiserSuite: Remove VarNameCleaner from the list of available steps
2020-01-30 17:35:27 +01:00
chriseth
b8488597da
Combine value and loop depth.
2020-01-08 12:25:46 +01:00
chriseth
40c0602b5c
Do not rematerialize in loops.
2020-01-08 09:56:08 +01:00
chriseth
25d3f27c11
Tune Rematerializer
2020-01-08 09:56:08 +01:00
Christian Parpart
345f9928ab
Library libdevcore renamed to libsolutil.
2020-01-07 15:51:50 +01:00
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
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
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
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
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
Leonardo Alt
2bfa3a7c97
Rewrite GenericVisitor
2019-11-26 15:55:06 +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
Leonardo Alt
be849b3c47
Replace boost::variant by std::variant in libyul
2019-11-19 17:23: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
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
e275bb88f0
Fix windows build.
2019-11-06 02:06:19 +01:00
chriseth
46ac16d25c
Merge remote-tracking branch 'origin/develop' into develop_060
2019-11-04 19:09:11 +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
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
Christian Parpart
112e63fe15
libyul: AST cleanup, eliminating dead Instruction AST type.
2019-11-01 12:32:25 +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
Christian Parpart
df729b3084
Make use of C++17 std::optional<> instead of boost::optional<>.
2019-10-28 11:39:30 +01: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
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
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
7d30fbdef0
Extract side effects into their own struct.
2019-08-14 15:06:10 +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