From: Clifford Wolf Date: Thu, 7 Nov 2013 17:18:16 +0000 (+0100) Subject: Disabled const folding of ternary op when select is undef X-Git-Tag: yosys-0.2.0~385 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=02f4f89fdba402a1fa74f2f88291f7e1a37db0f2;p=yosys.git Disabled const folding of ternary op when select is undef --- diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 7712023c5..7b5ae064c 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -1058,8 +1058,20 @@ skip_dynamic_range_lvalue_expansion:; break; case AST_TERNARY: if (children[0]->type == AST_CONSTANT) { - AstNode *choice = children[children[0]->integer ? 1 : 2]; - if (choice->type == AST_CONSTANT) { + bool found_sure_true = false; + bool found_maybe_true = false; + for (auto &bit : children[0]->bits) { + if (bit == RTLIL::State::S1) + found_sure_true = true; + if (bit > RTLIL::State::S1) + found_maybe_true = true; + } + AstNode *choice = NULL; + if (found_sure_true) + choice = children[1]; + else if (!found_maybe_true) + choice = children[2]; + if (choice != NULL && choice->type == AST_CONSTANT) { RTLIL::Const y = choice->bitsAsConst(width_hint, sign_hint); newNode = mkconst_bits(y.bits, sign_hint); }