Add support for AssertSext and AssertZext, folding other extensions with
authorNate Begeman <natebegeman@mac.com>
Tue, 30 Aug 2005 02:44:00 +0000 (02:44 +0000)
committerNate Begeman <natebegeman@mac.com>
Tue, 30 Aug 2005 02:44:00 +0000 (02:44 +0000)
commit56eb86806d5d178d42108f17d11098b3e640b996
treece499a104202367c0aa0162fc12305d36a9c0215
parentf7f3d321916c1ef3a82b2a175a368a148b1ede46
Add support for AssertSext and AssertZext, folding other extensions with
them.  This allows for elminination of redundant extends in the entry
blocks of functions on PowerPC.

Add support for i32 x i32 -> i64 multiplies, by recognizing when the inputs
to ISD::MUL in ExpandOp are actually just extended i32 values and not real
i64 values.  this allows us to codegen

int mulhs(int a, int b) { return ((long long)a * b) >> 32; }
as:
_mulhs:
        mulhw r3, r4, r3
        blr

instead of:
_mulhs:
        mulhwu r2, r4, r3
        srawi r5, r3, 31
        mullw r5, r4, r5
        add r2, r2, r5
        srawi r4, r4, 31
        mullw r3, r4, r3
        add r3, r2, r3
        blr

with a similar improvement on x86.

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