[x86] Fix PR20355 (and dups) by not using unsigned multiplication when
authorChandler Carruth <chandlerc@gmail.com>
Sat, 26 Jul 2014 01:52:13 +0000 (01:52 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 26 Jul 2014 01:52:13 +0000 (01:52 +0000)
commit1bf4d19172879e42eeb595e6337e8b358f6469c9
tree1a7819a3c23231c930dc8ab8e8ef79b0a24bce2e
parente87e5ce5d687a7f1223faa652add3b3b937ae30f
[x86] Fix PR20355 (and dups) by not using unsigned multiplication when
signed multiplication is requested. While there is not a difference in
the *low* half of the result, the *high* half (used specifically to
implement the signed division by these constants) certainly is used. The
test case I've nuked was actively asserting wrong code.

There is a delightful solution to doing signed multiplication even when
we don't have it that Richard Smith has crafted, but I'll add the
machinery back and implement that in a follow-up patch. This at least
restores correctness.

llvm-svn: 214007
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/pmul.ll
llvm/test/CodeGen/X86/vector-idiv.ll