Flip-flop migration can affect critical paths:
a <= b + c; b1 <=c; c1 <= c; q <= (d) ? a:0; q <= (d) ? b1+c1:0;Alternatively, pushing the multiplexor back will require an earlier version of d that might not be available (e.g. if it were an external input).
Problems arising:
but retiming can overcome structural hazards (e.g. the 'write back' cycle in RISC pipeline).
Other rewrites commonly use: automatically introduce one-hot and gray encoding, or invert for reset as preset.