A harder case arises when we want to use the data in the instruction immediately following the instruction in which it is generated. In this case, we need to route the data directly from the ALU output to the appropriate ALU input. This is called forwarding, since the data is forwarded from one instruction to the other. CDC called the same technique bypassing, as you are bypassing the registers. The best way to try to describe the forwarding that's necessary is in the form of a table, as on page 160. Each row of the table expresses a condition in which forwarding is necessary.
I've commented before on the danger of tying your instruction set to your pipeline. This has much the same feeling, but without the danger: code that's optimized for a 486 won't run as well on a Pentium as Pentium-optimized code, but it will run correctly.