Add a hack to avoid some horrible code in some cases by always emitting
authorChris Lattner <sabre@nondot.org>
Mon, 29 Aug 2005 23:21:29 +0000 (23:21 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 29 Aug 2005 23:21:29 +0000 (23:21 +0000)
commit82e14db9a90413cc11fcf2ba27431346146aed75
treeeabff22a328bfc721c4cd3acec23f7e8f4c1bd47
parent74fe063e90045931eefaba561730e6a9175ced78
Add a hack to avoid some horrible code in some cases by always emitting
token chains first.  For this C function:

int test() {
  int i;
  for (i = 0; i < 100000; ++i)
    foo();
}

Instead of emitting this (condition before call)

.LBB_test_1:    ; no_exit
        addi r30, r30, 1
        lis r2, 1
        ori r2, r2, 34464
        cmpw cr2, r30, r2
        bl L_foo$stub
        bne cr2, .LBB_test_1    ; no_exit

Emit this:

.LBB_test_1:    ; no_exit
        bl L_foo$stub
        addi r30, r30, 1
        lis r2, 1
        ori r2, r2, 34464
        cmpw cr0, r30, r2
        bne cr0, .LBB_test_1    ; no_exit

Which makes it so we don't have to save/restore cr2 in the prolog/epilog of
the function.

This also makes the code much more similar to what the pattern isel produces.

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