例如,有图2.19(a)这样一个简单的指令序列,由于存在R3寄存器的数据相关,第二条指令必须等第一条指令执行完后才能开始执行,后续的指令也是这样。如果执行一条指令需要两个机器周期,那么,每两条指令之间都要浪费一个周期。

图2.19 指令流调整技术

    ADD R1, R2, R3 ;(R1)+(R2)→R3         ADD R1, R2, R3
    ADD R3, R4, R5 ;(R3)+(R4)→R5         MUL R6, R7, R0
    MUL R6. R7, R3 ;(R6)×(R7)→R3         ADD R3, R4, R5
    MUL R3, R8, R9 ;(R3)×(R8)→R9         MUL R0, R8, R9
          (a) 调整前的指令序列              (b) 调整后的指令序列

    图2.19(b)是通过优化编译器调整后的指令序列。在两条乘法指令中用R0寄存器代替原来的R3寄存器,消除了两条乘法指令与两条加法指令之间的数据相关,并且重新调整指令序列。调整后的指令序列比原指令序列的执行速度快一倍。
    调整指令序列,消除数据相关,提高流水线的工作效率还有很多种方法。在第五章流水线工作原理等章节还要详细介绍。