A number of optimizations were implemented in order to generate
efficient hardware. Perhaps the most important of these is
loop-unrolling, which can replace sequential circuitry with
combinational logic when successful. In order to recognize when
unrolling is possible, constant propagation and folding are done. Constant
propagation, constant folding, and dead code elimination also reduce the
amount of unnecessary hardware generated.