Currently, eval_op() only do the evaluation of binops but unops need sometimes to be evaluated too. So, teach eval_op() about OP_NEG & OP_NOT and add a new helper, eval_unop() for making it easier to use with unops. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- simplify.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/simplify.c b/simplify.c index ac27debfcefb..4c6569eba036 100644 --- a/simplify.c +++ b/simplify.c @@ -535,6 +535,13 @@ static pseudo_t eval_op(int op, unsigned size, pseudo_t src1, pseudo_t src2) ur = right & bits; switch (op) { + case OP_NEG: + res = -left; + break; + case OP_NOT: + res = ~ul; + break; + case OP_ADD: res = left + right; break; @@ -636,6 +643,11 @@ undef: return NULL; } +static inline pseudo_t eval_unop(int op, unsigned size, pseudo_t src) +{ + return eval_op(op, size, src, VOID); +} + /// // Simplifications // ^^^^^^^^^^^^^^^ -- 2.28.0