diff options
author | Chris Lattner <sabre@nondot.org> | 2005-08-21 17:41:11 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-08-21 17:41:11 +0000 |
commit | 0500e362bf1be3aa626e9d4f5f8d8246770dbae0 (patch) | |
tree | f6f0dd180f015d6a539c46faa6e3bf207498e94b /llvm/lib/System/Program.cpp | |
parent | 7b6b326b2c441bfa27fefe4d0122c39a83f8edf9 (diff) | |
download | bcm5719-llvm-0500e362bf1be3aa626e9d4f5f8d8246770dbae0.tar.gz bcm5719-llvm-0500e362bf1be3aa626e9d4f5f8d8246770dbae0.zip |
If the false value for a select_cc is really simple (has no inputs), evaluate
it in the block. This codegens:
int %test(bool %c) {
%retval = select bool %c, int 17, int 1
ret int %retval
}
as:
_test:
rlwinm r2, r3, 0, 31, 31
li r2, 17
cmpwi cr0, r3, 0
bne .LBB_test_2 ;
.LBB_test_1: ;
li r2, 1
.LBB_test_2: ;
or r3, r2, r2
blr
instead of:
_test:
rlwinm r2, r3, 0, 31, 31
li r2, 17
li r4, 1
cmpwi cr0, r3, 0
bne .LBB_test_2 ;
.LBB_test_1: ;
or r2, r4, r4
.LBB_test_2: ;
or r3, r2, r2
blr
... which is one fewer instruction. The savings are more significant for
global address and constantfp nodes.
llvm-svn: 22946
Diffstat (limited to 'llvm/lib/System/Program.cpp')
0 files changed, 0 insertions, 0 deletions