mirror of https://github.com/YosysHQ/yosys.git
7b74caa5db
The previous version could easily generate a large amount of padding when the constant factor was significantly larger than the width of the shift data input. This could lead to huge amounts of logic being generated before then being optimized away at a huge performance and memory cost. Additionally and more critically, when the input width was not a multiple of the constant factor, the input data was padded with 'x bits to such a multiple before interspersing the 'x padding needed to align the selectable windows to power-of-two offsets. Such a final padding would not be correct for shifts besides $shiftx, and the previous version did attempt to remove that final padding at the end so that the native zero/sign/x-extension behavior of the shift cell would be used, but since the last selectable window also got power-of-two padding appended after the padding the code is trying to remove got added, it did not actually fully remove it in some cases. I changed the code to only add 'x padding between selectable windows, leaving the last selectable window unpadded. This omits the need to add final padding to a multiple of the constant factor in the first place. In turn, that means the only 'x bits added are actually impossible to select. As a side effect no padding is added when the constant factor is equal to or larger than the width of the shift data input, also solving the reported performance bug. This fixes #4056 |
||
---|---|---|
.. | ||
aiger | ||
arch | ||
asicworld | ||
bind | ||
blif | ||
bram | ||
errors | ||
fmt | ||
fsm | ||
hana | ||
liberty | ||
lut | ||
memfile | ||
memlib | ||
memories | ||
opt | ||
opt_share | ||
proc | ||
realmath | ||
rpc | ||
sat | ||
select | ||
share | ||
sim | ||
simple | ||
simple_abc9 | ||
smv | ||
sva | ||
svinterfaces | ||
svtypes | ||
techmap | ||
tools | ||
unit | ||
various | ||
verific | ||
verilog | ||
vloghtb | ||
xprop | ||
gen-tests-makefile.sh |