SIGN_EXTEND_INREG does not demand its top bits. Give SimplifyDemandedBits
authorChris Lattner <sabre@nondot.org>
Tue, 17 Apr 2007 19:03:21 +0000 (19:03 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 17 Apr 2007 19:03:21 +0000 (19:03 +0000)
commit95a5e0507e07fa3ef7c61aade9eb0efd1d716a25
tree5e0819e14bab28658a27d0ad6675ce695aaac06d
parent84e8315aaaf558195c73f0c04e9a1b1bc4dbd293
SIGN_EXTEND_INREG does not demand its top bits.  Give SimplifyDemandedBits
a chance to hack on it.  This compiles:

int baz(long long a) { return (short)(((int)(a >>24)) >> 9); }

into:
_baz:
        slwi r2, r3, 8
        srwi r2, r2, 9
        extsh r3, r2
        blr

instead of:

_baz:
        srwi r2, r4, 24
        rlwimi r2, r3, 8, 0, 23
        srwi r2, r2, 9
        extsh r3, r2
        blr

This implements CodeGen/PowerPC/sign_ext_inreg1.ll

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