@@ -241,6 +241,30 @@ define <8 x half> @test_cvtnp_v8i16_bt(<8 x half> %a, <8 x half> %b, <4 x float>
241
241
ret <8 x half > %z
242
242
}
243
243
244
+ define <4 x i32 > @test_vshrn_const (<8 x i16 > %a ) {
245
+ ; CHECK-LABEL: @test_vshrn_const(
246
+ ; CHECK-NEXT: ret <4 x i32> zeroinitializer
247
+ ;
248
+ %y = call <8 x i16 > @llvm.arm.mve.vshrn.v8i16.v4i32 (<8 x i16 > %a , <4 x i32 > <i32 512 , i32 0 , i32 0 , i32 0 >, i32 3 , i32 0 , i32 0 , i32 0 , i32 0 , i32 1 )
249
+ %z = shufflevector <8 x i16 > %y , <8 x i16 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
250
+ %za = zext <4 x i16 > %z to <4 x i32 >
251
+ ret <4 x i32 > %za
252
+ }
253
+
254
+ define zeroext i16 @test_undef_bits () {
255
+ ; CHECK-LABEL: @test_undef_bits(
256
+ ; CHECK-NEXT: e:
257
+ ; CHECK-NEXT: ret i16 0
258
+ ;
259
+ e:
260
+ %0 = call <8 x i16 > @llvm.arm.mve.vshrn.v8i16.v4i32 (<8 x i16 > zeroinitializer , <4 x i32 > <i32 256 , i32 0 , i32 0 , i32 0 >, i32 8 , i32 1 , i32 1 , i32 1 , i32 0 , i32 1 )
261
+ %1 = shufflevector <8 x i16 > %0 , <8 x i16 > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
262
+ %2 = zext <4 x i16 > %1 to <4 x i32 >
263
+ %3 = bitcast <4 x i32 > %2 to <8 x i16 >
264
+ %4 = extractelement <8 x i16 > %3 , i32 0
265
+ ret i16 %4
266
+ }
267
+
244
268
declare <8 x i16 > @llvm.arm.mve.vshrn.v8i16.v4i32 (<8 x i16 >, <4 x i32 >, i32 , i32 , i32 , i32 , i32 , i32 )
245
269
declare <8 x i16 > @llvm.arm.mve.vshrn.predicated.v8i16.v4i32.v4i1 (<8 x i16 >, <4 x i32 >, i32 , i32 , i32 , i32 , i32 , i32 , <4 x i1 >)
246
270
declare <16 x i8 > @llvm.arm.mve.vshrn.v16i8.v8i16 (<16 x i8 >, <8 x i16 >, i32 , i32 , i32 , i32 , i32 , i32 )
0 commit comments