mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #2479 from zachjs/const-arg-hint
Allow constant function calls in constant function arguments
This commit is contained in:
commit
3e67ab1ebb
|
@ -1205,6 +1205,11 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
||||||
current_block = this;
|
current_block = this;
|
||||||
current_block_child = children[i];
|
current_block_child = children[i];
|
||||||
}
|
}
|
||||||
|
if (!in_param_here && type == AST_FCALL) {
|
||||||
|
bool recommend_const_eval = false;
|
||||||
|
bool require_const_eval = has_const_only_constructs(recommend_const_eval);
|
||||||
|
in_param_here = recommend_const_eval || require_const_eval;
|
||||||
|
}
|
||||||
if ((type == AST_ALWAYS || type == AST_INITIAL) && children[i]->type == AST_BLOCK)
|
if ((type == AST_ALWAYS || type == AST_INITIAL) && children[i]->type == AST_BLOCK)
|
||||||
current_top_block = children[i];
|
current_top_block = children[i];
|
||||||
if (i == 0 && child_0_is_self_determined)
|
if (i == 0 && child_0_is_self_determined)
|
||||||
|
|
|
@ -14,6 +14,11 @@ module top;
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function automatic [31:0] pass_through;
|
||||||
|
input [31:0] inp;
|
||||||
|
pass_through = inp;
|
||||||
|
endfunction
|
||||||
|
|
||||||
function automatic [31:0] operation2;
|
function automatic [31:0] operation2;
|
||||||
input [4:0] var;
|
input [4:0] var;
|
||||||
input integer num;
|
input integer num;
|
||||||
|
@ -47,6 +52,9 @@ module top;
|
||||||
wire [31:0] x1;
|
wire [31:0] x1;
|
||||||
assign x1 = operation1(A, a);
|
assign x1 = operation1(A, a);
|
||||||
|
|
||||||
|
wire [31:0] x1b;
|
||||||
|
assign x1b = operation1(pass_through(A), a);
|
||||||
|
|
||||||
wire [31:0] x2;
|
wire [31:0] x2;
|
||||||
assign x2 = operation2(A, a);
|
assign x2 = operation2(A, a);
|
||||||
|
|
||||||
|
@ -58,6 +66,7 @@ module top;
|
||||||
assert property (a == 2);
|
assert property (a == 2);
|
||||||
assert property (A == 3);
|
assert property (A == 3);
|
||||||
assert property (x1 == 16);
|
assert property (x1 == 16);
|
||||||
|
assert property (x1b == 16);
|
||||||
assert property (x2 == 4);
|
assert property (x2 == 4);
|
||||||
assert property (x3 == 16);
|
assert property (x3 == 16);
|
||||||
`endif
|
`endif
|
||||||
|
|
Loading…
Reference in New Issue