mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Tests for conditional unsimplifier
This commit is contained in:
parent
ce87f11885
commit
cca7f01199
@ -27,6 +27,7 @@
|
|||||||
#include <libyul/optimiser/DeadCodeEliminator.h>
|
#include <libyul/optimiser/DeadCodeEliminator.h>
|
||||||
#include <libyul/optimiser/Disambiguator.h>
|
#include <libyul/optimiser/Disambiguator.h>
|
||||||
#include <libyul/optimiser/CallGraphGenerator.h>
|
#include <libyul/optimiser/CallGraphGenerator.h>
|
||||||
|
#include <libyul/optimiser/ConditionalUnsimplifier.h>
|
||||||
#include <libyul/optimiser/ConditionalSimplifier.h>
|
#include <libyul/optimiser/ConditionalSimplifier.h>
|
||||||
#include <libyul/optimiser/CommonSubexpressionEliminator.h>
|
#include <libyul/optimiser/CommonSubexpressionEliminator.h>
|
||||||
#include <libyul/optimiser/NameCollector.h>
|
#include <libyul/optimiser/NameCollector.h>
|
||||||
@ -158,6 +159,11 @@ TestCase::TestResult YulOptimizerTest::run(ostream& _stream, string const& _line
|
|||||||
disambiguate();
|
disambiguate();
|
||||||
CommonSubexpressionEliminator::run(*m_context, *m_ast);
|
CommonSubexpressionEliminator::run(*m_context, *m_ast);
|
||||||
}
|
}
|
||||||
|
else if (m_optimizerStep == "conditionalUnsimplifier")
|
||||||
|
{
|
||||||
|
disambiguate();
|
||||||
|
ConditionalUnsimplifier::run(*m_context, *m_ast);
|
||||||
|
}
|
||||||
else if (m_optimizerStep == "conditionalSimplifier")
|
else if (m_optimizerStep == "conditionalSimplifier")
|
||||||
{
|
{
|
||||||
disambiguate();
|
disambiguate();
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
let y := mload(0x20)
|
||||||
|
for {} and(y, 8) { pop(y) } {
|
||||||
|
if y { break }
|
||||||
|
y := 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let y := mload(0x20)
|
||||||
|
// for { } and(y, 8) { pop(y) }
|
||||||
|
// { if y { break } }
|
||||||
|
// }
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
let y := mload(0x20)
|
||||||
|
for {} and(y, 8) { pop(y) } {
|
||||||
|
if y { continue }
|
||||||
|
y := 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let y := mload(0x20)
|
||||||
|
// for { } and(y, 8) { pop(y) }
|
||||||
|
// { if y { continue } }
|
||||||
|
// }
|
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
let x := mload(0)
|
||||||
|
let y := mload(0)
|
||||||
|
if x { revert(0, 0) }
|
||||||
|
x := 0
|
||||||
|
if y { revert(0, 0) }
|
||||||
|
y := 0
|
||||||
|
for {} and(x, y) {} {
|
||||||
|
x := 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let x := mload(0)
|
||||||
|
// let y := mload(0)
|
||||||
|
// if x { revert(0, 0) }
|
||||||
|
// if y { revert(0, 0) }
|
||||||
|
// for { } and(x, y) { }
|
||||||
|
// { x := 2 }
|
||||||
|
// }
|
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
let x
|
||||||
|
for {} x { sstore(1, x) } {
|
||||||
|
if x { continue }
|
||||||
|
x := 0
|
||||||
|
sstore(0, x)
|
||||||
|
}
|
||||||
|
sstore(0, x)
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let x
|
||||||
|
// for { } x { sstore(1, x) }
|
||||||
|
// {
|
||||||
|
// if x { continue }
|
||||||
|
// sstore(0, x)
|
||||||
|
// }
|
||||||
|
// sstore(0, x)
|
||||||
|
// }
|
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
let x := mload(0)
|
||||||
|
for {} 1 {} {
|
||||||
|
if x { sstore(7, 8) break sstore(8, 9) }
|
||||||
|
x := 0
|
||||||
|
sstore(1, x)
|
||||||
|
if x { sstore(7, 8) break }
|
||||||
|
x := 0
|
||||||
|
sstore(10, x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let x := mload(0)
|
||||||
|
// for { } 1 { }
|
||||||
|
// {
|
||||||
|
// if x
|
||||||
|
// {
|
||||||
|
// sstore(7, 8)
|
||||||
|
// break
|
||||||
|
// sstore(8, 9)
|
||||||
|
// }
|
||||||
|
// x := 0
|
||||||
|
// sstore(1, x)
|
||||||
|
// if x
|
||||||
|
// {
|
||||||
|
// sstore(7, 8)
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// sstore(10, x)
|
||||||
|
// }
|
||||||
|
// }
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
let x := mload(0)
|
||||||
|
if x { sstore(0, x) }
|
||||||
|
x := 0
|
||||||
|
sstore(1, x)
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let x := mload(0)
|
||||||
|
// if x { sstore(0, x) }
|
||||||
|
// x := 0
|
||||||
|
// sstore(1, x)
|
||||||
|
// }
|
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
let x := mload(0)
|
||||||
|
if x { sstore(0, x) revert(0, 0) }
|
||||||
|
x := 0
|
||||||
|
sstore(1, x)
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let x := mload(0)
|
||||||
|
// if x
|
||||||
|
// {
|
||||||
|
// sstore(0, x)
|
||||||
|
// revert(0, 0)
|
||||||
|
// }
|
||||||
|
// sstore(1, x)
|
||||||
|
// }
|
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
let x := calldataload(0)
|
||||||
|
switch x
|
||||||
|
case 0 { x := 0 }
|
||||||
|
case 1 { x := 1 }
|
||||||
|
case 2 { x := 8 /* wrong literal */ }
|
||||||
|
default { }
|
||||||
|
|
||||||
|
pop(x)
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// {
|
||||||
|
// let x := calldataload(0)
|
||||||
|
// switch x
|
||||||
|
// case 0 { }
|
||||||
|
// case 1 { }
|
||||||
|
// case 2 { x := 8 }
|
||||||
|
// default { }
|
||||||
|
// pop(x)
|
||||||
|
// }
|
@ -0,0 +1,5 @@
|
|||||||
|
{ }
|
||||||
|
// ====
|
||||||
|
// step: conditionalUnsimplifier
|
||||||
|
// ----
|
||||||
|
// { }
|
Loading…
Reference in New Issue
Block a user