Make test platform agnostic.
[oota-llvm.git] / test / CodeGen / X86 / vshift-4.ll
1 ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 -disable-mmx -o %t -f
2 ; RUN: grep psllq %t | count 1
3 ; RUN: grep pslld %t | count 3
4 ; RUN: grep psllw %t | count 2
5
6 ; test vector shifts converted to proper SSE2 vector shifts when the shift
7 ; amounts are the same when using a shuffle splat.
8
9 define void @shift1a(<2 x i64> %val, <2 x i64>* %dst, <2 x i64> %sh) nounwind {
10 entry:
11   %shamt = shufflevector <2 x i64> %sh, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
12   %shl = shl <2 x i64> %val, %shamt
13   store <2 x i64> %shl, <2 x i64>* %dst
14   ret void
15 }
16
17 define void @shift1b(<2 x i64> %val, <2 x i64>* %dst, <2 x i64> %sh) nounwind {
18 entry:
19   %shamt = shufflevector <2 x i64> %sh, <2 x i64> undef, <2 x i32> <i32 0, i32 1>
20   %shl = shl <2 x i64> %val, %shamt
21   store <2 x i64> %shl, <2 x i64>* %dst
22   ret void
23 }
24
25 define void @shift2a(<4 x i32> %val, <4 x i32>* %dst, <2 x i32> %amt) nounwind {
26 entry:
27   %shamt = shufflevector <2 x i32> %amt, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
28   %shl = shl <4 x i32> %val, %shamt
29   store <4 x i32> %shl, <4 x i32>* %dst
30   ret void
31 }
32
33 define void @shift2b(<4 x i32> %val, <4 x i32>* %dst, <2 x i32> %amt) nounwind {
34 entry:
35   %shamt = shufflevector <2 x i32> %amt, <2 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 1, i32 1>
36   %shl = shl <4 x i32> %val, %shamt
37   store <4 x i32> %shl, <4 x i32>* %dst
38   ret void
39 }
40
41 define void @shift2c(<4 x i32> %val, <4 x i32>* %dst, <2 x i32> %amt) nounwind {
42 entry:
43   %shamt = shufflevector <2 x i32> %amt, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
44   %shl = shl <4 x i32> %val, %shamt
45   store <4 x i32> %shl, <4 x i32>* %dst
46   ret void
47 }
48
49 define void @shift3a(<8 x i16> %val, <8 x i16>* %dst, <8 x i16> %amt) nounwind {
50 entry:
51   %shamt = shufflevector <8 x i16> %amt, <8 x i16> undef, <8 x i32> <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>
52   %shl = shl <8 x i16> %val, %shamt
53   store <8 x i16> %shl, <8 x i16>* %dst
54   ret void
55 }
56
57 define void @shift3b(<8 x i16> %val, <8 x i16>* %dst, i16 %amt) nounwind {
58 entry:
59   %0 = insertelement <8 x i16> undef, i16 %amt, i32 0
60   %1 = insertelement <8 x i16> %0, i16 %amt, i32 1
61   %2 = insertelement <8 x i16> %0, i16 %amt, i32 2
62   %3 = insertelement <8 x i16> %0, i16 %amt, i32 3
63   %4 = insertelement <8 x i16> %0, i16 %amt, i32 4
64   %5 = insertelement <8 x i16> %0, i16 %amt, i32 5
65   %6 = insertelement <8 x i16> %0, i16 %amt, i32 6
66   %7 = insertelement <8 x i16> %0, i16 %amt, i32 7
67   %shl = shl <8 x i16> %val, %7
68   store <8 x i16> %shl, <8 x i16>* %dst
69   ret void
70 }
71