Merge pull request #2338 from zachjs/const-branch-finish

Propagate const_fold through generate blocks and branches
This commit is contained in:
clairexen 2020-08-18 17:38:07 +02:00 committed by GitHub
commit 4aa0dc4dc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 4 deletions

View File

@ -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 {
@ -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]);
}
@ -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]);
}
@ -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]);
}

View File

@ -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