add two dag combines:
authorChris Lattner <sabre@nondot.org>
Thu, 2 Feb 2006 06:36:13 +0000 (06:36 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 2 Feb 2006 06:36:13 +0000 (06:36 +0000)
commitb3ddfc42af8d6f5c4b168797ccbcb6b55cb9397f
tree48da9ad1b26d449b44dbdf7fff0f6de17032e086
parent29dd2d7d15aeeb6cf2502e7056f4915ed2ba45e0
add two dag combines:
(C1-X) == C2 --> X == C1-C2
(X+C1) == C2 --> X == C2-C1

This allows us to compile this:

bool %X(int %X) {
        %Y = add int %X, 14
        %Z = setne int %Y, 12345
        ret bool %Z
}

into this:

_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret

not this:

_X:
        movl $14, %eax
        addl 4(%esp), %eax
        cmpl $12345, %eax
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret

Testcase here: Regression/CodeGen/X86/compare-add.ll

nukage of the and coming up next.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25898 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp