summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/vector-idiv.ll
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-07-26 01:52:13 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-07-26 01:52:13 +0000
commit1bf4d19172879e42eeb595e6337e8b358f6469c9 (patch)
tree1a7819a3c23231c930dc8ab8e8ef79b0a24bce2e /llvm/test/CodeGen/X86/vector-idiv.ll
parente87e5ce5d687a7f1223faa652add3b3b937ae30f (diff)
downloadbcm5719-llvm-1bf4d19172879e42eeb595e6337e8b358f6469c9.tar.gz
bcm5719-llvm-1bf4d19172879e42eeb595e6337e8b358f6469c9.zip
[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
Diffstat (limited to 'llvm/test/CodeGen/X86/vector-idiv.ll')
-rw-r--r--llvm/test/CodeGen/X86/vector-idiv.ll16
1 files changed, 5 insertions, 11 deletions
diff --git a/llvm/test/CodeGen/X86/vector-idiv.ll b/llvm/test/CodeGen/X86/vector-idiv.ll
index ec1ce3da5e1..0214a47f44c 100644
--- a/llvm/test/CodeGen/X86/vector-idiv.ll
+++ b/llvm/test/CodeGen/X86/vector-idiv.ll
@@ -131,18 +131,12 @@ define <4 x i32> @test8(<4 x i32> %a) {
; SSE41: psrad $2
; SSE41: padd
+; FIXME: scalarized -- there is no signed multiply in SSE.
; SSE-LABEL: test8:
-; SSE: pmuludq
-; SSE: pshufd $49
-; SSE: pshufd $49
-; SSE: pmuludq
-; SSE: shufps $-35
-; SSE: pshufd $-40
-; SSE: psubd
-; SSE: padd
-; SSE: psrld $31
-; SSE: psrad $2
-; SSE: padd
+; SSE: imulq
+; SSE: imulq
+; SSE: imulq
+; SSE: imulq
; AVX-LABEL: test8:
; AVX: vpmuldq
OpenPOWER on IntegriCloud