mirror of https://github.com/YosysHQ/yosys.git
Disabled const folding of ternary op when select is undef
This commit is contained in:
parent
947bd9b96b
commit
02f4f89fdb
|
@ -1058,8 +1058,20 @@ skip_dynamic_range_lvalue_expansion:;
|
||||||
break;
|
break;
|
||||||
case AST_TERNARY:
|
case AST_TERNARY:
|
||||||
if (children[0]->type == AST_CONSTANT) {
|
if (children[0]->type == AST_CONSTANT) {
|
||||||
AstNode *choice = children[children[0]->integer ? 1 : 2];
|
bool found_sure_true = false;
|
||||||
if (choice->type == AST_CONSTANT) {
|
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);
|
RTLIL::Const y = choice->bitsAsConst(width_hint, sign_hint);
|
||||||
newNode = mkconst_bits(y.bits, sign_hint);
|
newNode = mkconst_bits(y.bits, sign_hint);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue