From dd777baabfb14463daeb7831decc09e73adbb329 Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 21 Mar 2022 13:02:48 +0100 Subject: [PATCH] Fix mul implementation. --- libyul/optimiser/ReasoningBasedSimplifier.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libyul/optimiser/ReasoningBasedSimplifier.cpp b/libyul/optimiser/ReasoningBasedSimplifier.cpp index a201a8fec..3ad4c8b01 100644 --- a/libyul/optimiser/ReasoningBasedSimplifier.cpp +++ b/libyul/optimiser/ReasoningBasedSimplifier.cpp @@ -191,8 +191,11 @@ smtutil::Expression ReasoningBasedSimplifier::encodeEVMBuiltin( return result; } case evmasm::Instruction::MUL: - // TODO this only works for multiplication by constants. - return wrap(arguments.at(0) * arguments.at(1)); + // TODO this only works will with the rematerializer. + if (holds_alternative(_arguments.at(0)) || holds_alternative(_arguments.at(1))) + return wrap(arguments.at(0) * arguments.at(1)); + else + return newRestrictedVariable(); case evmasm::Instruction::SUB: { auto result = arguments.at(0) - arguments.at(1) + (bigint(1) << 256) * newZeroOneVariable();