implement InstCombine/and-compare.ll:test1. This compiles:
authorChris Lattner <sabre@nondot.org>
Tue, 14 Nov 2006 06:06:06 +0000 (06:06 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 14 Nov 2006 06:06:06 +0000 (06:06 +0000)
commit9c2328e5a9cc0bc0beb4222e2dc18153670b4748
treeba4ee7f0a2ac74ec139c1d71a80373796f79f138
parent96dddd969fde3869e6bbaca6702969183576892a
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
lib/Transforms/Scalar/InstructionCombining.cpp