mirror of
https://github.com/YosysHQ/yosys
synced 2026-02-19 15:04:43 +00:00
opt_expr: fix const lhs of $pow to $shl
This commit is contained in:
parent
ac427a79b0
commit
3bfeaee8ca
2 changed files with 61 additions and 2 deletions
|
|
@ -1667,7 +1667,11 @@ skip_identity:
|
|||
int bit_idx;
|
||||
const auto onehot = sig_a.is_onehot(&bit_idx);
|
||||
|
||||
if (onehot) {
|
||||
// Power of two
|
||||
// A is unsigned or positive
|
||||
if (onehot && (!cell->parameters[ID::A_SIGNED].as_bool() || bit_idx < sig_a.size() - 1)) {
|
||||
cell->parameters[ID::A_SIGNED] = 0;
|
||||
// 2^B = 1<<B
|
||||
if (bit_idx == 1) {
|
||||
log_debug("Replacing pow cell `%s' in module `%s' with left-shift\n",
|
||||
cell->name.c_str(), module->name.c_str());
|
||||
|
|
@ -1679,7 +1683,6 @@ skip_identity:
|
|||
log_debug("Replacing pow cell `%s' in module `%s' with multiply and left-shift\n",
|
||||
cell->name.c_str(), module->name.c_str());
|
||||
cell->type = ID($mul);
|
||||
cell->parameters[ID::A_SIGNED] = 0;
|
||||
cell->setPort(ID::A, Const(bit_idx, cell->parameters[ID::A_WIDTH].as_int()));
|
||||
|
||||
SigSpec y_wire = module->addWire(NEW_ID, y_size);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue