diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-01-18 16:17:27 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-01-18 16:17:27 +0000 |
commit | 67c32a98315f785a9ec9d531c1f571a0196c7463 (patch) | |
tree | 4abb9cbeecc7901726dd0b4a37369596c852e9ef /test/CodeGen/X86/pmul.ll | |
parent | 9f61947910e6ab40de38e6b4034751ef1513200f (diff) | |
download | src-67c32a98315f785a9ec9d531c1f571a0196c7463.tar.gz src-67c32a98315f785a9ec9d531c1f571a0196c7463.zip |
Vendor import of llvm RELEASE_360/rc1 tag r226102 (effectively, 3.6.0 RC1):vendor/llvm/llvm-release_360-r226102
Notes
Notes:
svn path=/vendor/llvm/dist/; revision=277323
svn path=/vendor/llvm/llvm-release_360-r226102/; revision=277324; tag=vendor/llvm/llvm-release_360-r226102
Diffstat (limited to 'test/CodeGen/X86/pmul.ll')
-rw-r--r-- | test/CodeGen/X86/pmul.ll | 100 |
1 files changed, 82 insertions, 18 deletions
diff --git a/test/CodeGen/X86/pmul.ll b/test/CodeGen/X86/pmul.ll index 7bf8a618fa77..8937d6afa0ae 100644 --- a/test/CodeGen/X86/pmul.ll +++ b/test/CodeGen/X86/pmul.ll @@ -1,32 +1,96 @@ -; RUN: llc < %s -march=x86 -mattr=sse4.1 -mcpu=nehalem -stack-alignment=16 > %t -; RUN: grep pmul %t | count 12 -; RUN: grep mov %t | count 14 +; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=ALL --check-prefix=SSE2 +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE41 define <4 x i32> @a(<4 x i32> %i) nounwind { - %A = mul <4 x i32> %i, < i32 117, i32 117, i32 117, i32 117 > - ret <4 x i32> %A +; SSE2-LABEL: a: +; SSE2: movdqa {{.*}}, %[[X1:xmm[0-9]+]] +; SSE2-NEXT: pshufd {{.*}} # [[X2:xmm[0-9]+]] = xmm0[1,1,3,3] +; SSE2-NEXT: pmuludq %[[X1]], %xmm0 +; SSE2-NEXT: pmuludq %[[X1]], %[[X2]] +; SSE2-NEXT: shufps {{.*}} # xmm0 = xmm0[0,2],[[X2]][0,2] +; SSE2-NEXT: shufps {{.*}} # xmm0 = xmm0[0,2,1,3] +; SSE2-NEXT: retq +; +; SSE41-LABEL: a: +; SSE41: pmulld +; SSE41-NEXT: retq +entry: + %A = mul <4 x i32> %i, < i32 117, i32 117, i32 117, i32 117 > + ret <4 x i32> %A } + define <2 x i64> @b(<2 x i64> %i) nounwind { - %A = mul <2 x i64> %i, < i64 117, i64 117 > - ret <2 x i64> %A +; ALL-LABEL: b: +; ALL: pmuludq +; ALL: pmuludq +; ALL: pmuludq +entry: + %A = mul <2 x i64> %i, < i64 117, i64 117 > + ret <2 x i64> %A } + define <4 x i32> @c(<4 x i32> %i, <4 x i32> %j) nounwind { - %A = mul <4 x i32> %i, %j - ret <4 x i32> %A +; SSE2-LABEL: c: +; SSE2: pshufd {{.*}} # [[X2:xmm[0-9]+]] = xmm0[1,1,3,3] +; SSE2-NEXT: pmuludq %xmm1, %xmm0 +; SSE2-NEXT: pshufd {{.*}} # xmm1 = xmm1[1,1,3,3] +; SSE2-NEXT: pmuludq %[[X2]], %xmm1 +; SSE2-NEXT: shufps {{.*}} # xmm0 = xmm0[0,2],xmm1[0,2] +; SSE2-NEXT: shufps {{.*}} # xmm0 = xmm0[0,2,1,3] +; SSE2-NEXT: retq +; +; SSE41-LABEL: c: +; SSE41: pmulld +; SSE41-NEXT: retq +entry: + %A = mul <4 x i32> %i, %j + ret <4 x i32> %A } + define <2 x i64> @d(<2 x i64> %i, <2 x i64> %j) nounwind { - %A = mul <2 x i64> %i, %j - ret <2 x i64> %A +; ALL-LABEL: d: +; ALL: pmuludq +; ALL: pmuludq +; ALL: pmuludq +entry: + %A = mul <2 x i64> %i, %j + ret <2 x i64> %A } -; Use a call to force spills. + declare void @foo() + define <4 x i32> @e(<4 x i32> %i, <4 x i32> %j) nounwind { - call void @foo() - %A = mul <4 x i32> %i, %j - ret <4 x i32> %A +; SSE2-LABEL: e: +; SSE2: movdqa {{[0-9]*}}(%rsp), %xmm0 +; SSE2-NEXT: pshufd {{.*}} # [[X1:xmm[0-9]+]] = xmm0[1,1,3,3] +; SSE2-NEXT: movdqa {{[0-9]*}}(%rsp), %[[X2:xmm[0-9]+]] +; SSE2-NEXT: pmuludq %[[X2]], %xmm0 +; SSE2-NEXT: pshufd {{.*}} # [[X2]] = [[X2]][1,1,3,3] +; SSE2-NEXT: pmuludq %[[X1]], %[[X2]] +; SSE2-NEXT: shufps {{.*}} # xmm0 = xmm0[0,2],[[X2]][0,2] +; SSE2-NEXT: shufps {{.*}} # xmm0 = xmm0[0,2,1,3] +; SSE2-NEXT: addq ${{[0-9]+}}, %rsp +; SSE2-NEXT: retq +; +; SSE41-LABEL: e: +; SSE41: pmulld {{[0-9]+}}(%rsp), %xmm +; SSE41-NEXT: addq ${{[0-9]+}}, %rsp +; SSE41-NEXT: retq +entry: + ; Use a call to force spills. + call void @foo() + %A = mul <4 x i32> %i, %j + ret <4 x i32> %A } + define <2 x i64> @f(<2 x i64> %i, <2 x i64> %j) nounwind { - call void @foo() - %A = mul <2 x i64> %i, %j - ret <2 x i64> %A +; ALL-LABEL: f: +; ALL: pmuludq +; ALL: pmuludq +; ALL: pmuludq +entry: + ; Use a call to force spills. + call void @foo() + %A = mul <2 x i64> %i, %j + ret <2 x i64> %A } |