[SystemZ] Define remainig *MUL_LOHI patterns
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Wed, 21 Aug 2013 09:34:56 +0000 (09:34 +0000)
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Wed, 21 Aug 2013 09:34:56 +0000 (09:34 +0000)
commit7d86e47d04a76362c2621f6aa2f82b83eb068347
treec84b8048ee44c51b263a25a2e11acb3db1d25bf5
parentca2cbc98367b122d76a9807f28dc9ea158c4be80
[SystemZ] Define remainig *MUL_LOHI patterns

The initial port used MLG(R) for i64 UMUL_LOHI but left the other three
combinations as not-legal-or-custom.  Although 32x32->{32,32}
multiplications exist, they're not as quick as doing a normal 64-bit
multiplication, so it didn't seem like i32 SMUL_LOHI and UMUL_LOHI
would be useful.  There's also no direct instruction for i64 SMUL_LOHI,
so it needs to be implemented in terms of UMUL_LOHI.

However, not defining these patterns means that we don't convert
division by a constant into multiplication, so this patch fills
in the other cases.  The new i64 SMUL_LOHI sequence is simpler
than the one that we used previously for 64x64->128 multiplication,
so int-mul-08.ll now tests the full sequence.

llvm-svn: 188898
llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
llvm/lib/Target/SystemZ/SystemZISelLowering.h
llvm/test/CodeGen/SystemZ/int-div-06.ll [new file with mode: 0644]
llvm/test/CodeGen/SystemZ/int-mul-08.ll