Merge pull request #7425 from ethereum/fixOrderOpt

Fix order bug in optimizer.
This commit is contained in:
chriseth 2019-09-17 12:58:17 +02:00 committed by GitHub
commit 1b8fe275ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 2 deletions

View File

@ -14,6 +14,7 @@ Compiler Features:
Bugfixes: Bugfixes:
* Fix internal error when popping a dynamic storage array of mappings. * Fix internal error when popping a dynamic storage array of mappings.
* Yul Optimizer: Fix reordering bug in connection with shifted one and mul/div-instructions in for loop conditions.
### 0.5.11 (2019-08-12) ### 0.5.11 (2019-08-12)

View File

@ -475,7 +475,8 @@ std::vector<SimplificationRule<Pattern>> simplificationRuleListPart7(
[=]() -> Pattern { [=]() -> Pattern {
return {Instruction::SHL, {Y, X}}; return {Instruction::SHL, {Y, X}};
}, },
false // Actually only changes the order, does not remove.
true
}); });
rules.push_back({ rules.push_back({
// MUL(SHL(X, 1), Y) -> SHL(X, Y) // MUL(SHL(X, 1), Y) -> SHL(X, Y)
@ -492,7 +493,8 @@ std::vector<SimplificationRule<Pattern>> simplificationRuleListPart7(
[=]() -> Pattern { [=]() -> Pattern {
return {Instruction::SHR, {Y, X}}; return {Instruction::SHR, {Y, X}};
}, },
false // Actually only changes the order, does not remove.
true
}); });
std::function<bool()> feasibilityFunction = [=]() { std::function<bool()> feasibilityFunction = [=]() {

View File

@ -0,0 +1,13 @@
{
for {} div(create(0, 1, 0), shl(msize(), 1)) {}
{
}
}
// ====
// step: expressionSimplifier
// EVMVersion: >byzantium
// ----
// {
// for { } div(create(0, 1, 0), shl(msize(), 1)) { }
// { }
// }