Merge pull request #9736 from ethereum/yul_smt

Reasoning based optimizer using integers only
This commit is contained in:
chriseth
2020-09-15 18:45:55 +02:00
committed by GitHub
27 changed files with 875 additions and 8 deletions
+2 -5
View File
@@ -23,6 +23,7 @@
#include <libsolidity/formal/SymbolicTypes.h>
#include <libsmtutil/SMTPortfolio.h>
#include <libsmtutil/Helpers.h>
#include <boost/range/adaptors.hpp>
#include <boost/range/adaptor/reversed.hpp>
@@ -1497,11 +1498,7 @@ smtutil::Expression SMTEncoder::division(smtutil::Expression _left, smtutil::Exp
{
// Signed division in SMTLIB2 rounds differently for negative division.
if (_type.isSigned())
return (smtutil::Expression::ite(
_left >= 0,
smtutil::Expression::ite(_right >= 0, _left / _right, 0 - (_left / (0 - _right))),
smtutil::Expression::ite(_right >= 0, 0 - ((0 - _left) / _right), (0 - _left) / (0 - _right))
));
return signedDivision(_left, _right);
else
return _left / _right;
}