@@ -134,5 +134,104 @@ entry:
134134}
135135
136136
137+ define <16 x i8 > @insertzero_v8i8 (<8 x i8 > %a ) {
138+ ; CHECK-LABEL: insertzero_v8i8:
139+ ; CHECK: // %bb.0: // %entry
140+ ; CHECK-NEXT: movi v1.2d, #0000000000000000
141+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
142+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
143+ ; CHECK-NEXT: ret
144+ entry:
145+ %shuffle.i = shufflevector <8 x i8 > %a , <8 x i8 > zeroinitializer , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
146+ ret <16 x i8 > %shuffle.i
147+ }
148+
149+ define <8 x i16 > @insertzero_v4i16 (<4 x i16 > %a ) {
150+ ; CHECK-LABEL: insertzero_v4i16:
151+ ; CHECK: // %bb.0: // %entry
152+ ; CHECK-NEXT: movi v1.2d, #0000000000000000
153+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
154+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
155+ ; CHECK-NEXT: ret
156+ entry:
157+ %shuffle.i = shufflevector <4 x i16 > %a , <4 x i16 > zeroinitializer , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
158+ ret <8 x i16 > %shuffle.i
159+ }
160+
161+ define <4 x i32 > @insertzero_v2i32 (<2 x i32 > %a ) {
162+ ; CHECK-LABEL: insertzero_v2i32:
163+ ; CHECK: // %bb.0: // %entry
164+ ; CHECK-NEXT: movi v1.2d, #0000000000000000
165+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
166+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
167+ ; CHECK-NEXT: ret
168+ entry:
169+ %shuffle.i = shufflevector <2 x i32 > %a , <2 x i32 > zeroinitializer , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
170+ ret <4 x i32 > %shuffle.i
171+ }
172+
173+ define <2 x i64 > @insertzero_v1i64 (<1 x i64 > %a ) {
174+ ; CHECK-LABEL: insertzero_v1i64:
175+ ; CHECK: // %bb.0: // %entry
176+ ; CHECK-NEXT: movi v1.2d, #0000000000000000
177+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
178+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
179+ ; CHECK-NEXT: ret
180+ entry:
181+ %shuffle.i = shufflevector <1 x i64 > %a , <1 x i64 > zeroinitializer , <2 x i32 > <i32 0 , i32 1 >
182+ ret <2 x i64 > %shuffle.i
183+ }
184+
185+ define <8 x half > @insertzero_v4f16 (<4 x half > %a ) {
186+ ; CHECK-LABEL: insertzero_v4f16:
187+ ; CHECK: // %bb.0: // %entry
188+ ; CHECK-NEXT: movi d1, #0000000000000000
189+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
190+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
191+ ; CHECK-NEXT: ret
192+ entry:
193+ %shuffle.i = shufflevector <4 x half > %a , <4 x half > zeroinitializer , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
194+ ret <8 x half > %shuffle.i
195+ }
196+
197+ define <8 x bfloat> @insertzero_v4bf16 (<4 x bfloat> %a ) {
198+ ; CHECK-LABEL: insertzero_v4bf16:
199+ ; CHECK: // %bb.0: // %entry
200+ ; CHECK-NEXT: movi d4, #0000000000000000
201+ ; CHECK-NEXT: movi d5, #0000000000000000
202+ ; CHECK-NEXT: movi d6, #0000000000000000
203+ ; CHECK-NEXT: movi d7, #0000000000000000
204+ ; CHECK-NEXT: ret
205+ entry:
206+ %shuffle.i = shufflevector <4 x bfloat> %a , <4 x bfloat> zeroinitializer , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
207+ ret <8 x bfloat> %shuffle.i
208+ }
209+
210+ define <4 x float > @insertzero_v2f32 (<2 x float > %a ) {
211+ ; CHECK-LABEL: insertzero_v2f32:
212+ ; CHECK: // %bb.0: // %entry
213+ ; CHECK-NEXT: movi d1, #0000000000000000
214+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
215+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
216+ ; CHECK-NEXT: ret
217+ entry:
218+ %shuffle.i = shufflevector <2 x float > %a , <2 x float > zeroinitializer , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
219+ ret <4 x float > %shuffle.i
220+ }
221+
222+ define <2 x double > @insertzero_v1f64 (<1 x double > %a ) {
223+ ; CHECK-LABEL: insertzero_v1f64:
224+ ; CHECK: // %bb.0: // %entry
225+ ; CHECK-NEXT: movi d1, #0000000000000000
226+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
227+ ; CHECK-NEXT: mov v0.d[1], v1.d[0]
228+ ; CHECK-NEXT: ret
229+ entry:
230+ %shuffle.i = shufflevector <1 x double > %a , <1 x double > zeroinitializer , <2 x i32 > <i32 0 , i32 1 >
231+ ret <2 x double > %shuffle.i
232+ }
233+
234+
235+
137236declare <8 x i8 > @llvm.aarch64.neon.rshrn.v8i8 (<8 x i16 >, i32 )
138237declare <4 x i16 > @llvm.aarch64.neon.addp.v4i16 (<4 x i16 >, <4 x i16 >)
0 commit comments