R600: Fix R600ControlFlowFinalizer not considering VTX_READ 128 bit dst reg
[oota-llvm.git] / test / CodeGen / X86 / vec_sdiv_to_shift.ll
1 ; RUN: llc < %s -march=x86-64 -mcpu=penryn -mattr=+avx2 | FileCheck %s
2
3
4 define <8 x i16> @sdiv_vec8x16(<8 x i16> %var) {
5 entry:
6 ; CHECK: sdiv_vec8x16
7 ; CHECK: psraw  $15
8 ; CHECK: vpsrlw  $11
9 ; CHECK: vpaddw
10 ; CHECK: vpsraw  $5
11 ; CHECK: ret
12   %0 = sdiv <8 x i16> %var, <i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32>
13   ret <8 x i16> %0
14 }
15
16 define <4 x i32> @sdiv_zero(<4 x i32> %var) {
17 entry:
18 ; CHECK: sdiv_zero
19 ; CHECK-NOT: sra
20 ; CHECK: ret
21   %0 = sdiv <4 x i32> %var, <i32 0, i32 0, i32 0, i32 0>
22   ret <4 x i32> %0
23 }
24
25 define <4 x i32> @sdiv_vec4x32(<4 x i32> %var) {
26 entry:
27 ; CHECK: sdiv_vec4x32
28 ; CHECK: vpsrad $31
29 ; CHECK: vpsrld $28
30 ; CHECK: vpaddd
31 ; CHECK: vpsrad $4
32 ; CHECK: ret
33 %0 = sdiv <4 x i32> %var, <i32 16, i32 16, i32 16, i32 16>
34 ret <4 x i32> %0
35 }
36
37 define <4 x i32> @sdiv_negative(<4 x i32> %var) {
38 entry:
39 ; CHECK: sdiv_negative
40 ; CHECK: vpsrad $31
41 ; CHECK: vpsrld $28
42 ; CHECK: vpaddd
43 ; CHECK: vpsrad $4
44 ; CHECK: vpsubd
45 ; CHECK: ret
46 %0 = sdiv <4 x i32> %var, <i32 -16, i32 -16, i32 -16, i32 -16>
47 ret <4 x i32> %0
48 }
49
50 define <8 x i32> @sdiv8x32(<8 x i32> %var) {
51 entry:
52 ; CHECK: sdiv8x32
53 ; CHECK: vpsrad $31
54 ; CHECK: vpsrld $26
55 ; CHECK: vpaddd
56 ; CHECK: vpsrad $6
57 ; CHECK: ret
58 %0 = sdiv <8 x i32> %var, <i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64, i32 64>
59 ret <8 x i32> %0
60 }
61
62 define <16 x i16> @sdiv16x16(<16 x i16> %var) {
63 entry:
64 ; CHECK: sdiv16x16
65 ; CHECK: vpsraw  $15
66 ; CHECK: vpsrlw  $14
67 ; CHECK: vpaddw
68 ; CHECK: vpsraw  $2
69 ; CHECK: ret
70   %a0 = sdiv <16 x i16> %var, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
71   ret <16 x i16> %a0
72 }