OSDN Git Service

As a pending queue data structure to keep track of instructions whose
authorChris Lattner <sabre@nondot.org>
Sun, 12 Mar 2006 00:38:57 +0000 (00:38 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 12 Mar 2006 00:38:57 +0000 (00:38 +0000)
commit53fbf2a8e810bbdf5ad5d7808fabe9ae4f3497e2
tree73ac21c09cbb6a8daf0a5f62aed911de782345f4
parentaaf15825494fce98ac8a54dde36711f9ed5f1418
As a pending queue data structure to keep track of instructions whose
operands have all issued, but whose results are not yet available.  This
allows us to compile:

int G;
int test(int A, int B, int* P) {
   return (G+A)*(B+1);
}

to:

_test:
        lis r2, ha16(L_G$non_lazy_ptr)
        addi r4, r4, 1
        lwz r2, lo16(L_G$non_lazy_ptr)(r2)
        lwz r2, 0(r2)
        add r2, r2, r3
        mullw r3, r2, r4
        blr

instead of this, which has a stall between the lis/lwz:

_test:
        lis r2, ha16(L_G$non_lazy_ptr)
        lwz r2, lo16(L_G$non_lazy_ptr)(r2)
        addi r4, r4, 1
        lwz r2, 0(r2)
        add r2, r2, r3
        mullw r3, r2, r4
        blr

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26716 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp