yul: Set non movable flag to true in simplification rule for byte of right-shifted expression

This commit is contained in:
Bhargava Shastry
2020-08-03 17:30:52 +02:00
committed by chriseth
parent 08791ab0d4
commit 5100effeec
7 changed files with 74 additions and 2 deletions
+13 -2
View File
@@ -581,9 +581,20 @@ std::vector<SimplificationRule<Pattern>> simplificationRuleListPart7(
rules.push_back({
Builtins::BYTE(A, Builtins::SHR(B, X)),
[=]() -> Pattern { return A.d() < B.d() / 8 ? Word(0) : Builtins::BYTE(A.d() - B.d() / 8, X); },
[=]() -> Pattern { return Word(0); },
true,
[=] {
return B.d() % 8 == 0 && A.d() < Pattern::WordSize / 8 && B.d() <= Pattern::WordSize && A.d() < B.d() / 8;
}
});
rules.push_back({
Builtins::BYTE(A, Builtins::SHR(B, X)),
[=]() -> Pattern { return Builtins::BYTE(A.d() - B.d() / 8, X); },
false,
[=] { return B.d() % 8 == 0 && A.d() < Pattern::WordSize / 8 && B.d() <= Pattern::WordSize; }
[=] {
return B.d() % 8 == 0 && A.d() < Pattern::WordSize / 8 && B.d() <= Pattern::WordSize && A.d() >= B.d() / 8;
}
});
return rules;