1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
3 define i8 @test_vqmovunh_s16(i16 %a) {
4 ; CHECK: test_vqmovunh_s16
5 ; CHECK: sqxtun {{b[0-9]+}}, {{h[0-9]+}}
7 %vqmovun.i = insertelement <1 x i16> undef, i16 %a, i32 0
8 %vqmovun1.i = call <1 x i8> @llvm.arm.neon.vqmovnsu.v1i8(<1 x i16> %vqmovun.i)
9 %0 = extractelement <1 x i8> %vqmovun1.i, i32 0
13 define i16 @test_vqmovuns_s32(i32 %a) {
14 ; CHECK: test_vqmovuns_s32
15 ; CHECK: sqxtun {{h[0-9]+}}, {{s[0-9]+}}
17 %vqmovun.i = insertelement <1 x i32> undef, i32 %a, i32 0
18 %vqmovun1.i = call <1 x i16> @llvm.arm.neon.vqmovnsu.v1i16(<1 x i32> %vqmovun.i)
19 %0 = extractelement <1 x i16> %vqmovun1.i, i32 0
23 define i32 @test_vqmovund_s64(i64 %a) {
24 ; CHECK: test_vqmovund_s64
25 ; CHECK: sqxtun {{s[0-9]+}}, {{d[0-9]+}}
27 %vqmovun.i = insertelement <1 x i64> undef, i64 %a, i32 0
28 %vqmovun1.i = call <1 x i32> @llvm.arm.neon.vqmovnsu.v1i32(<1 x i64> %vqmovun.i)
29 %0 = extractelement <1 x i32> %vqmovun1.i, i32 0
33 declare <1 x i8> @llvm.arm.neon.vqmovnsu.v1i8(<1 x i16>)
34 declare <1 x i16> @llvm.arm.neon.vqmovnsu.v1i16(<1 x i32>)
35 declare <1 x i32> @llvm.arm.neon.vqmovnsu.v1i32(<1 x i64>)
37 define i8 @test_vqmovnh_s16(i16 %a) {
38 ; CHECK: test_vqmovnh_s16
39 ; CHECK: sqxtn {{b[0-9]+}}, {{h[0-9]+}}
41 %vqmovn.i = insertelement <1 x i16> undef, i16 %a, i32 0
42 %vqmovn1.i = call <1 x i8> @llvm.arm.neon.vqmovns.v1i8(<1 x i16> %vqmovn.i)
43 %0 = extractelement <1 x i8> %vqmovn1.i, i32 0
47 define i16 @test_vqmovns_s32(i32 %a) {
48 ; CHECK: test_vqmovns_s32
49 ; CHECK: sqxtn {{h[0-9]+}}, {{s[0-9]+}}
51 %vqmovn.i = insertelement <1 x i32> undef, i32 %a, i32 0
52 %vqmovn1.i = call <1 x i16> @llvm.arm.neon.vqmovns.v1i16(<1 x i32> %vqmovn.i)
53 %0 = extractelement <1 x i16> %vqmovn1.i, i32 0
57 define i32 @test_vqmovnd_s64(i64 %a) {
58 ; CHECK: test_vqmovnd_s64
59 ; CHECK: sqxtn {{s[0-9]+}}, {{d[0-9]+}}
61 %vqmovn.i = insertelement <1 x i64> undef, i64 %a, i32 0
62 %vqmovn1.i = call <1 x i32> @llvm.arm.neon.vqmovns.v1i32(<1 x i64> %vqmovn.i)
63 %0 = extractelement <1 x i32> %vqmovn1.i, i32 0
67 declare <1 x i8> @llvm.arm.neon.vqmovns.v1i8(<1 x i16>)
68 declare <1 x i16> @llvm.arm.neon.vqmovns.v1i16(<1 x i32>)
69 declare <1 x i32> @llvm.arm.neon.vqmovns.v1i32(<1 x i64>)
71 define i8 @test_vqmovnh_u16(i16 %a) {
72 ; CHECK: test_vqmovnh_u16
73 ; CHECK: uqxtn {{b[0-9]+}}, {{h[0-9]+}}
75 %vqmovn.i = insertelement <1 x i16> undef, i16 %a, i32 0
76 %vqmovn1.i = call <1 x i8> @llvm.arm.neon.vqmovnu.v1i8(<1 x i16> %vqmovn.i)
77 %0 = extractelement <1 x i8> %vqmovn1.i, i32 0
82 define i16 @test_vqmovns_u32(i32 %a) {
83 ; CHECK: test_vqmovns_u32
84 ; CHECK: uqxtn {{h[0-9]+}}, {{s[0-9]+}}
86 %vqmovn.i = insertelement <1 x i32> undef, i32 %a, i32 0
87 %vqmovn1.i = call <1 x i16> @llvm.arm.neon.vqmovnu.v1i16(<1 x i32> %vqmovn.i)
88 %0 = extractelement <1 x i16> %vqmovn1.i, i32 0
92 define i32 @test_vqmovnd_u64(i64 %a) {
93 ; CHECK: test_vqmovnd_u64
94 ; CHECK: uqxtn {{s[0-9]+}}, {{d[0-9]+}}
96 %vqmovn.i = insertelement <1 x i64> undef, i64 %a, i32 0
97 %vqmovn1.i = call <1 x i32> @llvm.arm.neon.vqmovnu.v1i32(<1 x i64> %vqmovn.i)
98 %0 = extractelement <1 x i32> %vqmovn1.i, i32 0
102 declare <1 x i8> @llvm.arm.neon.vqmovnu.v1i8(<1 x i16>)
103 declare <1 x i16> @llvm.arm.neon.vqmovnu.v1i16(<1 x i32>)
104 declare <1 x i32> @llvm.arm.neon.vqmovnu.v1i32(<1 x i64>)