Fold assert-only-used variable into the assert.
[llvm/stm8.git] / test / Bitcode / neon-intrinsics.ll
blobfeb2d74138d0e4eee6e0edcbfe3ed0ef72189543
1 ; RUN: llvm-dis < %s.bc | FileCheck %s
3 ; vmovls should be auto-upgraded to sext
5 ; CHECK: vmovls8
6 ; CHECK-NOT: arm.neon.vmovls.v8i16
7 ; CHECK: sext <8 x i8>
9 ; CHECK: vmovls16
10 ; CHECK-NOT: arm.neon.vmovls.v4i32
11 ; CHECK: sext <4 x i16>
13 ; CHECK: vmovls32
14 ; CHECK-NOT: arm.neon.vmovls.v2i64
15 ; CHECK: sext <2 x i32>
17 ; vmovlu should be auto-upgraded to zext
19 ; CHECK: vmovlu8
20 ; CHECK-NOT: arm.neon.vmovlu.v8i16
21 ; CHECK: zext <8 x i8>
23 ; CHECK: vmovlu16
24 ; CHECK-NOT: arm.neon.vmovlu.v4i32
25 ; CHECK: zext <4 x i16>
27 ; CHECK: vmovlu32
28 ; CHECK-NOT: arm.neon.vmovlu.v2i64
29 ; CHECK: zext <2 x i32>
31 ; vaddl/vaddw should be auto-upgraded to add with sext/zext
33 ; CHECK: vaddls16
34 ; CHECK-NOT: arm.neon.vaddls.v4i32
35 ; CHECK: sext <4 x i16>
36 ; CHECK-NEXT: sext <4 x i16>
37 ; CHECK-NEXT: add <4 x i32>
39 ; CHECK: vaddlu32
40 ; CHECK-NOT: arm.neon.vaddlu.v2i64
41 ; CHECK: zext <2 x i32>
42 ; CHECK-NEXT: zext <2 x i32>
43 ; CHECK-NEXT: add <2 x i64>
45 ; CHECK: vaddws8
46 ; CHECK-NOT: arm.neon.vaddws.v8i16
47 ; CHECK: sext <8 x i8>
48 ; CHECK-NEXT: add <8 x i16>
50 ; CHECK: vaddwu16
51 ; CHECK-NOT: arm.neon.vaddwu.v4i32
52 ; CHECK: zext <4 x i16>
53 ; CHECK-NEXT: add <4 x i32>
55 ; vsubl/vsubw should be auto-upgraded to subtract with sext/zext
57 ; CHECK: vsubls16
58 ; CHECK-NOT: arm.neon.vsubls.v4i32
59 ; CHECK: sext <4 x i16>
60 ; CHECK-NEXT: sext <4 x i16>
61 ; CHECK-NEXT: sub <4 x i32>
63 ; CHECK: vsublu32
64 ; CHECK-NOT: arm.neon.vsublu.v2i64
65 ; CHECK: zext <2 x i32>
66 ; CHECK-NEXT: zext <2 x i32>
67 ; CHECK-NEXT: sub <2 x i64>
69 ; CHECK: vsubws8
70 ; CHECK-NOT: arm.neon.vsubws.v8i16
71 ; CHECK: sext <8 x i8>
72 ; CHECK-NEXT: sub <8 x i16>
74 ; CHECK: vsubwu16
75 ; CHECK-NOT: arm.neon.vsubwu.v4i32
76 ; CHECK: zext <4 x i16>
77 ; CHECK-NEXT: sub <4 x i32>
79 ; vmull* intrinsics will remain intrinsics
81 ; CHECK: vmulls8
82 ; CHECK: arm.neon.vmulls.v8i16
84 ; CHECK: vmullu16
85 ; CHECK: arm.neon.vmullu.v4i32
87 ; CHECK: vmullp8
88 ; CHECK: arm.neon.vmullp.v8i16
90 ; vmlal should be auto-upgraded to multiply/add with sext/zext
92 ; CHECK: vmlals32
93 ; CHECK-NOT: arm.neon.vmlals.v2i64
94 ; CHECK: sext <2 x i32>
95 ; CHECK-NEXT: sext <2 x i32>
96 ; CHECK-NEXT: mul <2 x i64>
97 ; CHECK-NEXT: add <2 x i64>
99 ; CHECK: vmlalu8
100 ; CHECK-NOT: arm.neon.vmlalu.v8i16
101 ; CHECK: zext <8 x i8>
102 ; CHECK-NEXT: zext <8 x i8>
103 ; CHECK-NEXT: mul <8 x i16>
104 ; CHECK-NEXT: add <8 x i16>
106 ; vmlsl should be auto-upgraded to multiply/sub with sext/zext
108 ; CHECK: vmlsls16
109 ; CHECK-NOT: arm.neon.vmlsls.v4i32
110 ; CHECK: sext <4 x i16>
111 ; CHECK-NEXT: sext <4 x i16>
112 ; CHECK-NEXT: mul <4 x i32>
113 ; CHECK-NEXT: sub <4 x i32>
115 ; CHECK: vmlslu32
116 ; CHECK-NOT: arm.neon.vmlslu.v2i64
117 ; CHECK: zext <2 x i32>
118 ; CHECK-NEXT: zext <2 x i32>
119 ; CHECK-NEXT: mul <2 x i64>
120 ; CHECK-NEXT: sub <2 x i64>
122 ; vaba should be auto-upgraded to vabd + add
124 ; CHECK: vabas32
125 ; CHECK-NOT: arm.neon.vabas.v2i32
126 ; CHECK: arm.neon.vabds.v2i32
127 ; CHECK-NEXT: add <2 x i32>
129 ; CHECK: vabaQu8
130 ; CHECK-NOT: arm.neon.vabau.v16i8
131 ; CHECK: arm.neon.vabdu.v16i8
132 ; CHECK-NEXT: add <16 x i8>
134 ; vabal should be auto-upgraded to vabd with zext + add
136 ; CHECK: vabals16
137 ; CHECK-NOT: arm.neon.vabals.v4i32
138 ; CHECK: arm.neon.vabds.v4i16
139 ; CHECK-NEXT: zext <4 x i16>
140 ; CHECK-NEXT: add <4 x i32>
142 ; CHECK: vabalu32
143 ; CHECK-NOT: arm.neon.vabalu.v2i64
144 ; CHECK: arm.neon.vabdu.v2i32
145 ; CHECK-NEXT: zext <2 x i32>
146 ; CHECK-NEXT: add <2 x i64>
148 ; vabdl should be auto-upgraded to vabd with zext
150 ; CHECK: vabdls8
151 ; CHECK-NOT: arm.neon.vabdls.v8i16
152 ; CHECK: arm.neon.vabds.v8i8
153 ; CHECK-NEXT: zext <8 x i8>
155 ; CHECK: vabdlu16
156 ; CHECK-NOT: arm.neon.vabdlu.v4i32
157 ; CHECK: arm.neon.vabdu.v4i16
158 ; CHECK-NEXT: zext <4 x i16>
160 ; vmovn should be auto-upgraded to trunc
162 ; CHECK: vmovni16
163 ; CHECK-NOT: arm.neon.vmovn.v8i8
164 ; CHECK: trunc <8 x i16>
166 ; CHECK: vmovni32
167 ; CHECK-NOT: arm.neon.vmovn.v4i16
168 ; CHECK: trunc <4 x i32>
170 ; CHECK: vmovni64
171 ; CHECK-NOT: arm.neon.vmovn.v2i32
172 ; CHECK: trunc <2 x i64>
174 ; vld* and vst* intrinsic calls need an alignment argument (defaulted to 1)
176 ; CHECK: vld1i8
177 ; CHECK: i32 1
178 ; CHECK: vld2Qi16
179 ; CHECK: i32 1
180 ; CHECK: vld3i32
181 ; CHECK: i32 1
182 ; CHECK: vld4Qf
183 ; CHECK: i32 1
185 ; CHECK: vst1i8
186 ; CHECK: i32 1
187 ; CHECK: vst2Qi16
188 ; CHECK: i32 1
189 ; CHECK: vst3i32
190 ; CHECK: i32 1
191 ; CHECK: vst4Qf
192 ; CHECK: i32 1
194 ; CHECK: vld2laneQi16
195 ; CHECK: i32 1
196 ; CHECK: vld3lanei32
197 ; CHECK: i32 1
198 ; CHECK: vld4laneQf
199 ; CHECK: i32 1
201 ; CHECK: vst2laneQi16
202 ; CHECK: i32 1
203 ; CHECK: vst3lanei32
204 ; CHECK: i32 1
205 ; CHECK: vst4laneQf
206 ; CHECK: i32 1