mirror of https://github.com/YosysHQ/yosys.git
opt_expr: Fix crash on $mul optimization with more zeros removed than Y has.
Fixes #2221.
This commit is contained in:
parent
b004f09018
commit
7afcb72c98
|
@ -1596,6 +1596,14 @@ skip_identity:
|
|||
log_debug("Removing low %d A and %d B bits from cell `%s' in module `%s'.\n",
|
||||
a_zeros, b_zeros, cell->name.c_str(), module->name.c_str());
|
||||
|
||||
if (y_zeros >= GetSize(sig_y)) {
|
||||
module->connect(sig_y, RTLIL::SigSpec(0, GetSize(sig_y)));
|
||||
module->remove(cell);
|
||||
|
||||
did_something = true;
|
||||
goto next_cell;
|
||||
}
|
||||
|
||||
if (a_zeros) {
|
||||
cell->setPort(ID::A, sig_a.extract_end(a_zeros));
|
||||
cell->parameters[ID::A_WIDTH] = GetSize(sig_a) - a_zeros;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
read_verilog <<EOT
|
||||
module test (
|
||||
input [1:0] a,
|
||||
input [1:0] b,
|
||||
output [5:0] y
|
||||
);
|
||||
|
||||
wire [5:0] aa = {a, 4'h0};
|
||||
wire [5:0] bb = {b, 4'h0};
|
||||
|
||||
assign y = aa * bb;
|
||||
|
||||
endmodule
|
||||
EOT
|
||||
|
||||
equiv_opt -assert opt_expr
|
Loading…
Reference in New Issue