diff options
author | Chris Lattner <sabre@nondot.org> | 2005-08-29 23:21:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-08-29 23:21:29 +0000 |
commit | 82e14db9a90413cc11fcf2ba27431346146aed75 (patch) | |
tree | eabff22a328bfc721c4cd3acec23f7e8f4c1bd47 /lib/CodeGen/MachineCodeEmitter.cpp | |
parent | 74fe063e90045931eefaba561730e6a9175ced78 (diff) |
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
Diffstat (limited to 'lib/CodeGen/MachineCodeEmitter.cpp')
0 files changed, 0 insertions, 0 deletions