blob: 189df8ceedfb31260e0407a9cbeaece3ad395875 [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
3define <8 x i8> @v_dup8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +00004;CHECK: v_dup8:
5;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +00006 %tmp1 = insertelement <8 x i8> zeroinitializer, i8 %A, i32 0
7 %tmp2 = insertelement <8 x i8> %tmp1, i8 %A, i32 1
8 %tmp3 = insertelement <8 x i8> %tmp2, i8 %A, i32 2
9 %tmp4 = insertelement <8 x i8> %tmp3, i8 %A, i32 3
10 %tmp5 = insertelement <8 x i8> %tmp4, i8 %A, i32 4
11 %tmp6 = insertelement <8 x i8> %tmp5, i8 %A, i32 5
12 %tmp7 = insertelement <8 x i8> %tmp6, i8 %A, i32 6
13 %tmp8 = insertelement <8 x i8> %tmp7, i8 %A, i32 7
14 ret <8 x i8> %tmp8
15}
16
17define <4 x i16> @v_dup16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000018;CHECK: v_dup16:
19;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +000020 %tmp1 = insertelement <4 x i16> zeroinitializer, i16 %A, i32 0
21 %tmp2 = insertelement <4 x i16> %tmp1, i16 %A, i32 1
22 %tmp3 = insertelement <4 x i16> %tmp2, i16 %A, i32 2
23 %tmp4 = insertelement <4 x i16> %tmp3, i16 %A, i32 3
24 ret <4 x i16> %tmp4
25}
26
27define <2 x i32> @v_dup32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000028;CHECK: v_dup32:
29;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000030 %tmp1 = insertelement <2 x i32> zeroinitializer, i32 %A, i32 0
31 %tmp2 = insertelement <2 x i32> %tmp1, i32 %A, i32 1
32 ret <2 x i32> %tmp2
33}
34
35define <2 x float> @v_dupfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000036;CHECK: v_dupfloat:
37;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000038 %tmp1 = insertelement <2 x float> zeroinitializer, float %A, i32 0
39 %tmp2 = insertelement <2 x float> %tmp1, float %A, i32 1
40 ret <2 x float> %tmp2
41}
42
43define <16 x i8> @v_dupQ8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000044;CHECK: v_dupQ8:
45;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +000046 %tmp1 = insertelement <16 x i8> zeroinitializer, i8 %A, i32 0
47 %tmp2 = insertelement <16 x i8> %tmp1, i8 %A, i32 1
48 %tmp3 = insertelement <16 x i8> %tmp2, i8 %A, i32 2
49 %tmp4 = insertelement <16 x i8> %tmp3, i8 %A, i32 3
50 %tmp5 = insertelement <16 x i8> %tmp4, i8 %A, i32 4
51 %tmp6 = insertelement <16 x i8> %tmp5, i8 %A, i32 5
52 %tmp7 = insertelement <16 x i8> %tmp6, i8 %A, i32 6
53 %tmp8 = insertelement <16 x i8> %tmp7, i8 %A, i32 7
54 %tmp9 = insertelement <16 x i8> %tmp8, i8 %A, i32 8
55 %tmp10 = insertelement <16 x i8> %tmp9, i8 %A, i32 9
56 %tmp11 = insertelement <16 x i8> %tmp10, i8 %A, i32 10
57 %tmp12 = insertelement <16 x i8> %tmp11, i8 %A, i32 11
58 %tmp13 = insertelement <16 x i8> %tmp12, i8 %A, i32 12
59 %tmp14 = insertelement <16 x i8> %tmp13, i8 %A, i32 13
60 %tmp15 = insertelement <16 x i8> %tmp14, i8 %A, i32 14
61 %tmp16 = insertelement <16 x i8> %tmp15, i8 %A, i32 15
62 ret <16 x i8> %tmp16
63}
64
65define <8 x i16> @v_dupQ16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000066;CHECK: v_dupQ16:
67;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +000068 %tmp1 = insertelement <8 x i16> zeroinitializer, i16 %A, i32 0
69 %tmp2 = insertelement <8 x i16> %tmp1, i16 %A, i32 1
70 %tmp3 = insertelement <8 x i16> %tmp2, i16 %A, i32 2
71 %tmp4 = insertelement <8 x i16> %tmp3, i16 %A, i32 3
72 %tmp5 = insertelement <8 x i16> %tmp4, i16 %A, i32 4
73 %tmp6 = insertelement <8 x i16> %tmp5, i16 %A, i32 5
74 %tmp7 = insertelement <8 x i16> %tmp6, i16 %A, i32 6
75 %tmp8 = insertelement <8 x i16> %tmp7, i16 %A, i32 7
76 ret <8 x i16> %tmp8
77}
78
79define <4 x i32> @v_dupQ32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000080;CHECK: v_dupQ32:
81;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000082 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %A, i32 0
83 %tmp2 = insertelement <4 x i32> %tmp1, i32 %A, i32 1
84 %tmp3 = insertelement <4 x i32> %tmp2, i32 %A, i32 2
85 %tmp4 = insertelement <4 x i32> %tmp3, i32 %A, i32 3
86 ret <4 x i32> %tmp4
87}
88
89define <4 x float> @v_dupQfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +000090;CHECK: v_dupQfloat:
91;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +000092 %tmp1 = insertelement <4 x float> zeroinitializer, float %A, i32 0
93 %tmp2 = insertelement <4 x float> %tmp1, float %A, i32 1
94 %tmp3 = insertelement <4 x float> %tmp2, float %A, i32 2
95 %tmp4 = insertelement <4 x float> %tmp3, float %A, i32 3
96 ret <4 x float> %tmp4
97}
98
99; Check to make sure it works with shuffles, too.
100
101define <8 x i8> @v_shuffledup8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000102;CHECK: v_shuffledup8:
103;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +0000104 %tmp1 = insertelement <8 x i8> undef, i8 %A, i32 0
105 %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> zeroinitializer
106 ret <8 x i8> %tmp2
107}
108
109define <4 x i16> @v_shuffledup16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000110;CHECK: v_shuffledup16:
111;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +0000112 %tmp1 = insertelement <4 x i16> undef, i16 %A, i32 0
113 %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32> zeroinitializer
114 ret <4 x i16> %tmp2
115}
116
117define <2 x i32> @v_shuffledup32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000118;CHECK: v_shuffledup32:
119;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000120 %tmp1 = insertelement <2 x i32> undef, i32 %A, i32 0
121 %tmp2 = shufflevector <2 x i32> %tmp1, <2 x i32> undef, <2 x i32> zeroinitializer
122 ret <2 x i32> %tmp2
123}
124
125define <2 x float> @v_shuffledupfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000126;CHECK: v_shuffledupfloat:
127;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000128 %tmp1 = insertelement <2 x float> undef, float %A, i32 0
129 %tmp2 = shufflevector <2 x float> %tmp1, <2 x float> undef, <2 x i32> zeroinitializer
130 ret <2 x float> %tmp2
131}
132
133define <16 x i8> @v_shuffledupQ8(i8 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000134;CHECK: v_shuffledupQ8:
135;CHECK: vdup.8
Bob Wilson5bafff32009-06-22 23:27:02 +0000136 %tmp1 = insertelement <16 x i8> undef, i8 %A, i32 0
137 %tmp2 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <16 x i32> zeroinitializer
138 ret <16 x i8> %tmp2
139}
140
141define <8 x i16> @v_shuffledupQ16(i16 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000142;CHECK: v_shuffledupQ16:
143;CHECK: vdup.16
Bob Wilson5bafff32009-06-22 23:27:02 +0000144 %tmp1 = insertelement <8 x i16> undef, i16 %A, i32 0
145 %tmp2 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <8 x i32> zeroinitializer
146 ret <8 x i16> %tmp2
147}
148
149define <4 x i32> @v_shuffledupQ32(i32 %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000150;CHECK: v_shuffledupQ32:
151;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000152 %tmp1 = insertelement <4 x i32> undef, i32 %A, i32 0
153 %tmp2 = shufflevector <4 x i32> %tmp1, <4 x i32> undef, <4 x i32> zeroinitializer
154 ret <4 x i32> %tmp2
155}
156
157define <4 x float> @v_shuffledupQfloat(float %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000158;CHECK: v_shuffledupQfloat:
159;CHECK: vdup.32
Bob Wilson5bafff32009-06-22 23:27:02 +0000160 %tmp1 = insertelement <4 x float> undef, float %A, i32 0
161 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> undef, <4 x i32> zeroinitializer
162 ret <4 x float> %tmp2
163}
Anton Korobeynikov32a1b252009-08-07 22:36:50 +0000164
165define <2 x float> @v_shuffledupfloat2(float* %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000166;CHECK: v_shuffledupfloat2:
167;CHECK: vdup.32
Anton Korobeynikov32a1b252009-08-07 22:36:50 +0000168 %tmp0 = load float* %A
169 %tmp1 = insertelement <2 x float> undef, float %tmp0, i32 0
170 %tmp2 = shufflevector <2 x float> %tmp1, <2 x float> undef, <2 x i32> zeroinitializer
171 ret <2 x float> %tmp2
172}
173
174define <4 x float> @v_shuffledupQfloat2(float* %A) nounwind {
Bob Wilson6aa97752009-09-04 04:07:19 +0000175;CHECK: v_shuffledupQfloat2:
176;CHECK: vdup.32
Anton Korobeynikov32a1b252009-08-07 22:36:50 +0000177 %tmp0 = load float* %A
178 %tmp1 = insertelement <4 x float> undef, float %tmp0, i32 0
179 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> undef, <4 x i32> zeroinitializer
180 ret <4 x float> %tmp2
181}