1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -fp-contract=fast | FileCheck %s
4 define <16 x i8> @ins16bw(<16 x i8> %tmp1, i8 %tmp2) {
5 ;CHECK: ins {{v[0-31]+}}.b[15], {{w[0-31]+}}
6 %tmp3 = insertelement <16 x i8> %tmp1, i8 %tmp2, i32 15
10 define <8 x i16> @ins8hw(<8 x i16> %tmp1, i16 %tmp2) {
11 ;CHECK: ins {{v[0-31]+}}.h[6], {{w[0-31]+}}
12 %tmp3 = insertelement <8 x i16> %tmp1, i16 %tmp2, i32 6
16 define <4 x i32> @ins4sw(<4 x i32> %tmp1, i32 %tmp2) {
17 ;CHECK: ins {{v[0-31]+}}.s[2], {{w[0-31]+}}
18 %tmp3 = insertelement <4 x i32> %tmp1, i32 %tmp2, i32 2
22 define <2 x i64> @ins2dw(<2 x i64> %tmp1, i64 %tmp2) {
23 ;CHECK: ins {{v[0-31]+}}.d[1], {{x[0-31]+}}
24 %tmp3 = insertelement <2 x i64> %tmp1, i64 %tmp2, i32 1
28 define <8 x i8> @ins8bw(<8 x i8> %tmp1, i8 %tmp2) {
29 ;CHECK: ins {{v[0-31]+}}.b[5], {{w[0-31]+}}
30 %tmp3 = insertelement <8 x i8> %tmp1, i8 %tmp2, i32 5
34 define <4 x i16> @ins4hw(<4 x i16> %tmp1, i16 %tmp2) {
35 ;CHECK: ins {{v[0-31]+}}.h[3], {{w[0-31]+}}
36 %tmp3 = insertelement <4 x i16> %tmp1, i16 %tmp2, i32 3
40 define <2 x i32> @ins2sw(<2 x i32> %tmp1, i32 %tmp2) {
41 ;CHECK: ins {{v[0-31]+}}.s[1], {{w[0-31]+}}
42 %tmp3 = insertelement <2 x i32> %tmp1, i32 %tmp2, i32 1
46 define <16 x i8> @ins16b16(<16 x i8> %tmp1, <16 x i8> %tmp2) {
47 ;CHECK: ins {{v[0-31]+}}.b[15], {{v[0-31]+}}.b[2]
48 %tmp3 = extractelement <16 x i8> %tmp1, i32 2
49 %tmp4 = insertelement <16 x i8> %tmp2, i8 %tmp3, i32 15
53 define <8 x i16> @ins8h8(<8 x i16> %tmp1, <8 x i16> %tmp2) {
54 ;CHECK: ins {{v[0-31]+}}.h[7], {{v[0-31]+}}.h[2]
55 %tmp3 = extractelement <8 x i16> %tmp1, i32 2
56 %tmp4 = insertelement <8 x i16> %tmp2, i16 %tmp3, i32 7
60 define <4 x i32> @ins4s4(<4 x i32> %tmp1, <4 x i32> %tmp2) {
61 ;CHECK: ins {{v[0-31]+}}.s[1], {{v[0-31]+}}.s[2]
62 %tmp3 = extractelement <4 x i32> %tmp1, i32 2
63 %tmp4 = insertelement <4 x i32> %tmp2, i32 %tmp3, i32 1
67 define <2 x i64> @ins2d2(<2 x i64> %tmp1, <2 x i64> %tmp2) {
68 ;CHECK: ins {{v[0-31]+}}.d[1], {{v[0-31]+}}.d[0]
69 %tmp3 = extractelement <2 x i64> %tmp1, i32 0
70 %tmp4 = insertelement <2 x i64> %tmp2, i64 %tmp3, i32 1
74 define <8 x i8> @ins8b8(<8 x i8> %tmp1, <8 x i8> %tmp2) {
75 ;CHECK: ins {{v[0-31]+}}.b[4], {{v[0-31]+}}.b[2]
76 %tmp3 = extractelement <8 x i8> %tmp1, i32 2
77 %tmp4 = insertelement <8 x i8> %tmp2, i8 %tmp3, i32 4
81 define <4 x i16> @ins4h4(<4 x i16> %tmp1, <4 x i16> %tmp2) {
82 ;CHECK: ins {{v[0-31]+}}.h[3], {{v[0-31]+}}.h[2]
83 %tmp3 = extractelement <4 x i16> %tmp1, i32 2
84 %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 3
88 define <2 x i32> @ins2s2(<2 x i32> %tmp1, <2 x i32> %tmp2) {
89 ;CHECK: ins {{v[0-31]+}}.s[1], {{v[0-31]+}}.s[0]
90 %tmp3 = extractelement <2 x i32> %tmp1, i32 0
91 %tmp4 = insertelement <2 x i32> %tmp2, i32 %tmp3, i32 1
95 define <1 x i64> @ins1d1(<1 x i64> %tmp1, <1 x i64> %tmp2) {
96 ;CHECK: ins {{v[0-31]+}}.d[0], {{v[0-31]+}}.d[0]
97 %tmp3 = extractelement <1 x i64> %tmp1, i32 0
98 %tmp4 = insertelement <1 x i64> %tmp2, i64 %tmp3, i32 0
102 define i32 @umovw16b(<16 x i8> %tmp1) {
103 ;CHECK: umov {{w[0-31]+}}, {{v[0-31]+}}.b[8]
104 %tmp3 = extractelement <16 x i8> %tmp1, i32 8
105 %tmp4 = zext i8 %tmp3 to i32
109 define i32 @umovw8h(<8 x i16> %tmp1) {
110 ;CHECK: umov {{w[0-31]+}}, {{v[0-31]+}}.h[2]
111 %tmp3 = extractelement <8 x i16> %tmp1, i32 2
112 %tmp4 = zext i16 %tmp3 to i32
116 define i32 @umovw4s(<4 x i32> %tmp1) {
117 ;CHECK: umov {{w[0-31]+}}, {{v[0-31]+}}.s[2]
118 %tmp3 = extractelement <4 x i32> %tmp1, i32 2
122 define i64 @umovx2d(<2 x i64> %tmp1) {
123 ;CHECK: umov {{x[0-31]+}}, {{v[0-31]+}}.d[0]
124 %tmp3 = extractelement <2 x i64> %tmp1, i32 0
128 define i32 @umovw8b(<8 x i8> %tmp1) {
129 ;CHECK: umov {{w[0-31]+}}, {{v[0-31]+}}.b[7]
130 %tmp3 = extractelement <8 x i8> %tmp1, i32 7
131 %tmp4 = zext i8 %tmp3 to i32
135 define i32 @umovw4h(<4 x i16> %tmp1) {
136 ;CHECK: umov {{w[0-31]+}}, {{v[0-31]+}}.h[2]
137 %tmp3 = extractelement <4 x i16> %tmp1, i32 2
138 %tmp4 = zext i16 %tmp3 to i32
142 define i32 @umovw2s(<2 x i32> %tmp1) {
143 ;CHECK: umov {{w[0-31]+}}, {{v[0-31]+}}.s[1]
144 %tmp3 = extractelement <2 x i32> %tmp1, i32 1
148 define i64 @umovx1d(<1 x i64> %tmp1) {
149 ;CHECK: fmov {{x[0-31]+}}, {{d[0-31]+}}
150 %tmp3 = extractelement <1 x i64> %tmp1, i32 0
154 define i32 @smovw16b(<16 x i8> %tmp1) {
155 ;CHECK: smov {{w[0-31]+}}, {{v[0-31]+}}.b[8]
156 %tmp3 = extractelement <16 x i8> %tmp1, i32 8
157 %tmp4 = sext i8 %tmp3 to i32
158 %tmp5 = add i32 5, %tmp4
162 define i32 @smovw8h(<8 x i16> %tmp1) {
163 ;CHECK: smov {{w[0-31]+}}, {{v[0-31]+}}.h[2]
164 %tmp3 = extractelement <8 x i16> %tmp1, i32 2
165 %tmp4 = sext i16 %tmp3 to i32
166 %tmp5 = add i32 5, %tmp4
170 define i32 @smovx16b(<16 x i8> %tmp1) {
171 ;CHECK: smov {{x[0-31]+}}, {{v[0-31]+}}.b[8]
172 %tmp3 = extractelement <16 x i8> %tmp1, i32 8
173 %tmp4 = sext i8 %tmp3 to i32
177 define i32 @smovx8h(<8 x i16> %tmp1) {
178 ;CHECK: smov {{x[0-31]+}}, {{v[0-31]+}}.h[2]
179 %tmp3 = extractelement <8 x i16> %tmp1, i32 2
180 %tmp4 = sext i16 %tmp3 to i32
184 define i64 @smovx4s(<4 x i32> %tmp1) {
185 ;CHECK: smov {{x[0-31]+}}, {{v[0-31]+}}.s[2]
186 %tmp3 = extractelement <4 x i32> %tmp1, i32 2
187 %tmp4 = sext i32 %tmp3 to i64
191 define i32 @smovw8b(<8 x i8> %tmp1) {
192 ;CHECK: smov {{w[0-31]+}}, {{v[0-31]+}}.b[4]
193 %tmp3 = extractelement <8 x i8> %tmp1, i32 4
194 %tmp4 = sext i8 %tmp3 to i32
195 %tmp5 = add i32 5, %tmp4
199 define i32 @smovw4h(<4 x i16> %tmp1) {
200 ;CHECK: smov {{w[0-31]+}}, {{v[0-31]+}}.h[2]
201 %tmp3 = extractelement <4 x i16> %tmp1, i32 2
202 %tmp4 = sext i16 %tmp3 to i32
203 %tmp5 = add i32 5, %tmp4
207 define i32 @smovx8b(<8 x i8> %tmp1) {
208 ;CHECK: smov {{x[0-31]+}}, {{v[0-31]+}}.b[6]
209 %tmp3 = extractelement <8 x i8> %tmp1, i32 6
210 %tmp4 = sext i8 %tmp3 to i32
214 define i32 @smovx4h(<4 x i16> %tmp1) {
215 ;CHECK: smov {{x[0-31]+}}, {{v[0-31]+}}.h[2]
216 %tmp3 = extractelement <4 x i16> %tmp1, i32 2
217 %tmp4 = sext i16 %tmp3 to i32
221 define i64 @smovx2s(<2 x i32> %tmp1) {
222 ;CHECK: smov {{x[0-31]+}}, {{v[0-31]+}}.s[1]
223 %tmp3 = extractelement <2 x i32> %tmp1, i32 1
224 %tmp4 = sext i32 %tmp3 to i64