DAGCombiner: Turn divs of vector splats into vectorized multiplications.
[oota-llvm.git] / test / CodeGen / X86 / vector-idiv.ll
1 ; RUN: llc -march=x86-64 -mcpu=core2 < %s | FileCheck %s -check-prefix=SSE
2 ; RUN: llc -march=x86-64 -mcpu=core-avx2 < %s | FileCheck %s -check-prefix=AVX
3
4 define <4 x i32> @test1(<4 x i32> %a) {
5   %div = udiv <4 x i32> %a, <i32 7, i32 7, i32 7, i32 7>
6   ret <4 x i32> %div
7
8 ; SSE-LABEL: test1:
9 ; SSE: pmuludq
10 ; SSE: pshufd   $57
11 ; SSE: pmuludq
12 ; SSE: shufps   $-35
13 ; SSE: psubd
14 ; SSE: psrld $1
15 ; SSE: padd
16 ; SSE: psrld $2
17
18 ; AVX-LABEL: test1:
19 ; AVX: vpmuludq
20 ; AVX: vpshufd  $57
21 ; AVX: vpmuludq
22 ; AVX: vshufps  $-35
23 ; AVX: vpsubd
24 ; AVX: vpsrld $1
25 ; AVX: vpadd
26 ; AVX: vpsrld $2
27 }
28
29 define <8 x i32> @test2(<8 x i32> %a) {
30   %div = udiv <8 x i32> %a, <i32 7, i32 7, i32 7, i32 7,i32 7, i32 7, i32 7, i32 7>
31   ret <8 x i32> %div
32
33 ; AVX-LABEL: test2:
34 ; AVX: vpermd
35 ; AVX: vpmuludq
36 ; AVX: vshufps  $-35
37 ; AVX: vpmuludq
38 ; AVX: vshufps  $-35
39 ; AVX: vpsubd
40 ; AVX: vpsrld $1
41 ; AVX: vpadd
42 ; AVX: vpsrld $2
43 }
44
45 ; TODO: sdiv -> pmuldq