From: Marcelina Koƛcielnicka Date: Tue, 4 Aug 2020 14:30:24 +0000 (+0200) Subject: peepopt.muldiv: Add a signedness check. X-Git-Tag: working-ls180~314^2 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e89cc9c02fc5d9ff2a6eedc524e7c0420666ac22;p=yosys.git peepopt.muldiv: Add a signedness check. Fixes #2318. --- diff --git a/passes/pmgen/peepopt_muldiv.pmg b/passes/pmgen/peepopt_muldiv.pmg index 7cad759d0..a4e232342 100644 --- a/passes/pmgen/peepopt_muldiv.pmg +++ b/passes/pmgen/peepopt_muldiv.pmg @@ -1,16 +1,18 @@ pattern muldiv state t x y +state is_signed match mul select mul->type == $mul select GetSize(port(mul, \A)) + GetSize(port(mul, \B)) <= GetSize(port(mul, \Y)) endmatch -code t x y +code t x y is_signed t = port(mul, \Y); x = port(mul, \A); y = port(mul, \B); + is_signed = param(mul, \A_SIGNED).as_bool(); branch; std::swap(x, y); endcode @@ -19,6 +21,7 @@ match div select div->type.in($div) index port(div, \A) === t index port(div, \B) === x + filter param(div, \A_SIGNED).as_bool() == is_signed endmatch code diff --git a/tests/opt/bug2318.ys b/tests/opt/bug2318.ys new file mode 100644 index 000000000..9de6f88ec --- /dev/null +++ b/tests/opt/bug2318.ys @@ -0,0 +1,12 @@ +read_verilog <