diff options
author | Chris Lattner <sabre@nondot.org> | 2005-01-10 02:03:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-01-10 02:03:02 +0000 |
commit | 68dc3109420f38d639fb2e9fed6f1a29df60795b (patch) | |
tree | 8a3d68e3d7f565affc847022a9de71bdabbf2343 /lib/Transforms/IPO/LoopExtractor.cpp | |
parent | 87ae6ae41cde4548b55bcc19da36dc0ad7e021df (diff) |
Implement a couple of more simplifications. This lets us codegen:
int test2(int * P, int* Q, int A, int B) {
return P+A == P;
}
into:
test2:
movl 4(%esp), %eax
movl 12(%esp), %eax
shll $2, %eax
cmpl $0, %eax
sete %al
movzbl %al, %eax
ret
instead of:
test2:
movl 4(%esp), %eax
movl 12(%esp), %ecx
leal (%eax,%ecx,4), %ecx
cmpl %eax, %ecx
sete %al
movzbl %al, %eax
ret
ICC is producing worse code:
test2:
movl 4(%esp), %eax #8.5
movl 12(%esp), %edx #8.5
lea (%edx,%edx), %ecx #9.9
addl %ecx, %ecx #9.9
addl %eax, %ecx #9.9
cmpl %eax, %ecx #9.16
movl $0, %eax #9.16
sete %al #9.16
ret #9.16
as is GCC (looks like our old code):
test2:
movl 4(%esp), %edx
movl 12(%esp), %eax
leal (%edx,%eax,4), %ecx
cmpl %edx, %ecx
sete %al
movzbl %al, %eax
ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19430 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO/LoopExtractor.cpp')
0 files changed, 0 insertions, 0 deletions