blob: 0d0087b973343cb92464dbb053db911001447642 [file] [log] [blame]
Bob Wilson6aa97752009-09-04 04:07:19 +00001; RUN: llvm-as < %s | llc -march=arm -mattr=+neon | FileCheck %s
Bob Wilson5bafff32009-06-22 23:27:02 +00002; RUN: grep vdup.8 %t | count 4
3; RUN: grep vdup.16 %t | count 4
Anton Korobeynikov32a1b252009-08-07 22:36:50 +00004; RUN: grep vdup.32 %t | count 10
Bob Wilson5bafff32009-06-22 23:27:02 +00005
6define <8 x i8> @v_dup8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +00007;CHECK: v_dup8:
8;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +00009 %tmp1 = insertelement <8 x i8> zeroinitializer, i8 %A, i32 0
10 %tmp2 = insertelement <8 x i8> %tmp1, i8 %A, i32 1
11 %tmp3 = insertelement <8 x i8> %tmp2, i8 %A, i32 2
12 %tmp4 = insertelement <8 x i8> %tmp3, i8 %A, i32 3
13 %tmp5 = insertelement <8 x i8> %tmp4, i8 %A, i32 4
14 %tmp6 = insertelement <8 x i8> %tmp5, i8 %A, i32 5
15 %tmp7 = insertelement <8 x i8> %tmp6, i8 %A, i32 6
16 %tmp8 = insertelement <8 x i8> %tmp7, i8 %A, i32 7
17 ret <8 x i8> %tmp8
18}
19
20define <4 x i16> @v_dup16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000021;CHECK: v_dup16:
22;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +000023 %tmp1 = insertelement <4 x i16> zeroinitializer, i16 %A, i32 0
24 %tmp2 = insertelement <4 x i16> %tmp1, i16 %A, i32 1
25 %tmp3 = insertelement <4 x i16> %tmp2, i16 %A, i32 2
26 %tmp4 = insertelement <4 x i16> %tmp3, i16 %A, i32 3
27 ret <4 x i16> %tmp4
28}
29
30define <2 x i32> @v_dup32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000031;CHECK: v_dup32:
32;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000033 %tmp1 = insertelement <2 x i32> zeroinitializer, i32 %A, i32 0
34 %tmp2 = insertelement <2 x i32> %tmp1, i32 %A, i32 1
35 ret <2 x i32> %tmp2
36}
37
38define <2 x float> @v_dupfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000039;CHECK: v_dupfloat:
40;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000041 %tmp1 = insertelement <2 x float> zeroinitializer, float %A, i32 0
42 %tmp2 = insertelement <2 x float> %tmp1, float %A, i32 1
43 ret <2 x float> %tmp2
44}
45
46define <16 x i8> @v_dupQ8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000047;CHECK: v_dupQ8:
48;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +000049 %tmp1 = insertelement <16 x i8> zeroinitializer, i8 %A, i32 0
50 %tmp2 = insertelement <16 x i8> %tmp1, i8 %A, i32 1
51 %tmp3 = insertelement <16 x i8> %tmp2, i8 %A, i32 2
52 %tmp4 = insertelement <16 x i8> %tmp3, i8 %A, i32 3
53 %tmp5 = insertelement <16 x i8> %tmp4, i8 %A, i32 4
54 %tmp6 = insertelement <16 x i8> %tmp5, i8 %A, i32 5
55 %tmp7 = insertelement <16 x i8> %tmp6, i8 %A, i32 6
56 %tmp8 = insertelement <16 x i8> %tmp7, i8 %A, i32 7
57 %tmp9 = insertelement <16 x i8> %tmp8, i8 %A, i32 8
58 %tmp10 = insertelement <16 x i8> %tmp9, i8 %A, i32 9
59 %tmp11 = insertelement <16 x i8> %tmp10, i8 %A, i32 10
60 %tmp12 = insertelement <16 x i8> %tmp11, i8 %A, i32 11
61 %tmp13 = insertelement <16 x i8> %tmp12, i8 %A, i32 12
62 %tmp14 = insertelement <16 x i8> %tmp13, i8 %A, i32 13
63 %tmp15 = insertelement <16 x i8> %tmp14, i8 %A, i32 14
64 %tmp16 = insertelement <16 x i8> %tmp15, i8 %A, i32 15
65 ret <16 x i8> %tmp16
66}
67
68define <8 x i16> @v_dupQ16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000069;CHECK: v_dupQ16:
70;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +000071 %tmp1 = insertelement <8 x i16> zeroinitializer, i16 %A, i32 0
72 %tmp2 = insertelement <8 x i16> %tmp1, i16 %A, i32 1
73 %tmp3 = insertelement <8 x i16> %tmp2, i16 %A, i32 2
74 %tmp4 = insertelement <8 x i16> %tmp3, i16 %A, i32 3
75 %tmp5 = insertelement <8 x i16> %tmp4, i16 %A, i32 4
76 %tmp6 = insertelement <8 x i16> %tmp5, i16 %A, i32 5
77 %tmp7 = insertelement <8 x i16> %tmp6, i16 %A, i32 6
78 %tmp8 = insertelement <8 x i16> %tmp7, i16 %A, i32 7
79 ret <8 x i16> %tmp8
80}
81
82define <4 x i32> @v_dupQ32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000083;CHECK: v_dupQ32:
84;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000085 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %A, i32 0
86 %tmp2 = insertelement <4 x i32> %tmp1, i32 %A, i32 1
87 %tmp3 = insertelement <4 x i32> %tmp2, i32 %A, i32 2
88 %tmp4 = insertelement <4 x i32> %tmp3, i32 %A, i32 3
89 ret <4 x i32> %tmp4
90}
91
92define <4 x float> @v_dupQfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000093;CHECK: v_dupQfloat:
94;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000095 %tmp1 = insertelement <4 x float> zeroinitializer, float %A, i32 0
96 %tmp2 = insertelement <4 x float> %tmp1, float %A, i32 1
97 %tmp3 = insertelement <4 x float> %tmp2, float %A, i32 2
98 %tmp4 = insertelement <4 x float> %tmp3, float %A, i32 3
99 ret <4 x float> %tmp4
100}
101
102; Check to make sure it works with shuffles, too.
103
104define <8 x i8> @v_shuffledup8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000105;CHECK: v_shuffledup8:
106;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +0000107 %tmp1 = insertelement <8 x i8> undef, i8 %A, i32 0
108 %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> zeroinitializer
109 ret <8 x i8> %tmp2
110}
111
112define <4 x i16> @v_shuffledup16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000113;CHECK: v_shuffledup16:
114;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +0000115 %tmp1 = insertelement <4 x i16> undef, i16 %A, i32 0
116 %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32> zeroinitializer
117 ret <4 x i16> %tmp2
118}
119
120define <2 x i32> @v_shuffledup32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000121;CHECK: v_shuffledup32:
122;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000123 %tmp1 = insertelement <2 x i32> undef, i32 %A, i32 0
124 %tmp2 = shufflevector <2 x i32> %tmp1, <2 x i32> undef, <2 x i32> zeroinitializer
125 ret <2 x i32> %tmp2
126}
127
128define <2 x float> @v_shuffledupfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000129;CHECK: v_shuffledupfloat:
130;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000131 %tmp1 = insertelement <2 x float> undef, float %A, i32 0
132 %tmp2 = shufflevector <2 x float> %tmp1, <2 x float> undef, <2 x i32> zeroinitializer
133 ret <2 x float> %tmp2
134}
135
136define <16 x i8> @v_shuffledupQ8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000137;CHECK: v_shuffledupQ8:
138;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +0000139 %tmp1 = insertelement <16 x i8> undef, i8 %A, i32 0
140 %tmp2 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <16 x i32> zeroinitializer
141 ret <16 x i8> %tmp2
142}
143
144define <8 x i16> @v_shuffledupQ16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000145;CHECK: v_shuffledupQ16:
146;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +0000147 %tmp1 = insertelement <8 x i16> undef, i16 %A, i32 0
148 %tmp2 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <8 x i32> zeroinitializer
149 ret <8 x i16> %tmp2
150}
151
152define <4 x i32> @v_shuffledupQ32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000153;CHECK: v_shuffledupQ32:
154;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000155 %tmp1 = insertelement <4 x i32> undef, i32 %A, i32 0
156 %tmp2 = shufflevector <4 x i32> %tmp1, <4 x i32> undef, <4 x i32> zeroinitializer
157 ret <4 x i32> %tmp2
158}
159
160define <4 x float> @v_shuffledupQfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000161;CHECK: v_shuffledupQfloat:
162;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000163 %tmp1 = insertelement <4 x float> undef, float %A, i32 0
164 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> undef, <4 x i32> zeroinitializer
165 ret <4 x float> %tmp2
166}
Anton Korobeynikov32a1b252009-08-07 22:36:50 +0000167
168define <2 x float> @v_shuffledupfloat2(float* %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000169;CHECK: v_shuffledupfloat2:
170;CHECK: vdup.32
Anton Korobeynikov32a1b252009-08-07 22:36:50 +0000171 %tmp0 = load float* %A
172 %tmp1 = insertelement <2 x float> undef, float %tmp0, i32 0
173 %tmp2 = shufflevector <2 x float> %tmp1, <2 x float> undef, <2 x i32> zeroinitializer
174 ret <2 x float> %tmp2
175}
176
177define <4 x float> @v_shuffledupQfloat2(float* %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000178;CHECK: v_shuffledupQfloat2:
179;CHECK: vdup.32
Anton Korobeynikov32a1b252009-08-07 22:36:50 +0000180 %tmp0 = load float* %A
181 %tmp1 = insertelement <4 x float> undef, float %tmp0, i32 0
182 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> undef, <4 x i32> zeroinitializer
183 ret <4 x float> %tmp2
184}