blob: 98c1645b9080134cf0ab137989abef6766f194ed [file] [log] [blame]
Bruno Cardoso Lopesb878caa2011-07-21 01:55:47 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s
2
Bruno Cardoso Lopesb878caa2011-07-21 01:55:47 +00003
Chandler Carruth34f9a982014-08-02 10:27:38 +00004; CHECK: vpshufb {{.*}} ## xmm0 = xmm0[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
Bruno Cardoso Lopesb878caa2011-07-21 01:55:47 +00005; CHECK-NEXT: vinsertf128 $1
Bruno Cardoso Lopesb878caa2011-07-21 01:55:47 +00006define <32 x i8> @funcA(<32 x i8> %a) nounwind uwtable readnone ssp {
7entry:
8 %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>
9 ret <32 x i8> %shuffle
10}
11
Chandler Carruth99627bf2014-10-04 03:52:55 +000012; CHECK: vpshufb {{.*}} ## xmm0 = xmm0[10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11]
Bruno Cardoso Lopes178fb402011-07-21 02:24:08 +000013; CHECK-NEXT: vinsertf128 $1
Bruno Cardoso Lopes178fb402011-07-21 02:24:08 +000014define <16 x i16> @funcB(<16 x i16> %a) nounwind uwtable readnone ssp {
15entry:
16 %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>
17 ret <16 x i16> %shuffle
18}
19
Craig Topper72c8cd72013-10-08 05:53:50 +000020; CHECK: vmovq
Chandler Carruth99627bf2014-10-04 03:52:55 +000021; CHECK-NEXT: vunpcklpd %xmm
Bruno Cardoso Lopes123dff02011-07-25 23:05:25 +000022; CHECK-NEXT: vinsertf128 $1
23define <4 x i64> @funcC(i64 %q) nounwind uwtable readnone ssp {
24entry:
25 %vecinit.i = insertelement <4 x i64> undef, i64 %q, i32 0
26 %vecinit2.i = insertelement <4 x i64> %vecinit.i, i64 %q, i32 1
27 %vecinit4.i = insertelement <4 x i64> %vecinit2.i, i64 %q, i32 2
28 %vecinit6.i = insertelement <4 x i64> %vecinit4.i, i64 %q, i32 3
29 ret <4 x i64> %vecinit6.i
30}
31
Chandler Carruth47ebd24e2014-09-14 22:41:37 +000032; CHECK: vunpcklpd %xmm
Bruno Cardoso Lopes9e9f2ce2011-08-23 22:06:37 +000033; CHECK-NEXT: vinsertf128 $1
Bruno Cardoso Lopes123dff02011-07-25 23:05:25 +000034define <4 x double> @funcD(double %q) nounwind uwtable readnone ssp {
35entry:
36 %vecinit.i = insertelement <4 x double> undef, double %q, i32 0
37 %vecinit2.i = insertelement <4 x double> %vecinit.i, double %q, i32 1
38 %vecinit4.i = insertelement <4 x double> %vecinit2.i, double %q, i32 2
39 %vecinit6.i = insertelement <4 x double> %vecinit4.i, double %q, i32 3
40 ret <4 x double> %vecinit6.i
41}
Bruno Cardoso Lopes5ada9082011-08-02 16:06:18 +000042
Chandler Carruth2ebc9422014-07-09 10:06:58 +000043; Test this turns into a broadcast:
Bruno Cardoso Lopes5ada9082011-08-02 16:06:18 +000044; shuffle (scalar_to_vector (load (ptr + 4))), undef, <0, 0, 0, 0>
Chandler Carruth2ebc9422014-07-09 10:06:58 +000045;
46; CHECK: vbroadcastss
Bruno Cardoso Lopesa2d8bb92011-08-11 02:49:44 +000047define <8 x float> @funcE() nounwind {
Bruno Cardoso Lopes5ada9082011-08-02 16:06:18 +000048allocas:
49 %udx495 = alloca [18 x [18 x float]], align 32
50 br label %for_test505.preheader
51
52for_test505.preheader: ; preds = %for_test505.preheader, %allocas
53 br i1 undef, label %for_exit499, label %for_test505.preheader
54
55for_exit499: ; preds = %for_test505.preheader
56 br i1 undef, label %__load_and_broadcast_32.exit1249, label %load.i1247
57
58load.i1247: ; preds = %for_exit499
59 %ptr1227 = getelementptr [18 x [18 x float]]* %udx495, i64 0, i64 1, i64 1
60 %ptr.i1237 = bitcast float* %ptr1227 to i32*
61 %val.i1238 = load i32* %ptr.i1237, align 4
62 %ret6.i1245 = insertelement <8 x i32> undef, i32 %val.i1238, i32 6
63 %ret7.i1246 = insertelement <8 x i32> %ret6.i1245, i32 %val.i1238, i32 7
64 %phitmp = bitcast <8 x i32> %ret7.i1246 to <8 x float>
65 br label %__load_and_broadcast_32.exit1249
66
67__load_and_broadcast_32.exit1249: ; preds = %load.i1247, %for_exit499
68 %load_broadcast12281250 = phi <8 x float> [ %phitmp, %load.i1247 ], [ undef, %for_exit499 ]
Bruno Cardoso Lopesa2d8bb92011-08-11 02:49:44 +000069 ret <8 x float> %load_broadcast12281250
Bruno Cardoso Lopes5ada9082011-08-02 16:06:18 +000070}
71
Chandler Carruth99627bf2014-10-04 03:52:55 +000072; CHECK: vpermilps $4
Jakub Staszaka17f3f8c2012-11-26 19:24:31 +000073; CHECK-NEXT: vinsertf128 $1
Bruno Cardoso Lopes34008252011-08-17 02:29:15 +000074define <8 x float> @funcF(i32 %val) nounwind {
Bruno Cardoso Lopes572c9aa2011-08-11 02:49:41 +000075 %ret6 = insertelement <8 x i32> undef, i32 %val, i32 6
76 %ret7 = insertelement <8 x i32> %ret6, i32 %val, i32 7
77 %tmp = bitcast <8 x i32> %ret7 to <8 x float>
78 ret <8 x float> %tmp
79}
80
Chandler Carruth99627bf2014-10-04 03:52:55 +000081; CHECK: vpermilps $0
Jakub Staszaka17f3f8c2012-11-26 19:24:31 +000082; CHECK-NEXT: vinsertf128 $1
Bruno Cardoso Lopesa2d8bb92011-08-11 02:49:44 +000083define <8 x float> @funcG(<8 x float> %a) nounwind uwtable readnone ssp {
84entry:
85 %shuffle = shufflevector <8 x float> %a, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
86 ret <8 x float> %shuffle
87}
88
89; CHECK: vextractf128 $1
Chandler Carruth99627bf2014-10-04 03:52:55 +000090; CHECK-NEXT: vpermilps $85
Jakub Staszaka17f3f8c2012-11-26 19:24:31 +000091; CHECK-NEXT: vinsertf128 $1
Bruno Cardoso Lopesa2d8bb92011-08-11 02:49:44 +000092define <8 x float> @funcH(<8 x float> %a) nounwind uwtable readnone ssp {
93entry:
94 %shuffle = shufflevector <8 x float> %a, <8 x float> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
95 ret <8 x float> %shuffle
96}
97