Fixes for early width and sign detection in ast simplifier
authorClifford Wolf <clifford@clifford.at>
Mon, 4 Nov 2013 07:28:13 +0000 (08:28 +0100)
committerClifford Wolf <clifford@clifford.at>
Mon, 4 Nov 2013 07:28:13 +0000 (08:28 +0100)
frontends/ast/simplify.cc

index e6db61604f12caaa49eeaa85783d9e523aaaefbb..e5cc7c4cc74656a3a78c715c8faa3069d285d7b7 100644 (file)
@@ -242,7 +242,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
                width_hint = -1;
                sign_hint = true;
                for (auto child : children) {
-                       while (child->simplify(false, false, false, stage, -1, false) == true) { }
+                       while (child->simplify(false, false, in_lvalue, stage, -1, false) == true) { }
                        child->detectSignWidthWorker(width_hint, sign_hint);
                }
                reset_width_after_children = true;
@@ -851,6 +851,7 @@ skip_dynamic_range_lvalue_expansion:;
                        wire->is_output = false;
 
                        current_ast_mod->children.push_back(wire);
+                       while (wire->simplify(true, false, false, 1, -1, false)) { }
 
                        AstNode *lvalue = new AstNode(AST_IDENTIFIER);
                        lvalue->str = wire->str;