Add a few patterns to match allzeros without having to use the fp unit.
[oota-llvm.git] / test / CodeGen / X86 / avx-256-splat.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s
2
3 ; FIXME: use avx versions for punpcklbw, punpckhbw and punpckhwd
4
5 ; CHECK: vextractf128 $0
6 ; CHECK-NEXT: punpcklbw
7 ; CHECK-NEXT: punpckhbw
8 ; CHECK-NEXT: vinsertf128 $1
9 ; CHECK-NEXT: vpermilps $85
10 define <32 x i8> @funcA(<32 x i8> %a) nounwind uwtable readnone ssp {
11 entry:
12   %shuffle = shufflevector <32 x i8> %a, <32 x i8> undef, <32 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
13   ret <32 x i8> %shuffle
14 }
15
16 ; CHECK: vextractf128 $0
17 ; CHECK-NEXT: punpckhwd
18 ; CHECK-NEXT: vinsertf128 $1
19 ; CHECK-NEXT: vpermilps $85
20 define <16 x i16> @funcB(<16 x i16> %a) nounwind uwtable readnone ssp {
21 entry:
22   %shuffle = shufflevector <16 x i16> %a, <16 x i16> undef, <16 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
23   ret <16 x i16> %shuffle
24 }
25
26 ; CHECK: vmovd
27 ; CHECK-NEXT: movlhps
28 ; CHECK-NEXT: vinsertf128 $1
29 define <4 x i64> @funcC(i64 %q) nounwind uwtable readnone ssp {
30 entry:
31   %vecinit.i = insertelement <4 x i64> undef, i64 %q, i32 0
32   %vecinit2.i = insertelement <4 x i64> %vecinit.i, i64 %q, i32 1
33   %vecinit4.i = insertelement <4 x i64> %vecinit2.i, i64 %q, i32 2
34   %vecinit6.i = insertelement <4 x i64> %vecinit4.i, i64 %q, i32 3
35   ret <4 x i64> %vecinit6.i
36 }
37
38 ; CHECK: vshufpd
39 ; CHECK-NEXT: vinsertf128 $1
40 define <4 x double> @funcD(double %q) nounwind uwtable readnone ssp {
41 entry:
42   %vecinit.i = insertelement <4 x double> undef, double %q, i32 0
43   %vecinit2.i = insertelement <4 x double> %vecinit.i, double %q, i32 1
44   %vecinit4.i = insertelement <4 x double> %vecinit2.i, double %q, i32 2
45   %vecinit6.i = insertelement <4 x double> %vecinit4.i, double %q, i32 3
46   ret <4 x double> %vecinit6.i
47 }