}
else
sigM = P;
+ // TODO: Check if necessary
+ // This sigM could have no users if downstream $add
+ // is narrower than $mul result, for example
+ if (sigM.empty())
+ reject;
clock = port(dsp, \CLK, SigBit());
endcode
optional
endmatch
+code sigA sigD
+ // TODO: Check if this is necessary?
+ if (preAdd) {
+ sigA = port(preAdd, \A);
+ sigD = port(preAdd, \B);
+ if (GetSize(sigA) < GetSize(sigD))
+ std::swap(sigA, sigD);
+ }
+endcode
+
// (4) If pre-adder was present, find match 'A' input for A2REG
// If pre-adder was not present, move ADREG to A2REG
// Then match 'A' input for A1REG
// (attached to at most two $mux cells that implement clock-enable or
// reset functionality, using the in_dffe subpattern)
code argQ ffC ffCcemux ffCrstmux ffCcepol ffCrstpol sigC clock
+ // TODO: Any downside to allowing this?
+ // If this DSP implements an accumulator, do not attempt to match
+ if (sigC == sigP)
+ reject;
+
argQ = sigC;
subpattern(in_dffe);
if (dff) {