Skip to content

Commit

Permalink
Merge pull request YosysHQ#2338 from zachjs/const-branch-finish
Browse files Browse the repository at this point in the history
Propagate const_fold through generate blocks and branches
  • Loading branch information
clairexen authored Aug 18, 2020
2 parents a9681f4 + 2ee0b8e commit 4aa0dc4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
8 changes: 4 additions & 4 deletions frontends/ast/simplify.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1807,7 +1807,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,

if (type == AST_GENFOR) {
for (size_t i = 0; i < buf->children.size(); i++) {
buf->children[i]->simplify(false, false, false, stage, -1, false, false);
buf->children[i]->simplify(const_fold, false, false, stage, -1, false, false);
current_ast_mod->children.push_back(buf->children[i]);
}
} else {
Expand Down Expand Up @@ -1883,7 +1883,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
}

for (size_t i = 0; i < children.size(); i++) {
children[i]->simplify(false, false, false, stage, -1, false, false);
children[i]->simplify(const_fold, false, false, stage, -1, false, false);
current_ast_mod->children.push_back(children[i]);
}

Expand Down Expand Up @@ -1920,7 +1920,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
}

for (size_t i = 0; i < buf->children.size(); i++) {
buf->children[i]->simplify(false, false, false, stage, -1, false, false);
buf->children[i]->simplify(const_fold, false, false, stage, -1, false, false);
current_ast_mod->children.push_back(buf->children[i]);
}

Expand Down Expand Up @@ -1999,7 +1999,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
}

for (size_t i = 0; i < buf->children.size(); i++) {
buf->children[i]->simplify(false, false, false, stage, -1, false, false);
buf->children[i]->simplify(const_fold, false, false, stage, -1, false, false);
current_ast_mod->children.push_back(buf->children[i]);
}

Expand Down
39 changes: 39 additions & 0 deletions tests/simple/const_branch_finish.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
`define CONSTANT_CHECK \
if (WIDTH === 'bx) begin \
$display("FAIL"); \
$finish; \
end

module top;
parameter WIDTH = 32;
integer j;
initial begin
`CONSTANT_CHECK
if (WIDTH == 32) begin : procedural_conditional_block
`CONSTANT_CHECK
end
case (WIDTH)
32: `CONSTANT_CHECK
default: ;
endcase
for (j = 0; j < 2; j = j + 1) begin : procedural_loop_block
`CONSTANT_CHECK
end
end
generate
begin : unconditional_block
initial `CONSTANT_CHECK
end
if (WIDTH == 32) begin : conditional_block
initial `CONSTANT_CHECK
end
case (WIDTH)
32: initial `CONSTANT_CHECK
default: ;
endcase
genvar i;
for (i = 0; i < 2; i = i + 1) begin : loop_block
initial `CONSTANT_CHECK
end
endgenerate
endmodule

0 comments on commit 4aa0dc4

Please sign in to comment.