Test multiple instructions with the (non)commutative peephole optimiser

This commit is contained in:
Alex Beregszaszi 2018-04-03 18:05:06 +02:00
parent 17bcabb6cf
commit be6051bead

View File

@ -860,18 +860,28 @@ BOOST_AUTO_TEST_CASE(peephole_pop_calldatasize)
BOOST_AUTO_TEST_CASE(peephole_commutative_swap1) BOOST_AUTO_TEST_CASE(peephole_commutative_swap1)
{ {
vector<Instruction> ops{
Instruction::ADD,
Instruction::MUL,
Instruction::EQ,
Instruction::AND,
Instruction::OR,
Instruction::XOR
};
for (Instruction const op: ops)
{
AssemblyItems items{ AssemblyItems items{
u256(1), u256(1),
u256(2), u256(2),
Instruction::SWAP1, Instruction::SWAP1,
Instruction::ADD, op,
u256(4), u256(4),
u256(5) u256(5)
}; };
AssemblyItems expectation{ AssemblyItems expectation{
u256(1), u256(1),
u256(2), u256(2),
Instruction::ADD, op,
u256(4), u256(4),
u256(5) u256(5)
}; };
@ -881,15 +891,29 @@ BOOST_AUTO_TEST_CASE(peephole_commutative_swap1)
items.begin(), items.end(), items.begin(), items.end(),
expectation.begin(), expectation.end() expectation.begin(), expectation.end()
); );
}
} }
BOOST_AUTO_TEST_CASE(peephole_noncommutative_swap1) BOOST_AUTO_TEST_CASE(peephole_noncommutative_swap1)
{ {
// NOTE: not comprehensive
vector<Instruction> ops{
Instruction::SUB,
Instruction::DIV,
Instruction::SDIV,
Instruction::MOD,
Instruction::SMOD,
Instruction::EXP,
Instruction::LT,
Instruction::GT
};
for (Instruction const op: ops)
{
AssemblyItems items{ AssemblyItems items{
u256(1), u256(1),
u256(2), u256(2),
Instruction::SWAP1, Instruction::SWAP1,
Instruction::SUB, op,
u256(4), u256(4),
u256(5) u256(5)
}; };
@ -897,7 +921,7 @@ BOOST_AUTO_TEST_CASE(peephole_noncommutative_swap1)
u256(1), u256(1),
u256(2), u256(2),
Instruction::SWAP1, Instruction::SWAP1,
Instruction::SUB, op,
u256(4), u256(4),
u256(5) u256(5)
}; };
@ -907,6 +931,7 @@ BOOST_AUTO_TEST_CASE(peephole_noncommutative_swap1)
items.begin(), items.end(), items.begin(), items.end(),
expectation.begin(), expectation.end() expectation.begin(), expectation.end()
); );
}
} }
BOOST_AUTO_TEST_CASE(jumpdest_removal) BOOST_AUTO_TEST_CASE(jumpdest_removal)