The present invention provides a mechanism for implementing compare
speculation in software pipelined loops. A data dependency graph (DDG) is
generated for a loop that includes a control compare instruction, a
compare instruction and a non-speculative instruction that depends
directly or indirectly on the compare instruction. A loop-carried edge
between the control compare instruction and the compare instruction is
replaced by a loop-carried edge between the control compare instruction
and the non-speculative instruction. If the compare instruction is
speculated when the loop is modulo-scheduled, any load instruction that
depends on the compare is converted to a speculative load, and a
loop-carried edge is added between the control compare and a check
instruction associated with the speculative load. A loop-independent edge
is also added between the check instruction and the non-speculative
instruction if the non-speculative instruction also depends on the load.
La actual invención proporciona un mecanismo para poner en ejecucio'n compara la especulación en lazos canalizados software. Un gráfico de la dependencia de los datos (DDG) se genera para un lazo que incluya un control compara la instrucción, una instrucción del comparar y una instrucción no-especulativa que dependa directamente o indirectamente de la instrucción del comparar. Un borde lazo-llevado entre el control compara la instrucción y la instrucción del comparar es substituida por un borde lazo-llevado entre el control compara la instrucción y la instrucción no-especulativa. Si se especula la instrucción del comparar cuando el lazo modulo-programar, cualquier instrucción de la carga que dependa del comparar se convierte a una carga especulativa, y un borde lazo-llevado se agrega entre el control compara y una instrucción del cheque asociada a la carga especulativa. Un borde de loop-independiente también se agrega entre la instrucción del cheque y la instrucción no-especulativa si la instrucción no-especulativa también depende de la carga.