This DAG combine BRCOND transformation can look pass truncate of the operand:
authorEvan Cheng <evan.cheng@apple.com>
Mon, 4 Oct 2010 22:41:01 +0000 (22:41 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 4 Oct 2010 22:41:01 +0000 (22:41 +0000)
commit2a135ae53057ef7d0e9123d450b958d0d59d8ccc
treeb25ce125df0bf4e6321a63bfca7a9e9717b08a4c
parent48f9543404c965d3cfca16a55b8c237b02486f40
This DAG combine BRCOND transformation can look pass truncate of the operand:
    //   %a = ...
    //   %b = and i32 %a, 2
    //   %c = srl i32 %b, 1
    //   brcond i32 %c ...
    //
    // into
    //
    //   %a = ...
    //   %b = and i32 %a, 2
    //   %c = setcc eq %b, 0
    //   brcond %c ...

Make sure it restores local variable N1, which corresponds to the condition operand if it fails to match.

This apparently breaks TCE but since that backend isn't in the tree I don't have a test for it.

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