diff options
author | Chris Lattner <sabre@nondot.org> | 2006-11-14 06:06:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-11-14 06:06:06 +0000 |
commit | 9c2328e5a9cc0bc0beb4222e2dc18153670b4748 (patch) | |
tree | ba4ee7f0a2ac74ec139c1d71a80373796f79f138 /utils/TableGen/CodeGenTarget.cpp | |
parent | 96dddd969fde3869e6bbaca6702969183576892a (diff) |
implement InstCombine/and-compare.ll:test1. This compiles:
typedef struct { unsigned prefix : 4; unsigned code : 4; unsigned unsigned_p : 4; } tree_common;
int foo(tree_common *a, tree_common *b) { return a->code == b->code; }
into:
_foo:
movl 4(%esp), %eax
movl 8(%esp), %ecx
movl (%eax), %eax
xorl (%ecx), %eax
# TRUNCATE movb %al, %al
shrb $4, %al
testb %al, %al
sete %al
movzbl %al, %eax
ret
instead of:
_foo:
movl 8(%esp), %eax
movb (%eax), %al
shrb $4, %al
movl 4(%esp), %ecx
movb (%ecx), %cl
shrb $4, %cl
cmpb %al, %cl
sete %al
movzbl %al, %eax
ret
saving one cycle by eliminating a shift.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31727 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenTarget.cpp')
0 files changed, 0 insertions, 0 deletions