1case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_s64:
2case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_u64:
3case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_f32:
4case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_s32:
5case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_u32: {
6 llvm::Type * Param0;
7 llvm::Type * Param1;
8 switch (BuiltinID) {
9 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_s64:
10 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
11 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
12 break;
13 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_u64:
14 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
15 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
16 break;
17 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_f32:
18 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
19 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
20 break;
21 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_s32:
22 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
23 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
24 break;
25 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_u32:
26 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
27 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
28 break;
29 }
30 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
31 Value *Val1 = Builder.CreateLoad(Addr: Val0);
32 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
33 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vldr_gather_base_wb, Tys: {Param0, Param1}), Args: {Val1, Val2});
34 Value *Val4 = Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(1));
35 Builder.CreateStore(Val: Val4, Addr: Val0);
36 return Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(0));
37}
38case ARM::BI__builtin_arm_mve_vddupq_wb_u16:
39case ARM::BI__builtin_arm_mve_vddupq_wb_u32:
40case ARM::BI__builtin_arm_mve_vddupq_wb_u8:
41case ARM::BI__builtin_arm_mve_vidupq_wb_u16:
42case ARM::BI__builtin_arm_mve_vidupq_wb_u32:
43case ARM::BI__builtin_arm_mve_vidupq_wb_u8: {
44 Intrinsic::ID Param0;
45 llvm::Type * Param1;
46 switch (BuiltinID) {
47 case ARM::BI__builtin_arm_mve_vddupq_wb_u16:
48 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup);
49 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
50 break;
51 case ARM::BI__builtin_arm_mve_vddupq_wb_u32:
52 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup);
53 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
54 break;
55 case ARM::BI__builtin_arm_mve_vddupq_wb_u8:
56 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup);
57 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
58 break;
59 case ARM::BI__builtin_arm_mve_vidupq_wb_u16:
60 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup);
61 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
62 break;
63 case ARM::BI__builtin_arm_mve_vidupq_wb_u32:
64 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup);
65 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
66 break;
67 case ARM::BI__builtin_arm_mve_vidupq_wb_u8:
68 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup);
69 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
70 break;
71 }
72 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
73 Value *Val1 = Builder.CreateLoad(Addr: Val0);
74 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
75 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val1, Val2});
76 Value *Val4 = Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(1));
77 Builder.CreateStore(Val: Val4, Addr: Val0);
78 return Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(0));
79}
80case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_s64:
81case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_u64:
82case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_f32:
83case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_s32:
84case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_u32: {
85 llvm::Type * Param0;
86 llvm::Type * Param1;
87 switch (BuiltinID) {
88 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_s64:
89 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
90 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
91 break;
92 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_u64:
93 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
94 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
95 break;
96 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_f32:
97 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
98 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
99 break;
100 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_s32:
101 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
102 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
103 break;
104 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_u32:
105 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
106 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
107 break;
108 }
109 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
110 Value *Val1 = Builder.CreateLoad(Addr: Val0);
111 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
112 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
113 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vstr_scatter_base_wb, Tys: {Param0, Param1}), Args: {Val1, Val2, Val3});
114 return Builder.CreateStore(Val: Val4, Addr: Val0);
115}
116case ARM::BI__builtin_arm_mve_vdwdupq_wb_u16:
117case ARM::BI__builtin_arm_mve_vdwdupq_wb_u32:
118case ARM::BI__builtin_arm_mve_vdwdupq_wb_u8:
119case ARM::BI__builtin_arm_mve_viwdupq_wb_u16:
120case ARM::BI__builtin_arm_mve_viwdupq_wb_u32:
121case ARM::BI__builtin_arm_mve_viwdupq_wb_u8: {
122 Intrinsic::ID Param0;
123 llvm::Type * Param1;
124 switch (BuiltinID) {
125 case ARM::BI__builtin_arm_mve_vdwdupq_wb_u16:
126 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup);
127 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
128 break;
129 case ARM::BI__builtin_arm_mve_vdwdupq_wb_u32:
130 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup);
131 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
132 break;
133 case ARM::BI__builtin_arm_mve_vdwdupq_wb_u8:
134 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup);
135 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
136 break;
137 case ARM::BI__builtin_arm_mve_viwdupq_wb_u16:
138 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup);
139 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
140 break;
141 case ARM::BI__builtin_arm_mve_viwdupq_wb_u32:
142 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup);
143 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
144 break;
145 case ARM::BI__builtin_arm_mve_viwdupq_wb_u8:
146 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup);
147 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
148 break;
149 }
150 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
151 Value *Val1 = Builder.CreateLoad(Addr: Val0);
152 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
153 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
154 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val1, Val2, Val3});
155 Value *Val5 = Builder.CreateExtractValue(Agg: Val4, Idxs: static_cast<unsigned>(1));
156 Builder.CreateStore(Val: Val5, Addr: Val0);
157 return Builder.CreateExtractValue(Agg: Val4, Idxs: static_cast<unsigned>(0));
158}
159case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
160case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
161case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
162case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
163case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32: {
164 llvm::Type * Param0;
165 llvm::Type * Param1;
166 llvm::Type * Param2;
167 switch (BuiltinID) {
168 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
169 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
170 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
171 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
172 break;
173 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
174 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
175 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
176 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
177 break;
178 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
179 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
180 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
181 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
182 break;
183 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
184 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
185 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
186 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
187 break;
188 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32:
189 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
190 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
191 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
192 break;
193 }
194 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
195 Value *Val1 = Builder.CreateLoad(Addr: Val0);
196 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
197 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
198 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
199 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
200 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vldr_gather_base_wb_predicated, Tys: {Param1, Param2, Param0}), Args: {Val1, Val2, Val5});
201 Value *Val7 = Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(1));
202 Builder.CreateStore(Val: Val7, Addr: Val0);
203 return Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(0));
204}
205case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
206case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
207case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
208case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
209case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32: {
210 llvm::Type * Param0;
211 llvm::Type * Param1;
212 llvm::Type * Param2;
213 switch (BuiltinID) {
214 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
215 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
216 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
217 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
218 break;
219 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
220 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
221 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
222 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
223 break;
224 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
225 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
226 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
227 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
228 break;
229 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
230 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
231 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
232 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
233 break;
234 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32:
235 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
236 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
237 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
238 break;
239 }
240 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
241 Value *Val1 = Builder.CreateLoad(Addr: Val0);
242 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
243 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
244 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
245 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
246 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val5});
247 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vstr_scatter_base_wb_predicated, Tys: {Param1, Param2, Param0}), Args: {Val1, Val2, Val3, Val6});
248 return Builder.CreateStore(Val: Val7, Addr: Val0);
249}
250case ARM::BI__builtin_arm_mve_vld1q_f32:
251case ARM::BI__builtin_arm_mve_vldrwq_f32: {
252 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
253 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
254 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), CharUnits::fromQuantity(Quantity: 4));
255 return Builder.CreateLoad(Addr: Val2);
256}
257case ARM::BI__builtin_arm_mve_vld1q_f16:
258case ARM::BI__builtin_arm_mve_vldrhq_f16: {
259 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
260 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
261 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), CharUnits::fromQuantity(Quantity: 2));
262 return Builder.CreateLoad(Addr: Val2);
263}
264case ARM::BI__builtin_arm_mve_vldrhq_s32:
265case ARM::BI__builtin_arm_mve_vldrhq_u32: {
266 bool Param0;
267 switch (BuiltinID) {
268 case ARM::BI__builtin_arm_mve_vldrhq_s32:
269 Param0 = static_cast<bool>(0);
270 break;
271 case ARM::BI__builtin_arm_mve_vldrhq_u32:
272 Param0 = static_cast<bool>(1);
273 break;
274 }
275 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
276 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
277 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 4), CharUnits::fromQuantity(Quantity: 2));
278 Value *Val3 = Builder.CreateLoad(Addr: Val2);
279 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
280 return SignOrZeroExtend(Builder, V: Val3, T: Val4, Unsigned: static_cast<bool>(Param0));
281}
282case ARM::BI__builtin_arm_mve_vld1q_s16:
283case ARM::BI__builtin_arm_mve_vld1q_u16:
284case ARM::BI__builtin_arm_mve_vldrhq_s16:
285case ARM::BI__builtin_arm_mve_vldrhq_u16: {
286 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
287 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
288 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), CharUnits::fromQuantity(Quantity: 2));
289 return Builder.CreateLoad(Addr: Val2);
290}
291case ARM::BI__builtin_arm_mve_vld1q_s32:
292case ARM::BI__builtin_arm_mve_vld1q_u32:
293case ARM::BI__builtin_arm_mve_vldrwq_s32:
294case ARM::BI__builtin_arm_mve_vldrwq_u32: {
295 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
296 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
297 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), CharUnits::fromQuantity(Quantity: 4));
298 return Builder.CreateLoad(Addr: Val2);
299}
300case ARM::BI__builtin_arm_mve_vld1q_s8:
301case ARM::BI__builtin_arm_mve_vld1q_u8:
302case ARM::BI__builtin_arm_mve_vldrbq_s8:
303case ARM::BI__builtin_arm_mve_vldrbq_u8: {
304 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
305 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
306 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), CharUnits::fromQuantity(Quantity: 1));
307 return Builder.CreateLoad(Addr: Val2);
308}
309case ARM::BI__builtin_arm_mve_vldrbq_s32:
310case ARM::BI__builtin_arm_mve_vldrbq_u32: {
311 bool Param0;
312 switch (BuiltinID) {
313 case ARM::BI__builtin_arm_mve_vldrbq_s32:
314 Param0 = static_cast<bool>(0);
315 break;
316 case ARM::BI__builtin_arm_mve_vldrbq_u32:
317 Param0 = static_cast<bool>(1);
318 break;
319 }
320 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
321 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
322 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 4), CharUnits::fromQuantity(Quantity: 1));
323 Value *Val3 = Builder.CreateLoad(Addr: Val2);
324 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
325 return SignOrZeroExtend(Builder, V: Val3, T: Val4, Unsigned: static_cast<bool>(Param0));
326}
327case ARM::BI__builtin_arm_mve_vldrbq_s16:
328case ARM::BI__builtin_arm_mve_vldrbq_u16: {
329 bool Param0;
330 switch (BuiltinID) {
331 case ARM::BI__builtin_arm_mve_vldrbq_s16:
332 Param0 = static_cast<bool>(0);
333 break;
334 case ARM::BI__builtin_arm_mve_vldrbq_u16:
335 Param0 = static_cast<bool>(1);
336 break;
337 }
338 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
339 Value *Val1 = Builder.CreatePointerCast(V: (Val0.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
340 Address Val2 = Address(Val1, llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 8), CharUnits::fromQuantity(Quantity: 1));
341 Value *Val3 = Builder.CreateLoad(Addr: Val2);
342 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
343 return SignOrZeroExtend(Builder, V: Val3, T: Val4, Unsigned: static_cast<bool>(Param0));
344}
345case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s16:
346case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s32:
347case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s8:
348case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u16:
349case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u32:
350case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u8:
351case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_s64:
352case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_u64:
353case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_s64:
354case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_u64:
355case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_f16:
356case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s16:
357case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s32:
358case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u16:
359case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u32:
360case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_f16:
361case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s16:
362case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s32:
363case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u16:
364case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u32:
365case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_f32:
366case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_s32:
367case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_u32:
368case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_f32:
369case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_s32:
370case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_u32: {
371 uint32_t Param0;
372 uint32_t Param1;
373 llvm::Type * Param2;
374 llvm::Type * Param3;
375 llvm::Type * Param4;
376 switch (BuiltinID) {
377 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s16:
378 Param0 = static_cast<uint32_t>(8);
379 Param1 = static_cast<uint32_t>(0);
380 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
381 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
382 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
383 break;
384 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s32:
385 Param0 = static_cast<uint32_t>(8);
386 Param1 = static_cast<uint32_t>(0);
387 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
388 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
389 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
390 break;
391 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s8:
392 Param0 = static_cast<uint32_t>(8);
393 Param1 = static_cast<uint32_t>(0);
394 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
395 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
396 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
397 break;
398 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u16:
399 Param0 = static_cast<uint32_t>(8);
400 Param1 = static_cast<uint32_t>(0);
401 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
402 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
403 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
404 break;
405 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u32:
406 Param0 = static_cast<uint32_t>(8);
407 Param1 = static_cast<uint32_t>(0);
408 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
409 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
410 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
411 break;
412 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u8:
413 Param0 = static_cast<uint32_t>(8);
414 Param1 = static_cast<uint32_t>(0);
415 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
416 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
417 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
418 break;
419 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_s64:
420 Param0 = static_cast<uint32_t>(64);
421 Param1 = static_cast<uint32_t>(0);
422 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
423 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
424 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
425 break;
426 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_u64:
427 Param0 = static_cast<uint32_t>(64);
428 Param1 = static_cast<uint32_t>(0);
429 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
430 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
431 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
432 break;
433 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_s64:
434 Param0 = static_cast<uint32_t>(64);
435 Param1 = static_cast<uint32_t>(3);
436 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
437 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
438 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
439 break;
440 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_u64:
441 Param0 = static_cast<uint32_t>(64);
442 Param1 = static_cast<uint32_t>(3);
443 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
444 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
445 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
446 break;
447 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_f16:
448 Param0 = static_cast<uint32_t>(16);
449 Param1 = static_cast<uint32_t>(0);
450 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
451 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
452 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
453 break;
454 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s16:
455 Param0 = static_cast<uint32_t>(16);
456 Param1 = static_cast<uint32_t>(0);
457 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
458 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
459 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
460 break;
461 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s32:
462 Param0 = static_cast<uint32_t>(16);
463 Param1 = static_cast<uint32_t>(0);
464 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
465 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
466 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
467 break;
468 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u16:
469 Param0 = static_cast<uint32_t>(16);
470 Param1 = static_cast<uint32_t>(0);
471 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
472 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
473 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
474 break;
475 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u32:
476 Param0 = static_cast<uint32_t>(16);
477 Param1 = static_cast<uint32_t>(0);
478 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
479 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
480 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
481 break;
482 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_f16:
483 Param0 = static_cast<uint32_t>(16);
484 Param1 = static_cast<uint32_t>(1);
485 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
486 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
487 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
488 break;
489 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s16:
490 Param0 = static_cast<uint32_t>(16);
491 Param1 = static_cast<uint32_t>(1);
492 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
493 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
494 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
495 break;
496 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s32:
497 Param0 = static_cast<uint32_t>(16);
498 Param1 = static_cast<uint32_t>(1);
499 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
500 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
501 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
502 break;
503 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u16:
504 Param0 = static_cast<uint32_t>(16);
505 Param1 = static_cast<uint32_t>(1);
506 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
507 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
508 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
509 break;
510 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u32:
511 Param0 = static_cast<uint32_t>(16);
512 Param1 = static_cast<uint32_t>(1);
513 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
514 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
515 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
516 break;
517 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_f32:
518 Param0 = static_cast<uint32_t>(32);
519 Param1 = static_cast<uint32_t>(0);
520 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
521 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
522 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
523 break;
524 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_s32:
525 Param0 = static_cast<uint32_t>(32);
526 Param1 = static_cast<uint32_t>(0);
527 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
528 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
529 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
530 break;
531 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_u32:
532 Param0 = static_cast<uint32_t>(32);
533 Param1 = static_cast<uint32_t>(0);
534 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
535 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
536 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
537 break;
538 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_f32:
539 Param0 = static_cast<uint32_t>(32);
540 Param1 = static_cast<uint32_t>(2);
541 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
542 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
543 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
544 break;
545 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_s32:
546 Param0 = static_cast<uint32_t>(32);
547 Param1 = static_cast<uint32_t>(2);
548 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
549 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
550 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
551 break;
552 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_u32:
553 Param0 = static_cast<uint32_t>(32);
554 Param1 = static_cast<uint32_t>(2);
555 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
556 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
557 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
558 break;
559 }
560 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
561 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
562 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
563 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
564 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
565 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
566 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
567 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param2}), Args: {Val6});
568 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vstr_scatter_offset_predicated, Tys: {Builder.getPtrTy(), Param3, Param4, Param2}), Args: {(Val0.emitRawPointer(CGF&: *this)), Val1, Val2, Val3, Val4, Val7});
569}
570case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s16:
571case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s32:
572case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s8:
573case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u16:
574case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u32:
575case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u8:
576case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_s64:
577case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_u64:
578case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_s64:
579case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_u64:
580case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_f16:
581case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s16:
582case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s32:
583case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u16:
584case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u32:
585case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_f16:
586case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s16:
587case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s32:
588case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u16:
589case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u32:
590case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_f32:
591case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_s32:
592case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_u32:
593case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_f32:
594case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_s32:
595case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_u32: {
596 uint32_t Param0;
597 uint32_t Param1;
598 llvm::Type * Param2;
599 llvm::Type * Param3;
600 switch (BuiltinID) {
601 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s16:
602 Param0 = static_cast<uint32_t>(8);
603 Param1 = static_cast<uint32_t>(0);
604 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
605 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
606 break;
607 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s32:
608 Param0 = static_cast<uint32_t>(8);
609 Param1 = static_cast<uint32_t>(0);
610 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
611 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
612 break;
613 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s8:
614 Param0 = static_cast<uint32_t>(8);
615 Param1 = static_cast<uint32_t>(0);
616 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
617 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
618 break;
619 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u16:
620 Param0 = static_cast<uint32_t>(8);
621 Param1 = static_cast<uint32_t>(0);
622 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
623 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
624 break;
625 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u32:
626 Param0 = static_cast<uint32_t>(8);
627 Param1 = static_cast<uint32_t>(0);
628 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
629 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
630 break;
631 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u8:
632 Param0 = static_cast<uint32_t>(8);
633 Param1 = static_cast<uint32_t>(0);
634 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
635 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
636 break;
637 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_s64:
638 Param0 = static_cast<uint32_t>(64);
639 Param1 = static_cast<uint32_t>(0);
640 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
641 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
642 break;
643 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_u64:
644 Param0 = static_cast<uint32_t>(64);
645 Param1 = static_cast<uint32_t>(0);
646 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
647 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
648 break;
649 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_s64:
650 Param0 = static_cast<uint32_t>(64);
651 Param1 = static_cast<uint32_t>(3);
652 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
653 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
654 break;
655 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_u64:
656 Param0 = static_cast<uint32_t>(64);
657 Param1 = static_cast<uint32_t>(3);
658 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
659 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
660 break;
661 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_f16:
662 Param0 = static_cast<uint32_t>(16);
663 Param1 = static_cast<uint32_t>(0);
664 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
665 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
666 break;
667 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s16:
668 Param0 = static_cast<uint32_t>(16);
669 Param1 = static_cast<uint32_t>(0);
670 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
671 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
672 break;
673 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s32:
674 Param0 = static_cast<uint32_t>(16);
675 Param1 = static_cast<uint32_t>(0);
676 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
677 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
678 break;
679 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u16:
680 Param0 = static_cast<uint32_t>(16);
681 Param1 = static_cast<uint32_t>(0);
682 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
683 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
684 break;
685 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u32:
686 Param0 = static_cast<uint32_t>(16);
687 Param1 = static_cast<uint32_t>(0);
688 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
689 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
690 break;
691 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_f16:
692 Param0 = static_cast<uint32_t>(16);
693 Param1 = static_cast<uint32_t>(1);
694 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
695 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
696 break;
697 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s16:
698 Param0 = static_cast<uint32_t>(16);
699 Param1 = static_cast<uint32_t>(1);
700 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
701 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
702 break;
703 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s32:
704 Param0 = static_cast<uint32_t>(16);
705 Param1 = static_cast<uint32_t>(1);
706 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
707 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
708 break;
709 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u16:
710 Param0 = static_cast<uint32_t>(16);
711 Param1 = static_cast<uint32_t>(1);
712 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
713 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
714 break;
715 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u32:
716 Param0 = static_cast<uint32_t>(16);
717 Param1 = static_cast<uint32_t>(1);
718 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
719 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
720 break;
721 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_f32:
722 Param0 = static_cast<uint32_t>(32);
723 Param1 = static_cast<uint32_t>(0);
724 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
725 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
726 break;
727 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_s32:
728 Param0 = static_cast<uint32_t>(32);
729 Param1 = static_cast<uint32_t>(0);
730 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
731 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
732 break;
733 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_u32:
734 Param0 = static_cast<uint32_t>(32);
735 Param1 = static_cast<uint32_t>(0);
736 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
737 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
738 break;
739 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_f32:
740 Param0 = static_cast<uint32_t>(32);
741 Param1 = static_cast<uint32_t>(2);
742 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
743 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
744 break;
745 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_s32:
746 Param0 = static_cast<uint32_t>(32);
747 Param1 = static_cast<uint32_t>(2);
748 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
749 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
750 break;
751 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_u32:
752 Param0 = static_cast<uint32_t>(32);
753 Param1 = static_cast<uint32_t>(2);
754 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
755 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
756 break;
757 }
758 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
759 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
760 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
761 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
762 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
763 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vstr_scatter_offset, Tys: {Builder.getPtrTy(), Param2, Param3}), Args: {(Val0.emitRawPointer(CGF&: *this)), Val1, Val2, Val3, Val4});
764}
765case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s16:
766case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s32:
767case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s8:
768case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u16:
769case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u32:
770case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u8:
771case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_s64:
772case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_u64:
773case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_s64:
774case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_u64:
775case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_f16:
776case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s16:
777case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s32:
778case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u16:
779case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u32:
780case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_f16:
781case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s16:
782case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s32:
783case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u16:
784case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u32:
785case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_f32:
786case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_s32:
787case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_u32:
788case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_f32:
789case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_s32:
790case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_u32: {
791 uint32_t Param0;
792 uint32_t Param1;
793 uint32_t Param2;
794 llvm::Type * Param3;
795 llvm::Type * Param4;
796 llvm::Type * Param5;
797 switch (BuiltinID) {
798 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s16:
799 Param0 = static_cast<uint32_t>(8);
800 Param1 = static_cast<uint32_t>(0);
801 Param2 = static_cast<uint32_t>(0);
802 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
803 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
804 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
805 break;
806 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s32:
807 Param0 = static_cast<uint32_t>(8);
808 Param1 = static_cast<uint32_t>(0);
809 Param2 = static_cast<uint32_t>(0);
810 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
811 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
812 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
813 break;
814 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s8:
815 Param0 = static_cast<uint32_t>(8);
816 Param1 = static_cast<uint32_t>(0);
817 Param2 = static_cast<uint32_t>(0);
818 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
819 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
820 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
821 break;
822 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u16:
823 Param0 = static_cast<uint32_t>(8);
824 Param1 = static_cast<uint32_t>(0);
825 Param2 = static_cast<uint32_t>(1);
826 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
827 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
828 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
829 break;
830 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u32:
831 Param0 = static_cast<uint32_t>(8);
832 Param1 = static_cast<uint32_t>(0);
833 Param2 = static_cast<uint32_t>(1);
834 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
835 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
836 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
837 break;
838 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u8:
839 Param0 = static_cast<uint32_t>(8);
840 Param1 = static_cast<uint32_t>(0);
841 Param2 = static_cast<uint32_t>(1);
842 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
843 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
844 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
845 break;
846 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_s64:
847 Param0 = static_cast<uint32_t>(64);
848 Param1 = static_cast<uint32_t>(0);
849 Param2 = static_cast<uint32_t>(0);
850 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
851 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
852 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
853 break;
854 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_u64:
855 Param0 = static_cast<uint32_t>(64);
856 Param1 = static_cast<uint32_t>(0);
857 Param2 = static_cast<uint32_t>(1);
858 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
859 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
860 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
861 break;
862 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_s64:
863 Param0 = static_cast<uint32_t>(64);
864 Param1 = static_cast<uint32_t>(3);
865 Param2 = static_cast<uint32_t>(0);
866 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
867 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
868 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
869 break;
870 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_u64:
871 Param0 = static_cast<uint32_t>(64);
872 Param1 = static_cast<uint32_t>(3);
873 Param2 = static_cast<uint32_t>(1);
874 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
875 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
876 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
877 break;
878 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_f16:
879 Param0 = static_cast<uint32_t>(16);
880 Param1 = static_cast<uint32_t>(0);
881 Param2 = static_cast<uint32_t>(0);
882 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
883 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
884 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
885 break;
886 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s16:
887 Param0 = static_cast<uint32_t>(16);
888 Param1 = static_cast<uint32_t>(0);
889 Param2 = static_cast<uint32_t>(0);
890 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
891 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
892 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
893 break;
894 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s32:
895 Param0 = static_cast<uint32_t>(16);
896 Param1 = static_cast<uint32_t>(0);
897 Param2 = static_cast<uint32_t>(0);
898 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
899 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
900 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
901 break;
902 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u16:
903 Param0 = static_cast<uint32_t>(16);
904 Param1 = static_cast<uint32_t>(0);
905 Param2 = static_cast<uint32_t>(1);
906 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
907 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
908 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
909 break;
910 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u32:
911 Param0 = static_cast<uint32_t>(16);
912 Param1 = static_cast<uint32_t>(0);
913 Param2 = static_cast<uint32_t>(1);
914 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
915 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
916 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
917 break;
918 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_f16:
919 Param0 = static_cast<uint32_t>(16);
920 Param1 = static_cast<uint32_t>(1);
921 Param2 = static_cast<uint32_t>(0);
922 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
923 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
924 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
925 break;
926 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s16:
927 Param0 = static_cast<uint32_t>(16);
928 Param1 = static_cast<uint32_t>(1);
929 Param2 = static_cast<uint32_t>(0);
930 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
931 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
932 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
933 break;
934 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s32:
935 Param0 = static_cast<uint32_t>(16);
936 Param1 = static_cast<uint32_t>(1);
937 Param2 = static_cast<uint32_t>(0);
938 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
939 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
940 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
941 break;
942 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u16:
943 Param0 = static_cast<uint32_t>(16);
944 Param1 = static_cast<uint32_t>(1);
945 Param2 = static_cast<uint32_t>(1);
946 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
947 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
948 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
949 break;
950 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u32:
951 Param0 = static_cast<uint32_t>(16);
952 Param1 = static_cast<uint32_t>(1);
953 Param2 = static_cast<uint32_t>(1);
954 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
955 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
956 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
957 break;
958 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_f32:
959 Param0 = static_cast<uint32_t>(32);
960 Param1 = static_cast<uint32_t>(0);
961 Param2 = static_cast<uint32_t>(0);
962 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
963 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
964 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
965 break;
966 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_s32:
967 Param0 = static_cast<uint32_t>(32);
968 Param1 = static_cast<uint32_t>(0);
969 Param2 = static_cast<uint32_t>(0);
970 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
971 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
972 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
973 break;
974 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_u32:
975 Param0 = static_cast<uint32_t>(32);
976 Param1 = static_cast<uint32_t>(0);
977 Param2 = static_cast<uint32_t>(1);
978 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
979 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
980 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
981 break;
982 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_f32:
983 Param0 = static_cast<uint32_t>(32);
984 Param1 = static_cast<uint32_t>(2);
985 Param2 = static_cast<uint32_t>(0);
986 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
987 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
988 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
989 break;
990 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_s32:
991 Param0 = static_cast<uint32_t>(32);
992 Param1 = static_cast<uint32_t>(2);
993 Param2 = static_cast<uint32_t>(0);
994 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
995 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
996 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
997 break;
998 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_u32:
999 Param0 = static_cast<uint32_t>(32);
1000 Param1 = static_cast<uint32_t>(2);
1001 Param2 = static_cast<uint32_t>(1);
1002 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1003 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1004 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1005 break;
1006 }
1007 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
1008 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1009 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
1010 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
1011 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
1012 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
1013 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
1014 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val6});
1015 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vldr_gather_offset_predicated, Tys: {Param4, Builder.getPtrTy(), Param5, Param3}), Args: {(Val0.emitRawPointer(CGF&: *this)), Val1, Val2, Val3, Val4, Val7});
1016}
1017case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s16:
1018case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s32:
1019case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s8:
1020case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u16:
1021case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u32:
1022case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u8:
1023case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_s64:
1024case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_u64:
1025case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_s64:
1026case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_u64:
1027case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_f16:
1028case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s16:
1029case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s32:
1030case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u16:
1031case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u32:
1032case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_f16:
1033case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s16:
1034case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s32:
1035case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u16:
1036case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u32:
1037case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_f32:
1038case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_s32:
1039case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_u32:
1040case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_f32:
1041case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_s32:
1042case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_u32: {
1043 uint32_t Param0;
1044 uint32_t Param1;
1045 uint32_t Param2;
1046 llvm::Type * Param3;
1047 llvm::Type * Param4;
1048 switch (BuiltinID) {
1049 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s16:
1050 Param0 = static_cast<uint32_t>(8);
1051 Param1 = static_cast<uint32_t>(0);
1052 Param2 = static_cast<uint32_t>(0);
1053 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1054 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1055 break;
1056 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s32:
1057 Param0 = static_cast<uint32_t>(8);
1058 Param1 = static_cast<uint32_t>(0);
1059 Param2 = static_cast<uint32_t>(0);
1060 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1061 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1062 break;
1063 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s8:
1064 Param0 = static_cast<uint32_t>(8);
1065 Param1 = static_cast<uint32_t>(0);
1066 Param2 = static_cast<uint32_t>(0);
1067 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1068 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1069 break;
1070 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u16:
1071 Param0 = static_cast<uint32_t>(8);
1072 Param1 = static_cast<uint32_t>(0);
1073 Param2 = static_cast<uint32_t>(1);
1074 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1075 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1076 break;
1077 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u32:
1078 Param0 = static_cast<uint32_t>(8);
1079 Param1 = static_cast<uint32_t>(0);
1080 Param2 = static_cast<uint32_t>(1);
1081 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1082 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1083 break;
1084 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u8:
1085 Param0 = static_cast<uint32_t>(8);
1086 Param1 = static_cast<uint32_t>(0);
1087 Param2 = static_cast<uint32_t>(1);
1088 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1089 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1090 break;
1091 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_s64:
1092 Param0 = static_cast<uint32_t>(64);
1093 Param1 = static_cast<uint32_t>(0);
1094 Param2 = static_cast<uint32_t>(0);
1095 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1096 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1097 break;
1098 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_u64:
1099 Param0 = static_cast<uint32_t>(64);
1100 Param1 = static_cast<uint32_t>(0);
1101 Param2 = static_cast<uint32_t>(1);
1102 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1103 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1104 break;
1105 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_s64:
1106 Param0 = static_cast<uint32_t>(64);
1107 Param1 = static_cast<uint32_t>(3);
1108 Param2 = static_cast<uint32_t>(0);
1109 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1110 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1111 break;
1112 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_u64:
1113 Param0 = static_cast<uint32_t>(64);
1114 Param1 = static_cast<uint32_t>(3);
1115 Param2 = static_cast<uint32_t>(1);
1116 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1117 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
1118 break;
1119 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_f16:
1120 Param0 = static_cast<uint32_t>(16);
1121 Param1 = static_cast<uint32_t>(0);
1122 Param2 = static_cast<uint32_t>(0);
1123 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1124 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1125 break;
1126 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s16:
1127 Param0 = static_cast<uint32_t>(16);
1128 Param1 = static_cast<uint32_t>(0);
1129 Param2 = static_cast<uint32_t>(0);
1130 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1131 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1132 break;
1133 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s32:
1134 Param0 = static_cast<uint32_t>(16);
1135 Param1 = static_cast<uint32_t>(0);
1136 Param2 = static_cast<uint32_t>(0);
1137 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1138 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1139 break;
1140 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u16:
1141 Param0 = static_cast<uint32_t>(16);
1142 Param1 = static_cast<uint32_t>(0);
1143 Param2 = static_cast<uint32_t>(1);
1144 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1145 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1146 break;
1147 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u32:
1148 Param0 = static_cast<uint32_t>(16);
1149 Param1 = static_cast<uint32_t>(0);
1150 Param2 = static_cast<uint32_t>(1);
1151 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1152 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1153 break;
1154 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_f16:
1155 Param0 = static_cast<uint32_t>(16);
1156 Param1 = static_cast<uint32_t>(1);
1157 Param2 = static_cast<uint32_t>(0);
1158 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1159 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1160 break;
1161 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s16:
1162 Param0 = static_cast<uint32_t>(16);
1163 Param1 = static_cast<uint32_t>(1);
1164 Param2 = static_cast<uint32_t>(0);
1165 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1166 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1167 break;
1168 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s32:
1169 Param0 = static_cast<uint32_t>(16);
1170 Param1 = static_cast<uint32_t>(1);
1171 Param2 = static_cast<uint32_t>(0);
1172 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1173 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1174 break;
1175 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u16:
1176 Param0 = static_cast<uint32_t>(16);
1177 Param1 = static_cast<uint32_t>(1);
1178 Param2 = static_cast<uint32_t>(1);
1179 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1180 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1181 break;
1182 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u32:
1183 Param0 = static_cast<uint32_t>(16);
1184 Param1 = static_cast<uint32_t>(1);
1185 Param2 = static_cast<uint32_t>(1);
1186 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1187 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1188 break;
1189 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_f32:
1190 Param0 = static_cast<uint32_t>(32);
1191 Param1 = static_cast<uint32_t>(0);
1192 Param2 = static_cast<uint32_t>(0);
1193 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1194 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1195 break;
1196 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_s32:
1197 Param0 = static_cast<uint32_t>(32);
1198 Param1 = static_cast<uint32_t>(0);
1199 Param2 = static_cast<uint32_t>(0);
1200 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1201 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1202 break;
1203 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_u32:
1204 Param0 = static_cast<uint32_t>(32);
1205 Param1 = static_cast<uint32_t>(0);
1206 Param2 = static_cast<uint32_t>(1);
1207 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1208 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1209 break;
1210 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_f32:
1211 Param0 = static_cast<uint32_t>(32);
1212 Param1 = static_cast<uint32_t>(2);
1213 Param2 = static_cast<uint32_t>(0);
1214 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1215 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1216 break;
1217 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_s32:
1218 Param0 = static_cast<uint32_t>(32);
1219 Param1 = static_cast<uint32_t>(2);
1220 Param2 = static_cast<uint32_t>(0);
1221 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1222 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1223 break;
1224 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_u32:
1225 Param0 = static_cast<uint32_t>(32);
1226 Param1 = static_cast<uint32_t>(2);
1227 Param2 = static_cast<uint32_t>(1);
1228 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1229 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1230 break;
1231 }
1232 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
1233 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1234 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
1235 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
1236 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
1237 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vldr_gather_offset, Tys: {Param3, Builder.getPtrTy(), Param4}), Args: {(Val0.emitRawPointer(CGF&: *this)), Val1, Val2, Val3, Val4});
1238}
1239case ARM::BI__builtin_arm_mve_vshlcq_s16:
1240case ARM::BI__builtin_arm_mve_vshlcq_s32:
1241case ARM::BI__builtin_arm_mve_vshlcq_s8:
1242case ARM::BI__builtin_arm_mve_vshlcq_u16:
1243case ARM::BI__builtin_arm_mve_vshlcq_u32:
1244case ARM::BI__builtin_arm_mve_vshlcq_u8: {
1245 llvm::Type * Param0;
1246 switch (BuiltinID) {
1247 case ARM::BI__builtin_arm_mve_vshlcq_s16:
1248 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1249 break;
1250 case ARM::BI__builtin_arm_mve_vshlcq_s32:
1251 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1252 break;
1253 case ARM::BI__builtin_arm_mve_vshlcq_s8:
1254 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1255 break;
1256 case ARM::BI__builtin_arm_mve_vshlcq_u16:
1257 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1258 break;
1259 case ARM::BI__builtin_arm_mve_vshlcq_u32:
1260 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1261 break;
1262 case ARM::BI__builtin_arm_mve_vshlcq_u8:
1263 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1264 break;
1265 }
1266 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 1));
1267 Value *Val1 = Builder.CreateLoad(Addr: Val0);
1268 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
1269 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
1270 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshlc, Tys: {Param0}), Args: {Val2, Val1, Val3});
1271 Value *Val5 = Builder.CreateExtractValue(Agg: Val4, Idxs: static_cast<unsigned>(0));
1272 Builder.CreateStore(Val: Val5, Addr: Val0);
1273 return Builder.CreateExtractValue(Agg: Val4, Idxs: static_cast<unsigned>(1));
1274}
1275case ARM::BI__builtin_arm_mve_vddupq_m_wb_u16:
1276case ARM::BI__builtin_arm_mve_vddupq_m_wb_u32:
1277case ARM::BI__builtin_arm_mve_vddupq_m_wb_u8:
1278case ARM::BI__builtin_arm_mve_vidupq_m_wb_u16:
1279case ARM::BI__builtin_arm_mve_vidupq_m_wb_u32:
1280case ARM::BI__builtin_arm_mve_vidupq_m_wb_u8:
1281case ARM::BI__builtin_arm_mve_vshlcq_m_s16:
1282case ARM::BI__builtin_arm_mve_vshlcq_m_s32:
1283case ARM::BI__builtin_arm_mve_vshlcq_m_s8:
1284case ARM::BI__builtin_arm_mve_vshlcq_m_u16:
1285case ARM::BI__builtin_arm_mve_vshlcq_m_u32:
1286case ARM::BI__builtin_arm_mve_vshlcq_m_u8: {
1287 llvm::Type * Param0;
1288 Intrinsic::ID Param1;
1289 llvm::Type * Param2;
1290 unsigned Param3;
1291 unsigned Param4;
1292 switch (BuiltinID) {
1293 case ARM::BI__builtin_arm_mve_vddupq_m_wb_u16:
1294 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1295 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
1296 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1297 Param3 = static_cast<unsigned>(1);
1298 Param4 = static_cast<unsigned>(0);
1299 break;
1300 case ARM::BI__builtin_arm_mve_vddupq_m_wb_u32:
1301 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1302 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
1303 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1304 Param3 = static_cast<unsigned>(1);
1305 Param4 = static_cast<unsigned>(0);
1306 break;
1307 case ARM::BI__builtin_arm_mve_vddupq_m_wb_u8:
1308 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1309 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
1310 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1311 Param3 = static_cast<unsigned>(1);
1312 Param4 = static_cast<unsigned>(0);
1313 break;
1314 case ARM::BI__builtin_arm_mve_vidupq_m_wb_u16:
1315 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1316 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
1317 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1318 Param3 = static_cast<unsigned>(1);
1319 Param4 = static_cast<unsigned>(0);
1320 break;
1321 case ARM::BI__builtin_arm_mve_vidupq_m_wb_u32:
1322 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1323 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
1324 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1325 Param3 = static_cast<unsigned>(1);
1326 Param4 = static_cast<unsigned>(0);
1327 break;
1328 case ARM::BI__builtin_arm_mve_vidupq_m_wb_u8:
1329 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1330 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
1331 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1332 Param3 = static_cast<unsigned>(1);
1333 Param4 = static_cast<unsigned>(0);
1334 break;
1335 case ARM::BI__builtin_arm_mve_vshlcq_m_s16:
1336 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1337 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshlc_predicated);
1338 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1339 Param3 = static_cast<unsigned>(0);
1340 Param4 = static_cast<unsigned>(1);
1341 break;
1342 case ARM::BI__builtin_arm_mve_vshlcq_m_s32:
1343 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1344 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshlc_predicated);
1345 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1346 Param3 = static_cast<unsigned>(0);
1347 Param4 = static_cast<unsigned>(1);
1348 break;
1349 case ARM::BI__builtin_arm_mve_vshlcq_m_s8:
1350 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1351 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshlc_predicated);
1352 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1353 Param3 = static_cast<unsigned>(0);
1354 Param4 = static_cast<unsigned>(1);
1355 break;
1356 case ARM::BI__builtin_arm_mve_vshlcq_m_u16:
1357 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1358 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshlc_predicated);
1359 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1360 Param3 = static_cast<unsigned>(0);
1361 Param4 = static_cast<unsigned>(1);
1362 break;
1363 case ARM::BI__builtin_arm_mve_vshlcq_m_u32:
1364 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1365 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshlc_predicated);
1366 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1367 Param3 = static_cast<unsigned>(0);
1368 Param4 = static_cast<unsigned>(1);
1369 break;
1370 case ARM::BI__builtin_arm_mve_vshlcq_m_u8:
1371 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1372 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshlc_predicated);
1373 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1374 Param3 = static_cast<unsigned>(0);
1375 Param4 = static_cast<unsigned>(1);
1376 break;
1377 }
1378 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 1));
1379 Value *Val1 = Builder.CreateLoad(Addr: Val0);
1380 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
1381 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
1382 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
1383 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
1384 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val5});
1385 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val2, Val1, Val3, Val6});
1386 Value *Val8 = Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(Param3));
1387 Builder.CreateStore(Val: Val8, Addr: Val0);
1388 return Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(Param4));
1389}
1390case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u16:
1391case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u32:
1392case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u8:
1393case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u16:
1394case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u32:
1395case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u8: {
1396 llvm::Type * Param0;
1397 Intrinsic::ID Param1;
1398 llvm::Type * Param2;
1399 switch (BuiltinID) {
1400 case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u16:
1401 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1402 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
1403 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1404 break;
1405 case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u32:
1406 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1407 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
1408 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1409 break;
1410 case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u8:
1411 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1412 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
1413 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1414 break;
1415 case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u16:
1416 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1417 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
1418 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1419 break;
1420 case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u32:
1421 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1422 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
1423 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
1424 break;
1425 case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u8:
1426 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1427 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
1428 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1429 break;
1430 }
1431 Address Val0 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 1));
1432 Value *Val1 = Builder.CreateLoad(Addr: Val0);
1433 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
1434 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
1435 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
1436 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 4));
1437 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
1438 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val6});
1439 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val2, Val1, Val3, Val4, Val7});
1440 Value *Val9 = Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(1));
1441 Builder.CreateStore(Val: Val9, Addr: Val0);
1442 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
1443}
1444case ARM::BI__builtin_arm_mve_vld2q_f16:
1445case ARM::BI__builtin_arm_mve_vld2q_f32:
1446case ARM::BI__builtin_arm_mve_vld2q_s16:
1447case ARM::BI__builtin_arm_mve_vld2q_s32:
1448case ARM::BI__builtin_arm_mve_vld2q_s8:
1449case ARM::BI__builtin_arm_mve_vld2q_u16:
1450case ARM::BI__builtin_arm_mve_vld2q_u32:
1451case ARM::BI__builtin_arm_mve_vld2q_u8: {
1452 CustomCodeGenType = CustomCodeGen::VLD24;
1453 IRIntr = Intrinsic::arm_mve_vld2q;
1454 NumVectors = 2;
1455 break; // custom code gen
1456}
1457case ARM::BI__builtin_arm_mve_vld4q_f16:
1458case ARM::BI__builtin_arm_mve_vld4q_f32:
1459case ARM::BI__builtin_arm_mve_vld4q_s16:
1460case ARM::BI__builtin_arm_mve_vld4q_s32:
1461case ARM::BI__builtin_arm_mve_vld4q_s8:
1462case ARM::BI__builtin_arm_mve_vld4q_u16:
1463case ARM::BI__builtin_arm_mve_vld4q_u32:
1464case ARM::BI__builtin_arm_mve_vld4q_u8: {
1465 CustomCodeGenType = CustomCodeGen::VLD24;
1466 IRIntr = Intrinsic::arm_mve_vld4q;
1467 NumVectors = 4;
1468 break; // custom code gen
1469}
1470case ARM::BI__builtin_arm_mve_vst2q_f16:
1471case ARM::BI__builtin_arm_mve_vst2q_f32:
1472case ARM::BI__builtin_arm_mve_vst2q_s16:
1473case ARM::BI__builtin_arm_mve_vst2q_s32:
1474case ARM::BI__builtin_arm_mve_vst2q_s8:
1475case ARM::BI__builtin_arm_mve_vst2q_u16:
1476case ARM::BI__builtin_arm_mve_vst2q_u32:
1477case ARM::BI__builtin_arm_mve_vst2q_u8: {
1478 CustomCodeGenType = CustomCodeGen::VST24;
1479 IRIntr = Intrinsic::arm_mve_vst2q;
1480 NumVectors = 2;
1481 break; // custom code gen
1482}
1483case ARM::BI__builtin_arm_mve_vst4q_f16:
1484case ARM::BI__builtin_arm_mve_vst4q_f32:
1485case ARM::BI__builtin_arm_mve_vst4q_s16:
1486case ARM::BI__builtin_arm_mve_vst4q_s32:
1487case ARM::BI__builtin_arm_mve_vst4q_s8:
1488case ARM::BI__builtin_arm_mve_vst4q_u16:
1489case ARM::BI__builtin_arm_mve_vst4q_u32:
1490case ARM::BI__builtin_arm_mve_vst4q_u8: {
1491 CustomCodeGenType = CustomCodeGen::VST24;
1492 IRIntr = Intrinsic::arm_mve_vst4q;
1493 NumVectors = 4;
1494 break; // custom code gen
1495}
1496case ARM::BI__builtin_arm_mve_vmaxnmaq_f16:
1497case ARM::BI__builtin_arm_mve_vmaxnmaq_f32:
1498case ARM::BI__builtin_arm_mve_vminnmaq_f16:
1499case ARM::BI__builtin_arm_mve_vminnmaq_f32: {
1500 llvm::Type * Param0;
1501 Intrinsic::ID Param1;
1502 Intrinsic::ID Param2;
1503 switch (BuiltinID) {
1504 case ARM::BI__builtin_arm_mve_vmaxnmaq_f16:
1505 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1506 Param1 = static_cast<Intrinsic::ID>(Intrinsic::maxnum);
1507 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxnm);
1508 break;
1509 case ARM::BI__builtin_arm_mve_vmaxnmaq_f32:
1510 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1511 Param1 = static_cast<Intrinsic::ID>(Intrinsic::maxnum);
1512 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxnm);
1513 break;
1514 case ARM::BI__builtin_arm_mve_vminnmaq_f16:
1515 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1516 Param1 = static_cast<Intrinsic::ID>(Intrinsic::minnum);
1517 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vminnm);
1518 break;
1519 case ARM::BI__builtin_arm_mve_vminnmaq_f32:
1520 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1521 Param1 = static_cast<Intrinsic::ID>(Intrinsic::minnum);
1522 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vminnm);
1523 break;
1524 }
1525 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1526 Value *Val1 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fabs, Tys: {Param0}), Args: {Val0});
1527 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
1528 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fabs, Tys: {Param0}), Args: {Val2});
1529 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param0}), Args: {Val1, Val3}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param0}), Args: {Val1, Val3});
1530}
1531case ARM::BI__builtin_arm_mve_vctp16q:
1532case ARM::BI__builtin_arm_mve_vctp32q:
1533case ARM::BI__builtin_arm_mve_vctp64q:
1534case ARM::BI__builtin_arm_mve_vctp8q: {
1535 Intrinsic::ID Param0;
1536 llvm::Type * Param1;
1537 switch (BuiltinID) {
1538 case ARM::BI__builtin_arm_mve_vctp16q:
1539 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp16);
1540 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1541 break;
1542 case ARM::BI__builtin_arm_mve_vctp32q:
1543 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp32);
1544 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1545 break;
1546 case ARM::BI__builtin_arm_mve_vctp64q:
1547 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp64);
1548 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
1549 break;
1550 case ARM::BI__builtin_arm_mve_vctp8q:
1551 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp8);
1552 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1553 break;
1554 }
1555 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1556 Value *Val1 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0), Args: {Val0});
1557 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param1}), Args: {Val1});
1558 return Builder.CreateIntCast(V: Val2, DestTy: Int16Ty, isSigned: false);
1559}
1560case ARM::BI__builtin_arm_mve_vmvnq_n_s32:
1561case ARM::BI__builtin_arm_mve_vmvnq_n_u32: {
1562 bool Param0;
1563 switch (BuiltinID) {
1564 case ARM::BI__builtin_arm_mve_vmvnq_n_s32:
1565 Param0 = static_cast<bool>(true);
1566 break;
1567 case ARM::BI__builtin_arm_mve_vmvnq_n_u32:
1568 Param0 = static_cast<bool>(false);
1569 break;
1570 }
1571 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1572 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: Param0);
1573 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
1574 return Builder.CreateNot(V: Val2);
1575}
1576case ARM::BI__builtin_arm_mve_vmvnq_n_s16:
1577case ARM::BI__builtin_arm_mve_vmvnq_n_u16: {
1578 bool Param0;
1579 switch (BuiltinID) {
1580 case ARM::BI__builtin_arm_mve_vmvnq_n_s16:
1581 Param0 = static_cast<bool>(true);
1582 break;
1583 case ARM::BI__builtin_arm_mve_vmvnq_n_u16:
1584 Param0 = static_cast<bool>(false);
1585 break;
1586 }
1587 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1588 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
1589 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Int16Ty, isSigned: Param0);
1590 Value *Val3 = ARMMVEVectorSplat(Builder, V: Val2);
1591 return Builder.CreateNot(V: Val3);
1592}
1593case ARM::BI__builtin_arm_mve_vmaxavq_s16:
1594case ARM::BI__builtin_arm_mve_vmaxavq_s8:
1595case ARM::BI__builtin_arm_mve_vminavq_s16:
1596case ARM::BI__builtin_arm_mve_vminavq_s8: {
1597 Intrinsic::ID Param0;
1598 llvm::Type * Param1;
1599 llvm::Type * Param2;
1600 switch (BuiltinID) {
1601 case ARM::BI__builtin_arm_mve_vmaxavq_s16:
1602 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxav);
1603 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1604 Param2 = static_cast<llvm::Type *>(Int16Ty);
1605 break;
1606 case ARM::BI__builtin_arm_mve_vmaxavq_s8:
1607 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxav);
1608 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1609 Param2 = static_cast<llvm::Type *>(Int8Ty);
1610 break;
1611 case ARM::BI__builtin_arm_mve_vminavq_s16:
1612 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minav);
1613 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1614 Param2 = static_cast<llvm::Type *>(Int16Ty);
1615 break;
1616 case ARM::BI__builtin_arm_mve_vminavq_s8:
1617 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minav);
1618 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1619 Param2 = static_cast<llvm::Type *>(Int8Ty);
1620 break;
1621 }
1622 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1623 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
1624 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
1625 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val1, Val2});
1626 return Builder.CreateIntCast(V: Val3, DestTy: Param2, isSigned: false);
1627}
1628case ARM::BI__builtin_arm_mve_vmaxavq_p_s16:
1629case ARM::BI__builtin_arm_mve_vmaxavq_p_s8:
1630case ARM::BI__builtin_arm_mve_vminavq_p_s16:
1631case ARM::BI__builtin_arm_mve_vminavq_p_s8: {
1632 llvm::Type * Param0;
1633 Intrinsic::ID Param1;
1634 llvm::Type * Param2;
1635 llvm::Type * Param3;
1636 switch (BuiltinID) {
1637 case ARM::BI__builtin_arm_mve_vmaxavq_p_s16:
1638 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1639 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxav_predicated);
1640 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1641 Param3 = static_cast<llvm::Type *>(Int16Ty);
1642 break;
1643 case ARM::BI__builtin_arm_mve_vmaxavq_p_s8:
1644 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1645 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxav_predicated);
1646 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1647 Param3 = static_cast<llvm::Type *>(Int8Ty);
1648 break;
1649 case ARM::BI__builtin_arm_mve_vminavq_p_s16:
1650 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1651 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minav_predicated);
1652 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1653 Param3 = static_cast<llvm::Type *>(Int16Ty);
1654 break;
1655 case ARM::BI__builtin_arm_mve_vminavq_p_s8:
1656 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1657 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minav_predicated);
1658 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1659 Param3 = static_cast<llvm::Type *>(Int8Ty);
1660 break;
1661 }
1662 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1663 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
1664 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
1665 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
1666 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
1667 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
1668 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val1, Val2, Val5});
1669 return Builder.CreateIntCast(V: Val6, DestTy: Param3, isSigned: false);
1670}
1671case ARM::BI__builtin_arm_mve_vmaxvq_s16:
1672case ARM::BI__builtin_arm_mve_vmaxvq_s8:
1673case ARM::BI__builtin_arm_mve_vmaxvq_u16:
1674case ARM::BI__builtin_arm_mve_vmaxvq_u8:
1675case ARM::BI__builtin_arm_mve_vminvq_s16:
1676case ARM::BI__builtin_arm_mve_vminvq_s8:
1677case ARM::BI__builtin_arm_mve_vminvq_u16:
1678case ARM::BI__builtin_arm_mve_vminvq_u8: {
1679 uint32_t Param0;
1680 Intrinsic::ID Param1;
1681 llvm::Type * Param2;
1682 llvm::Type * Param3;
1683 bool Param4;
1684 switch (BuiltinID) {
1685 case ARM::BI__builtin_arm_mve_vmaxvq_s16:
1686 Param0 = static_cast<uint32_t>(0);
1687 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv);
1688 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1689 Param3 = static_cast<llvm::Type *>(Int16Ty);
1690 Param4 = static_cast<bool>(true);
1691 break;
1692 case ARM::BI__builtin_arm_mve_vmaxvq_s8:
1693 Param0 = static_cast<uint32_t>(0);
1694 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv);
1695 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1696 Param3 = static_cast<llvm::Type *>(Int8Ty);
1697 Param4 = static_cast<bool>(true);
1698 break;
1699 case ARM::BI__builtin_arm_mve_vmaxvq_u16:
1700 Param0 = static_cast<uint32_t>(1);
1701 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv);
1702 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1703 Param3 = static_cast<llvm::Type *>(Int16Ty);
1704 Param4 = static_cast<bool>(false);
1705 break;
1706 case ARM::BI__builtin_arm_mve_vmaxvq_u8:
1707 Param0 = static_cast<uint32_t>(1);
1708 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv);
1709 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1710 Param3 = static_cast<llvm::Type *>(Int8Ty);
1711 Param4 = static_cast<bool>(false);
1712 break;
1713 case ARM::BI__builtin_arm_mve_vminvq_s16:
1714 Param0 = static_cast<uint32_t>(0);
1715 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv);
1716 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1717 Param3 = static_cast<llvm::Type *>(Int16Ty);
1718 Param4 = static_cast<bool>(true);
1719 break;
1720 case ARM::BI__builtin_arm_mve_vminvq_s8:
1721 Param0 = static_cast<uint32_t>(0);
1722 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv);
1723 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1724 Param3 = static_cast<llvm::Type *>(Int8Ty);
1725 Param4 = static_cast<bool>(true);
1726 break;
1727 case ARM::BI__builtin_arm_mve_vminvq_u16:
1728 Param0 = static_cast<uint32_t>(1);
1729 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv);
1730 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1731 Param3 = static_cast<llvm::Type *>(Int16Ty);
1732 Param4 = static_cast<bool>(false);
1733 break;
1734 case ARM::BI__builtin_arm_mve_vminvq_u8:
1735 Param0 = static_cast<uint32_t>(1);
1736 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv);
1737 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1738 Param3 = static_cast<llvm::Type *>(Int8Ty);
1739 Param4 = static_cast<bool>(false);
1740 break;
1741 }
1742 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1743 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
1744 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
1745 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
1746 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2}), Args: {Val1, Val2, Val3});
1747 return Builder.CreateIntCast(V: Val4, DestTy: Param3, isSigned: Param4);
1748}
1749case ARM::BI__builtin_arm_mve_vmaxvq_p_s16:
1750case ARM::BI__builtin_arm_mve_vmaxvq_p_s8:
1751case ARM::BI__builtin_arm_mve_vmaxvq_p_u16:
1752case ARM::BI__builtin_arm_mve_vmaxvq_p_u8:
1753case ARM::BI__builtin_arm_mve_vminvq_p_s16:
1754case ARM::BI__builtin_arm_mve_vminvq_p_s8:
1755case ARM::BI__builtin_arm_mve_vminvq_p_u16:
1756case ARM::BI__builtin_arm_mve_vminvq_p_u8: {
1757 uint32_t Param0;
1758 llvm::Type * Param1;
1759 Intrinsic::ID Param2;
1760 llvm::Type * Param3;
1761 llvm::Type * Param4;
1762 bool Param5;
1763 switch (BuiltinID) {
1764 case ARM::BI__builtin_arm_mve_vmaxvq_p_s16:
1765 Param0 = static_cast<uint32_t>(0);
1766 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1767 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv_predicated);
1768 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1769 Param4 = static_cast<llvm::Type *>(Int16Ty);
1770 Param5 = static_cast<bool>(true);
1771 break;
1772 case ARM::BI__builtin_arm_mve_vmaxvq_p_s8:
1773 Param0 = static_cast<uint32_t>(0);
1774 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1775 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv_predicated);
1776 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1777 Param4 = static_cast<llvm::Type *>(Int8Ty);
1778 Param5 = static_cast<bool>(true);
1779 break;
1780 case ARM::BI__builtin_arm_mve_vmaxvq_p_u16:
1781 Param0 = static_cast<uint32_t>(1);
1782 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1783 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv_predicated);
1784 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1785 Param4 = static_cast<llvm::Type *>(Int16Ty);
1786 Param5 = static_cast<bool>(false);
1787 break;
1788 case ARM::BI__builtin_arm_mve_vmaxvq_p_u8:
1789 Param0 = static_cast<uint32_t>(1);
1790 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1791 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv_predicated);
1792 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1793 Param4 = static_cast<llvm::Type *>(Int8Ty);
1794 Param5 = static_cast<bool>(false);
1795 break;
1796 case ARM::BI__builtin_arm_mve_vminvq_p_s16:
1797 Param0 = static_cast<uint32_t>(0);
1798 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1799 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv_predicated);
1800 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1801 Param4 = static_cast<llvm::Type *>(Int16Ty);
1802 Param5 = static_cast<bool>(true);
1803 break;
1804 case ARM::BI__builtin_arm_mve_vminvq_p_s8:
1805 Param0 = static_cast<uint32_t>(0);
1806 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1807 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv_predicated);
1808 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1809 Param4 = static_cast<llvm::Type *>(Int8Ty);
1810 Param5 = static_cast<bool>(true);
1811 break;
1812 case ARM::BI__builtin_arm_mve_vminvq_p_u16:
1813 Param0 = static_cast<uint32_t>(1);
1814 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1815 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv_predicated);
1816 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
1817 Param4 = static_cast<llvm::Type *>(Int16Ty);
1818 Param5 = static_cast<bool>(false);
1819 break;
1820 case ARM::BI__builtin_arm_mve_vminvq_p_u8:
1821 Param0 = static_cast<uint32_t>(1);
1822 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
1823 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv_predicated);
1824 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
1825 Param4 = static_cast<llvm::Type *>(Int8Ty);
1826 Param5 = static_cast<bool>(false);
1827 break;
1828 }
1829 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1830 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
1831 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
1832 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
1833 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
1834 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
1835 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val5});
1836 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param1}), Args: {Val1, Val2, Val3, Val6});
1837 return Builder.CreateIntCast(V: Val7, DestTy: Param4, isSigned: Param5);
1838}
1839case ARM::BI__builtin_arm_mve_vadcq_s32:
1840case ARM::BI__builtin_arm_mve_vadcq_u32:
1841case ARM::BI__builtin_arm_mve_vsbcq_s32:
1842case ARM::BI__builtin_arm_mve_vsbcq_u32: {
1843 Intrinsic::ID Param0;
1844 switch (BuiltinID) {
1845 case ARM::BI__builtin_arm_mve_vadcq_s32:
1846 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vadc);
1847 break;
1848 case ARM::BI__builtin_arm_mve_vadcq_u32:
1849 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vadc);
1850 break;
1851 case ARM::BI__builtin_arm_mve_vsbcq_s32:
1852 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsbc);
1853 break;
1854 case ARM::BI__builtin_arm_mve_vsbcq_u32:
1855 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsbc);
1856 break;
1857 }
1858 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1859 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1860 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 2));
1861 Value *Val3 = Builder.CreateLoad(Addr: Val2);
1862 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
1863 Value *Val5 = Builder.CreateShl(LHS: Val3, RHS: Val4);
1864 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4)}), Args: {Val0, Val1, Val5});
1865 Value *Val7 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
1866 Value *Val8 = Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(1));
1867 Value *Val9 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
1868 Value *Val10 = Builder.CreateLShr(LHS: Val8, RHS: Val9);
1869 Value *Val11 = Builder.CreateAnd(LHS: Val7, RHS: Val10);
1870 Builder.CreateStore(Val: Val11, Addr: Val2);
1871 return Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(0));
1872}
1873case ARM::BI__builtin_arm_mve_vcmpeqq_f16:
1874case ARM::BI__builtin_arm_mve_vcmpeqq_f32: {
1875 llvm::Type * Param0;
1876 llvm::Type * Param1;
1877 switch (BuiltinID) {
1878 case ARM::BI__builtin_arm_mve_vcmpeqq_f16:
1879 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1880 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1881 break;
1882 case ARM::BI__builtin_arm_mve_vcmpeqq_f32:
1883 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1884 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1885 break;
1886 }
1887 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1888 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1889 Value *Val2 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOEQ(LHS: Val0, RHS: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_eq, Tys: {Param0, Param1}), Args: {Val0, Val1});
1890 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
1891 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
1892}
1893case ARM::BI__builtin_arm_mve_vcmpgeq_f16:
1894case ARM::BI__builtin_arm_mve_vcmpgeq_f32: {
1895 llvm::Type * Param0;
1896 llvm::Type * Param1;
1897 switch (BuiltinID) {
1898 case ARM::BI__builtin_arm_mve_vcmpgeq_f16:
1899 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1900 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1901 break;
1902 case ARM::BI__builtin_arm_mve_vcmpgeq_f32:
1903 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1904 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1905 break;
1906 }
1907 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1908 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1909 Value *Val2 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGE(LHS: Val0, RHS: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ge, Tys: {Param0, Param1}), Args: {Val0, Val1});
1910 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
1911 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
1912}
1913case ARM::BI__builtin_arm_mve_vcmpgtq_f16:
1914case ARM::BI__builtin_arm_mve_vcmpgtq_f32: {
1915 llvm::Type * Param0;
1916 llvm::Type * Param1;
1917 switch (BuiltinID) {
1918 case ARM::BI__builtin_arm_mve_vcmpgtq_f16:
1919 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1920 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1921 break;
1922 case ARM::BI__builtin_arm_mve_vcmpgtq_f32:
1923 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1924 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1925 break;
1926 }
1927 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1928 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1929 Value *Val2 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGT(LHS: Val0, RHS: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_gt, Tys: {Param0, Param1}), Args: {Val0, Val1});
1930 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
1931 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
1932}
1933case ARM::BI__builtin_arm_mve_vcmpleq_f16:
1934case ARM::BI__builtin_arm_mve_vcmpleq_f32: {
1935 llvm::Type * Param0;
1936 llvm::Type * Param1;
1937 switch (BuiltinID) {
1938 case ARM::BI__builtin_arm_mve_vcmpleq_f16:
1939 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1940 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1941 break;
1942 case ARM::BI__builtin_arm_mve_vcmpleq_f32:
1943 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1944 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1945 break;
1946 }
1947 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1948 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1949 Value *Val2 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULE(LHS: Val0, RHS: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_le, Tys: {Param0, Param1}), Args: {Val0, Val1});
1950 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
1951 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
1952}
1953case ARM::BI__builtin_arm_mve_vcmpltq_f16:
1954case ARM::BI__builtin_arm_mve_vcmpltq_f32: {
1955 llvm::Type * Param0;
1956 llvm::Type * Param1;
1957 switch (BuiltinID) {
1958 case ARM::BI__builtin_arm_mve_vcmpltq_f16:
1959 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1960 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1961 break;
1962 case ARM::BI__builtin_arm_mve_vcmpltq_f32:
1963 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1964 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1965 break;
1966 }
1967 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1968 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1969 Value *Val2 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULT(LHS: Val0, RHS: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_lt, Tys: {Param0, Param1}), Args: {Val0, Val1});
1970 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
1971 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
1972}
1973case ARM::BI__builtin_arm_mve_vcmpneq_f16:
1974case ARM::BI__builtin_arm_mve_vcmpneq_f32: {
1975 llvm::Type * Param0;
1976 llvm::Type * Param1;
1977 switch (BuiltinID) {
1978 case ARM::BI__builtin_arm_mve_vcmpneq_f16:
1979 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
1980 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
1981 break;
1982 case ARM::BI__builtin_arm_mve_vcmpneq_f32:
1983 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
1984 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
1985 break;
1986 }
1987 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
1988 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
1989 Value *Val2 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpUNE(LHS: Val0, RHS: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ne, Tys: {Param0, Param1}), Args: {Val0, Val1});
1990 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
1991 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
1992}
1993case ARM::BI__builtin_arm_mve_vcmpeqq_n_f16:
1994case ARM::BI__builtin_arm_mve_vcmpeqq_n_f32: {
1995 llvm::Type * Param0;
1996 llvm::Type * Param1;
1997 switch (BuiltinID) {
1998 case ARM::BI__builtin_arm_mve_vcmpeqq_n_f16:
1999 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2000 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2001 break;
2002 case ARM::BI__builtin_arm_mve_vcmpeqq_n_f32:
2003 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2004 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2005 break;
2006 }
2007 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2008 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2009 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2010 Value *Val3 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOEQ(LHS: Val0, RHS: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_eq, Tys: {Param0, Param1}), Args: {Val0, Val2});
2011 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2012 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2013}
2014case ARM::BI__builtin_arm_mve_vcmpgeq_n_f16:
2015case ARM::BI__builtin_arm_mve_vcmpgeq_n_f32: {
2016 llvm::Type * Param0;
2017 llvm::Type * Param1;
2018 switch (BuiltinID) {
2019 case ARM::BI__builtin_arm_mve_vcmpgeq_n_f16:
2020 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2021 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2022 break;
2023 case ARM::BI__builtin_arm_mve_vcmpgeq_n_f32:
2024 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2025 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2026 break;
2027 }
2028 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2029 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2030 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2031 Value *Val3 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGE(LHS: Val0, RHS: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ge, Tys: {Param0, Param1}), Args: {Val0, Val2});
2032 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2033 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2034}
2035case ARM::BI__builtin_arm_mve_vcmpgtq_n_f16:
2036case ARM::BI__builtin_arm_mve_vcmpgtq_n_f32: {
2037 llvm::Type * Param0;
2038 llvm::Type * Param1;
2039 switch (BuiltinID) {
2040 case ARM::BI__builtin_arm_mve_vcmpgtq_n_f16:
2041 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2042 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2043 break;
2044 case ARM::BI__builtin_arm_mve_vcmpgtq_n_f32:
2045 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2046 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2047 break;
2048 }
2049 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2050 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2051 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2052 Value *Val3 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGT(LHS: Val0, RHS: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_gt, Tys: {Param0, Param1}), Args: {Val0, Val2});
2053 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2054 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2055}
2056case ARM::BI__builtin_arm_mve_vcmpleq_n_f16:
2057case ARM::BI__builtin_arm_mve_vcmpleq_n_f32: {
2058 llvm::Type * Param0;
2059 llvm::Type * Param1;
2060 switch (BuiltinID) {
2061 case ARM::BI__builtin_arm_mve_vcmpleq_n_f16:
2062 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2063 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2064 break;
2065 case ARM::BI__builtin_arm_mve_vcmpleq_n_f32:
2066 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2067 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2068 break;
2069 }
2070 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2071 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2072 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2073 Value *Val3 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULE(LHS: Val0, RHS: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_le, Tys: {Param0, Param1}), Args: {Val0, Val2});
2074 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2075 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2076}
2077case ARM::BI__builtin_arm_mve_vcmpltq_n_f16:
2078case ARM::BI__builtin_arm_mve_vcmpltq_n_f32: {
2079 llvm::Type * Param0;
2080 llvm::Type * Param1;
2081 switch (BuiltinID) {
2082 case ARM::BI__builtin_arm_mve_vcmpltq_n_f16:
2083 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2084 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2085 break;
2086 case ARM::BI__builtin_arm_mve_vcmpltq_n_f32:
2087 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2088 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2089 break;
2090 }
2091 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2092 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2093 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2094 Value *Val3 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULT(LHS: Val0, RHS: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_lt, Tys: {Param0, Param1}), Args: {Val0, Val2});
2095 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2096 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2097}
2098case ARM::BI__builtin_arm_mve_vcmpneq_n_f16:
2099case ARM::BI__builtin_arm_mve_vcmpneq_n_f32: {
2100 llvm::Type * Param0;
2101 llvm::Type * Param1;
2102 switch (BuiltinID) {
2103 case ARM::BI__builtin_arm_mve_vcmpneq_n_f16:
2104 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2105 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2106 break;
2107 case ARM::BI__builtin_arm_mve_vcmpneq_n_f32:
2108 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2109 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2110 break;
2111 }
2112 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2113 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2114 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2115 Value *Val3 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpUNE(LHS: Val0, RHS: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ne, Tys: {Param0, Param1}), Args: {Val0, Val2});
2116 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2117 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2118}
2119case ARM::BI__builtin_arm_mve_vcmpeqq_n_s16:
2120case ARM::BI__builtin_arm_mve_vcmpeqq_n_s32:
2121case ARM::BI__builtin_arm_mve_vcmpeqq_n_s8:
2122case ARM::BI__builtin_arm_mve_vcmpeqq_n_u16:
2123case ARM::BI__builtin_arm_mve_vcmpeqq_n_u32:
2124case ARM::BI__builtin_arm_mve_vcmpeqq_n_u8: {
2125 llvm::Type * Param0;
2126 switch (BuiltinID) {
2127 case ARM::BI__builtin_arm_mve_vcmpeqq_n_s16:
2128 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2129 break;
2130 case ARM::BI__builtin_arm_mve_vcmpeqq_n_s32:
2131 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2132 break;
2133 case ARM::BI__builtin_arm_mve_vcmpeqq_n_s8:
2134 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2135 break;
2136 case ARM::BI__builtin_arm_mve_vcmpeqq_n_u16:
2137 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2138 break;
2139 case ARM::BI__builtin_arm_mve_vcmpeqq_n_u32:
2140 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2141 break;
2142 case ARM::BI__builtin_arm_mve_vcmpeqq_n_u8:
2143 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2144 break;
2145 }
2146 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2147 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2148 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2149 Value *Val3 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val2);
2150 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2151 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2152}
2153case ARM::BI__builtin_arm_mve_vcmpneq_n_s16:
2154case ARM::BI__builtin_arm_mve_vcmpneq_n_s32:
2155case ARM::BI__builtin_arm_mve_vcmpneq_n_s8:
2156case ARM::BI__builtin_arm_mve_vcmpneq_n_u16:
2157case ARM::BI__builtin_arm_mve_vcmpneq_n_u32:
2158case ARM::BI__builtin_arm_mve_vcmpneq_n_u8: {
2159 llvm::Type * Param0;
2160 switch (BuiltinID) {
2161 case ARM::BI__builtin_arm_mve_vcmpneq_n_s16:
2162 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2163 break;
2164 case ARM::BI__builtin_arm_mve_vcmpneq_n_s32:
2165 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2166 break;
2167 case ARM::BI__builtin_arm_mve_vcmpneq_n_s8:
2168 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2169 break;
2170 case ARM::BI__builtin_arm_mve_vcmpneq_n_u16:
2171 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2172 break;
2173 case ARM::BI__builtin_arm_mve_vcmpneq_n_u32:
2174 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2175 break;
2176 case ARM::BI__builtin_arm_mve_vcmpneq_n_u8:
2177 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2178 break;
2179 }
2180 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2181 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2182 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2183 Value *Val3 = Builder.CreateICmpNE(LHS: Val0, RHS: Val2);
2184 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2185 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2186}
2187case ARM::BI__builtin_arm_mve_vcmpgeq_n_s16:
2188case ARM::BI__builtin_arm_mve_vcmpgeq_n_s32:
2189case ARM::BI__builtin_arm_mve_vcmpgeq_n_s8: {
2190 llvm::Type * Param0;
2191 switch (BuiltinID) {
2192 case ARM::BI__builtin_arm_mve_vcmpgeq_n_s16:
2193 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2194 break;
2195 case ARM::BI__builtin_arm_mve_vcmpgeq_n_s32:
2196 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2197 break;
2198 case ARM::BI__builtin_arm_mve_vcmpgeq_n_s8:
2199 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2200 break;
2201 }
2202 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2203 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2204 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2205 Value *Val3 = Builder.CreateICmpSGE(LHS: Val0, RHS: Val2);
2206 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2207 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2208}
2209case ARM::BI__builtin_arm_mve_vcmpgtq_n_s16:
2210case ARM::BI__builtin_arm_mve_vcmpgtq_n_s32:
2211case ARM::BI__builtin_arm_mve_vcmpgtq_n_s8: {
2212 llvm::Type * Param0;
2213 switch (BuiltinID) {
2214 case ARM::BI__builtin_arm_mve_vcmpgtq_n_s16:
2215 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2216 break;
2217 case ARM::BI__builtin_arm_mve_vcmpgtq_n_s32:
2218 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2219 break;
2220 case ARM::BI__builtin_arm_mve_vcmpgtq_n_s8:
2221 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2222 break;
2223 }
2224 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2225 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2226 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2227 Value *Val3 = Builder.CreateICmpSGT(LHS: Val0, RHS: Val2);
2228 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2229 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2230}
2231case ARM::BI__builtin_arm_mve_vcmpleq_n_s16:
2232case ARM::BI__builtin_arm_mve_vcmpleq_n_s32:
2233case ARM::BI__builtin_arm_mve_vcmpleq_n_s8: {
2234 llvm::Type * Param0;
2235 switch (BuiltinID) {
2236 case ARM::BI__builtin_arm_mve_vcmpleq_n_s16:
2237 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2238 break;
2239 case ARM::BI__builtin_arm_mve_vcmpleq_n_s32:
2240 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2241 break;
2242 case ARM::BI__builtin_arm_mve_vcmpleq_n_s8:
2243 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2244 break;
2245 }
2246 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2247 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2248 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2249 Value *Val3 = Builder.CreateICmpSLE(LHS: Val0, RHS: Val2);
2250 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2251 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2252}
2253case ARM::BI__builtin_arm_mve_vcmpltq_n_s16:
2254case ARM::BI__builtin_arm_mve_vcmpltq_n_s32:
2255case ARM::BI__builtin_arm_mve_vcmpltq_n_s8: {
2256 llvm::Type * Param0;
2257 switch (BuiltinID) {
2258 case ARM::BI__builtin_arm_mve_vcmpltq_n_s16:
2259 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2260 break;
2261 case ARM::BI__builtin_arm_mve_vcmpltq_n_s32:
2262 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2263 break;
2264 case ARM::BI__builtin_arm_mve_vcmpltq_n_s8:
2265 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2266 break;
2267 }
2268 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2269 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2270 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2271 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
2272 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2273 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2274}
2275case ARM::BI__builtin_arm_mve_vcmpcsq_n_u16:
2276case ARM::BI__builtin_arm_mve_vcmpcsq_n_u32:
2277case ARM::BI__builtin_arm_mve_vcmpcsq_n_u8: {
2278 llvm::Type * Param0;
2279 switch (BuiltinID) {
2280 case ARM::BI__builtin_arm_mve_vcmpcsq_n_u16:
2281 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2282 break;
2283 case ARM::BI__builtin_arm_mve_vcmpcsq_n_u32:
2284 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2285 break;
2286 case ARM::BI__builtin_arm_mve_vcmpcsq_n_u8:
2287 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2288 break;
2289 }
2290 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2291 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2292 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2293 Value *Val3 = Builder.CreateICmpUGE(LHS: Val0, RHS: Val2);
2294 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2295 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2296}
2297case ARM::BI__builtin_arm_mve_vcmphiq_n_u16:
2298case ARM::BI__builtin_arm_mve_vcmphiq_n_u32:
2299case ARM::BI__builtin_arm_mve_vcmphiq_n_u8: {
2300 llvm::Type * Param0;
2301 switch (BuiltinID) {
2302 case ARM::BI__builtin_arm_mve_vcmphiq_n_u16:
2303 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2304 break;
2305 case ARM::BI__builtin_arm_mve_vcmphiq_n_u32:
2306 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2307 break;
2308 case ARM::BI__builtin_arm_mve_vcmphiq_n_u8:
2309 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2310 break;
2311 }
2312 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2313 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2314 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2315 Value *Val3 = Builder.CreateICmpUGT(LHS: Val0, RHS: Val2);
2316 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val3});
2317 return Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: false);
2318}
2319case ARM::BI__builtin_arm_mve_vqdmullbq_n_s16:
2320case ARM::BI__builtin_arm_mve_vqdmullbq_n_s32:
2321case ARM::BI__builtin_arm_mve_vqdmulltq_n_s16:
2322case ARM::BI__builtin_arm_mve_vqdmulltq_n_s32: {
2323 uint32_t Param0;
2324 llvm::Type * Param1;
2325 llvm::Type * Param2;
2326 switch (BuiltinID) {
2327 case ARM::BI__builtin_arm_mve_vqdmullbq_n_s16:
2328 Param0 = static_cast<uint32_t>(0);
2329 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2330 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2331 break;
2332 case ARM::BI__builtin_arm_mve_vqdmullbq_n_s32:
2333 Param0 = static_cast<uint32_t>(0);
2334 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
2335 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2336 break;
2337 case ARM::BI__builtin_arm_mve_vqdmulltq_n_s16:
2338 Param0 = static_cast<uint32_t>(1);
2339 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2340 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2341 break;
2342 case ARM::BI__builtin_arm_mve_vqdmulltq_n_s32:
2343 Param0 = static_cast<uint32_t>(1);
2344 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
2345 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2346 break;
2347 }
2348 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2349 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2350 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2351 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
2352 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vqdmull, Tys: {Param1, Param2}), Args: {Val0, Val2, Val3});
2353}
2354case ARM::BI__builtin_arm_mve_vhaddq_n_s16:
2355case ARM::BI__builtin_arm_mve_vhaddq_n_s32:
2356case ARM::BI__builtin_arm_mve_vhaddq_n_s8:
2357case ARM::BI__builtin_arm_mve_vhaddq_n_u16:
2358case ARM::BI__builtin_arm_mve_vhaddq_n_u32:
2359case ARM::BI__builtin_arm_mve_vhaddq_n_u8:
2360case ARM::BI__builtin_arm_mve_vhsubq_n_s16:
2361case ARM::BI__builtin_arm_mve_vhsubq_n_s32:
2362case ARM::BI__builtin_arm_mve_vhsubq_n_s8:
2363case ARM::BI__builtin_arm_mve_vhsubq_n_u16:
2364case ARM::BI__builtin_arm_mve_vhsubq_n_u32:
2365case ARM::BI__builtin_arm_mve_vhsubq_n_u8: {
2366 uint32_t Param0;
2367 Intrinsic::ID Param1;
2368 llvm::Type * Param2;
2369 switch (BuiltinID) {
2370 case ARM::BI__builtin_arm_mve_vhaddq_n_s16:
2371 Param0 = static_cast<uint32_t>(0);
2372 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
2373 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2374 break;
2375 case ARM::BI__builtin_arm_mve_vhaddq_n_s32:
2376 Param0 = static_cast<uint32_t>(0);
2377 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
2378 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2379 break;
2380 case ARM::BI__builtin_arm_mve_vhaddq_n_s8:
2381 Param0 = static_cast<uint32_t>(0);
2382 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
2383 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2384 break;
2385 case ARM::BI__builtin_arm_mve_vhaddq_n_u16:
2386 Param0 = static_cast<uint32_t>(1);
2387 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
2388 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2389 break;
2390 case ARM::BI__builtin_arm_mve_vhaddq_n_u32:
2391 Param0 = static_cast<uint32_t>(1);
2392 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
2393 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2394 break;
2395 case ARM::BI__builtin_arm_mve_vhaddq_n_u8:
2396 Param0 = static_cast<uint32_t>(1);
2397 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
2398 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2399 break;
2400 case ARM::BI__builtin_arm_mve_vhsubq_n_s16:
2401 Param0 = static_cast<uint32_t>(0);
2402 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
2403 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2404 break;
2405 case ARM::BI__builtin_arm_mve_vhsubq_n_s32:
2406 Param0 = static_cast<uint32_t>(0);
2407 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
2408 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2409 break;
2410 case ARM::BI__builtin_arm_mve_vhsubq_n_s8:
2411 Param0 = static_cast<uint32_t>(0);
2412 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
2413 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2414 break;
2415 case ARM::BI__builtin_arm_mve_vhsubq_n_u16:
2416 Param0 = static_cast<uint32_t>(1);
2417 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
2418 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2419 break;
2420 case ARM::BI__builtin_arm_mve_vhsubq_n_u32:
2421 Param0 = static_cast<uint32_t>(1);
2422 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
2423 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2424 break;
2425 case ARM::BI__builtin_arm_mve_vhsubq_n_u8:
2426 Param0 = static_cast<uint32_t>(1);
2427 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
2428 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2429 break;
2430 }
2431 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2432 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2433 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2434 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
2435 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2}), Args: {Val0, Val2, Val3});
2436}
2437case ARM::BI__builtin_arm_mve_vaddq_n_f16:
2438case ARM::BI__builtin_arm_mve_vaddq_n_f32: {
2439 llvm::Type * Param0;
2440 switch (BuiltinID) {
2441 case ARM::BI__builtin_arm_mve_vaddq_n_f16:
2442 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2443 break;
2444 case ARM::BI__builtin_arm_mve_vaddq_n_f32:
2445 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2446 break;
2447 }
2448 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2449 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2450 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2451 return !Builder.getIsFPConstrained() ? Builder.CreateFAdd(L: Val0, R: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vadd, Tys: {Param0}), Args: {Val0, Val2});
2452}
2453case ARM::BI__builtin_arm_mve_vmulq_n_f16:
2454case ARM::BI__builtin_arm_mve_vmulq_n_f32: {
2455 llvm::Type * Param0;
2456 switch (BuiltinID) {
2457 case ARM::BI__builtin_arm_mve_vmulq_n_f16:
2458 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2459 break;
2460 case ARM::BI__builtin_arm_mve_vmulq_n_f32:
2461 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2462 break;
2463 }
2464 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2465 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2466 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2467 return !Builder.getIsFPConstrained() ? Builder.CreateFMul(L: Val0, R: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmul, Tys: {Param0}), Args: {Val0, Val2});
2468}
2469case ARM::BI__builtin_arm_mve_vsubq_n_f16:
2470case ARM::BI__builtin_arm_mve_vsubq_n_f32: {
2471 llvm::Type * Param0;
2472 switch (BuiltinID) {
2473 case ARM::BI__builtin_arm_mve_vsubq_n_f16:
2474 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2475 break;
2476 case ARM::BI__builtin_arm_mve_vsubq_n_f32:
2477 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2478 break;
2479 }
2480 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2481 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2482 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2483 return !Builder.getIsFPConstrained() ? Builder.CreateFSub(L: Val0, R: Val2) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vsub, Tys: {Param0}), Args: {Val0, Val2});
2484}
2485case ARM::BI__builtin_arm_mve_vaddq_n_s16:
2486case ARM::BI__builtin_arm_mve_vaddq_n_s32:
2487case ARM::BI__builtin_arm_mve_vaddq_n_s8:
2488case ARM::BI__builtin_arm_mve_vaddq_n_u16:
2489case ARM::BI__builtin_arm_mve_vaddq_n_u32:
2490case ARM::BI__builtin_arm_mve_vaddq_n_u8: {
2491 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2492 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2493 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2494 return Builder.CreateAdd(LHS: Val0, RHS: Val2);
2495}
2496case ARM::BI__builtin_arm_mve_vqaddq_n_s16:
2497case ARM::BI__builtin_arm_mve_vqaddq_n_s32:
2498case ARM::BI__builtin_arm_mve_vqaddq_n_s8:
2499case ARM::BI__builtin_arm_mve_vqaddq_n_u16:
2500case ARM::BI__builtin_arm_mve_vqaddq_n_u32:
2501case ARM::BI__builtin_arm_mve_vqaddq_n_u8:
2502case ARM::BI__builtin_arm_mve_vqdmulhq_n_s16:
2503case ARM::BI__builtin_arm_mve_vqdmulhq_n_s32:
2504case ARM::BI__builtin_arm_mve_vqdmulhq_n_s8:
2505case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s16:
2506case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s32:
2507case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s8:
2508case ARM::BI__builtin_arm_mve_vqsubq_n_s16:
2509case ARM::BI__builtin_arm_mve_vqsubq_n_s32:
2510case ARM::BI__builtin_arm_mve_vqsubq_n_s8:
2511case ARM::BI__builtin_arm_mve_vqsubq_n_u16:
2512case ARM::BI__builtin_arm_mve_vqsubq_n_u32:
2513case ARM::BI__builtin_arm_mve_vqsubq_n_u8: {
2514 Intrinsic::ID Param0;
2515 llvm::Type * Param1;
2516 switch (BuiltinID) {
2517 case ARM::BI__builtin_arm_mve_vqaddq_n_s16:
2518 Param0 = static_cast<Intrinsic::ID>(Intrinsic::sadd_sat);
2519 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2520 break;
2521 case ARM::BI__builtin_arm_mve_vqaddq_n_s32:
2522 Param0 = static_cast<Intrinsic::ID>(Intrinsic::sadd_sat);
2523 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2524 break;
2525 case ARM::BI__builtin_arm_mve_vqaddq_n_s8:
2526 Param0 = static_cast<Intrinsic::ID>(Intrinsic::sadd_sat);
2527 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2528 break;
2529 case ARM::BI__builtin_arm_mve_vqaddq_n_u16:
2530 Param0 = static_cast<Intrinsic::ID>(Intrinsic::uadd_sat);
2531 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2532 break;
2533 case ARM::BI__builtin_arm_mve_vqaddq_n_u32:
2534 Param0 = static_cast<Intrinsic::ID>(Intrinsic::uadd_sat);
2535 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2536 break;
2537 case ARM::BI__builtin_arm_mve_vqaddq_n_u8:
2538 Param0 = static_cast<Intrinsic::ID>(Intrinsic::uadd_sat);
2539 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2540 break;
2541 case ARM::BI__builtin_arm_mve_vqdmulhq_n_s16:
2542 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmulh);
2543 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2544 break;
2545 case ARM::BI__builtin_arm_mve_vqdmulhq_n_s32:
2546 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmulh);
2547 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2548 break;
2549 case ARM::BI__builtin_arm_mve_vqdmulhq_n_s8:
2550 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmulh);
2551 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2552 break;
2553 case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s16:
2554 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmulh);
2555 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2556 break;
2557 case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s32:
2558 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmulh);
2559 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2560 break;
2561 case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s8:
2562 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmulh);
2563 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2564 break;
2565 case ARM::BI__builtin_arm_mve_vqsubq_n_s16:
2566 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ssub_sat);
2567 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2568 break;
2569 case ARM::BI__builtin_arm_mve_vqsubq_n_s32:
2570 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ssub_sat);
2571 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2572 break;
2573 case ARM::BI__builtin_arm_mve_vqsubq_n_s8:
2574 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ssub_sat);
2575 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2576 break;
2577 case ARM::BI__builtin_arm_mve_vqsubq_n_u16:
2578 Param0 = static_cast<Intrinsic::ID>(Intrinsic::usub_sat);
2579 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2580 break;
2581 case ARM::BI__builtin_arm_mve_vqsubq_n_u32:
2582 Param0 = static_cast<Intrinsic::ID>(Intrinsic::usub_sat);
2583 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2584 break;
2585 case ARM::BI__builtin_arm_mve_vqsubq_n_u8:
2586 Param0 = static_cast<Intrinsic::ID>(Intrinsic::usub_sat);
2587 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2588 break;
2589 }
2590 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2591 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2592 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2593 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val2});
2594}
2595case ARM::BI__builtin_arm_mve_vmulq_n_s16:
2596case ARM::BI__builtin_arm_mve_vmulq_n_s32:
2597case ARM::BI__builtin_arm_mve_vmulq_n_s8:
2598case ARM::BI__builtin_arm_mve_vmulq_n_u16:
2599case ARM::BI__builtin_arm_mve_vmulq_n_u32:
2600case ARM::BI__builtin_arm_mve_vmulq_n_u8: {
2601 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2602 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2603 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2604 return Builder.CreateMul(LHS: Val0, RHS: Val2);
2605}
2606case ARM::BI__builtin_arm_mve_vsubq_n_s16:
2607case ARM::BI__builtin_arm_mve_vsubq_n_s32:
2608case ARM::BI__builtin_arm_mve_vsubq_n_s8:
2609case ARM::BI__builtin_arm_mve_vsubq_n_u16:
2610case ARM::BI__builtin_arm_mve_vsubq_n_u32:
2611case ARM::BI__builtin_arm_mve_vsubq_n_u8: {
2612 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2613 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2614 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
2615 return Builder.CreateSub(LHS: Val0, RHS: Val2);
2616}
2617case ARM::BI__builtin_arm_mve_vmaxnmavq_f16:
2618case ARM::BI__builtin_arm_mve_vmaxnmavq_f32:
2619case ARM::BI__builtin_arm_mve_vmaxnmvq_f16:
2620case ARM::BI__builtin_arm_mve_vmaxnmvq_f32:
2621case ARM::BI__builtin_arm_mve_vminnmavq_f16:
2622case ARM::BI__builtin_arm_mve_vminnmavq_f32:
2623case ARM::BI__builtin_arm_mve_vminnmvq_f16:
2624case ARM::BI__builtin_arm_mve_vminnmvq_f32: {
2625 Intrinsic::ID Param0;
2626 llvm::Type * Param1;
2627 llvm::Type * Param2;
2628 switch (BuiltinID) {
2629 case ARM::BI__builtin_arm_mve_vmaxnmavq_f16:
2630 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmav);
2631 Param1 = static_cast<llvm::Type *>(HalfTy);
2632 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2633 break;
2634 case ARM::BI__builtin_arm_mve_vmaxnmavq_f32:
2635 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmav);
2636 Param1 = static_cast<llvm::Type *>(FloatTy);
2637 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2638 break;
2639 case ARM::BI__builtin_arm_mve_vmaxnmvq_f16:
2640 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmv);
2641 Param1 = static_cast<llvm::Type *>(HalfTy);
2642 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2643 break;
2644 case ARM::BI__builtin_arm_mve_vmaxnmvq_f32:
2645 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmv);
2646 Param1 = static_cast<llvm::Type *>(FloatTy);
2647 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2648 break;
2649 case ARM::BI__builtin_arm_mve_vminnmavq_f16:
2650 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmav);
2651 Param1 = static_cast<llvm::Type *>(HalfTy);
2652 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2653 break;
2654 case ARM::BI__builtin_arm_mve_vminnmavq_f32:
2655 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmav);
2656 Param1 = static_cast<llvm::Type *>(FloatTy);
2657 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2658 break;
2659 case ARM::BI__builtin_arm_mve_vminnmvq_f16:
2660 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmv);
2661 Param1 = static_cast<llvm::Type *>(HalfTy);
2662 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
2663 break;
2664 case ARM::BI__builtin_arm_mve_vminnmvq_f32:
2665 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmv);
2666 Param1 = static_cast<llvm::Type *>(FloatTy);
2667 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
2668 break;
2669 }
2670 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2671 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2672 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1, Param2}), Args: {Val0, Val1});
2673 return (Val2);
2674}
2675case ARM::BI__builtin_arm_mve_vddupq_n_u16:
2676case ARM::BI__builtin_arm_mve_vddupq_n_u32:
2677case ARM::BI__builtin_arm_mve_vddupq_n_u8:
2678case ARM::BI__builtin_arm_mve_vidupq_n_u16:
2679case ARM::BI__builtin_arm_mve_vidupq_n_u32:
2680case ARM::BI__builtin_arm_mve_vidupq_n_u8: {
2681 Intrinsic::ID Param0;
2682 llvm::Type * Param1;
2683 switch (BuiltinID) {
2684 case ARM::BI__builtin_arm_mve_vddupq_n_u16:
2685 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup);
2686 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2687 break;
2688 case ARM::BI__builtin_arm_mve_vddupq_n_u32:
2689 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup);
2690 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2691 break;
2692 case ARM::BI__builtin_arm_mve_vddupq_n_u8:
2693 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup);
2694 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2695 break;
2696 case ARM::BI__builtin_arm_mve_vidupq_n_u16:
2697 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup);
2698 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
2699 break;
2700 case ARM::BI__builtin_arm_mve_vidupq_n_u32:
2701 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup);
2702 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
2703 break;
2704 case ARM::BI__builtin_arm_mve_vidupq_n_u8:
2705 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup);
2706 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
2707 break;
2708 }
2709 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2710 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2711 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val1});
2712 return Builder.CreateExtractValue(Agg: Val2, Idxs: static_cast<unsigned>(0));
2713}
2714case ARM::BI__builtin_arm_mve_vmaxavq_s32:
2715case ARM::BI__builtin_arm_mve_vminavq_s32: {
2716 Intrinsic::ID Param0;
2717 switch (BuiltinID) {
2718 case ARM::BI__builtin_arm_mve_vmaxavq_s32:
2719 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxav);
2720 break;
2721 case ARM::BI__builtin_arm_mve_vminavq_s32:
2722 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minav);
2723 break;
2724 }
2725 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2726 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2727 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4)}), Args: {Val0, Val1});
2728 return Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
2729}
2730case ARM::BI__builtin_arm_mve_vcmpeqq_s16:
2731case ARM::BI__builtin_arm_mve_vcmpeqq_s32:
2732case ARM::BI__builtin_arm_mve_vcmpeqq_s8:
2733case ARM::BI__builtin_arm_mve_vcmpeqq_u16:
2734case ARM::BI__builtin_arm_mve_vcmpeqq_u32:
2735case ARM::BI__builtin_arm_mve_vcmpeqq_u8: {
2736 llvm::Type * Param0;
2737 switch (BuiltinID) {
2738 case ARM::BI__builtin_arm_mve_vcmpeqq_s16:
2739 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2740 break;
2741 case ARM::BI__builtin_arm_mve_vcmpeqq_s32:
2742 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2743 break;
2744 case ARM::BI__builtin_arm_mve_vcmpeqq_s8:
2745 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2746 break;
2747 case ARM::BI__builtin_arm_mve_vcmpeqq_u16:
2748 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2749 break;
2750 case ARM::BI__builtin_arm_mve_vcmpeqq_u32:
2751 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2752 break;
2753 case ARM::BI__builtin_arm_mve_vcmpeqq_u8:
2754 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2755 break;
2756 }
2757 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2758 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2759 Value *Val2 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val1);
2760 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2761 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2762}
2763case ARM::BI__builtin_arm_mve_vcmpneq_s16:
2764case ARM::BI__builtin_arm_mve_vcmpneq_s32:
2765case ARM::BI__builtin_arm_mve_vcmpneq_s8:
2766case ARM::BI__builtin_arm_mve_vcmpneq_u16:
2767case ARM::BI__builtin_arm_mve_vcmpneq_u32:
2768case ARM::BI__builtin_arm_mve_vcmpneq_u8: {
2769 llvm::Type * Param0;
2770 switch (BuiltinID) {
2771 case ARM::BI__builtin_arm_mve_vcmpneq_s16:
2772 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2773 break;
2774 case ARM::BI__builtin_arm_mve_vcmpneq_s32:
2775 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2776 break;
2777 case ARM::BI__builtin_arm_mve_vcmpneq_s8:
2778 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2779 break;
2780 case ARM::BI__builtin_arm_mve_vcmpneq_u16:
2781 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2782 break;
2783 case ARM::BI__builtin_arm_mve_vcmpneq_u32:
2784 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2785 break;
2786 case ARM::BI__builtin_arm_mve_vcmpneq_u8:
2787 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2788 break;
2789 }
2790 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2791 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2792 Value *Val2 = Builder.CreateICmpNE(LHS: Val0, RHS: Val1);
2793 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2794 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2795}
2796case ARM::BI__builtin_arm_mve_vcmpgeq_s16:
2797case ARM::BI__builtin_arm_mve_vcmpgeq_s32:
2798case ARM::BI__builtin_arm_mve_vcmpgeq_s8: {
2799 llvm::Type * Param0;
2800 switch (BuiltinID) {
2801 case ARM::BI__builtin_arm_mve_vcmpgeq_s16:
2802 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2803 break;
2804 case ARM::BI__builtin_arm_mve_vcmpgeq_s32:
2805 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2806 break;
2807 case ARM::BI__builtin_arm_mve_vcmpgeq_s8:
2808 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2809 break;
2810 }
2811 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2812 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2813 Value *Val2 = Builder.CreateICmpSGE(LHS: Val0, RHS: Val1);
2814 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2815 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2816}
2817case ARM::BI__builtin_arm_mve_vmaxq_s16:
2818case ARM::BI__builtin_arm_mve_vmaxq_s32:
2819case ARM::BI__builtin_arm_mve_vmaxq_s8: {
2820 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2821 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2822 Value *Val2 = Builder.CreateICmpSGE(LHS: Val0, RHS: Val1);
2823 return Builder.CreateSelect(C: Val2, True: Val0, False: Val1);
2824}
2825case ARM::BI__builtin_arm_mve_vcmpgtq_s16:
2826case ARM::BI__builtin_arm_mve_vcmpgtq_s32:
2827case ARM::BI__builtin_arm_mve_vcmpgtq_s8: {
2828 llvm::Type * Param0;
2829 switch (BuiltinID) {
2830 case ARM::BI__builtin_arm_mve_vcmpgtq_s16:
2831 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2832 break;
2833 case ARM::BI__builtin_arm_mve_vcmpgtq_s32:
2834 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2835 break;
2836 case ARM::BI__builtin_arm_mve_vcmpgtq_s8:
2837 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2838 break;
2839 }
2840 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2841 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2842 Value *Val2 = Builder.CreateICmpSGT(LHS: Val0, RHS: Val1);
2843 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2844 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2845}
2846case ARM::BI__builtin_arm_mve_vcmpleq_s16:
2847case ARM::BI__builtin_arm_mve_vcmpleq_s32:
2848case ARM::BI__builtin_arm_mve_vcmpleq_s8: {
2849 llvm::Type * Param0;
2850 switch (BuiltinID) {
2851 case ARM::BI__builtin_arm_mve_vcmpleq_s16:
2852 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2853 break;
2854 case ARM::BI__builtin_arm_mve_vcmpleq_s32:
2855 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2856 break;
2857 case ARM::BI__builtin_arm_mve_vcmpleq_s8:
2858 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2859 break;
2860 }
2861 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2862 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2863 Value *Val2 = Builder.CreateICmpSLE(LHS: Val0, RHS: Val1);
2864 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2865 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2866}
2867case ARM::BI__builtin_arm_mve_vminq_s16:
2868case ARM::BI__builtin_arm_mve_vminq_s32:
2869case ARM::BI__builtin_arm_mve_vminq_s8: {
2870 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2871 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2872 Value *Val2 = Builder.CreateICmpSLE(LHS: Val0, RHS: Val1);
2873 return Builder.CreateSelect(C: Val2, True: Val0, False: Val1);
2874}
2875case ARM::BI__builtin_arm_mve_vcmpltq_s16:
2876case ARM::BI__builtin_arm_mve_vcmpltq_s32:
2877case ARM::BI__builtin_arm_mve_vcmpltq_s8: {
2878 llvm::Type * Param0;
2879 switch (BuiltinID) {
2880 case ARM::BI__builtin_arm_mve_vcmpltq_s16:
2881 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2882 break;
2883 case ARM::BI__builtin_arm_mve_vcmpltq_s32:
2884 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2885 break;
2886 case ARM::BI__builtin_arm_mve_vcmpltq_s8:
2887 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2888 break;
2889 }
2890 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2891 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2892 Value *Val2 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val1);
2893 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2894 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2895}
2896case ARM::BI__builtin_arm_mve_vcmpcsq_u16:
2897case ARM::BI__builtin_arm_mve_vcmpcsq_u32:
2898case ARM::BI__builtin_arm_mve_vcmpcsq_u8: {
2899 llvm::Type * Param0;
2900 switch (BuiltinID) {
2901 case ARM::BI__builtin_arm_mve_vcmpcsq_u16:
2902 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2903 break;
2904 case ARM::BI__builtin_arm_mve_vcmpcsq_u32:
2905 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2906 break;
2907 case ARM::BI__builtin_arm_mve_vcmpcsq_u8:
2908 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2909 break;
2910 }
2911 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2912 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2913 Value *Val2 = Builder.CreateICmpUGE(LHS: Val0, RHS: Val1);
2914 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2915 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2916}
2917case ARM::BI__builtin_arm_mve_vmaxq_u16:
2918case ARM::BI__builtin_arm_mve_vmaxq_u32:
2919case ARM::BI__builtin_arm_mve_vmaxq_u8: {
2920 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2921 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2922 Value *Val2 = Builder.CreateICmpUGE(LHS: Val0, RHS: Val1);
2923 return Builder.CreateSelect(C: Val2, True: Val0, False: Val1);
2924}
2925case ARM::BI__builtin_arm_mve_vcmphiq_u16:
2926case ARM::BI__builtin_arm_mve_vcmphiq_u32:
2927case ARM::BI__builtin_arm_mve_vcmphiq_u8: {
2928 llvm::Type * Param0;
2929 switch (BuiltinID) {
2930 case ARM::BI__builtin_arm_mve_vcmphiq_u16:
2931 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
2932 break;
2933 case ARM::BI__builtin_arm_mve_vcmphiq_u32:
2934 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
2935 break;
2936 case ARM::BI__builtin_arm_mve_vcmphiq_u8:
2937 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
2938 break;
2939 }
2940 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2941 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2942 Value *Val2 = Builder.CreateICmpUGT(LHS: Val0, RHS: Val1);
2943 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val2});
2944 return Builder.CreateIntCast(V: Val3, DestTy: Int16Ty, isSigned: false);
2945}
2946case ARM::BI__builtin_arm_mve_vminq_u16:
2947case ARM::BI__builtin_arm_mve_vminq_u32:
2948case ARM::BI__builtin_arm_mve_vminq_u8: {
2949 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2950 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2951 Value *Val2 = Builder.CreateICmpULE(LHS: Val0, RHS: Val1);
2952 return Builder.CreateSelect(C: Val2, True: Val0, False: Val1);
2953}
2954case ARM::BI__builtin_arm_mve_vbicq_n_s32:
2955case ARM::BI__builtin_arm_mve_vbicq_n_u32: {
2956 bool Param0;
2957 switch (BuiltinID) {
2958 case ARM::BI__builtin_arm_mve_vbicq_n_s32:
2959 Param0 = static_cast<bool>(true);
2960 break;
2961 case ARM::BI__builtin_arm_mve_vbicq_n_u32:
2962 Param0 = static_cast<bool>(false);
2963 break;
2964 }
2965 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2966 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2967 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Int32Ty, isSigned: Param0);
2968 Value *Val3 = ARMMVEVectorSplat(Builder, V: Val2);
2969 Value *Val4 = Builder.CreateNot(V: Val3);
2970 return Builder.CreateAnd(LHS: Val0, RHS: Val4);
2971}
2972case ARM::BI__builtin_arm_mve_vorrq_n_s32:
2973case ARM::BI__builtin_arm_mve_vorrq_n_u32: {
2974 bool Param0;
2975 switch (BuiltinID) {
2976 case ARM::BI__builtin_arm_mve_vorrq_n_s32:
2977 Param0 = static_cast<bool>(true);
2978 break;
2979 case ARM::BI__builtin_arm_mve_vorrq_n_u32:
2980 Param0 = static_cast<bool>(false);
2981 break;
2982 }
2983 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
2984 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
2985 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Int32Ty, isSigned: Param0);
2986 Value *Val3 = ARMMVEVectorSplat(Builder, V: Val2);
2987 return Builder.CreateOr(LHS: Val0, RHS: Val3);
2988}
2989case ARM::BI__builtin_arm_mve_vbicq_n_s16:
2990case ARM::BI__builtin_arm_mve_vbicq_n_u16: {
2991 bool Param0;
2992 switch (BuiltinID) {
2993 case ARM::BI__builtin_arm_mve_vbicq_n_s16:
2994 Param0 = static_cast<bool>(true);
2995 break;
2996 case ARM::BI__builtin_arm_mve_vbicq_n_u16:
2997 Param0 = static_cast<bool>(false);
2998 break;
2999 }
3000 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3001 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3002 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Int32Ty, isSigned: false);
3003 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int16Ty, isSigned: Param0);
3004 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
3005 Value *Val5 = Builder.CreateNot(V: Val4);
3006 return Builder.CreateAnd(LHS: Val0, RHS: Val5);
3007}
3008case ARM::BI__builtin_arm_mve_vorrq_n_s16:
3009case ARM::BI__builtin_arm_mve_vorrq_n_u16: {
3010 bool Param0;
3011 switch (BuiltinID) {
3012 case ARM::BI__builtin_arm_mve_vorrq_n_s16:
3013 Param0 = static_cast<bool>(true);
3014 break;
3015 case ARM::BI__builtin_arm_mve_vorrq_n_u16:
3016 Param0 = static_cast<bool>(false);
3017 break;
3018 }
3019 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3020 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3021 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Int32Ty, isSigned: false);
3022 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int16Ty, isSigned: Param0);
3023 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
3024 return Builder.CreateOr(LHS: Val0, RHS: Val4);
3025}
3026case ARM::BI__builtin_arm_mve_vshlq_n_s16:
3027case ARM::BI__builtin_arm_mve_vshlq_n_s32:
3028case ARM::BI__builtin_arm_mve_vshlq_n_s8:
3029case ARM::BI__builtin_arm_mve_vshlq_n_u16:
3030case ARM::BI__builtin_arm_mve_vshlq_n_u32:
3031case ARM::BI__builtin_arm_mve_vshlq_n_u8: {
3032 llvm::Type * Param0;
3033 bool Param1;
3034 switch (BuiltinID) {
3035 case ARM::BI__builtin_arm_mve_vshlq_n_s16:
3036 Param0 = static_cast<llvm::Type *>(Int16Ty);
3037 Param1 = static_cast<bool>(true);
3038 break;
3039 case ARM::BI__builtin_arm_mve_vshlq_n_s32:
3040 Param0 = static_cast<llvm::Type *>(Int32Ty);
3041 Param1 = static_cast<bool>(true);
3042 break;
3043 case ARM::BI__builtin_arm_mve_vshlq_n_s8:
3044 Param0 = static_cast<llvm::Type *>(Int8Ty);
3045 Param1 = static_cast<bool>(true);
3046 break;
3047 case ARM::BI__builtin_arm_mve_vshlq_n_u16:
3048 Param0 = static_cast<llvm::Type *>(Int16Ty);
3049 Param1 = static_cast<bool>(false);
3050 break;
3051 case ARM::BI__builtin_arm_mve_vshlq_n_u32:
3052 Param0 = static_cast<llvm::Type *>(Int32Ty);
3053 Param1 = static_cast<bool>(false);
3054 break;
3055 case ARM::BI__builtin_arm_mve_vshlq_n_u8:
3056 Param0 = static_cast<llvm::Type *>(Int8Ty);
3057 Param1 = static_cast<bool>(false);
3058 break;
3059 }
3060 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3061 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3062 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Param0, isSigned: Param1);
3063 Value *Val3 = ARMMVEVectorSplat(Builder, V: Val2);
3064 return Builder.CreateShl(LHS: Val0, RHS: Val3);
3065}
3066case ARM::BI__builtin_arm_mve_vmlasq_n_s16:
3067case ARM::BI__builtin_arm_mve_vmlasq_n_s32:
3068case ARM::BI__builtin_arm_mve_vmlasq_n_s8:
3069case ARM::BI__builtin_arm_mve_vmlasq_n_u16:
3070case ARM::BI__builtin_arm_mve_vmlasq_n_u32:
3071case ARM::BI__builtin_arm_mve_vmlasq_n_u8: {
3072 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3073 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3074 Value *Val2 = Builder.CreateMul(LHS: Val0, RHS: Val1);
3075 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
3076 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
3077 return Builder.CreateAdd(LHS: Val2, RHS: Val4);
3078}
3079case ARM::BI__builtin_arm_mve_vbicq_s16:
3080case ARM::BI__builtin_arm_mve_vbicq_s32:
3081case ARM::BI__builtin_arm_mve_vbicq_s8:
3082case ARM::BI__builtin_arm_mve_vbicq_u16:
3083case ARM::BI__builtin_arm_mve_vbicq_u32:
3084case ARM::BI__builtin_arm_mve_vbicq_u8: {
3085 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3086 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3087 Value *Val2 = Builder.CreateNot(V: Val1);
3088 return Builder.CreateAnd(LHS: Val0, RHS: Val2);
3089}
3090case ARM::BI__builtin_arm_mve_vornq_s16:
3091case ARM::BI__builtin_arm_mve_vornq_s32:
3092case ARM::BI__builtin_arm_mve_vornq_s8:
3093case ARM::BI__builtin_arm_mve_vornq_u16:
3094case ARM::BI__builtin_arm_mve_vornq_u32:
3095case ARM::BI__builtin_arm_mve_vornq_u8: {
3096 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3097 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3098 Value *Val2 = Builder.CreateNot(V: Val1);
3099 return Builder.CreateOr(LHS: Val0, RHS: Val2);
3100}
3101case ARM::BI__builtin_arm_mve_vadcq_m_s32:
3102case ARM::BI__builtin_arm_mve_vadcq_m_u32:
3103case ARM::BI__builtin_arm_mve_vsbcq_m_s32:
3104case ARM::BI__builtin_arm_mve_vsbcq_m_u32: {
3105 Intrinsic::ID Param0;
3106 switch (BuiltinID) {
3107 case ARM::BI__builtin_arm_mve_vadcq_m_s32:
3108 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vadc_predicated);
3109 break;
3110 case ARM::BI__builtin_arm_mve_vadcq_m_u32:
3111 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vadc_predicated);
3112 break;
3113 case ARM::BI__builtin_arm_mve_vsbcq_m_s32:
3114 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsbc_predicated);
3115 break;
3116 case ARM::BI__builtin_arm_mve_vsbcq_m_u32:
3117 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsbc_predicated);
3118 break;
3119 }
3120 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3121 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3122 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3123 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 3));
3124 Value *Val4 = Builder.CreateLoad(Addr: Val3);
3125 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
3126 Value *Val6 = Builder.CreateShl(LHS: Val4, RHS: Val5);
3127 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 4));
3128 Value *Val8 = Builder.CreateIntCast(V: Val7, DestTy: Int32Ty, isSigned: false);
3129 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val8});
3130 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val0, Val1, Val2, Val6, Val9});
3131 Value *Val11 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
3132 Value *Val12 = Builder.CreateExtractValue(Agg: Val10, Idxs: static_cast<unsigned>(1));
3133 Value *Val13 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
3134 Value *Val14 = Builder.CreateLShr(LHS: Val12, RHS: Val13);
3135 Value *Val15 = Builder.CreateAnd(LHS: Val11, RHS: Val14);
3136 Builder.CreateStore(Val: Val15, Addr: Val3);
3137 return Builder.CreateExtractValue(Agg: Val10, Idxs: static_cast<unsigned>(0));
3138}
3139case ARM::BI__builtin_arm_mve_vdwdupq_n_u16:
3140case ARM::BI__builtin_arm_mve_vdwdupq_n_u32:
3141case ARM::BI__builtin_arm_mve_vdwdupq_n_u8:
3142case ARM::BI__builtin_arm_mve_viwdupq_n_u16:
3143case ARM::BI__builtin_arm_mve_viwdupq_n_u32:
3144case ARM::BI__builtin_arm_mve_viwdupq_n_u8: {
3145 Intrinsic::ID Param0;
3146 llvm::Type * Param1;
3147 switch (BuiltinID) {
3148 case ARM::BI__builtin_arm_mve_vdwdupq_n_u16:
3149 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup);
3150 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3151 break;
3152 case ARM::BI__builtin_arm_mve_vdwdupq_n_u32:
3153 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup);
3154 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3155 break;
3156 case ARM::BI__builtin_arm_mve_vdwdupq_n_u8:
3157 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup);
3158 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3159 break;
3160 case ARM::BI__builtin_arm_mve_viwdupq_n_u16:
3161 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup);
3162 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3163 break;
3164 case ARM::BI__builtin_arm_mve_viwdupq_n_u32:
3165 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup);
3166 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3167 break;
3168 case ARM::BI__builtin_arm_mve_viwdupq_n_u8:
3169 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup);
3170 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3171 break;
3172 }
3173 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3174 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3175 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3176 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val1, Val2});
3177 return Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(0));
3178}
3179case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f16:
3180case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f32:
3181case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f16:
3182case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f32:
3183case ARM::BI__builtin_arm_mve_vminnmavq_p_f16:
3184case ARM::BI__builtin_arm_mve_vminnmavq_p_f32:
3185case ARM::BI__builtin_arm_mve_vminnmvq_p_f16:
3186case ARM::BI__builtin_arm_mve_vminnmvq_p_f32: {
3187 llvm::Type * Param0;
3188 Intrinsic::ID Param1;
3189 llvm::Type * Param2;
3190 llvm::Type * Param3;
3191 switch (BuiltinID) {
3192 case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f16:
3193 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3194 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmav_predicated);
3195 Param2 = static_cast<llvm::Type *>(HalfTy);
3196 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3197 break;
3198 case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f32:
3199 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3200 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmav_predicated);
3201 Param2 = static_cast<llvm::Type *>(FloatTy);
3202 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3203 break;
3204 case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f16:
3205 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3206 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmv_predicated);
3207 Param2 = static_cast<llvm::Type *>(HalfTy);
3208 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3209 break;
3210 case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f32:
3211 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3212 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxnmv_predicated);
3213 Param2 = static_cast<llvm::Type *>(FloatTy);
3214 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3215 break;
3216 case ARM::BI__builtin_arm_mve_vminnmavq_p_f16:
3217 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3218 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmav_predicated);
3219 Param2 = static_cast<llvm::Type *>(HalfTy);
3220 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3221 break;
3222 case ARM::BI__builtin_arm_mve_vminnmavq_p_f32:
3223 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3224 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmav_predicated);
3225 Param2 = static_cast<llvm::Type *>(FloatTy);
3226 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3227 break;
3228 case ARM::BI__builtin_arm_mve_vminnmvq_p_f16:
3229 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3230 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmv_predicated);
3231 Param2 = static_cast<llvm::Type *>(HalfTy);
3232 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3233 break;
3234 case ARM::BI__builtin_arm_mve_vminnmvq_p_f32:
3235 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3236 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minnmv_predicated);
3237 Param2 = static_cast<llvm::Type *>(FloatTy);
3238 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3239 break;
3240 }
3241 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3242 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3243 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3244 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
3245 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val3});
3246 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param3, Param0}), Args: {Val0, Val1, Val4});
3247 return (Val5);
3248}
3249case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
3250case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
3251case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
3252case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
3253case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32: {
3254 llvm::Type * Param0;
3255 llvm::Type * Param1;
3256 llvm::Type * Param2;
3257 switch (BuiltinID) {
3258 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
3259 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
3260 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3261 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3262 break;
3263 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
3264 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
3265 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3266 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3267 break;
3268 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
3269 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3270 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3271 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3272 break;
3273 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
3274 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3275 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3276 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3277 break;
3278 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32:
3279 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3280 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3281 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3282 break;
3283 }
3284 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3285 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3286 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3287 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
3288 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val3});
3289 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vldr_gather_base_predicated, Tys: {Param1, Param2, Param0}), Args: {Val0, Val1, Val4});
3290}
3291case ARM::BI__builtin_arm_mve_vmaxaq_m_s16:
3292case ARM::BI__builtin_arm_mve_vmaxaq_m_s32:
3293case ARM::BI__builtin_arm_mve_vmaxaq_m_s8:
3294case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f16:
3295case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f32:
3296case ARM::BI__builtin_arm_mve_vminaq_m_s16:
3297case ARM::BI__builtin_arm_mve_vminaq_m_s32:
3298case ARM::BI__builtin_arm_mve_vminaq_m_s8:
3299case ARM::BI__builtin_arm_mve_vminnmaq_m_f16:
3300case ARM::BI__builtin_arm_mve_vminnmaq_m_f32: {
3301 llvm::Type * Param0;
3302 Intrinsic::ID Param1;
3303 llvm::Type * Param2;
3304 switch (BuiltinID) {
3305 case ARM::BI__builtin_arm_mve_vmaxaq_m_s16:
3306 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3307 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxa_predicated);
3308 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3309 break;
3310 case ARM::BI__builtin_arm_mve_vmaxaq_m_s32:
3311 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3312 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxa_predicated);
3313 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3314 break;
3315 case ARM::BI__builtin_arm_mve_vmaxaq_m_s8:
3316 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3317 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxa_predicated);
3318 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3319 break;
3320 case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f16:
3321 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3322 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxnma_predicated);
3323 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3324 break;
3325 case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f32:
3326 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3327 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxnma_predicated);
3328 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3329 break;
3330 case ARM::BI__builtin_arm_mve_vminaq_m_s16:
3331 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3332 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmina_predicated);
3333 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3334 break;
3335 case ARM::BI__builtin_arm_mve_vminaq_m_s32:
3336 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3337 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmina_predicated);
3338 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3339 break;
3340 case ARM::BI__builtin_arm_mve_vminaq_m_s8:
3341 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3342 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmina_predicated);
3343 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3344 break;
3345 case ARM::BI__builtin_arm_mve_vminnmaq_m_f16:
3346 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3347 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vminnma_predicated);
3348 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3349 break;
3350 case ARM::BI__builtin_arm_mve_vminnmaq_m_f32:
3351 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3352 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vminnma_predicated);
3353 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3354 break;
3355 }
3356 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3357 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3358 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3359 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
3360 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val3});
3361 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val1, Val4});
3362}
3363case ARM::BI__builtin_arm_mve_vmaxavq_p_s32:
3364case ARM::BI__builtin_arm_mve_vminavq_p_s32: {
3365 Intrinsic::ID Param0;
3366 switch (BuiltinID) {
3367 case ARM::BI__builtin_arm_mve_vmaxavq_p_s32:
3368 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxav_predicated);
3369 break;
3370 case ARM::BI__builtin_arm_mve_vminavq_p_s32:
3371 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minav_predicated);
3372 break;
3373 }
3374 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3375 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3376 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3377 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
3378 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val3});
3379 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val0, Val1, Val4});
3380 return Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
3381}
3382case ARM::BI__builtin_arm_mve_vmlaq_m_n_s16:
3383case ARM::BI__builtin_arm_mve_vmlaq_m_n_s8:
3384case ARM::BI__builtin_arm_mve_vmlaq_m_n_u16:
3385case ARM::BI__builtin_arm_mve_vmlaq_m_n_u8:
3386case ARM::BI__builtin_arm_mve_vmlasq_m_n_s16:
3387case ARM::BI__builtin_arm_mve_vmlasq_m_n_s8:
3388case ARM::BI__builtin_arm_mve_vmlasq_m_n_u16:
3389case ARM::BI__builtin_arm_mve_vmlasq_m_n_u8:
3390case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s16:
3391case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s8:
3392case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s16:
3393case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s8:
3394case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s16:
3395case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s8:
3396case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s16:
3397case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s8: {
3398 llvm::Type * Param0;
3399 Intrinsic::ID Param1;
3400 llvm::Type * Param2;
3401 switch (BuiltinID) {
3402 case ARM::BI__builtin_arm_mve_vmlaq_m_n_s16:
3403 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3404 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmla_n_predicated);
3405 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3406 break;
3407 case ARM::BI__builtin_arm_mve_vmlaq_m_n_s8:
3408 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3409 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmla_n_predicated);
3410 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3411 break;
3412 case ARM::BI__builtin_arm_mve_vmlaq_m_n_u16:
3413 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3414 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmla_n_predicated);
3415 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3416 break;
3417 case ARM::BI__builtin_arm_mve_vmlaq_m_n_u8:
3418 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3419 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmla_n_predicated);
3420 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3421 break;
3422 case ARM::BI__builtin_arm_mve_vmlasq_m_n_s16:
3423 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3424 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlas_n_predicated);
3425 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3426 break;
3427 case ARM::BI__builtin_arm_mve_vmlasq_m_n_s8:
3428 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3429 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlas_n_predicated);
3430 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3431 break;
3432 case ARM::BI__builtin_arm_mve_vmlasq_m_n_u16:
3433 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3434 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlas_n_predicated);
3435 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3436 break;
3437 case ARM::BI__builtin_arm_mve_vmlasq_m_n_u8:
3438 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3439 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlas_n_predicated);
3440 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3441 break;
3442 case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s16:
3443 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3444 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlah_predicated);
3445 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3446 break;
3447 case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s8:
3448 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3449 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlah_predicated);
3450 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3451 break;
3452 case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s16:
3453 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3454 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlash_predicated);
3455 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3456 break;
3457 case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s8:
3458 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3459 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlash_predicated);
3460 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3461 break;
3462 case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s16:
3463 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3464 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlah_predicated);
3465 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3466 break;
3467 case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s8:
3468 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3469 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlah_predicated);
3470 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3471 break;
3472 case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s16:
3473 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3474 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlash_predicated);
3475 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3476 break;
3477 case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s8:
3478 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3479 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlash_predicated);
3480 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3481 break;
3482 }
3483 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3484 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3485 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3486 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
3487 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
3488 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
3489 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val5});
3490 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val1, Val3, Val6});
3491}
3492case ARM::BI__builtin_arm_mve_vqdmlahq_n_s16:
3493case ARM::BI__builtin_arm_mve_vqdmlahq_n_s8:
3494case ARM::BI__builtin_arm_mve_vqdmlashq_n_s16:
3495case ARM::BI__builtin_arm_mve_vqdmlashq_n_s8:
3496case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s16:
3497case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s8:
3498case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s16:
3499case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s8: {
3500 Intrinsic::ID Param0;
3501 llvm::Type * Param1;
3502 switch (BuiltinID) {
3503 case ARM::BI__builtin_arm_mve_vqdmlahq_n_s16:
3504 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlah);
3505 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3506 break;
3507 case ARM::BI__builtin_arm_mve_vqdmlahq_n_s8:
3508 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlah);
3509 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3510 break;
3511 case ARM::BI__builtin_arm_mve_vqdmlashq_n_s16:
3512 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlash);
3513 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3514 break;
3515 case ARM::BI__builtin_arm_mve_vqdmlashq_n_s8:
3516 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlash);
3517 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3518 break;
3519 case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s16:
3520 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlah);
3521 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3522 break;
3523 case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s8:
3524 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlah);
3525 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3526 break;
3527 case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s16:
3528 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlash);
3529 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3530 break;
3531 case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s8:
3532 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlash);
3533 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3534 break;
3535 }
3536 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3537 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3538 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3539 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
3540 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val1, Val3});
3541}
3542case ARM::BI__builtin_arm_mve_vddupq_m_n_u16:
3543case ARM::BI__builtin_arm_mve_vddupq_m_n_u32:
3544case ARM::BI__builtin_arm_mve_vddupq_m_n_u8:
3545case ARM::BI__builtin_arm_mve_vidupq_m_n_u16:
3546case ARM::BI__builtin_arm_mve_vidupq_m_n_u32:
3547case ARM::BI__builtin_arm_mve_vidupq_m_n_u8: {
3548 llvm::Type * Param0;
3549 Intrinsic::ID Param1;
3550 llvm::Type * Param2;
3551 switch (BuiltinID) {
3552 case ARM::BI__builtin_arm_mve_vddupq_m_n_u16:
3553 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3554 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
3555 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3556 break;
3557 case ARM::BI__builtin_arm_mve_vddupq_m_n_u32:
3558 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3559 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
3560 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3561 break;
3562 case ARM::BI__builtin_arm_mve_vddupq_m_n_u8:
3563 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3564 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
3565 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3566 break;
3567 case ARM::BI__builtin_arm_mve_vidupq_m_n_u16:
3568 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3569 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
3570 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3571 break;
3572 case ARM::BI__builtin_arm_mve_vidupq_m_n_u32:
3573 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3574 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
3575 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3576 break;
3577 case ARM::BI__builtin_arm_mve_vidupq_m_n_u8:
3578 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3579 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
3580 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3581 break;
3582 }
3583 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3584 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3585 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3586 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
3587 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
3588 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
3589 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val1, Val2, Val5});
3590 return Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(0));
3591}
3592case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
3593case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
3594case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
3595case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
3596case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32: {
3597 llvm::Type * Param0;
3598 llvm::Type * Param1;
3599 llvm::Type * Param2;
3600 switch (BuiltinID) {
3601 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
3602 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
3603 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3604 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3605 break;
3606 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
3607 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
3608 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3609 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
3610 break;
3611 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
3612 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3613 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3614 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3615 break;
3616 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
3617 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3618 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3619 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3620 break;
3621 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32:
3622 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3623 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3624 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3625 break;
3626 }
3627 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3628 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3629 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3630 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
3631 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
3632 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
3633 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vstr_scatter_base_predicated, Tys: {Param1, Param2, Param0}), Args: {Val0, Val1, Val2, Val5});
3634}
3635case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f16:
3636case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f32:
3637case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s16:
3638case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s32:
3639case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s8:
3640case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u16:
3641case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u32:
3642case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u8:
3643case ARM::BI__builtin_arm_mve_vmlaq_m_n_s32:
3644case ARM::BI__builtin_arm_mve_vmlaq_m_n_u32:
3645case ARM::BI__builtin_arm_mve_vmlasq_m_n_s32:
3646case ARM::BI__builtin_arm_mve_vmlasq_m_n_u32:
3647case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s32:
3648case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s32:
3649case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s32:
3650case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s32:
3651case ARM::BI__builtin_arm_mve_vsliq_m_n_s16:
3652case ARM::BI__builtin_arm_mve_vsliq_m_n_s32:
3653case ARM::BI__builtin_arm_mve_vsliq_m_n_s8:
3654case ARM::BI__builtin_arm_mve_vsliq_m_n_u16:
3655case ARM::BI__builtin_arm_mve_vsliq_m_n_u32:
3656case ARM::BI__builtin_arm_mve_vsliq_m_n_u8:
3657case ARM::BI__builtin_arm_mve_vsriq_m_n_s16:
3658case ARM::BI__builtin_arm_mve_vsriq_m_n_s32:
3659case ARM::BI__builtin_arm_mve_vsriq_m_n_s8:
3660case ARM::BI__builtin_arm_mve_vsriq_m_n_u16:
3661case ARM::BI__builtin_arm_mve_vsriq_m_n_u32:
3662case ARM::BI__builtin_arm_mve_vsriq_m_n_u8: {
3663 llvm::Type * Param0;
3664 Intrinsic::ID Param1;
3665 llvm::Type * Param2;
3666 switch (BuiltinID) {
3667 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f16:
3668 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3669 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3670 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
3671 break;
3672 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f32:
3673 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3674 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3675 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
3676 break;
3677 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s16:
3678 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3679 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3680 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3681 break;
3682 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s32:
3683 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3684 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3685 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3686 break;
3687 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s8:
3688 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3689 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3690 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3691 break;
3692 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u16:
3693 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3694 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3695 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3696 break;
3697 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u32:
3698 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3699 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3700 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3701 break;
3702 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u8:
3703 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3704 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
3705 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3706 break;
3707 case ARM::BI__builtin_arm_mve_vmlaq_m_n_s32:
3708 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3709 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmla_n_predicated);
3710 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3711 break;
3712 case ARM::BI__builtin_arm_mve_vmlaq_m_n_u32:
3713 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3714 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmla_n_predicated);
3715 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3716 break;
3717 case ARM::BI__builtin_arm_mve_vmlasq_m_n_s32:
3718 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3719 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlas_n_predicated);
3720 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3721 break;
3722 case ARM::BI__builtin_arm_mve_vmlasq_m_n_u32:
3723 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3724 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlas_n_predicated);
3725 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3726 break;
3727 case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s32:
3728 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3729 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlah_predicated);
3730 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3731 break;
3732 case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s32:
3733 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3734 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlash_predicated);
3735 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3736 break;
3737 case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s32:
3738 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3739 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlah_predicated);
3740 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3741 break;
3742 case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s32:
3743 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3744 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlash_predicated);
3745 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3746 break;
3747 case ARM::BI__builtin_arm_mve_vsliq_m_n_s16:
3748 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3749 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli_predicated);
3750 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3751 break;
3752 case ARM::BI__builtin_arm_mve_vsliq_m_n_s32:
3753 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3754 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli_predicated);
3755 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3756 break;
3757 case ARM::BI__builtin_arm_mve_vsliq_m_n_s8:
3758 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3759 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli_predicated);
3760 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3761 break;
3762 case ARM::BI__builtin_arm_mve_vsliq_m_n_u16:
3763 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3764 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli_predicated);
3765 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3766 break;
3767 case ARM::BI__builtin_arm_mve_vsliq_m_n_u32:
3768 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3769 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli_predicated);
3770 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3771 break;
3772 case ARM::BI__builtin_arm_mve_vsliq_m_n_u8:
3773 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3774 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli_predicated);
3775 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3776 break;
3777 case ARM::BI__builtin_arm_mve_vsriq_m_n_s16:
3778 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3779 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri_predicated);
3780 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3781 break;
3782 case ARM::BI__builtin_arm_mve_vsriq_m_n_s32:
3783 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3784 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri_predicated);
3785 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3786 break;
3787 case ARM::BI__builtin_arm_mve_vsriq_m_n_s8:
3788 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3789 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri_predicated);
3790 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3791 break;
3792 case ARM::BI__builtin_arm_mve_vsriq_m_n_u16:
3793 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3794 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri_predicated);
3795 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3796 break;
3797 case ARM::BI__builtin_arm_mve_vsriq_m_n_u32:
3798 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3799 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri_predicated);
3800 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3801 break;
3802 case ARM::BI__builtin_arm_mve_vsriq_m_n_u8:
3803 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3804 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri_predicated);
3805 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3806 break;
3807 }
3808 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3809 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3810 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3811 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
3812 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
3813 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
3814 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val1, Val2, Val5});
3815}
3816case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u16:
3817case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u32:
3818case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u8:
3819case ARM::BI__builtin_arm_mve_viwdupq_m_n_u16:
3820case ARM::BI__builtin_arm_mve_viwdupq_m_n_u32:
3821case ARM::BI__builtin_arm_mve_viwdupq_m_n_u8: {
3822 llvm::Type * Param0;
3823 Intrinsic::ID Param1;
3824 llvm::Type * Param2;
3825 switch (BuiltinID) {
3826 case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u16:
3827 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3828 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
3829 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3830 break;
3831 case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u32:
3832 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3833 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
3834 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3835 break;
3836 case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u8:
3837 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3838 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
3839 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3840 break;
3841 case ARM::BI__builtin_arm_mve_viwdupq_m_n_u16:
3842 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3843 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
3844 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3845 break;
3846 case ARM::BI__builtin_arm_mve_viwdupq_m_n_u32:
3847 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3848 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
3849 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3850 break;
3851 case ARM::BI__builtin_arm_mve_viwdupq_m_n_u8:
3852 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3853 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
3854 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3855 break;
3856 }
3857 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3858 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3859 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3860 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
3861 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 4));
3862 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
3863 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val5});
3864 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val1, Val2, Val3, Val6});
3865 return Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
3866}
3867case ARM::BI__builtin_arm_mve_vadciq_m_s32:
3868case ARM::BI__builtin_arm_mve_vadciq_m_u32: {
3869 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3870 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3871 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3872 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
3873 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 4));
3874 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
3875 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
3876 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vadc_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val0, Val1, Val2, Val3, Val6});
3877 Value *Val8 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
3878 Value *Val9 = Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(1));
3879 Value *Val10 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
3880 Value *Val11 = Builder.CreateLShr(LHS: Val9, RHS: Val10);
3881 Value *Val12 = Builder.CreateAnd(LHS: Val8, RHS: Val11);
3882 Address Val13 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 3));
3883 Builder.CreateStore(Val: Val12, Addr: Val13);
3884 return Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
3885}
3886case ARM::BI__builtin_arm_mve_vsbciq_m_s32:
3887case ARM::BI__builtin_arm_mve_vsbciq_m_u32: {
3888 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
3889 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
3890 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
3891 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
3892 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
3893 Value *Val5 = Builder.CreateShl(LHS: Val3, RHS: Val4);
3894 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 4));
3895 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
3896 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
3897 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vsbc_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val0, Val1, Val2, Val5, Val8});
3898 Value *Val10 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
3899 Value *Val11 = Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(1));
3900 Value *Val12 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
3901 Value *Val13 = Builder.CreateLShr(LHS: Val11, RHS: Val12);
3902 Value *Val14 = Builder.CreateAnd(LHS: Val10, RHS: Val13);
3903 Address Val15 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 3));
3904 Builder.CreateStore(Val: Val14, Addr: Val15);
3905 return Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(0));
3906}
3907case ARM::BI__builtin_arm_mve_vqdmladhq_m_s16:
3908case ARM::BI__builtin_arm_mve_vqdmladhq_m_s32:
3909case ARM::BI__builtin_arm_mve_vqdmladhq_m_s8:
3910case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s16:
3911case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s32:
3912case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s8:
3913case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s16:
3914case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s32:
3915case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s8:
3916case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s16:
3917case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s32:
3918case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s8:
3919case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s16:
3920case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s32:
3921case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s8:
3922case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s16:
3923case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s32:
3924case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s8:
3925case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s16:
3926case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s32:
3927case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s8:
3928case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s16:
3929case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s32:
3930case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s8: {
3931 uint32_t Param0;
3932 uint32_t Param1;
3933 uint32_t Param2;
3934 llvm::Type * Param3;
3935 llvm::Type * Param4;
3936 switch (BuiltinID) {
3937 case ARM::BI__builtin_arm_mve_vqdmladhq_m_s16:
3938 Param0 = static_cast<uint32_t>(0);
3939 Param1 = static_cast<uint32_t>(0);
3940 Param2 = static_cast<uint32_t>(0);
3941 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3942 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3943 break;
3944 case ARM::BI__builtin_arm_mve_vqdmladhq_m_s32:
3945 Param0 = static_cast<uint32_t>(0);
3946 Param1 = static_cast<uint32_t>(0);
3947 Param2 = static_cast<uint32_t>(0);
3948 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3949 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3950 break;
3951 case ARM::BI__builtin_arm_mve_vqdmladhq_m_s8:
3952 Param0 = static_cast<uint32_t>(0);
3953 Param1 = static_cast<uint32_t>(0);
3954 Param2 = static_cast<uint32_t>(0);
3955 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3956 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3957 break;
3958 case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s16:
3959 Param0 = static_cast<uint32_t>(1);
3960 Param1 = static_cast<uint32_t>(0);
3961 Param2 = static_cast<uint32_t>(0);
3962 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3963 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3964 break;
3965 case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s32:
3966 Param0 = static_cast<uint32_t>(1);
3967 Param1 = static_cast<uint32_t>(0);
3968 Param2 = static_cast<uint32_t>(0);
3969 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3970 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3971 break;
3972 case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s8:
3973 Param0 = static_cast<uint32_t>(1);
3974 Param1 = static_cast<uint32_t>(0);
3975 Param2 = static_cast<uint32_t>(0);
3976 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3977 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3978 break;
3979 case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s16:
3980 Param0 = static_cast<uint32_t>(0);
3981 Param1 = static_cast<uint32_t>(0);
3982 Param2 = static_cast<uint32_t>(1);
3983 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
3984 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
3985 break;
3986 case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s32:
3987 Param0 = static_cast<uint32_t>(0);
3988 Param1 = static_cast<uint32_t>(0);
3989 Param2 = static_cast<uint32_t>(1);
3990 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
3991 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
3992 break;
3993 case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s8:
3994 Param0 = static_cast<uint32_t>(0);
3995 Param1 = static_cast<uint32_t>(0);
3996 Param2 = static_cast<uint32_t>(1);
3997 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
3998 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
3999 break;
4000 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s16:
4001 Param0 = static_cast<uint32_t>(1);
4002 Param1 = static_cast<uint32_t>(0);
4003 Param2 = static_cast<uint32_t>(1);
4004 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4005 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4006 break;
4007 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s32:
4008 Param0 = static_cast<uint32_t>(1);
4009 Param1 = static_cast<uint32_t>(0);
4010 Param2 = static_cast<uint32_t>(1);
4011 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4012 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4013 break;
4014 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s8:
4015 Param0 = static_cast<uint32_t>(1);
4016 Param1 = static_cast<uint32_t>(0);
4017 Param2 = static_cast<uint32_t>(1);
4018 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
4019 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4020 break;
4021 case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s16:
4022 Param0 = static_cast<uint32_t>(0);
4023 Param1 = static_cast<uint32_t>(1);
4024 Param2 = static_cast<uint32_t>(0);
4025 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4026 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4027 break;
4028 case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s32:
4029 Param0 = static_cast<uint32_t>(0);
4030 Param1 = static_cast<uint32_t>(1);
4031 Param2 = static_cast<uint32_t>(0);
4032 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4033 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4034 break;
4035 case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s8:
4036 Param0 = static_cast<uint32_t>(0);
4037 Param1 = static_cast<uint32_t>(1);
4038 Param2 = static_cast<uint32_t>(0);
4039 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
4040 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4041 break;
4042 case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s16:
4043 Param0 = static_cast<uint32_t>(1);
4044 Param1 = static_cast<uint32_t>(1);
4045 Param2 = static_cast<uint32_t>(0);
4046 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4047 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4048 break;
4049 case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s32:
4050 Param0 = static_cast<uint32_t>(1);
4051 Param1 = static_cast<uint32_t>(1);
4052 Param2 = static_cast<uint32_t>(0);
4053 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4054 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4055 break;
4056 case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s8:
4057 Param0 = static_cast<uint32_t>(1);
4058 Param1 = static_cast<uint32_t>(1);
4059 Param2 = static_cast<uint32_t>(0);
4060 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
4061 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4062 break;
4063 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s16:
4064 Param0 = static_cast<uint32_t>(0);
4065 Param1 = static_cast<uint32_t>(1);
4066 Param2 = static_cast<uint32_t>(1);
4067 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4068 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4069 break;
4070 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s32:
4071 Param0 = static_cast<uint32_t>(0);
4072 Param1 = static_cast<uint32_t>(1);
4073 Param2 = static_cast<uint32_t>(1);
4074 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4075 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4076 break;
4077 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s8:
4078 Param0 = static_cast<uint32_t>(0);
4079 Param1 = static_cast<uint32_t>(1);
4080 Param2 = static_cast<uint32_t>(1);
4081 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
4082 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4083 break;
4084 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s16:
4085 Param0 = static_cast<uint32_t>(1);
4086 Param1 = static_cast<uint32_t>(1);
4087 Param2 = static_cast<uint32_t>(1);
4088 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4089 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4090 break;
4091 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s32:
4092 Param0 = static_cast<uint32_t>(1);
4093 Param1 = static_cast<uint32_t>(1);
4094 Param2 = static_cast<uint32_t>(1);
4095 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4096 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4097 break;
4098 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s8:
4099 Param0 = static_cast<uint32_t>(1);
4100 Param1 = static_cast<uint32_t>(1);
4101 Param2 = static_cast<uint32_t>(1);
4102 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
4103 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4104 break;
4105 }
4106 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
4107 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
4108 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
4109 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
4110 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
4111 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
4112 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
4113 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
4114 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val7});
4115 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vqdmlad_predicated, Tys: {Param4, Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val5, Val8});
4116}
4117case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s16:
4118case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s32:
4119case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u16:
4120case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u32:
4121case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s16:
4122case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s32:
4123case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u16:
4124case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u32:
4125case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s16:
4126case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s32:
4127case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s16:
4128case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s32:
4129case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s16:
4130case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s32:
4131case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u16:
4132case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u32:
4133case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s16:
4134case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s32:
4135case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u16:
4136case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u32:
4137case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s16:
4138case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s32:
4139case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s16:
4140case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s32:
4141case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s16:
4142case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s32:
4143case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u16:
4144case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u32:
4145case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s16:
4146case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s32:
4147case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u16:
4148case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u32:
4149case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s16:
4150case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s32:
4151case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u16:
4152case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u32:
4153case ARM::BI__builtin_arm_mve_vshrntq_m_n_s16:
4154case ARM::BI__builtin_arm_mve_vshrntq_m_n_s32:
4155case ARM::BI__builtin_arm_mve_vshrntq_m_n_u16:
4156case ARM::BI__builtin_arm_mve_vshrntq_m_n_u32: {
4157 uint32_t Param0;
4158 uint32_t Param1;
4159 uint32_t Param2;
4160 uint32_t Param3;
4161 uint32_t Param4;
4162 llvm::Type * Param5;
4163 llvm::Type * Param6;
4164 llvm::Type * Param7;
4165 switch (BuiltinID) {
4166 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s16:
4167 Param0 = static_cast<uint32_t>(1);
4168 Param1 = static_cast<uint32_t>(1);
4169 Param2 = static_cast<uint32_t>(0);
4170 Param3 = static_cast<uint32_t>(0);
4171 Param4 = static_cast<uint32_t>(0);
4172 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4173 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4174 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4175 break;
4176 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s32:
4177 Param0 = static_cast<uint32_t>(1);
4178 Param1 = static_cast<uint32_t>(1);
4179 Param2 = static_cast<uint32_t>(0);
4180 Param3 = static_cast<uint32_t>(0);
4181 Param4 = static_cast<uint32_t>(0);
4182 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4183 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4184 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4185 break;
4186 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u16:
4187 Param0 = static_cast<uint32_t>(1);
4188 Param1 = static_cast<uint32_t>(1);
4189 Param2 = static_cast<uint32_t>(1);
4190 Param3 = static_cast<uint32_t>(1);
4191 Param4 = static_cast<uint32_t>(0);
4192 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4193 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4194 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4195 break;
4196 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u32:
4197 Param0 = static_cast<uint32_t>(1);
4198 Param1 = static_cast<uint32_t>(1);
4199 Param2 = static_cast<uint32_t>(1);
4200 Param3 = static_cast<uint32_t>(1);
4201 Param4 = static_cast<uint32_t>(0);
4202 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4203 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4204 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4205 break;
4206 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s16:
4207 Param0 = static_cast<uint32_t>(1);
4208 Param1 = static_cast<uint32_t>(1);
4209 Param2 = static_cast<uint32_t>(0);
4210 Param3 = static_cast<uint32_t>(0);
4211 Param4 = static_cast<uint32_t>(1);
4212 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4213 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4214 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4215 break;
4216 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s32:
4217 Param0 = static_cast<uint32_t>(1);
4218 Param1 = static_cast<uint32_t>(1);
4219 Param2 = static_cast<uint32_t>(0);
4220 Param3 = static_cast<uint32_t>(0);
4221 Param4 = static_cast<uint32_t>(1);
4222 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4223 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4224 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4225 break;
4226 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u16:
4227 Param0 = static_cast<uint32_t>(1);
4228 Param1 = static_cast<uint32_t>(1);
4229 Param2 = static_cast<uint32_t>(1);
4230 Param3 = static_cast<uint32_t>(1);
4231 Param4 = static_cast<uint32_t>(1);
4232 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4233 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4234 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4235 break;
4236 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u32:
4237 Param0 = static_cast<uint32_t>(1);
4238 Param1 = static_cast<uint32_t>(1);
4239 Param2 = static_cast<uint32_t>(1);
4240 Param3 = static_cast<uint32_t>(1);
4241 Param4 = static_cast<uint32_t>(1);
4242 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4243 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4244 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4245 break;
4246 case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s16:
4247 Param0 = static_cast<uint32_t>(1);
4248 Param1 = static_cast<uint32_t>(1);
4249 Param2 = static_cast<uint32_t>(1);
4250 Param3 = static_cast<uint32_t>(0);
4251 Param4 = static_cast<uint32_t>(0);
4252 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4253 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4254 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4255 break;
4256 case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s32:
4257 Param0 = static_cast<uint32_t>(1);
4258 Param1 = static_cast<uint32_t>(1);
4259 Param2 = static_cast<uint32_t>(1);
4260 Param3 = static_cast<uint32_t>(0);
4261 Param4 = static_cast<uint32_t>(0);
4262 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4263 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4264 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4265 break;
4266 case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s16:
4267 Param0 = static_cast<uint32_t>(1);
4268 Param1 = static_cast<uint32_t>(1);
4269 Param2 = static_cast<uint32_t>(1);
4270 Param3 = static_cast<uint32_t>(0);
4271 Param4 = static_cast<uint32_t>(1);
4272 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4273 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4274 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4275 break;
4276 case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s32:
4277 Param0 = static_cast<uint32_t>(1);
4278 Param1 = static_cast<uint32_t>(1);
4279 Param2 = static_cast<uint32_t>(1);
4280 Param3 = static_cast<uint32_t>(0);
4281 Param4 = static_cast<uint32_t>(1);
4282 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4283 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4284 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4285 break;
4286 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s16:
4287 Param0 = static_cast<uint32_t>(1);
4288 Param1 = static_cast<uint32_t>(0);
4289 Param2 = static_cast<uint32_t>(0);
4290 Param3 = static_cast<uint32_t>(0);
4291 Param4 = static_cast<uint32_t>(0);
4292 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4293 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4294 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4295 break;
4296 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s32:
4297 Param0 = static_cast<uint32_t>(1);
4298 Param1 = static_cast<uint32_t>(0);
4299 Param2 = static_cast<uint32_t>(0);
4300 Param3 = static_cast<uint32_t>(0);
4301 Param4 = static_cast<uint32_t>(0);
4302 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4303 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4304 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4305 break;
4306 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u16:
4307 Param0 = static_cast<uint32_t>(1);
4308 Param1 = static_cast<uint32_t>(0);
4309 Param2 = static_cast<uint32_t>(1);
4310 Param3 = static_cast<uint32_t>(1);
4311 Param4 = static_cast<uint32_t>(0);
4312 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4313 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4314 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4315 break;
4316 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u32:
4317 Param0 = static_cast<uint32_t>(1);
4318 Param1 = static_cast<uint32_t>(0);
4319 Param2 = static_cast<uint32_t>(1);
4320 Param3 = static_cast<uint32_t>(1);
4321 Param4 = static_cast<uint32_t>(0);
4322 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4323 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4324 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4325 break;
4326 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s16:
4327 Param0 = static_cast<uint32_t>(1);
4328 Param1 = static_cast<uint32_t>(0);
4329 Param2 = static_cast<uint32_t>(0);
4330 Param3 = static_cast<uint32_t>(0);
4331 Param4 = static_cast<uint32_t>(1);
4332 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4333 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4334 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4335 break;
4336 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s32:
4337 Param0 = static_cast<uint32_t>(1);
4338 Param1 = static_cast<uint32_t>(0);
4339 Param2 = static_cast<uint32_t>(0);
4340 Param3 = static_cast<uint32_t>(0);
4341 Param4 = static_cast<uint32_t>(1);
4342 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4343 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4344 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4345 break;
4346 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u16:
4347 Param0 = static_cast<uint32_t>(1);
4348 Param1 = static_cast<uint32_t>(0);
4349 Param2 = static_cast<uint32_t>(1);
4350 Param3 = static_cast<uint32_t>(1);
4351 Param4 = static_cast<uint32_t>(1);
4352 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4353 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4354 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4355 break;
4356 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u32:
4357 Param0 = static_cast<uint32_t>(1);
4358 Param1 = static_cast<uint32_t>(0);
4359 Param2 = static_cast<uint32_t>(1);
4360 Param3 = static_cast<uint32_t>(1);
4361 Param4 = static_cast<uint32_t>(1);
4362 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4363 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4364 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4365 break;
4366 case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s16:
4367 Param0 = static_cast<uint32_t>(1);
4368 Param1 = static_cast<uint32_t>(0);
4369 Param2 = static_cast<uint32_t>(1);
4370 Param3 = static_cast<uint32_t>(0);
4371 Param4 = static_cast<uint32_t>(0);
4372 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4373 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4374 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4375 break;
4376 case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s32:
4377 Param0 = static_cast<uint32_t>(1);
4378 Param1 = static_cast<uint32_t>(0);
4379 Param2 = static_cast<uint32_t>(1);
4380 Param3 = static_cast<uint32_t>(0);
4381 Param4 = static_cast<uint32_t>(0);
4382 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4383 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4384 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4385 break;
4386 case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s16:
4387 Param0 = static_cast<uint32_t>(1);
4388 Param1 = static_cast<uint32_t>(0);
4389 Param2 = static_cast<uint32_t>(1);
4390 Param3 = static_cast<uint32_t>(0);
4391 Param4 = static_cast<uint32_t>(1);
4392 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4393 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4394 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4395 break;
4396 case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s32:
4397 Param0 = static_cast<uint32_t>(1);
4398 Param1 = static_cast<uint32_t>(0);
4399 Param2 = static_cast<uint32_t>(1);
4400 Param3 = static_cast<uint32_t>(0);
4401 Param4 = static_cast<uint32_t>(1);
4402 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4403 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4404 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4405 break;
4406 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s16:
4407 Param0 = static_cast<uint32_t>(0);
4408 Param1 = static_cast<uint32_t>(1);
4409 Param2 = static_cast<uint32_t>(0);
4410 Param3 = static_cast<uint32_t>(0);
4411 Param4 = static_cast<uint32_t>(0);
4412 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4413 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4414 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4415 break;
4416 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s32:
4417 Param0 = static_cast<uint32_t>(0);
4418 Param1 = static_cast<uint32_t>(1);
4419 Param2 = static_cast<uint32_t>(0);
4420 Param3 = static_cast<uint32_t>(0);
4421 Param4 = static_cast<uint32_t>(0);
4422 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4423 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4424 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4425 break;
4426 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u16:
4427 Param0 = static_cast<uint32_t>(0);
4428 Param1 = static_cast<uint32_t>(1);
4429 Param2 = static_cast<uint32_t>(1);
4430 Param3 = static_cast<uint32_t>(1);
4431 Param4 = static_cast<uint32_t>(0);
4432 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4433 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4434 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4435 break;
4436 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u32:
4437 Param0 = static_cast<uint32_t>(0);
4438 Param1 = static_cast<uint32_t>(1);
4439 Param2 = static_cast<uint32_t>(1);
4440 Param3 = static_cast<uint32_t>(1);
4441 Param4 = static_cast<uint32_t>(0);
4442 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4443 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4444 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4445 break;
4446 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s16:
4447 Param0 = static_cast<uint32_t>(0);
4448 Param1 = static_cast<uint32_t>(1);
4449 Param2 = static_cast<uint32_t>(0);
4450 Param3 = static_cast<uint32_t>(0);
4451 Param4 = static_cast<uint32_t>(1);
4452 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4453 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4454 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4455 break;
4456 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s32:
4457 Param0 = static_cast<uint32_t>(0);
4458 Param1 = static_cast<uint32_t>(1);
4459 Param2 = static_cast<uint32_t>(0);
4460 Param3 = static_cast<uint32_t>(0);
4461 Param4 = static_cast<uint32_t>(1);
4462 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4463 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4464 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4465 break;
4466 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u16:
4467 Param0 = static_cast<uint32_t>(0);
4468 Param1 = static_cast<uint32_t>(1);
4469 Param2 = static_cast<uint32_t>(1);
4470 Param3 = static_cast<uint32_t>(1);
4471 Param4 = static_cast<uint32_t>(1);
4472 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4473 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4474 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4475 break;
4476 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u32:
4477 Param0 = static_cast<uint32_t>(0);
4478 Param1 = static_cast<uint32_t>(1);
4479 Param2 = static_cast<uint32_t>(1);
4480 Param3 = static_cast<uint32_t>(1);
4481 Param4 = static_cast<uint32_t>(1);
4482 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4483 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4484 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4485 break;
4486 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s16:
4487 Param0 = static_cast<uint32_t>(0);
4488 Param1 = static_cast<uint32_t>(0);
4489 Param2 = static_cast<uint32_t>(0);
4490 Param3 = static_cast<uint32_t>(0);
4491 Param4 = static_cast<uint32_t>(0);
4492 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4493 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4494 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4495 break;
4496 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s32:
4497 Param0 = static_cast<uint32_t>(0);
4498 Param1 = static_cast<uint32_t>(0);
4499 Param2 = static_cast<uint32_t>(0);
4500 Param3 = static_cast<uint32_t>(0);
4501 Param4 = static_cast<uint32_t>(0);
4502 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4503 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4504 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4505 break;
4506 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u16:
4507 Param0 = static_cast<uint32_t>(0);
4508 Param1 = static_cast<uint32_t>(0);
4509 Param2 = static_cast<uint32_t>(1);
4510 Param3 = static_cast<uint32_t>(1);
4511 Param4 = static_cast<uint32_t>(0);
4512 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4513 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4514 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4515 break;
4516 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u32:
4517 Param0 = static_cast<uint32_t>(0);
4518 Param1 = static_cast<uint32_t>(0);
4519 Param2 = static_cast<uint32_t>(1);
4520 Param3 = static_cast<uint32_t>(1);
4521 Param4 = static_cast<uint32_t>(0);
4522 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4523 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4524 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4525 break;
4526 case ARM::BI__builtin_arm_mve_vshrntq_m_n_s16:
4527 Param0 = static_cast<uint32_t>(0);
4528 Param1 = static_cast<uint32_t>(0);
4529 Param2 = static_cast<uint32_t>(0);
4530 Param3 = static_cast<uint32_t>(0);
4531 Param4 = static_cast<uint32_t>(1);
4532 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4533 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4534 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4535 break;
4536 case ARM::BI__builtin_arm_mve_vshrntq_m_n_s32:
4537 Param0 = static_cast<uint32_t>(0);
4538 Param1 = static_cast<uint32_t>(0);
4539 Param2 = static_cast<uint32_t>(0);
4540 Param3 = static_cast<uint32_t>(0);
4541 Param4 = static_cast<uint32_t>(1);
4542 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4543 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4544 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4545 break;
4546 case ARM::BI__builtin_arm_mve_vshrntq_m_n_u16:
4547 Param0 = static_cast<uint32_t>(0);
4548 Param1 = static_cast<uint32_t>(0);
4549 Param2 = static_cast<uint32_t>(1);
4550 Param3 = static_cast<uint32_t>(1);
4551 Param4 = static_cast<uint32_t>(1);
4552 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
4553 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4554 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4555 break;
4556 case ARM::BI__builtin_arm_mve_vshrntq_m_n_u32:
4557 Param0 = static_cast<uint32_t>(0);
4558 Param1 = static_cast<uint32_t>(0);
4559 Param2 = static_cast<uint32_t>(1);
4560 Param3 = static_cast<uint32_t>(1);
4561 Param4 = static_cast<uint32_t>(1);
4562 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
4563 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4564 Param7 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4565 break;
4566 }
4567 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
4568 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
4569 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
4570 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
4571 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
4572 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
4573 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param3);
4574 Value *Val7 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param4);
4575 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 3));
4576 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int32Ty, isSigned: false);
4577 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param5}), Args: {Val9});
4578 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshrn_predicated, Tys: {Param6, Param7, Param5}), Args: {Val0, Val1, Val2, Val3, Val4, Val5, Val6, Val7, Val10});
4579}
4580case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s16:
4581case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s32:
4582case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u16:
4583case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u32:
4584case ARM::BI__builtin_arm_mve_vqrshrntq_n_s16:
4585case ARM::BI__builtin_arm_mve_vqrshrntq_n_s32:
4586case ARM::BI__builtin_arm_mve_vqrshrntq_n_u16:
4587case ARM::BI__builtin_arm_mve_vqrshrntq_n_u32:
4588case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s16:
4589case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s32:
4590case ARM::BI__builtin_arm_mve_vqrshruntq_n_s16:
4591case ARM::BI__builtin_arm_mve_vqrshruntq_n_s32:
4592case ARM::BI__builtin_arm_mve_vqshrnbq_n_s16:
4593case ARM::BI__builtin_arm_mve_vqshrnbq_n_s32:
4594case ARM::BI__builtin_arm_mve_vqshrnbq_n_u16:
4595case ARM::BI__builtin_arm_mve_vqshrnbq_n_u32:
4596case ARM::BI__builtin_arm_mve_vqshrntq_n_s16:
4597case ARM::BI__builtin_arm_mve_vqshrntq_n_s32:
4598case ARM::BI__builtin_arm_mve_vqshrntq_n_u16:
4599case ARM::BI__builtin_arm_mve_vqshrntq_n_u32:
4600case ARM::BI__builtin_arm_mve_vqshrunbq_n_s16:
4601case ARM::BI__builtin_arm_mve_vqshrunbq_n_s32:
4602case ARM::BI__builtin_arm_mve_vqshruntq_n_s16:
4603case ARM::BI__builtin_arm_mve_vqshruntq_n_s32:
4604case ARM::BI__builtin_arm_mve_vrshrnbq_n_s16:
4605case ARM::BI__builtin_arm_mve_vrshrnbq_n_s32:
4606case ARM::BI__builtin_arm_mve_vrshrnbq_n_u16:
4607case ARM::BI__builtin_arm_mve_vrshrnbq_n_u32:
4608case ARM::BI__builtin_arm_mve_vrshrntq_n_s16:
4609case ARM::BI__builtin_arm_mve_vrshrntq_n_s32:
4610case ARM::BI__builtin_arm_mve_vrshrntq_n_u16:
4611case ARM::BI__builtin_arm_mve_vrshrntq_n_u32:
4612case ARM::BI__builtin_arm_mve_vshrnbq_n_s16:
4613case ARM::BI__builtin_arm_mve_vshrnbq_n_s32:
4614case ARM::BI__builtin_arm_mve_vshrnbq_n_u16:
4615case ARM::BI__builtin_arm_mve_vshrnbq_n_u32:
4616case ARM::BI__builtin_arm_mve_vshrntq_n_s16:
4617case ARM::BI__builtin_arm_mve_vshrntq_n_s32:
4618case ARM::BI__builtin_arm_mve_vshrntq_n_u16:
4619case ARM::BI__builtin_arm_mve_vshrntq_n_u32: {
4620 uint32_t Param0;
4621 uint32_t Param1;
4622 uint32_t Param2;
4623 uint32_t Param3;
4624 uint32_t Param4;
4625 llvm::Type * Param5;
4626 llvm::Type * Param6;
4627 switch (BuiltinID) {
4628 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s16:
4629 Param0 = static_cast<uint32_t>(1);
4630 Param1 = static_cast<uint32_t>(1);
4631 Param2 = static_cast<uint32_t>(0);
4632 Param3 = static_cast<uint32_t>(0);
4633 Param4 = static_cast<uint32_t>(0);
4634 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4635 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4636 break;
4637 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s32:
4638 Param0 = static_cast<uint32_t>(1);
4639 Param1 = static_cast<uint32_t>(1);
4640 Param2 = static_cast<uint32_t>(0);
4641 Param3 = static_cast<uint32_t>(0);
4642 Param4 = static_cast<uint32_t>(0);
4643 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4644 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4645 break;
4646 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u16:
4647 Param0 = static_cast<uint32_t>(1);
4648 Param1 = static_cast<uint32_t>(1);
4649 Param2 = static_cast<uint32_t>(1);
4650 Param3 = static_cast<uint32_t>(1);
4651 Param4 = static_cast<uint32_t>(0);
4652 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4653 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4654 break;
4655 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u32:
4656 Param0 = static_cast<uint32_t>(1);
4657 Param1 = static_cast<uint32_t>(1);
4658 Param2 = static_cast<uint32_t>(1);
4659 Param3 = static_cast<uint32_t>(1);
4660 Param4 = static_cast<uint32_t>(0);
4661 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4662 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4663 break;
4664 case ARM::BI__builtin_arm_mve_vqrshrntq_n_s16:
4665 Param0 = static_cast<uint32_t>(1);
4666 Param1 = static_cast<uint32_t>(1);
4667 Param2 = static_cast<uint32_t>(0);
4668 Param3 = static_cast<uint32_t>(0);
4669 Param4 = static_cast<uint32_t>(1);
4670 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4671 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4672 break;
4673 case ARM::BI__builtin_arm_mve_vqrshrntq_n_s32:
4674 Param0 = static_cast<uint32_t>(1);
4675 Param1 = static_cast<uint32_t>(1);
4676 Param2 = static_cast<uint32_t>(0);
4677 Param3 = static_cast<uint32_t>(0);
4678 Param4 = static_cast<uint32_t>(1);
4679 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4680 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4681 break;
4682 case ARM::BI__builtin_arm_mve_vqrshrntq_n_u16:
4683 Param0 = static_cast<uint32_t>(1);
4684 Param1 = static_cast<uint32_t>(1);
4685 Param2 = static_cast<uint32_t>(1);
4686 Param3 = static_cast<uint32_t>(1);
4687 Param4 = static_cast<uint32_t>(1);
4688 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4689 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4690 break;
4691 case ARM::BI__builtin_arm_mve_vqrshrntq_n_u32:
4692 Param0 = static_cast<uint32_t>(1);
4693 Param1 = static_cast<uint32_t>(1);
4694 Param2 = static_cast<uint32_t>(1);
4695 Param3 = static_cast<uint32_t>(1);
4696 Param4 = static_cast<uint32_t>(1);
4697 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4698 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4699 break;
4700 case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s16:
4701 Param0 = static_cast<uint32_t>(1);
4702 Param1 = static_cast<uint32_t>(1);
4703 Param2 = static_cast<uint32_t>(1);
4704 Param3 = static_cast<uint32_t>(0);
4705 Param4 = static_cast<uint32_t>(0);
4706 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4707 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4708 break;
4709 case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s32:
4710 Param0 = static_cast<uint32_t>(1);
4711 Param1 = static_cast<uint32_t>(1);
4712 Param2 = static_cast<uint32_t>(1);
4713 Param3 = static_cast<uint32_t>(0);
4714 Param4 = static_cast<uint32_t>(0);
4715 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4716 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4717 break;
4718 case ARM::BI__builtin_arm_mve_vqrshruntq_n_s16:
4719 Param0 = static_cast<uint32_t>(1);
4720 Param1 = static_cast<uint32_t>(1);
4721 Param2 = static_cast<uint32_t>(1);
4722 Param3 = static_cast<uint32_t>(0);
4723 Param4 = static_cast<uint32_t>(1);
4724 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4725 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4726 break;
4727 case ARM::BI__builtin_arm_mve_vqrshruntq_n_s32:
4728 Param0 = static_cast<uint32_t>(1);
4729 Param1 = static_cast<uint32_t>(1);
4730 Param2 = static_cast<uint32_t>(1);
4731 Param3 = static_cast<uint32_t>(0);
4732 Param4 = static_cast<uint32_t>(1);
4733 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4734 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4735 break;
4736 case ARM::BI__builtin_arm_mve_vqshrnbq_n_s16:
4737 Param0 = static_cast<uint32_t>(1);
4738 Param1 = static_cast<uint32_t>(0);
4739 Param2 = static_cast<uint32_t>(0);
4740 Param3 = static_cast<uint32_t>(0);
4741 Param4 = static_cast<uint32_t>(0);
4742 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4743 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4744 break;
4745 case ARM::BI__builtin_arm_mve_vqshrnbq_n_s32:
4746 Param0 = static_cast<uint32_t>(1);
4747 Param1 = static_cast<uint32_t>(0);
4748 Param2 = static_cast<uint32_t>(0);
4749 Param3 = static_cast<uint32_t>(0);
4750 Param4 = static_cast<uint32_t>(0);
4751 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4752 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4753 break;
4754 case ARM::BI__builtin_arm_mve_vqshrnbq_n_u16:
4755 Param0 = static_cast<uint32_t>(1);
4756 Param1 = static_cast<uint32_t>(0);
4757 Param2 = static_cast<uint32_t>(1);
4758 Param3 = static_cast<uint32_t>(1);
4759 Param4 = static_cast<uint32_t>(0);
4760 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4761 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4762 break;
4763 case ARM::BI__builtin_arm_mve_vqshrnbq_n_u32:
4764 Param0 = static_cast<uint32_t>(1);
4765 Param1 = static_cast<uint32_t>(0);
4766 Param2 = static_cast<uint32_t>(1);
4767 Param3 = static_cast<uint32_t>(1);
4768 Param4 = static_cast<uint32_t>(0);
4769 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4770 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4771 break;
4772 case ARM::BI__builtin_arm_mve_vqshrntq_n_s16:
4773 Param0 = static_cast<uint32_t>(1);
4774 Param1 = static_cast<uint32_t>(0);
4775 Param2 = static_cast<uint32_t>(0);
4776 Param3 = static_cast<uint32_t>(0);
4777 Param4 = static_cast<uint32_t>(1);
4778 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4779 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4780 break;
4781 case ARM::BI__builtin_arm_mve_vqshrntq_n_s32:
4782 Param0 = static_cast<uint32_t>(1);
4783 Param1 = static_cast<uint32_t>(0);
4784 Param2 = static_cast<uint32_t>(0);
4785 Param3 = static_cast<uint32_t>(0);
4786 Param4 = static_cast<uint32_t>(1);
4787 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4788 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4789 break;
4790 case ARM::BI__builtin_arm_mve_vqshrntq_n_u16:
4791 Param0 = static_cast<uint32_t>(1);
4792 Param1 = static_cast<uint32_t>(0);
4793 Param2 = static_cast<uint32_t>(1);
4794 Param3 = static_cast<uint32_t>(1);
4795 Param4 = static_cast<uint32_t>(1);
4796 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4797 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4798 break;
4799 case ARM::BI__builtin_arm_mve_vqshrntq_n_u32:
4800 Param0 = static_cast<uint32_t>(1);
4801 Param1 = static_cast<uint32_t>(0);
4802 Param2 = static_cast<uint32_t>(1);
4803 Param3 = static_cast<uint32_t>(1);
4804 Param4 = static_cast<uint32_t>(1);
4805 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4806 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4807 break;
4808 case ARM::BI__builtin_arm_mve_vqshrunbq_n_s16:
4809 Param0 = static_cast<uint32_t>(1);
4810 Param1 = static_cast<uint32_t>(0);
4811 Param2 = static_cast<uint32_t>(1);
4812 Param3 = static_cast<uint32_t>(0);
4813 Param4 = static_cast<uint32_t>(0);
4814 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4815 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4816 break;
4817 case ARM::BI__builtin_arm_mve_vqshrunbq_n_s32:
4818 Param0 = static_cast<uint32_t>(1);
4819 Param1 = static_cast<uint32_t>(0);
4820 Param2 = static_cast<uint32_t>(1);
4821 Param3 = static_cast<uint32_t>(0);
4822 Param4 = static_cast<uint32_t>(0);
4823 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4824 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4825 break;
4826 case ARM::BI__builtin_arm_mve_vqshruntq_n_s16:
4827 Param0 = static_cast<uint32_t>(1);
4828 Param1 = static_cast<uint32_t>(0);
4829 Param2 = static_cast<uint32_t>(1);
4830 Param3 = static_cast<uint32_t>(0);
4831 Param4 = static_cast<uint32_t>(1);
4832 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4833 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4834 break;
4835 case ARM::BI__builtin_arm_mve_vqshruntq_n_s32:
4836 Param0 = static_cast<uint32_t>(1);
4837 Param1 = static_cast<uint32_t>(0);
4838 Param2 = static_cast<uint32_t>(1);
4839 Param3 = static_cast<uint32_t>(0);
4840 Param4 = static_cast<uint32_t>(1);
4841 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4842 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4843 break;
4844 case ARM::BI__builtin_arm_mve_vrshrnbq_n_s16:
4845 Param0 = static_cast<uint32_t>(0);
4846 Param1 = static_cast<uint32_t>(1);
4847 Param2 = static_cast<uint32_t>(0);
4848 Param3 = static_cast<uint32_t>(0);
4849 Param4 = static_cast<uint32_t>(0);
4850 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4851 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4852 break;
4853 case ARM::BI__builtin_arm_mve_vrshrnbq_n_s32:
4854 Param0 = static_cast<uint32_t>(0);
4855 Param1 = static_cast<uint32_t>(1);
4856 Param2 = static_cast<uint32_t>(0);
4857 Param3 = static_cast<uint32_t>(0);
4858 Param4 = static_cast<uint32_t>(0);
4859 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4860 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4861 break;
4862 case ARM::BI__builtin_arm_mve_vrshrnbq_n_u16:
4863 Param0 = static_cast<uint32_t>(0);
4864 Param1 = static_cast<uint32_t>(1);
4865 Param2 = static_cast<uint32_t>(1);
4866 Param3 = static_cast<uint32_t>(1);
4867 Param4 = static_cast<uint32_t>(0);
4868 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4869 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4870 break;
4871 case ARM::BI__builtin_arm_mve_vrshrnbq_n_u32:
4872 Param0 = static_cast<uint32_t>(0);
4873 Param1 = static_cast<uint32_t>(1);
4874 Param2 = static_cast<uint32_t>(1);
4875 Param3 = static_cast<uint32_t>(1);
4876 Param4 = static_cast<uint32_t>(0);
4877 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4878 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4879 break;
4880 case ARM::BI__builtin_arm_mve_vrshrntq_n_s16:
4881 Param0 = static_cast<uint32_t>(0);
4882 Param1 = static_cast<uint32_t>(1);
4883 Param2 = static_cast<uint32_t>(0);
4884 Param3 = static_cast<uint32_t>(0);
4885 Param4 = static_cast<uint32_t>(1);
4886 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4887 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4888 break;
4889 case ARM::BI__builtin_arm_mve_vrshrntq_n_s32:
4890 Param0 = static_cast<uint32_t>(0);
4891 Param1 = static_cast<uint32_t>(1);
4892 Param2 = static_cast<uint32_t>(0);
4893 Param3 = static_cast<uint32_t>(0);
4894 Param4 = static_cast<uint32_t>(1);
4895 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4896 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4897 break;
4898 case ARM::BI__builtin_arm_mve_vrshrntq_n_u16:
4899 Param0 = static_cast<uint32_t>(0);
4900 Param1 = static_cast<uint32_t>(1);
4901 Param2 = static_cast<uint32_t>(1);
4902 Param3 = static_cast<uint32_t>(1);
4903 Param4 = static_cast<uint32_t>(1);
4904 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4905 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4906 break;
4907 case ARM::BI__builtin_arm_mve_vrshrntq_n_u32:
4908 Param0 = static_cast<uint32_t>(0);
4909 Param1 = static_cast<uint32_t>(1);
4910 Param2 = static_cast<uint32_t>(1);
4911 Param3 = static_cast<uint32_t>(1);
4912 Param4 = static_cast<uint32_t>(1);
4913 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4914 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4915 break;
4916 case ARM::BI__builtin_arm_mve_vshrnbq_n_s16:
4917 Param0 = static_cast<uint32_t>(0);
4918 Param1 = static_cast<uint32_t>(0);
4919 Param2 = static_cast<uint32_t>(0);
4920 Param3 = static_cast<uint32_t>(0);
4921 Param4 = static_cast<uint32_t>(0);
4922 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4923 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4924 break;
4925 case ARM::BI__builtin_arm_mve_vshrnbq_n_s32:
4926 Param0 = static_cast<uint32_t>(0);
4927 Param1 = static_cast<uint32_t>(0);
4928 Param2 = static_cast<uint32_t>(0);
4929 Param3 = static_cast<uint32_t>(0);
4930 Param4 = static_cast<uint32_t>(0);
4931 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4932 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4933 break;
4934 case ARM::BI__builtin_arm_mve_vshrnbq_n_u16:
4935 Param0 = static_cast<uint32_t>(0);
4936 Param1 = static_cast<uint32_t>(0);
4937 Param2 = static_cast<uint32_t>(1);
4938 Param3 = static_cast<uint32_t>(1);
4939 Param4 = static_cast<uint32_t>(0);
4940 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4941 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4942 break;
4943 case ARM::BI__builtin_arm_mve_vshrnbq_n_u32:
4944 Param0 = static_cast<uint32_t>(0);
4945 Param1 = static_cast<uint32_t>(0);
4946 Param2 = static_cast<uint32_t>(1);
4947 Param3 = static_cast<uint32_t>(1);
4948 Param4 = static_cast<uint32_t>(0);
4949 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4950 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4951 break;
4952 case ARM::BI__builtin_arm_mve_vshrntq_n_s16:
4953 Param0 = static_cast<uint32_t>(0);
4954 Param1 = static_cast<uint32_t>(0);
4955 Param2 = static_cast<uint32_t>(0);
4956 Param3 = static_cast<uint32_t>(0);
4957 Param4 = static_cast<uint32_t>(1);
4958 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4959 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4960 break;
4961 case ARM::BI__builtin_arm_mve_vshrntq_n_s32:
4962 Param0 = static_cast<uint32_t>(0);
4963 Param1 = static_cast<uint32_t>(0);
4964 Param2 = static_cast<uint32_t>(0);
4965 Param3 = static_cast<uint32_t>(0);
4966 Param4 = static_cast<uint32_t>(1);
4967 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4968 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4969 break;
4970 case ARM::BI__builtin_arm_mve_vshrntq_n_u16:
4971 Param0 = static_cast<uint32_t>(0);
4972 Param1 = static_cast<uint32_t>(0);
4973 Param2 = static_cast<uint32_t>(1);
4974 Param3 = static_cast<uint32_t>(1);
4975 Param4 = static_cast<uint32_t>(1);
4976 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
4977 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4978 break;
4979 case ARM::BI__builtin_arm_mve_vshrntq_n_u32:
4980 Param0 = static_cast<uint32_t>(0);
4981 Param1 = static_cast<uint32_t>(0);
4982 Param2 = static_cast<uint32_t>(1);
4983 Param3 = static_cast<uint32_t>(1);
4984 Param4 = static_cast<uint32_t>(1);
4985 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
4986 Param6 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
4987 break;
4988 }
4989 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
4990 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
4991 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
4992 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
4993 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
4994 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
4995 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param3);
4996 Value *Val7 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param4);
4997 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshrn, Tys: {Param5, Param6}), Args: {Val0, Val1, Val2, Val3, Val4, Val5, Val6, Val7});
4998}
4999case ARM::BI__builtin_arm_mve_vqdmladhq_s16:
5000case ARM::BI__builtin_arm_mve_vqdmladhq_s32:
5001case ARM::BI__builtin_arm_mve_vqdmladhq_s8:
5002case ARM::BI__builtin_arm_mve_vqdmladhxq_s16:
5003case ARM::BI__builtin_arm_mve_vqdmladhxq_s32:
5004case ARM::BI__builtin_arm_mve_vqdmladhxq_s8:
5005case ARM::BI__builtin_arm_mve_vqdmlsdhq_s16:
5006case ARM::BI__builtin_arm_mve_vqdmlsdhq_s32:
5007case ARM::BI__builtin_arm_mve_vqdmlsdhq_s8:
5008case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s16:
5009case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s32:
5010case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s8:
5011case ARM::BI__builtin_arm_mve_vqrdmladhq_s16:
5012case ARM::BI__builtin_arm_mve_vqrdmladhq_s32:
5013case ARM::BI__builtin_arm_mve_vqrdmladhq_s8:
5014case ARM::BI__builtin_arm_mve_vqrdmladhxq_s16:
5015case ARM::BI__builtin_arm_mve_vqrdmladhxq_s32:
5016case ARM::BI__builtin_arm_mve_vqrdmladhxq_s8:
5017case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s16:
5018case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s32:
5019case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s8:
5020case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s16:
5021case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s32:
5022case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s8: {
5023 uint32_t Param0;
5024 uint32_t Param1;
5025 uint32_t Param2;
5026 llvm::Type * Param3;
5027 switch (BuiltinID) {
5028 case ARM::BI__builtin_arm_mve_vqdmladhq_s16:
5029 Param0 = static_cast<uint32_t>(0);
5030 Param1 = static_cast<uint32_t>(0);
5031 Param2 = static_cast<uint32_t>(0);
5032 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5033 break;
5034 case ARM::BI__builtin_arm_mve_vqdmladhq_s32:
5035 Param0 = static_cast<uint32_t>(0);
5036 Param1 = static_cast<uint32_t>(0);
5037 Param2 = static_cast<uint32_t>(0);
5038 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5039 break;
5040 case ARM::BI__builtin_arm_mve_vqdmladhq_s8:
5041 Param0 = static_cast<uint32_t>(0);
5042 Param1 = static_cast<uint32_t>(0);
5043 Param2 = static_cast<uint32_t>(0);
5044 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5045 break;
5046 case ARM::BI__builtin_arm_mve_vqdmladhxq_s16:
5047 Param0 = static_cast<uint32_t>(1);
5048 Param1 = static_cast<uint32_t>(0);
5049 Param2 = static_cast<uint32_t>(0);
5050 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5051 break;
5052 case ARM::BI__builtin_arm_mve_vqdmladhxq_s32:
5053 Param0 = static_cast<uint32_t>(1);
5054 Param1 = static_cast<uint32_t>(0);
5055 Param2 = static_cast<uint32_t>(0);
5056 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5057 break;
5058 case ARM::BI__builtin_arm_mve_vqdmladhxq_s8:
5059 Param0 = static_cast<uint32_t>(1);
5060 Param1 = static_cast<uint32_t>(0);
5061 Param2 = static_cast<uint32_t>(0);
5062 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5063 break;
5064 case ARM::BI__builtin_arm_mve_vqdmlsdhq_s16:
5065 Param0 = static_cast<uint32_t>(0);
5066 Param1 = static_cast<uint32_t>(0);
5067 Param2 = static_cast<uint32_t>(1);
5068 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5069 break;
5070 case ARM::BI__builtin_arm_mve_vqdmlsdhq_s32:
5071 Param0 = static_cast<uint32_t>(0);
5072 Param1 = static_cast<uint32_t>(0);
5073 Param2 = static_cast<uint32_t>(1);
5074 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5075 break;
5076 case ARM::BI__builtin_arm_mve_vqdmlsdhq_s8:
5077 Param0 = static_cast<uint32_t>(0);
5078 Param1 = static_cast<uint32_t>(0);
5079 Param2 = static_cast<uint32_t>(1);
5080 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5081 break;
5082 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s16:
5083 Param0 = static_cast<uint32_t>(1);
5084 Param1 = static_cast<uint32_t>(0);
5085 Param2 = static_cast<uint32_t>(1);
5086 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5087 break;
5088 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s32:
5089 Param0 = static_cast<uint32_t>(1);
5090 Param1 = static_cast<uint32_t>(0);
5091 Param2 = static_cast<uint32_t>(1);
5092 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5093 break;
5094 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s8:
5095 Param0 = static_cast<uint32_t>(1);
5096 Param1 = static_cast<uint32_t>(0);
5097 Param2 = static_cast<uint32_t>(1);
5098 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5099 break;
5100 case ARM::BI__builtin_arm_mve_vqrdmladhq_s16:
5101 Param0 = static_cast<uint32_t>(0);
5102 Param1 = static_cast<uint32_t>(1);
5103 Param2 = static_cast<uint32_t>(0);
5104 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5105 break;
5106 case ARM::BI__builtin_arm_mve_vqrdmladhq_s32:
5107 Param0 = static_cast<uint32_t>(0);
5108 Param1 = static_cast<uint32_t>(1);
5109 Param2 = static_cast<uint32_t>(0);
5110 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5111 break;
5112 case ARM::BI__builtin_arm_mve_vqrdmladhq_s8:
5113 Param0 = static_cast<uint32_t>(0);
5114 Param1 = static_cast<uint32_t>(1);
5115 Param2 = static_cast<uint32_t>(0);
5116 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5117 break;
5118 case ARM::BI__builtin_arm_mve_vqrdmladhxq_s16:
5119 Param0 = static_cast<uint32_t>(1);
5120 Param1 = static_cast<uint32_t>(1);
5121 Param2 = static_cast<uint32_t>(0);
5122 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5123 break;
5124 case ARM::BI__builtin_arm_mve_vqrdmladhxq_s32:
5125 Param0 = static_cast<uint32_t>(1);
5126 Param1 = static_cast<uint32_t>(1);
5127 Param2 = static_cast<uint32_t>(0);
5128 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5129 break;
5130 case ARM::BI__builtin_arm_mve_vqrdmladhxq_s8:
5131 Param0 = static_cast<uint32_t>(1);
5132 Param1 = static_cast<uint32_t>(1);
5133 Param2 = static_cast<uint32_t>(0);
5134 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5135 break;
5136 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s16:
5137 Param0 = static_cast<uint32_t>(0);
5138 Param1 = static_cast<uint32_t>(1);
5139 Param2 = static_cast<uint32_t>(1);
5140 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5141 break;
5142 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s32:
5143 Param0 = static_cast<uint32_t>(0);
5144 Param1 = static_cast<uint32_t>(1);
5145 Param2 = static_cast<uint32_t>(1);
5146 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5147 break;
5148 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s8:
5149 Param0 = static_cast<uint32_t>(0);
5150 Param1 = static_cast<uint32_t>(1);
5151 Param2 = static_cast<uint32_t>(1);
5152 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5153 break;
5154 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s16:
5155 Param0 = static_cast<uint32_t>(1);
5156 Param1 = static_cast<uint32_t>(1);
5157 Param2 = static_cast<uint32_t>(1);
5158 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5159 break;
5160 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s32:
5161 Param0 = static_cast<uint32_t>(1);
5162 Param1 = static_cast<uint32_t>(1);
5163 Param2 = static_cast<uint32_t>(1);
5164 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5165 break;
5166 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s8:
5167 Param0 = static_cast<uint32_t>(1);
5168 Param1 = static_cast<uint32_t>(1);
5169 Param2 = static_cast<uint32_t>(1);
5170 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5171 break;
5172 }
5173 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5174 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5175 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
5176 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5177 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
5178 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
5179 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vqdmlad, Tys: {Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val5});
5180}
5181case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_s64:
5182case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_u64:
5183case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_f32:
5184case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_s32:
5185case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_u32: {
5186 llvm::Type * Param0;
5187 llvm::Type * Param1;
5188 switch (BuiltinID) {
5189 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_s64:
5190 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
5191 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
5192 break;
5193 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_u64:
5194 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
5195 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
5196 break;
5197 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_f32:
5198 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5199 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
5200 break;
5201 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_s32:
5202 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5203 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5204 break;
5205 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_u32:
5206 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5207 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5208 break;
5209 }
5210 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5211 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5212 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
5213 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vstr_scatter_base, Tys: {Param0, Param1}), Args: {Val0, Val1, Val2});
5214}
5215case ARM::BI__builtin_arm_mve_vqdmlahq_n_s32:
5216case ARM::BI__builtin_arm_mve_vqdmlashq_n_s32:
5217case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s32:
5218case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s32:
5219case ARM::BI__builtin_arm_mve_vsliq_n_s16:
5220case ARM::BI__builtin_arm_mve_vsliq_n_s32:
5221case ARM::BI__builtin_arm_mve_vsliq_n_s8:
5222case ARM::BI__builtin_arm_mve_vsliq_n_u16:
5223case ARM::BI__builtin_arm_mve_vsliq_n_u32:
5224case ARM::BI__builtin_arm_mve_vsliq_n_u8:
5225case ARM::BI__builtin_arm_mve_vsriq_n_s16:
5226case ARM::BI__builtin_arm_mve_vsriq_n_s32:
5227case ARM::BI__builtin_arm_mve_vsriq_n_s8:
5228case ARM::BI__builtin_arm_mve_vsriq_n_u16:
5229case ARM::BI__builtin_arm_mve_vsriq_n_u32:
5230case ARM::BI__builtin_arm_mve_vsriq_n_u8: {
5231 Intrinsic::ID Param0;
5232 llvm::Type * Param1;
5233 switch (BuiltinID) {
5234 case ARM::BI__builtin_arm_mve_vqdmlahq_n_s32:
5235 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlah);
5236 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5237 break;
5238 case ARM::BI__builtin_arm_mve_vqdmlashq_n_s32:
5239 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmlash);
5240 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5241 break;
5242 case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s32:
5243 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlah);
5244 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5245 break;
5246 case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s32:
5247 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmlash);
5248 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5249 break;
5250 case ARM::BI__builtin_arm_mve_vsliq_n_s16:
5251 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli);
5252 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5253 break;
5254 case ARM::BI__builtin_arm_mve_vsliq_n_s32:
5255 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli);
5256 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5257 break;
5258 case ARM::BI__builtin_arm_mve_vsliq_n_s8:
5259 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli);
5260 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5261 break;
5262 case ARM::BI__builtin_arm_mve_vsliq_n_u16:
5263 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli);
5264 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5265 break;
5266 case ARM::BI__builtin_arm_mve_vsliq_n_u32:
5267 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli);
5268 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5269 break;
5270 case ARM::BI__builtin_arm_mve_vsliq_n_u8:
5271 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsli);
5272 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5273 break;
5274 case ARM::BI__builtin_arm_mve_vsriq_n_s16:
5275 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri);
5276 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5277 break;
5278 case ARM::BI__builtin_arm_mve_vsriq_n_s32:
5279 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri);
5280 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5281 break;
5282 case ARM::BI__builtin_arm_mve_vsriq_n_s8:
5283 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri);
5284 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5285 break;
5286 case ARM::BI__builtin_arm_mve_vsriq_n_u16:
5287 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri);
5288 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5289 break;
5290 case ARM::BI__builtin_arm_mve_vsriq_n_u32:
5291 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri);
5292 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5293 break;
5294 case ARM::BI__builtin_arm_mve_vsriq_n_u8:
5295 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vsri);
5296 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5297 break;
5298 }
5299 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5300 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5301 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
5302 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val1, Val2});
5303}
5304case ARM::BI__builtin_arm_mve_vadciq_s32:
5305case ARM::BI__builtin_arm_mve_vadciq_u32: {
5306 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5307 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5308 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
5309 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vadc, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4)}), Args: {Val0, Val1, Val2});
5310 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
5311 Value *Val5 = Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(1));
5312 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
5313 Value *Val7 = Builder.CreateLShr(LHS: Val5, RHS: Val6);
5314 Value *Val8 = Builder.CreateAnd(LHS: Val4, RHS: Val7);
5315 Address Val9 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 2));
5316 Builder.CreateStore(Val: Val8, Addr: Val9);
5317 return Builder.CreateExtractValue(Agg: Val3, Idxs: static_cast<unsigned>(0));
5318}
5319case ARM::BI__builtin_arm_mve_vsbciq_s32:
5320case ARM::BI__builtin_arm_mve_vsbciq_u32: {
5321 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5322 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5323 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
5324 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
5325 Value *Val4 = Builder.CreateShl(LHS: Val2, RHS: Val3);
5326 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vsbc, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4)}), Args: {Val0, Val1, Val4});
5327 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
5328 Value *Val7 = Builder.CreateExtractValue(Agg: Val5, Idxs: static_cast<unsigned>(1));
5329 Value *Val8 = llvm::ConstantInt::get(Ty: Int32Ty, V: 29);
5330 Value *Val9 = Builder.CreateLShr(LHS: Val7, RHS: Val8);
5331 Value *Val10 = Builder.CreateAnd(LHS: Val6, RHS: Val9);
5332 Address Val11 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 2));
5333 Builder.CreateStore(Val: Val10, Addr: Val11);
5334 return Builder.CreateExtractValue(Agg: Val5, Idxs: static_cast<unsigned>(0));
5335}
5336case ARM::BI__builtin_arm_mve_vmaxvq_s32:
5337case ARM::BI__builtin_arm_mve_vmaxvq_u32:
5338case ARM::BI__builtin_arm_mve_vminvq_s32:
5339case ARM::BI__builtin_arm_mve_vminvq_u32: {
5340 uint32_t Param0;
5341 Intrinsic::ID Param1;
5342 bool Param2;
5343 switch (BuiltinID) {
5344 case ARM::BI__builtin_arm_mve_vmaxvq_s32:
5345 Param0 = static_cast<uint32_t>(0);
5346 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv);
5347 Param2 = static_cast<bool>(true);
5348 break;
5349 case ARM::BI__builtin_arm_mve_vmaxvq_u32:
5350 Param0 = static_cast<uint32_t>(1);
5351 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv);
5352 Param2 = static_cast<bool>(false);
5353 break;
5354 case ARM::BI__builtin_arm_mve_vminvq_s32:
5355 Param0 = static_cast<uint32_t>(0);
5356 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv);
5357 Param2 = static_cast<bool>(true);
5358 break;
5359 case ARM::BI__builtin_arm_mve_vminvq_u32:
5360 Param0 = static_cast<uint32_t>(1);
5361 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv);
5362 Param2 = static_cast<bool>(false);
5363 break;
5364 }
5365 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5366 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5367 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5368 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4)}), Args: {Val0, Val1, Val2});
5369 return Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: Param2);
5370}
5371case ARM::BI__builtin_arm_mve_vmovnbq_m_s16:
5372case ARM::BI__builtin_arm_mve_vmovnbq_m_s32:
5373case ARM::BI__builtin_arm_mve_vmovnbq_m_u16:
5374case ARM::BI__builtin_arm_mve_vmovnbq_m_u32:
5375case ARM::BI__builtin_arm_mve_vmovntq_m_s16:
5376case ARM::BI__builtin_arm_mve_vmovntq_m_s32:
5377case ARM::BI__builtin_arm_mve_vmovntq_m_u16:
5378case ARM::BI__builtin_arm_mve_vmovntq_m_u32: {
5379 uint32_t Param0;
5380 llvm::Type * Param1;
5381 llvm::Type * Param2;
5382 llvm::Type * Param3;
5383 switch (BuiltinID) {
5384 case ARM::BI__builtin_arm_mve_vmovnbq_m_s16:
5385 Param0 = static_cast<uint32_t>(0);
5386 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5387 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5388 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5389 break;
5390 case ARM::BI__builtin_arm_mve_vmovnbq_m_s32:
5391 Param0 = static_cast<uint32_t>(0);
5392 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5393 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5394 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5395 break;
5396 case ARM::BI__builtin_arm_mve_vmovnbq_m_u16:
5397 Param0 = static_cast<uint32_t>(0);
5398 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5399 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5400 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5401 break;
5402 case ARM::BI__builtin_arm_mve_vmovnbq_m_u32:
5403 Param0 = static_cast<uint32_t>(0);
5404 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5405 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5406 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5407 break;
5408 case ARM::BI__builtin_arm_mve_vmovntq_m_s16:
5409 Param0 = static_cast<uint32_t>(1);
5410 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5411 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5412 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5413 break;
5414 case ARM::BI__builtin_arm_mve_vmovntq_m_s32:
5415 Param0 = static_cast<uint32_t>(1);
5416 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5417 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5418 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5419 break;
5420 case ARM::BI__builtin_arm_mve_vmovntq_m_u16:
5421 Param0 = static_cast<uint32_t>(1);
5422 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5423 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5424 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5425 break;
5426 case ARM::BI__builtin_arm_mve_vmovntq_m_u32:
5427 Param0 = static_cast<uint32_t>(1);
5428 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5429 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5430 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5431 break;
5432 }
5433 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5434 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5435 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5436 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
5437 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
5438 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val4});
5439 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmovn_predicated, Tys: {Param2, Param3, Param1}), Args: {Val0, Val1, Val2, Val5});
5440}
5441case ARM::BI__builtin_arm_mve_vmaxvq_p_s32:
5442case ARM::BI__builtin_arm_mve_vmaxvq_p_u32:
5443case ARM::BI__builtin_arm_mve_vminvq_p_s32:
5444case ARM::BI__builtin_arm_mve_vminvq_p_u32: {
5445 uint32_t Param0;
5446 Intrinsic::ID Param1;
5447 bool Param2;
5448 switch (BuiltinID) {
5449 case ARM::BI__builtin_arm_mve_vmaxvq_p_s32:
5450 Param0 = static_cast<uint32_t>(0);
5451 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv_predicated);
5452 Param2 = static_cast<bool>(true);
5453 break;
5454 case ARM::BI__builtin_arm_mve_vmaxvq_p_u32:
5455 Param0 = static_cast<uint32_t>(1);
5456 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_maxv_predicated);
5457 Param2 = static_cast<bool>(false);
5458 break;
5459 case ARM::BI__builtin_arm_mve_vminvq_p_s32:
5460 Param0 = static_cast<uint32_t>(0);
5461 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv_predicated);
5462 Param2 = static_cast<bool>(true);
5463 break;
5464 case ARM::BI__builtin_arm_mve_vminvq_p_u32:
5465 Param0 = static_cast<uint32_t>(1);
5466 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_minv_predicated);
5467 Param2 = static_cast<bool>(false);
5468 break;
5469 }
5470 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5471 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5472 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5473 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
5474 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
5475 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
5476 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val0, Val1, Val2, Val5});
5477 return Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: Param2);
5478}
5479case ARM::BI__builtin_arm_mve_vcvtbq_m_f16_f32:
5480case ARM::BI__builtin_arm_mve_vcvtbq_m_f32_f16:
5481case ARM::BI__builtin_arm_mve_vcvttq_m_f16_f32:
5482case ARM::BI__builtin_arm_mve_vcvttq_m_f32_f16: {
5483 uint32_t Param0;
5484 Intrinsic::ID Param1;
5485 switch (BuiltinID) {
5486 case ARM::BI__builtin_arm_mve_vcvtbq_m_f16_f32:
5487 Param0 = static_cast<uint32_t>(0);
5488 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvt_narrow_predicated);
5489 break;
5490 case ARM::BI__builtin_arm_mve_vcvtbq_m_f32_f16:
5491 Param0 = static_cast<uint32_t>(0);
5492 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvt_widen_predicated);
5493 break;
5494 case ARM::BI__builtin_arm_mve_vcvttq_m_f16_f32:
5495 Param0 = static_cast<uint32_t>(1);
5496 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvt_narrow_predicated);
5497 break;
5498 case ARM::BI__builtin_arm_mve_vcvttq_m_f32_f16:
5499 Param0 = static_cast<uint32_t>(1);
5500 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvt_widen_predicated);
5501 break;
5502 }
5503 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5504 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5505 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5506 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
5507 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
5508 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
5509 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1), Args: {Val0, Val1, Val2, Val5});
5510}
5511case ARM::BI__builtin_arm_mve_vqmovnbq_m_s16:
5512case ARM::BI__builtin_arm_mve_vqmovnbq_m_s32:
5513case ARM::BI__builtin_arm_mve_vqmovnbq_m_u16:
5514case ARM::BI__builtin_arm_mve_vqmovnbq_m_u32:
5515case ARM::BI__builtin_arm_mve_vqmovntq_m_s16:
5516case ARM::BI__builtin_arm_mve_vqmovntq_m_s32:
5517case ARM::BI__builtin_arm_mve_vqmovntq_m_u16:
5518case ARM::BI__builtin_arm_mve_vqmovntq_m_u32:
5519case ARM::BI__builtin_arm_mve_vqmovunbq_m_s16:
5520case ARM::BI__builtin_arm_mve_vqmovunbq_m_s32:
5521case ARM::BI__builtin_arm_mve_vqmovuntq_m_s16:
5522case ARM::BI__builtin_arm_mve_vqmovuntq_m_s32: {
5523 uint32_t Param0;
5524 uint32_t Param1;
5525 uint32_t Param2;
5526 llvm::Type * Param3;
5527 llvm::Type * Param4;
5528 llvm::Type * Param5;
5529 switch (BuiltinID) {
5530 case ARM::BI__builtin_arm_mve_vqmovnbq_m_s16:
5531 Param0 = static_cast<uint32_t>(0);
5532 Param1 = static_cast<uint32_t>(0);
5533 Param2 = static_cast<uint32_t>(0);
5534 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5535 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5536 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5537 break;
5538 case ARM::BI__builtin_arm_mve_vqmovnbq_m_s32:
5539 Param0 = static_cast<uint32_t>(0);
5540 Param1 = static_cast<uint32_t>(0);
5541 Param2 = static_cast<uint32_t>(0);
5542 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5543 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5544 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5545 break;
5546 case ARM::BI__builtin_arm_mve_vqmovnbq_m_u16:
5547 Param0 = static_cast<uint32_t>(1);
5548 Param1 = static_cast<uint32_t>(1);
5549 Param2 = static_cast<uint32_t>(0);
5550 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5551 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5552 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5553 break;
5554 case ARM::BI__builtin_arm_mve_vqmovnbq_m_u32:
5555 Param0 = static_cast<uint32_t>(1);
5556 Param1 = static_cast<uint32_t>(1);
5557 Param2 = static_cast<uint32_t>(0);
5558 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5559 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5560 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5561 break;
5562 case ARM::BI__builtin_arm_mve_vqmovntq_m_s16:
5563 Param0 = static_cast<uint32_t>(0);
5564 Param1 = static_cast<uint32_t>(0);
5565 Param2 = static_cast<uint32_t>(1);
5566 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5567 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5568 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5569 break;
5570 case ARM::BI__builtin_arm_mve_vqmovntq_m_s32:
5571 Param0 = static_cast<uint32_t>(0);
5572 Param1 = static_cast<uint32_t>(0);
5573 Param2 = static_cast<uint32_t>(1);
5574 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5575 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5576 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5577 break;
5578 case ARM::BI__builtin_arm_mve_vqmovntq_m_u16:
5579 Param0 = static_cast<uint32_t>(1);
5580 Param1 = static_cast<uint32_t>(1);
5581 Param2 = static_cast<uint32_t>(1);
5582 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5583 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5584 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5585 break;
5586 case ARM::BI__builtin_arm_mve_vqmovntq_m_u32:
5587 Param0 = static_cast<uint32_t>(1);
5588 Param1 = static_cast<uint32_t>(1);
5589 Param2 = static_cast<uint32_t>(1);
5590 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5591 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5592 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5593 break;
5594 case ARM::BI__builtin_arm_mve_vqmovunbq_m_s16:
5595 Param0 = static_cast<uint32_t>(1);
5596 Param1 = static_cast<uint32_t>(0);
5597 Param2 = static_cast<uint32_t>(0);
5598 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5599 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5600 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5601 break;
5602 case ARM::BI__builtin_arm_mve_vqmovunbq_m_s32:
5603 Param0 = static_cast<uint32_t>(1);
5604 Param1 = static_cast<uint32_t>(0);
5605 Param2 = static_cast<uint32_t>(0);
5606 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5607 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5608 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5609 break;
5610 case ARM::BI__builtin_arm_mve_vqmovuntq_m_s16:
5611 Param0 = static_cast<uint32_t>(1);
5612 Param1 = static_cast<uint32_t>(0);
5613 Param2 = static_cast<uint32_t>(1);
5614 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5615 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5616 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5617 break;
5618 case ARM::BI__builtin_arm_mve_vqmovuntq_m_s32:
5619 Param0 = static_cast<uint32_t>(1);
5620 Param1 = static_cast<uint32_t>(0);
5621 Param2 = static_cast<uint32_t>(1);
5622 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5623 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5624 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5625 break;
5626 }
5627 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5628 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5629 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5630 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
5631 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
5632 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
5633 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
5634 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val6});
5635 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vqmovn_predicated, Tys: {Param4, Param5, Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val7});
5636}
5637case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s16:
5638case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s32:
5639case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s8:
5640case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u16:
5641case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u32:
5642case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u8:
5643case ARM::BI__builtin_arm_mve_vqshlq_m_r_s16:
5644case ARM::BI__builtin_arm_mve_vqshlq_m_r_s32:
5645case ARM::BI__builtin_arm_mve_vqshlq_m_r_s8:
5646case ARM::BI__builtin_arm_mve_vqshlq_m_r_u16:
5647case ARM::BI__builtin_arm_mve_vqshlq_m_r_u32:
5648case ARM::BI__builtin_arm_mve_vqshlq_m_r_u8:
5649case ARM::BI__builtin_arm_mve_vrshlq_m_n_s16:
5650case ARM::BI__builtin_arm_mve_vrshlq_m_n_s32:
5651case ARM::BI__builtin_arm_mve_vrshlq_m_n_s8:
5652case ARM::BI__builtin_arm_mve_vrshlq_m_n_u16:
5653case ARM::BI__builtin_arm_mve_vrshlq_m_n_u32:
5654case ARM::BI__builtin_arm_mve_vrshlq_m_n_u8:
5655case ARM::BI__builtin_arm_mve_vshlq_m_r_s16:
5656case ARM::BI__builtin_arm_mve_vshlq_m_r_s32:
5657case ARM::BI__builtin_arm_mve_vshlq_m_r_s8:
5658case ARM::BI__builtin_arm_mve_vshlq_m_r_u16:
5659case ARM::BI__builtin_arm_mve_vshlq_m_r_u32:
5660case ARM::BI__builtin_arm_mve_vshlq_m_r_u8: {
5661 uint32_t Param0;
5662 uint32_t Param1;
5663 uint32_t Param2;
5664 llvm::Type * Param3;
5665 llvm::Type * Param4;
5666 switch (BuiltinID) {
5667 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s16:
5668 Param0 = static_cast<uint32_t>(1);
5669 Param1 = static_cast<uint32_t>(1);
5670 Param2 = static_cast<uint32_t>(0);
5671 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5672 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5673 break;
5674 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s32:
5675 Param0 = static_cast<uint32_t>(1);
5676 Param1 = static_cast<uint32_t>(1);
5677 Param2 = static_cast<uint32_t>(0);
5678 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5679 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5680 break;
5681 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s8:
5682 Param0 = static_cast<uint32_t>(1);
5683 Param1 = static_cast<uint32_t>(1);
5684 Param2 = static_cast<uint32_t>(0);
5685 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5686 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5687 break;
5688 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u16:
5689 Param0 = static_cast<uint32_t>(1);
5690 Param1 = static_cast<uint32_t>(1);
5691 Param2 = static_cast<uint32_t>(1);
5692 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5693 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5694 break;
5695 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u32:
5696 Param0 = static_cast<uint32_t>(1);
5697 Param1 = static_cast<uint32_t>(1);
5698 Param2 = static_cast<uint32_t>(1);
5699 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5700 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5701 break;
5702 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u8:
5703 Param0 = static_cast<uint32_t>(1);
5704 Param1 = static_cast<uint32_t>(1);
5705 Param2 = static_cast<uint32_t>(1);
5706 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5707 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5708 break;
5709 case ARM::BI__builtin_arm_mve_vqshlq_m_r_s16:
5710 Param0 = static_cast<uint32_t>(1);
5711 Param1 = static_cast<uint32_t>(0);
5712 Param2 = static_cast<uint32_t>(0);
5713 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5714 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5715 break;
5716 case ARM::BI__builtin_arm_mve_vqshlq_m_r_s32:
5717 Param0 = static_cast<uint32_t>(1);
5718 Param1 = static_cast<uint32_t>(0);
5719 Param2 = static_cast<uint32_t>(0);
5720 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5721 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5722 break;
5723 case ARM::BI__builtin_arm_mve_vqshlq_m_r_s8:
5724 Param0 = static_cast<uint32_t>(1);
5725 Param1 = static_cast<uint32_t>(0);
5726 Param2 = static_cast<uint32_t>(0);
5727 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5728 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5729 break;
5730 case ARM::BI__builtin_arm_mve_vqshlq_m_r_u16:
5731 Param0 = static_cast<uint32_t>(1);
5732 Param1 = static_cast<uint32_t>(0);
5733 Param2 = static_cast<uint32_t>(1);
5734 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5735 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5736 break;
5737 case ARM::BI__builtin_arm_mve_vqshlq_m_r_u32:
5738 Param0 = static_cast<uint32_t>(1);
5739 Param1 = static_cast<uint32_t>(0);
5740 Param2 = static_cast<uint32_t>(1);
5741 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5742 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5743 break;
5744 case ARM::BI__builtin_arm_mve_vqshlq_m_r_u8:
5745 Param0 = static_cast<uint32_t>(1);
5746 Param1 = static_cast<uint32_t>(0);
5747 Param2 = static_cast<uint32_t>(1);
5748 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5749 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5750 break;
5751 case ARM::BI__builtin_arm_mve_vrshlq_m_n_s16:
5752 Param0 = static_cast<uint32_t>(0);
5753 Param1 = static_cast<uint32_t>(1);
5754 Param2 = static_cast<uint32_t>(0);
5755 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5756 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5757 break;
5758 case ARM::BI__builtin_arm_mve_vrshlq_m_n_s32:
5759 Param0 = static_cast<uint32_t>(0);
5760 Param1 = static_cast<uint32_t>(1);
5761 Param2 = static_cast<uint32_t>(0);
5762 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5763 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5764 break;
5765 case ARM::BI__builtin_arm_mve_vrshlq_m_n_s8:
5766 Param0 = static_cast<uint32_t>(0);
5767 Param1 = static_cast<uint32_t>(1);
5768 Param2 = static_cast<uint32_t>(0);
5769 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5770 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5771 break;
5772 case ARM::BI__builtin_arm_mve_vrshlq_m_n_u16:
5773 Param0 = static_cast<uint32_t>(0);
5774 Param1 = static_cast<uint32_t>(1);
5775 Param2 = static_cast<uint32_t>(1);
5776 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5777 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5778 break;
5779 case ARM::BI__builtin_arm_mve_vrshlq_m_n_u32:
5780 Param0 = static_cast<uint32_t>(0);
5781 Param1 = static_cast<uint32_t>(1);
5782 Param2 = static_cast<uint32_t>(1);
5783 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5784 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5785 break;
5786 case ARM::BI__builtin_arm_mve_vrshlq_m_n_u8:
5787 Param0 = static_cast<uint32_t>(0);
5788 Param1 = static_cast<uint32_t>(1);
5789 Param2 = static_cast<uint32_t>(1);
5790 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5791 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5792 break;
5793 case ARM::BI__builtin_arm_mve_vshlq_m_r_s16:
5794 Param0 = static_cast<uint32_t>(0);
5795 Param1 = static_cast<uint32_t>(0);
5796 Param2 = static_cast<uint32_t>(0);
5797 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5798 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5799 break;
5800 case ARM::BI__builtin_arm_mve_vshlq_m_r_s32:
5801 Param0 = static_cast<uint32_t>(0);
5802 Param1 = static_cast<uint32_t>(0);
5803 Param2 = static_cast<uint32_t>(0);
5804 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5805 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5806 break;
5807 case ARM::BI__builtin_arm_mve_vshlq_m_r_s8:
5808 Param0 = static_cast<uint32_t>(0);
5809 Param1 = static_cast<uint32_t>(0);
5810 Param2 = static_cast<uint32_t>(0);
5811 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5812 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5813 break;
5814 case ARM::BI__builtin_arm_mve_vshlq_m_r_u16:
5815 Param0 = static_cast<uint32_t>(0);
5816 Param1 = static_cast<uint32_t>(0);
5817 Param2 = static_cast<uint32_t>(1);
5818 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
5819 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5820 break;
5821 case ARM::BI__builtin_arm_mve_vshlq_m_r_u32:
5822 Param0 = static_cast<uint32_t>(0);
5823 Param1 = static_cast<uint32_t>(0);
5824 Param2 = static_cast<uint32_t>(1);
5825 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
5826 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5827 break;
5828 case ARM::BI__builtin_arm_mve_vshlq_m_r_u8:
5829 Param0 = static_cast<uint32_t>(0);
5830 Param1 = static_cast<uint32_t>(0);
5831 Param2 = static_cast<uint32_t>(1);
5832 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
5833 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5834 break;
5835 }
5836 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
5837 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
5838 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
5839 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
5840 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
5841 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
5842 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
5843 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val6});
5844 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshl_scalar_predicated, Tys: {Param4, Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val7});
5845}
5846case ARM::BI__builtin_arm_mve_vqrshlq_n_s16:
5847case ARM::BI__builtin_arm_mve_vqrshlq_n_s32:
5848case ARM::BI__builtin_arm_mve_vqrshlq_n_s8:
5849case ARM::BI__builtin_arm_mve_vqrshlq_n_u16:
5850case ARM::BI__builtin_arm_mve_vqrshlq_n_u32:
5851case ARM::BI__builtin_arm_mve_vqrshlq_n_u8:
5852case ARM::BI__builtin_arm_mve_vqshlq_r_s16:
5853case ARM::BI__builtin_arm_mve_vqshlq_r_s32:
5854case ARM::BI__builtin_arm_mve_vqshlq_r_s8:
5855case ARM::BI__builtin_arm_mve_vqshlq_r_u16:
5856case ARM::BI__builtin_arm_mve_vqshlq_r_u32:
5857case ARM::BI__builtin_arm_mve_vqshlq_r_u8:
5858case ARM::BI__builtin_arm_mve_vrshlq_n_s16:
5859case ARM::BI__builtin_arm_mve_vrshlq_n_s32:
5860case ARM::BI__builtin_arm_mve_vrshlq_n_s8:
5861case ARM::BI__builtin_arm_mve_vrshlq_n_u16:
5862case ARM::BI__builtin_arm_mve_vrshlq_n_u32:
5863case ARM::BI__builtin_arm_mve_vrshlq_n_u8:
5864case ARM::BI__builtin_arm_mve_vshlq_r_s16:
5865case ARM::BI__builtin_arm_mve_vshlq_r_s32:
5866case ARM::BI__builtin_arm_mve_vshlq_r_s8:
5867case ARM::BI__builtin_arm_mve_vshlq_r_u16:
5868case ARM::BI__builtin_arm_mve_vshlq_r_u32:
5869case ARM::BI__builtin_arm_mve_vshlq_r_u8: {
5870 uint32_t Param0;
5871 uint32_t Param1;
5872 uint32_t Param2;
5873 llvm::Type * Param3;
5874 switch (BuiltinID) {
5875 case ARM::BI__builtin_arm_mve_vqrshlq_n_s16:
5876 Param0 = static_cast<uint32_t>(1);
5877 Param1 = static_cast<uint32_t>(1);
5878 Param2 = static_cast<uint32_t>(0);
5879 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5880 break;
5881 case ARM::BI__builtin_arm_mve_vqrshlq_n_s32:
5882 Param0 = static_cast<uint32_t>(1);
5883 Param1 = static_cast<uint32_t>(1);
5884 Param2 = static_cast<uint32_t>(0);
5885 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5886 break;
5887 case ARM::BI__builtin_arm_mve_vqrshlq_n_s8:
5888 Param0 = static_cast<uint32_t>(1);
5889 Param1 = static_cast<uint32_t>(1);
5890 Param2 = static_cast<uint32_t>(0);
5891 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5892 break;
5893 case ARM::BI__builtin_arm_mve_vqrshlq_n_u16:
5894 Param0 = static_cast<uint32_t>(1);
5895 Param1 = static_cast<uint32_t>(1);
5896 Param2 = static_cast<uint32_t>(1);
5897 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5898 break;
5899 case ARM::BI__builtin_arm_mve_vqrshlq_n_u32:
5900 Param0 = static_cast<uint32_t>(1);
5901 Param1 = static_cast<uint32_t>(1);
5902 Param2 = static_cast<uint32_t>(1);
5903 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5904 break;
5905 case ARM::BI__builtin_arm_mve_vqrshlq_n_u8:
5906 Param0 = static_cast<uint32_t>(1);
5907 Param1 = static_cast<uint32_t>(1);
5908 Param2 = static_cast<uint32_t>(1);
5909 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5910 break;
5911 case ARM::BI__builtin_arm_mve_vqshlq_r_s16:
5912 Param0 = static_cast<uint32_t>(1);
5913 Param1 = static_cast<uint32_t>(0);
5914 Param2 = static_cast<uint32_t>(0);
5915 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5916 break;
5917 case ARM::BI__builtin_arm_mve_vqshlq_r_s32:
5918 Param0 = static_cast<uint32_t>(1);
5919 Param1 = static_cast<uint32_t>(0);
5920 Param2 = static_cast<uint32_t>(0);
5921 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5922 break;
5923 case ARM::BI__builtin_arm_mve_vqshlq_r_s8:
5924 Param0 = static_cast<uint32_t>(1);
5925 Param1 = static_cast<uint32_t>(0);
5926 Param2 = static_cast<uint32_t>(0);
5927 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5928 break;
5929 case ARM::BI__builtin_arm_mve_vqshlq_r_u16:
5930 Param0 = static_cast<uint32_t>(1);
5931 Param1 = static_cast<uint32_t>(0);
5932 Param2 = static_cast<uint32_t>(1);
5933 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5934 break;
5935 case ARM::BI__builtin_arm_mve_vqshlq_r_u32:
5936 Param0 = static_cast<uint32_t>(1);
5937 Param1 = static_cast<uint32_t>(0);
5938 Param2 = static_cast<uint32_t>(1);
5939 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5940 break;
5941 case ARM::BI__builtin_arm_mve_vqshlq_r_u8:
5942 Param0 = static_cast<uint32_t>(1);
5943 Param1 = static_cast<uint32_t>(0);
5944 Param2 = static_cast<uint32_t>(1);
5945 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5946 break;
5947 case ARM::BI__builtin_arm_mve_vrshlq_n_s16:
5948 Param0 = static_cast<uint32_t>(0);
5949 Param1 = static_cast<uint32_t>(1);
5950 Param2 = static_cast<uint32_t>(0);
5951 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5952 break;
5953 case ARM::BI__builtin_arm_mve_vrshlq_n_s32:
5954 Param0 = static_cast<uint32_t>(0);
5955 Param1 = static_cast<uint32_t>(1);
5956 Param2 = static_cast<uint32_t>(0);
5957 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5958 break;
5959 case ARM::BI__builtin_arm_mve_vrshlq_n_s8:
5960 Param0 = static_cast<uint32_t>(0);
5961 Param1 = static_cast<uint32_t>(1);
5962 Param2 = static_cast<uint32_t>(0);
5963 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5964 break;
5965 case ARM::BI__builtin_arm_mve_vrshlq_n_u16:
5966 Param0 = static_cast<uint32_t>(0);
5967 Param1 = static_cast<uint32_t>(1);
5968 Param2 = static_cast<uint32_t>(1);
5969 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5970 break;
5971 case ARM::BI__builtin_arm_mve_vrshlq_n_u32:
5972 Param0 = static_cast<uint32_t>(0);
5973 Param1 = static_cast<uint32_t>(1);
5974 Param2 = static_cast<uint32_t>(1);
5975 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5976 break;
5977 case ARM::BI__builtin_arm_mve_vrshlq_n_u8:
5978 Param0 = static_cast<uint32_t>(0);
5979 Param1 = static_cast<uint32_t>(1);
5980 Param2 = static_cast<uint32_t>(1);
5981 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
5982 break;
5983 case ARM::BI__builtin_arm_mve_vshlq_r_s16:
5984 Param0 = static_cast<uint32_t>(0);
5985 Param1 = static_cast<uint32_t>(0);
5986 Param2 = static_cast<uint32_t>(0);
5987 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
5988 break;
5989 case ARM::BI__builtin_arm_mve_vshlq_r_s32:
5990 Param0 = static_cast<uint32_t>(0);
5991 Param1 = static_cast<uint32_t>(0);
5992 Param2 = static_cast<uint32_t>(0);
5993 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
5994 break;
5995 case ARM::BI__builtin_arm_mve_vshlq_r_s8:
5996 Param0 = static_cast<uint32_t>(0);
5997 Param1 = static_cast<uint32_t>(0);
5998 Param2 = static_cast<uint32_t>(0);
5999 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6000 break;
6001 case ARM::BI__builtin_arm_mve_vshlq_r_u16:
6002 Param0 = static_cast<uint32_t>(0);
6003 Param1 = static_cast<uint32_t>(0);
6004 Param2 = static_cast<uint32_t>(1);
6005 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6006 break;
6007 case ARM::BI__builtin_arm_mve_vshlq_r_u32:
6008 Param0 = static_cast<uint32_t>(0);
6009 Param1 = static_cast<uint32_t>(0);
6010 Param2 = static_cast<uint32_t>(1);
6011 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6012 break;
6013 case ARM::BI__builtin_arm_mve_vshlq_r_u8:
6014 Param0 = static_cast<uint32_t>(0);
6015 Param1 = static_cast<uint32_t>(0);
6016 Param2 = static_cast<uint32_t>(1);
6017 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6018 break;
6019 }
6020 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6021 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6022 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
6023 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
6024 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
6025 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshl_scalar, Tys: {Param3}), Args: {Val0, Val1, Val2, Val3, Val4});
6026}
6027case ARM::BI__builtin_arm_mve_vqmovnbq_s16:
6028case ARM::BI__builtin_arm_mve_vqmovnbq_s32:
6029case ARM::BI__builtin_arm_mve_vqmovnbq_u16:
6030case ARM::BI__builtin_arm_mve_vqmovnbq_u32:
6031case ARM::BI__builtin_arm_mve_vqmovntq_s16:
6032case ARM::BI__builtin_arm_mve_vqmovntq_s32:
6033case ARM::BI__builtin_arm_mve_vqmovntq_u16:
6034case ARM::BI__builtin_arm_mve_vqmovntq_u32:
6035case ARM::BI__builtin_arm_mve_vqmovunbq_s16:
6036case ARM::BI__builtin_arm_mve_vqmovunbq_s32:
6037case ARM::BI__builtin_arm_mve_vqmovuntq_s16:
6038case ARM::BI__builtin_arm_mve_vqmovuntq_s32:
6039case ARM::BI__builtin_arm_mve_vqrshlq_s16:
6040case ARM::BI__builtin_arm_mve_vqrshlq_s32:
6041case ARM::BI__builtin_arm_mve_vqrshlq_s8:
6042case ARM::BI__builtin_arm_mve_vqrshlq_u16:
6043case ARM::BI__builtin_arm_mve_vqrshlq_u32:
6044case ARM::BI__builtin_arm_mve_vqrshlq_u8:
6045case ARM::BI__builtin_arm_mve_vqshlq_s16:
6046case ARM::BI__builtin_arm_mve_vqshlq_s32:
6047case ARM::BI__builtin_arm_mve_vqshlq_s8:
6048case ARM::BI__builtin_arm_mve_vqshlq_u16:
6049case ARM::BI__builtin_arm_mve_vqshlq_u32:
6050case ARM::BI__builtin_arm_mve_vqshlq_u8:
6051case ARM::BI__builtin_arm_mve_vrshlq_s16:
6052case ARM::BI__builtin_arm_mve_vrshlq_s32:
6053case ARM::BI__builtin_arm_mve_vrshlq_s8:
6054case ARM::BI__builtin_arm_mve_vrshlq_u16:
6055case ARM::BI__builtin_arm_mve_vrshlq_u32:
6056case ARM::BI__builtin_arm_mve_vrshlq_u8:
6057case ARM::BI__builtin_arm_mve_vshlq_s16:
6058case ARM::BI__builtin_arm_mve_vshlq_s32:
6059case ARM::BI__builtin_arm_mve_vshlq_s8:
6060case ARM::BI__builtin_arm_mve_vshlq_u16:
6061case ARM::BI__builtin_arm_mve_vshlq_u32:
6062case ARM::BI__builtin_arm_mve_vshlq_u8: {
6063 uint32_t Param0;
6064 uint32_t Param1;
6065 uint32_t Param2;
6066 Intrinsic::ID Param3;
6067 llvm::Type * Param4;
6068 llvm::Type * Param5;
6069 switch (BuiltinID) {
6070 case ARM::BI__builtin_arm_mve_vqmovnbq_s16:
6071 Param0 = static_cast<uint32_t>(0);
6072 Param1 = static_cast<uint32_t>(0);
6073 Param2 = static_cast<uint32_t>(0);
6074 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6075 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6076 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6077 break;
6078 case ARM::BI__builtin_arm_mve_vqmovnbq_s32:
6079 Param0 = static_cast<uint32_t>(0);
6080 Param1 = static_cast<uint32_t>(0);
6081 Param2 = static_cast<uint32_t>(0);
6082 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6083 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6084 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6085 break;
6086 case ARM::BI__builtin_arm_mve_vqmovnbq_u16:
6087 Param0 = static_cast<uint32_t>(1);
6088 Param1 = static_cast<uint32_t>(1);
6089 Param2 = static_cast<uint32_t>(0);
6090 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6091 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6092 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6093 break;
6094 case ARM::BI__builtin_arm_mve_vqmovnbq_u32:
6095 Param0 = static_cast<uint32_t>(1);
6096 Param1 = static_cast<uint32_t>(1);
6097 Param2 = static_cast<uint32_t>(0);
6098 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6099 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6100 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6101 break;
6102 case ARM::BI__builtin_arm_mve_vqmovntq_s16:
6103 Param0 = static_cast<uint32_t>(0);
6104 Param1 = static_cast<uint32_t>(0);
6105 Param2 = static_cast<uint32_t>(1);
6106 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6107 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6108 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6109 break;
6110 case ARM::BI__builtin_arm_mve_vqmovntq_s32:
6111 Param0 = static_cast<uint32_t>(0);
6112 Param1 = static_cast<uint32_t>(0);
6113 Param2 = static_cast<uint32_t>(1);
6114 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6115 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6116 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6117 break;
6118 case ARM::BI__builtin_arm_mve_vqmovntq_u16:
6119 Param0 = static_cast<uint32_t>(1);
6120 Param1 = static_cast<uint32_t>(1);
6121 Param2 = static_cast<uint32_t>(1);
6122 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6123 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6124 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6125 break;
6126 case ARM::BI__builtin_arm_mve_vqmovntq_u32:
6127 Param0 = static_cast<uint32_t>(1);
6128 Param1 = static_cast<uint32_t>(1);
6129 Param2 = static_cast<uint32_t>(1);
6130 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6131 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6132 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6133 break;
6134 case ARM::BI__builtin_arm_mve_vqmovunbq_s16:
6135 Param0 = static_cast<uint32_t>(1);
6136 Param1 = static_cast<uint32_t>(0);
6137 Param2 = static_cast<uint32_t>(0);
6138 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6139 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6140 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6141 break;
6142 case ARM::BI__builtin_arm_mve_vqmovunbq_s32:
6143 Param0 = static_cast<uint32_t>(1);
6144 Param1 = static_cast<uint32_t>(0);
6145 Param2 = static_cast<uint32_t>(0);
6146 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6147 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6148 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6149 break;
6150 case ARM::BI__builtin_arm_mve_vqmovuntq_s16:
6151 Param0 = static_cast<uint32_t>(1);
6152 Param1 = static_cast<uint32_t>(0);
6153 Param2 = static_cast<uint32_t>(1);
6154 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6155 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6156 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6157 break;
6158 case ARM::BI__builtin_arm_mve_vqmovuntq_s32:
6159 Param0 = static_cast<uint32_t>(1);
6160 Param1 = static_cast<uint32_t>(0);
6161 Param2 = static_cast<uint32_t>(1);
6162 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqmovn);
6163 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6164 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6165 break;
6166 case ARM::BI__builtin_arm_mve_vqrshlq_s16:
6167 Param0 = static_cast<uint32_t>(1);
6168 Param1 = static_cast<uint32_t>(1);
6169 Param2 = static_cast<uint32_t>(0);
6170 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6171 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6172 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6173 break;
6174 case ARM::BI__builtin_arm_mve_vqrshlq_s32:
6175 Param0 = static_cast<uint32_t>(1);
6176 Param1 = static_cast<uint32_t>(1);
6177 Param2 = static_cast<uint32_t>(0);
6178 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6179 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6180 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6181 break;
6182 case ARM::BI__builtin_arm_mve_vqrshlq_s8:
6183 Param0 = static_cast<uint32_t>(1);
6184 Param1 = static_cast<uint32_t>(1);
6185 Param2 = static_cast<uint32_t>(0);
6186 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6187 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6188 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6189 break;
6190 case ARM::BI__builtin_arm_mve_vqrshlq_u16:
6191 Param0 = static_cast<uint32_t>(1);
6192 Param1 = static_cast<uint32_t>(1);
6193 Param2 = static_cast<uint32_t>(1);
6194 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6195 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6196 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6197 break;
6198 case ARM::BI__builtin_arm_mve_vqrshlq_u32:
6199 Param0 = static_cast<uint32_t>(1);
6200 Param1 = static_cast<uint32_t>(1);
6201 Param2 = static_cast<uint32_t>(1);
6202 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6203 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6204 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6205 break;
6206 case ARM::BI__builtin_arm_mve_vqrshlq_u8:
6207 Param0 = static_cast<uint32_t>(1);
6208 Param1 = static_cast<uint32_t>(1);
6209 Param2 = static_cast<uint32_t>(1);
6210 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6211 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6212 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6213 break;
6214 case ARM::BI__builtin_arm_mve_vqshlq_s16:
6215 Param0 = static_cast<uint32_t>(1);
6216 Param1 = static_cast<uint32_t>(0);
6217 Param2 = static_cast<uint32_t>(0);
6218 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6219 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6220 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6221 break;
6222 case ARM::BI__builtin_arm_mve_vqshlq_s32:
6223 Param0 = static_cast<uint32_t>(1);
6224 Param1 = static_cast<uint32_t>(0);
6225 Param2 = static_cast<uint32_t>(0);
6226 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6227 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6228 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6229 break;
6230 case ARM::BI__builtin_arm_mve_vqshlq_s8:
6231 Param0 = static_cast<uint32_t>(1);
6232 Param1 = static_cast<uint32_t>(0);
6233 Param2 = static_cast<uint32_t>(0);
6234 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6235 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6236 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6237 break;
6238 case ARM::BI__builtin_arm_mve_vqshlq_u16:
6239 Param0 = static_cast<uint32_t>(1);
6240 Param1 = static_cast<uint32_t>(0);
6241 Param2 = static_cast<uint32_t>(1);
6242 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6243 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6244 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6245 break;
6246 case ARM::BI__builtin_arm_mve_vqshlq_u32:
6247 Param0 = static_cast<uint32_t>(1);
6248 Param1 = static_cast<uint32_t>(0);
6249 Param2 = static_cast<uint32_t>(1);
6250 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6251 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6252 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6253 break;
6254 case ARM::BI__builtin_arm_mve_vqshlq_u8:
6255 Param0 = static_cast<uint32_t>(1);
6256 Param1 = static_cast<uint32_t>(0);
6257 Param2 = static_cast<uint32_t>(1);
6258 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6259 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6260 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6261 break;
6262 case ARM::BI__builtin_arm_mve_vrshlq_s16:
6263 Param0 = static_cast<uint32_t>(0);
6264 Param1 = static_cast<uint32_t>(1);
6265 Param2 = static_cast<uint32_t>(0);
6266 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6267 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6268 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6269 break;
6270 case ARM::BI__builtin_arm_mve_vrshlq_s32:
6271 Param0 = static_cast<uint32_t>(0);
6272 Param1 = static_cast<uint32_t>(1);
6273 Param2 = static_cast<uint32_t>(0);
6274 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6275 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6276 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6277 break;
6278 case ARM::BI__builtin_arm_mve_vrshlq_s8:
6279 Param0 = static_cast<uint32_t>(0);
6280 Param1 = static_cast<uint32_t>(1);
6281 Param2 = static_cast<uint32_t>(0);
6282 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6283 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6284 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6285 break;
6286 case ARM::BI__builtin_arm_mve_vrshlq_u16:
6287 Param0 = static_cast<uint32_t>(0);
6288 Param1 = static_cast<uint32_t>(1);
6289 Param2 = static_cast<uint32_t>(1);
6290 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6291 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6292 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6293 break;
6294 case ARM::BI__builtin_arm_mve_vrshlq_u32:
6295 Param0 = static_cast<uint32_t>(0);
6296 Param1 = static_cast<uint32_t>(1);
6297 Param2 = static_cast<uint32_t>(1);
6298 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6299 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6300 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6301 break;
6302 case ARM::BI__builtin_arm_mve_vrshlq_u8:
6303 Param0 = static_cast<uint32_t>(0);
6304 Param1 = static_cast<uint32_t>(1);
6305 Param2 = static_cast<uint32_t>(1);
6306 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6307 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6308 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6309 break;
6310 case ARM::BI__builtin_arm_mve_vshlq_s16:
6311 Param0 = static_cast<uint32_t>(0);
6312 Param1 = static_cast<uint32_t>(0);
6313 Param2 = static_cast<uint32_t>(0);
6314 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6315 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6316 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6317 break;
6318 case ARM::BI__builtin_arm_mve_vshlq_s32:
6319 Param0 = static_cast<uint32_t>(0);
6320 Param1 = static_cast<uint32_t>(0);
6321 Param2 = static_cast<uint32_t>(0);
6322 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6323 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6324 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6325 break;
6326 case ARM::BI__builtin_arm_mve_vshlq_s8:
6327 Param0 = static_cast<uint32_t>(0);
6328 Param1 = static_cast<uint32_t>(0);
6329 Param2 = static_cast<uint32_t>(0);
6330 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6331 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6332 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6333 break;
6334 case ARM::BI__builtin_arm_mve_vshlq_u16:
6335 Param0 = static_cast<uint32_t>(0);
6336 Param1 = static_cast<uint32_t>(0);
6337 Param2 = static_cast<uint32_t>(1);
6338 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6339 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6340 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6341 break;
6342 case ARM::BI__builtin_arm_mve_vshlq_u32:
6343 Param0 = static_cast<uint32_t>(0);
6344 Param1 = static_cast<uint32_t>(0);
6345 Param2 = static_cast<uint32_t>(1);
6346 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6347 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6348 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6349 break;
6350 case ARM::BI__builtin_arm_mve_vshlq_u8:
6351 Param0 = static_cast<uint32_t>(0);
6352 Param1 = static_cast<uint32_t>(0);
6353 Param2 = static_cast<uint32_t>(1);
6354 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshl_vector);
6355 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6356 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6357 break;
6358 }
6359 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6360 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6361 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
6362 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
6363 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
6364 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param3, Tys: {Param4, Param5}), Args: {Val0, Val1, Val2, Val3, Val4});
6365}
6366case ARM::BI__builtin_arm_mve_vmullbq_int_s16:
6367case ARM::BI__builtin_arm_mve_vmullbq_int_s32:
6368case ARM::BI__builtin_arm_mve_vmullbq_int_s8:
6369case ARM::BI__builtin_arm_mve_vmullbq_int_u16:
6370case ARM::BI__builtin_arm_mve_vmullbq_int_u32:
6371case ARM::BI__builtin_arm_mve_vmullbq_int_u8:
6372case ARM::BI__builtin_arm_mve_vmulltq_int_s16:
6373case ARM::BI__builtin_arm_mve_vmulltq_int_s32:
6374case ARM::BI__builtin_arm_mve_vmulltq_int_s8:
6375case ARM::BI__builtin_arm_mve_vmulltq_int_u16:
6376case ARM::BI__builtin_arm_mve_vmulltq_int_u32:
6377case ARM::BI__builtin_arm_mve_vmulltq_int_u8:
6378case ARM::BI__builtin_arm_mve_vshllbq_n_s16:
6379case ARM::BI__builtin_arm_mve_vshllbq_n_s8:
6380case ARM::BI__builtin_arm_mve_vshllbq_n_u16:
6381case ARM::BI__builtin_arm_mve_vshllbq_n_u8:
6382case ARM::BI__builtin_arm_mve_vshlltq_n_s16:
6383case ARM::BI__builtin_arm_mve_vshlltq_n_s8:
6384case ARM::BI__builtin_arm_mve_vshlltq_n_u16:
6385case ARM::BI__builtin_arm_mve_vshlltq_n_u8: {
6386 uint32_t Param0;
6387 uint32_t Param1;
6388 Intrinsic::ID Param2;
6389 llvm::Type * Param3;
6390 llvm::Type * Param4;
6391 switch (BuiltinID) {
6392 case ARM::BI__builtin_arm_mve_vmullbq_int_s16:
6393 Param0 = static_cast<uint32_t>(0);
6394 Param1 = static_cast<uint32_t>(0);
6395 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6396 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6397 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6398 break;
6399 case ARM::BI__builtin_arm_mve_vmullbq_int_s32:
6400 Param0 = static_cast<uint32_t>(0);
6401 Param1 = static_cast<uint32_t>(0);
6402 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6403 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
6404 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6405 break;
6406 case ARM::BI__builtin_arm_mve_vmullbq_int_s8:
6407 Param0 = static_cast<uint32_t>(0);
6408 Param1 = static_cast<uint32_t>(0);
6409 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6410 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6411 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6412 break;
6413 case ARM::BI__builtin_arm_mve_vmullbq_int_u16:
6414 Param0 = static_cast<uint32_t>(1);
6415 Param1 = static_cast<uint32_t>(0);
6416 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6417 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6418 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6419 break;
6420 case ARM::BI__builtin_arm_mve_vmullbq_int_u32:
6421 Param0 = static_cast<uint32_t>(1);
6422 Param1 = static_cast<uint32_t>(0);
6423 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6424 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
6425 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6426 break;
6427 case ARM::BI__builtin_arm_mve_vmullbq_int_u8:
6428 Param0 = static_cast<uint32_t>(1);
6429 Param1 = static_cast<uint32_t>(0);
6430 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6431 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6432 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6433 break;
6434 case ARM::BI__builtin_arm_mve_vmulltq_int_s16:
6435 Param0 = static_cast<uint32_t>(0);
6436 Param1 = static_cast<uint32_t>(1);
6437 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6438 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6439 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6440 break;
6441 case ARM::BI__builtin_arm_mve_vmulltq_int_s32:
6442 Param0 = static_cast<uint32_t>(0);
6443 Param1 = static_cast<uint32_t>(1);
6444 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6445 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
6446 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6447 break;
6448 case ARM::BI__builtin_arm_mve_vmulltq_int_s8:
6449 Param0 = static_cast<uint32_t>(0);
6450 Param1 = static_cast<uint32_t>(1);
6451 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6452 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6453 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6454 break;
6455 case ARM::BI__builtin_arm_mve_vmulltq_int_u16:
6456 Param0 = static_cast<uint32_t>(1);
6457 Param1 = static_cast<uint32_t>(1);
6458 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6459 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6460 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6461 break;
6462 case ARM::BI__builtin_arm_mve_vmulltq_int_u32:
6463 Param0 = static_cast<uint32_t>(1);
6464 Param1 = static_cast<uint32_t>(1);
6465 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6466 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
6467 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6468 break;
6469 case ARM::BI__builtin_arm_mve_vmulltq_int_u8:
6470 Param0 = static_cast<uint32_t>(1);
6471 Param1 = static_cast<uint32_t>(1);
6472 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull);
6473 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6474 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6475 break;
6476 case ARM::BI__builtin_arm_mve_vshllbq_n_s16:
6477 Param0 = static_cast<uint32_t>(0);
6478 Param1 = static_cast<uint32_t>(0);
6479 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6480 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6481 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6482 break;
6483 case ARM::BI__builtin_arm_mve_vshllbq_n_s8:
6484 Param0 = static_cast<uint32_t>(0);
6485 Param1 = static_cast<uint32_t>(0);
6486 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6487 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6488 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6489 break;
6490 case ARM::BI__builtin_arm_mve_vshllbq_n_u16:
6491 Param0 = static_cast<uint32_t>(1);
6492 Param1 = static_cast<uint32_t>(0);
6493 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6494 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6495 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6496 break;
6497 case ARM::BI__builtin_arm_mve_vshllbq_n_u8:
6498 Param0 = static_cast<uint32_t>(1);
6499 Param1 = static_cast<uint32_t>(0);
6500 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6501 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6502 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6503 break;
6504 case ARM::BI__builtin_arm_mve_vshlltq_n_s16:
6505 Param0 = static_cast<uint32_t>(0);
6506 Param1 = static_cast<uint32_t>(1);
6507 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6508 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6509 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6510 break;
6511 case ARM::BI__builtin_arm_mve_vshlltq_n_s8:
6512 Param0 = static_cast<uint32_t>(0);
6513 Param1 = static_cast<uint32_t>(1);
6514 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6515 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6516 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6517 break;
6518 case ARM::BI__builtin_arm_mve_vshlltq_n_u16:
6519 Param0 = static_cast<uint32_t>(1);
6520 Param1 = static_cast<uint32_t>(1);
6521 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6522 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6523 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6524 break;
6525 case ARM::BI__builtin_arm_mve_vshlltq_n_u8:
6526 Param0 = static_cast<uint32_t>(1);
6527 Param1 = static_cast<uint32_t>(1);
6528 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm);
6529 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6530 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6531 break;
6532 }
6533 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6534 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6535 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
6536 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
6537 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param4}), Args: {Val0, Val1, Val2, Val3});
6538}
6539case ARM::BI__builtin_arm_mve_vcvtbq_f16_f32:
6540case ARM::BI__builtin_arm_mve_vcvttq_f16_f32: {
6541 uint32_t Param0;
6542 switch (BuiltinID) {
6543 case ARM::BI__builtin_arm_mve_vcvtbq_f16_f32:
6544 Param0 = static_cast<uint32_t>(0);
6545 break;
6546 case ARM::BI__builtin_arm_mve_vcvttq_f16_f32:
6547 Param0 = static_cast<uint32_t>(1);
6548 break;
6549 }
6550 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6551 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6552 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
6553 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_narrow), Args: {Val0, Val1, Val2});
6554}
6555case ARM::BI__builtin_arm_mve_vmullbq_poly_p16:
6556case ARM::BI__builtin_arm_mve_vmullbq_poly_p8:
6557case ARM::BI__builtin_arm_mve_vmulltq_poly_p16:
6558case ARM::BI__builtin_arm_mve_vmulltq_poly_p8:
6559case ARM::BI__builtin_arm_mve_vqdmullbq_s16:
6560case ARM::BI__builtin_arm_mve_vqdmullbq_s32:
6561case ARM::BI__builtin_arm_mve_vqdmulltq_s16:
6562case ARM::BI__builtin_arm_mve_vqdmulltq_s32: {
6563 uint32_t Param0;
6564 Intrinsic::ID Param1;
6565 llvm::Type * Param2;
6566 llvm::Type * Param3;
6567 switch (BuiltinID) {
6568 case ARM::BI__builtin_arm_mve_vmullbq_poly_p16:
6569 Param0 = static_cast<uint32_t>(0);
6570 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull_poly);
6571 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6572 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6573 break;
6574 case ARM::BI__builtin_arm_mve_vmullbq_poly_p8:
6575 Param0 = static_cast<uint32_t>(0);
6576 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull_poly);
6577 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6578 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6579 break;
6580 case ARM::BI__builtin_arm_mve_vmulltq_poly_p16:
6581 Param0 = static_cast<uint32_t>(1);
6582 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull_poly);
6583 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6584 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6585 break;
6586 case ARM::BI__builtin_arm_mve_vmulltq_poly_p8:
6587 Param0 = static_cast<uint32_t>(1);
6588 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmull_poly);
6589 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6590 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6591 break;
6592 case ARM::BI__builtin_arm_mve_vqdmullbq_s16:
6593 Param0 = static_cast<uint32_t>(0);
6594 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull);
6595 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6596 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6597 break;
6598 case ARM::BI__builtin_arm_mve_vqdmullbq_s32:
6599 Param0 = static_cast<uint32_t>(0);
6600 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull);
6601 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
6602 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6603 break;
6604 case ARM::BI__builtin_arm_mve_vqdmulltq_s16:
6605 Param0 = static_cast<uint32_t>(1);
6606 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull);
6607 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6608 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6609 break;
6610 case ARM::BI__builtin_arm_mve_vqdmulltq_s32:
6611 Param0 = static_cast<uint32_t>(1);
6612 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull);
6613 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
6614 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6615 break;
6616 }
6617 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6618 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6619 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
6620 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param3}), Args: {Val0, Val1, Val2});
6621}
6622case ARM::BI__builtin_arm_mve_vabdq_f16:
6623case ARM::BI__builtin_arm_mve_vabdq_f32:
6624case ARM::BI__builtin_arm_mve_vabdq_s16:
6625case ARM::BI__builtin_arm_mve_vabdq_s32:
6626case ARM::BI__builtin_arm_mve_vabdq_s8:
6627case ARM::BI__builtin_arm_mve_vabdq_u16:
6628case ARM::BI__builtin_arm_mve_vabdq_u32:
6629case ARM::BI__builtin_arm_mve_vabdq_u8:
6630case ARM::BI__builtin_arm_mve_vhaddq_s16:
6631case ARM::BI__builtin_arm_mve_vhaddq_s32:
6632case ARM::BI__builtin_arm_mve_vhaddq_s8:
6633case ARM::BI__builtin_arm_mve_vhaddq_u16:
6634case ARM::BI__builtin_arm_mve_vhaddq_u32:
6635case ARM::BI__builtin_arm_mve_vhaddq_u8:
6636case ARM::BI__builtin_arm_mve_vhsubq_s16:
6637case ARM::BI__builtin_arm_mve_vhsubq_s32:
6638case ARM::BI__builtin_arm_mve_vhsubq_s8:
6639case ARM::BI__builtin_arm_mve_vhsubq_u16:
6640case ARM::BI__builtin_arm_mve_vhsubq_u32:
6641case ARM::BI__builtin_arm_mve_vhsubq_u8:
6642case ARM::BI__builtin_arm_mve_vmulhq_s16:
6643case ARM::BI__builtin_arm_mve_vmulhq_s32:
6644case ARM::BI__builtin_arm_mve_vmulhq_s8:
6645case ARM::BI__builtin_arm_mve_vmulhq_u16:
6646case ARM::BI__builtin_arm_mve_vmulhq_u32:
6647case ARM::BI__builtin_arm_mve_vmulhq_u8:
6648case ARM::BI__builtin_arm_mve_vqshlq_n_s16:
6649case ARM::BI__builtin_arm_mve_vqshlq_n_s32:
6650case ARM::BI__builtin_arm_mve_vqshlq_n_s8:
6651case ARM::BI__builtin_arm_mve_vqshlq_n_u16:
6652case ARM::BI__builtin_arm_mve_vqshlq_n_u32:
6653case ARM::BI__builtin_arm_mve_vqshlq_n_u8:
6654case ARM::BI__builtin_arm_mve_vrhaddq_s16:
6655case ARM::BI__builtin_arm_mve_vrhaddq_s32:
6656case ARM::BI__builtin_arm_mve_vrhaddq_s8:
6657case ARM::BI__builtin_arm_mve_vrhaddq_u16:
6658case ARM::BI__builtin_arm_mve_vrhaddq_u32:
6659case ARM::BI__builtin_arm_mve_vrhaddq_u8:
6660case ARM::BI__builtin_arm_mve_vrmulhq_s16:
6661case ARM::BI__builtin_arm_mve_vrmulhq_s32:
6662case ARM::BI__builtin_arm_mve_vrmulhq_s8:
6663case ARM::BI__builtin_arm_mve_vrmulhq_u16:
6664case ARM::BI__builtin_arm_mve_vrmulhq_u32:
6665case ARM::BI__builtin_arm_mve_vrmulhq_u8:
6666case ARM::BI__builtin_arm_mve_vrshrq_n_s16:
6667case ARM::BI__builtin_arm_mve_vrshrq_n_s32:
6668case ARM::BI__builtin_arm_mve_vrshrq_n_s8:
6669case ARM::BI__builtin_arm_mve_vrshrq_n_u16:
6670case ARM::BI__builtin_arm_mve_vrshrq_n_u32:
6671case ARM::BI__builtin_arm_mve_vrshrq_n_u8: {
6672 uint32_t Param0;
6673 Intrinsic::ID Param1;
6674 llvm::Type * Param2;
6675 switch (BuiltinID) {
6676 case ARM::BI__builtin_arm_mve_vabdq_f16:
6677 Param0 = static_cast<uint32_t>(0);
6678 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6679 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
6680 break;
6681 case ARM::BI__builtin_arm_mve_vabdq_f32:
6682 Param0 = static_cast<uint32_t>(0);
6683 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6684 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
6685 break;
6686 case ARM::BI__builtin_arm_mve_vabdq_s16:
6687 Param0 = static_cast<uint32_t>(0);
6688 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6689 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6690 break;
6691 case ARM::BI__builtin_arm_mve_vabdq_s32:
6692 Param0 = static_cast<uint32_t>(0);
6693 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6694 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6695 break;
6696 case ARM::BI__builtin_arm_mve_vabdq_s8:
6697 Param0 = static_cast<uint32_t>(0);
6698 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6699 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6700 break;
6701 case ARM::BI__builtin_arm_mve_vabdq_u16:
6702 Param0 = static_cast<uint32_t>(1);
6703 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6704 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6705 break;
6706 case ARM::BI__builtin_arm_mve_vabdq_u32:
6707 Param0 = static_cast<uint32_t>(1);
6708 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6709 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6710 break;
6711 case ARM::BI__builtin_arm_mve_vabdq_u8:
6712 Param0 = static_cast<uint32_t>(1);
6713 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabd);
6714 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6715 break;
6716 case ARM::BI__builtin_arm_mve_vhaddq_s16:
6717 Param0 = static_cast<uint32_t>(0);
6718 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
6719 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6720 break;
6721 case ARM::BI__builtin_arm_mve_vhaddq_s32:
6722 Param0 = static_cast<uint32_t>(0);
6723 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
6724 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6725 break;
6726 case ARM::BI__builtin_arm_mve_vhaddq_s8:
6727 Param0 = static_cast<uint32_t>(0);
6728 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
6729 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6730 break;
6731 case ARM::BI__builtin_arm_mve_vhaddq_u16:
6732 Param0 = static_cast<uint32_t>(1);
6733 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
6734 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6735 break;
6736 case ARM::BI__builtin_arm_mve_vhaddq_u32:
6737 Param0 = static_cast<uint32_t>(1);
6738 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
6739 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6740 break;
6741 case ARM::BI__builtin_arm_mve_vhaddq_u8:
6742 Param0 = static_cast<uint32_t>(1);
6743 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhadd);
6744 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6745 break;
6746 case ARM::BI__builtin_arm_mve_vhsubq_s16:
6747 Param0 = static_cast<uint32_t>(0);
6748 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
6749 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6750 break;
6751 case ARM::BI__builtin_arm_mve_vhsubq_s32:
6752 Param0 = static_cast<uint32_t>(0);
6753 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
6754 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6755 break;
6756 case ARM::BI__builtin_arm_mve_vhsubq_s8:
6757 Param0 = static_cast<uint32_t>(0);
6758 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
6759 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6760 break;
6761 case ARM::BI__builtin_arm_mve_vhsubq_u16:
6762 Param0 = static_cast<uint32_t>(1);
6763 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
6764 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6765 break;
6766 case ARM::BI__builtin_arm_mve_vhsubq_u32:
6767 Param0 = static_cast<uint32_t>(1);
6768 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
6769 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6770 break;
6771 case ARM::BI__builtin_arm_mve_vhsubq_u8:
6772 Param0 = static_cast<uint32_t>(1);
6773 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vhsub);
6774 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6775 break;
6776 case ARM::BI__builtin_arm_mve_vmulhq_s16:
6777 Param0 = static_cast<uint32_t>(0);
6778 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmulh);
6779 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6780 break;
6781 case ARM::BI__builtin_arm_mve_vmulhq_s32:
6782 Param0 = static_cast<uint32_t>(0);
6783 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmulh);
6784 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6785 break;
6786 case ARM::BI__builtin_arm_mve_vmulhq_s8:
6787 Param0 = static_cast<uint32_t>(0);
6788 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmulh);
6789 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6790 break;
6791 case ARM::BI__builtin_arm_mve_vmulhq_u16:
6792 Param0 = static_cast<uint32_t>(1);
6793 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmulh);
6794 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6795 break;
6796 case ARM::BI__builtin_arm_mve_vmulhq_u32:
6797 Param0 = static_cast<uint32_t>(1);
6798 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmulh);
6799 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6800 break;
6801 case ARM::BI__builtin_arm_mve_vmulhq_u8:
6802 Param0 = static_cast<uint32_t>(1);
6803 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmulh);
6804 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6805 break;
6806 case ARM::BI__builtin_arm_mve_vqshlq_n_s16:
6807 Param0 = static_cast<uint32_t>(0);
6808 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm);
6809 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6810 break;
6811 case ARM::BI__builtin_arm_mve_vqshlq_n_s32:
6812 Param0 = static_cast<uint32_t>(0);
6813 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm);
6814 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6815 break;
6816 case ARM::BI__builtin_arm_mve_vqshlq_n_s8:
6817 Param0 = static_cast<uint32_t>(0);
6818 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm);
6819 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6820 break;
6821 case ARM::BI__builtin_arm_mve_vqshlq_n_u16:
6822 Param0 = static_cast<uint32_t>(1);
6823 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm);
6824 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6825 break;
6826 case ARM::BI__builtin_arm_mve_vqshlq_n_u32:
6827 Param0 = static_cast<uint32_t>(1);
6828 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm);
6829 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6830 break;
6831 case ARM::BI__builtin_arm_mve_vqshlq_n_u8:
6832 Param0 = static_cast<uint32_t>(1);
6833 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm);
6834 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6835 break;
6836 case ARM::BI__builtin_arm_mve_vrhaddq_s16:
6837 Param0 = static_cast<uint32_t>(0);
6838 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrhadd);
6839 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6840 break;
6841 case ARM::BI__builtin_arm_mve_vrhaddq_s32:
6842 Param0 = static_cast<uint32_t>(0);
6843 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrhadd);
6844 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6845 break;
6846 case ARM::BI__builtin_arm_mve_vrhaddq_s8:
6847 Param0 = static_cast<uint32_t>(0);
6848 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrhadd);
6849 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6850 break;
6851 case ARM::BI__builtin_arm_mve_vrhaddq_u16:
6852 Param0 = static_cast<uint32_t>(1);
6853 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrhadd);
6854 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6855 break;
6856 case ARM::BI__builtin_arm_mve_vrhaddq_u32:
6857 Param0 = static_cast<uint32_t>(1);
6858 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrhadd);
6859 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6860 break;
6861 case ARM::BI__builtin_arm_mve_vrhaddq_u8:
6862 Param0 = static_cast<uint32_t>(1);
6863 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrhadd);
6864 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6865 break;
6866 case ARM::BI__builtin_arm_mve_vrmulhq_s16:
6867 Param0 = static_cast<uint32_t>(0);
6868 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmulh);
6869 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6870 break;
6871 case ARM::BI__builtin_arm_mve_vrmulhq_s32:
6872 Param0 = static_cast<uint32_t>(0);
6873 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmulh);
6874 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6875 break;
6876 case ARM::BI__builtin_arm_mve_vrmulhq_s8:
6877 Param0 = static_cast<uint32_t>(0);
6878 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmulh);
6879 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6880 break;
6881 case ARM::BI__builtin_arm_mve_vrmulhq_u16:
6882 Param0 = static_cast<uint32_t>(1);
6883 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmulh);
6884 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6885 break;
6886 case ARM::BI__builtin_arm_mve_vrmulhq_u32:
6887 Param0 = static_cast<uint32_t>(1);
6888 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmulh);
6889 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6890 break;
6891 case ARM::BI__builtin_arm_mve_vrmulhq_u8:
6892 Param0 = static_cast<uint32_t>(1);
6893 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmulh);
6894 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6895 break;
6896 case ARM::BI__builtin_arm_mve_vrshrq_n_s16:
6897 Param0 = static_cast<uint32_t>(0);
6898 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm);
6899 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6900 break;
6901 case ARM::BI__builtin_arm_mve_vrshrq_n_s32:
6902 Param0 = static_cast<uint32_t>(0);
6903 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm);
6904 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6905 break;
6906 case ARM::BI__builtin_arm_mve_vrshrq_n_s8:
6907 Param0 = static_cast<uint32_t>(0);
6908 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm);
6909 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6910 break;
6911 case ARM::BI__builtin_arm_mve_vrshrq_n_u16:
6912 Param0 = static_cast<uint32_t>(1);
6913 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm);
6914 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
6915 break;
6916 case ARM::BI__builtin_arm_mve_vrshrq_n_u32:
6917 Param0 = static_cast<uint32_t>(1);
6918 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm);
6919 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
6920 break;
6921 case ARM::BI__builtin_arm_mve_vrshrq_n_u8:
6922 Param0 = static_cast<uint32_t>(1);
6923 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm);
6924 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
6925 break;
6926 }
6927 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6928 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6929 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
6930 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2}), Args: {Val0, Val1, Val2});
6931}
6932case ARM::BI__builtin_arm_mve_vmaxnmq_f16:
6933case ARM::BI__builtin_arm_mve_vmaxnmq_f32:
6934case ARM::BI__builtin_arm_mve_vminnmq_f16:
6935case ARM::BI__builtin_arm_mve_vminnmq_f32: {
6936 Intrinsic::ID Param0;
6937 llvm::Type * Param1;
6938 Intrinsic::ID Param2;
6939 switch (BuiltinID) {
6940 case ARM::BI__builtin_arm_mve_vmaxnmq_f16:
6941 Param0 = static_cast<Intrinsic::ID>(Intrinsic::maxnum);
6942 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
6943 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxnm);
6944 break;
6945 case ARM::BI__builtin_arm_mve_vmaxnmq_f32:
6946 Param0 = static_cast<Intrinsic::ID>(Intrinsic::maxnum);
6947 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
6948 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmaxnm);
6949 break;
6950 case ARM::BI__builtin_arm_mve_vminnmq_f16:
6951 Param0 = static_cast<Intrinsic::ID>(Intrinsic::minnum);
6952 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
6953 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vminnm);
6954 break;
6955 case ARM::BI__builtin_arm_mve_vminnmq_f32:
6956 Param0 = static_cast<Intrinsic::ID>(Intrinsic::minnum);
6957 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
6958 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vminnm);
6959 break;
6960 }
6961 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6962 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6963 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val1}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param1}), Args: {Val0, Val1});
6964}
6965case ARM::BI__builtin_arm_mve_vaddq_f16:
6966case ARM::BI__builtin_arm_mve_vaddq_f32: {
6967 llvm::Type * Param0;
6968 switch (BuiltinID) {
6969 case ARM::BI__builtin_arm_mve_vaddq_f16:
6970 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
6971 break;
6972 case ARM::BI__builtin_arm_mve_vaddq_f32:
6973 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
6974 break;
6975 }
6976 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6977 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6978 return !Builder.getIsFPConstrained() ? Builder.CreateFAdd(L: Val0, R: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vadd, Tys: {Param0}), Args: {Val0, Val1});
6979}
6980case ARM::BI__builtin_arm_mve_vmulq_f16:
6981case ARM::BI__builtin_arm_mve_vmulq_f32: {
6982 llvm::Type * Param0;
6983 switch (BuiltinID) {
6984 case ARM::BI__builtin_arm_mve_vmulq_f16:
6985 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
6986 break;
6987 case ARM::BI__builtin_arm_mve_vmulq_f32:
6988 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
6989 break;
6990 }
6991 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
6992 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
6993 return !Builder.getIsFPConstrained() ? Builder.CreateFMul(L: Val0, R: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmul, Tys: {Param0}), Args: {Val0, Val1});
6994}
6995case ARM::BI__builtin_arm_mve_vsubq_f16:
6996case ARM::BI__builtin_arm_mve_vsubq_f32: {
6997 llvm::Type * Param0;
6998 switch (BuiltinID) {
6999 case ARM::BI__builtin_arm_mve_vsubq_f16:
7000 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
7001 break;
7002 case ARM::BI__builtin_arm_mve_vsubq_f32:
7003 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
7004 break;
7005 }
7006 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7007 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7008 return !Builder.getIsFPConstrained() ? Builder.CreateFSub(L: Val0, R: Val1) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vsub, Tys: {Param0}), Args: {Val0, Val1});
7009}
7010case ARM::BI__builtin_arm_mve_vaddq_s16:
7011case ARM::BI__builtin_arm_mve_vaddq_s32:
7012case ARM::BI__builtin_arm_mve_vaddq_s8:
7013case ARM::BI__builtin_arm_mve_vaddq_u16:
7014case ARM::BI__builtin_arm_mve_vaddq_u32:
7015case ARM::BI__builtin_arm_mve_vaddq_u8: {
7016 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7017 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7018 return Builder.CreateAdd(LHS: Val0, RHS: Val1);
7019}
7020case ARM::BI__builtin_arm_mve_vandq_s16:
7021case ARM::BI__builtin_arm_mve_vandq_s32:
7022case ARM::BI__builtin_arm_mve_vandq_s8:
7023case ARM::BI__builtin_arm_mve_vandq_u16:
7024case ARM::BI__builtin_arm_mve_vandq_u32:
7025case ARM::BI__builtin_arm_mve_vandq_u8: {
7026 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7027 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7028 return Builder.CreateAnd(LHS: Val0, RHS: Val1);
7029}
7030case ARM::BI__builtin_arm_mve_vldrdq_gather_base_s64:
7031case ARM::BI__builtin_arm_mve_vldrdq_gather_base_u64:
7032case ARM::BI__builtin_arm_mve_vldrwq_gather_base_f32:
7033case ARM::BI__builtin_arm_mve_vldrwq_gather_base_s32:
7034case ARM::BI__builtin_arm_mve_vldrwq_gather_base_u32: {
7035 llvm::Type * Param0;
7036 llvm::Type * Param1;
7037 switch (BuiltinID) {
7038 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_s64:
7039 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
7040 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
7041 break;
7042 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_u64:
7043 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
7044 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
7045 break;
7046 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_f32:
7047 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
7048 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7049 break;
7050 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_s32:
7051 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7052 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7053 break;
7054 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_u32:
7055 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7056 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7057 break;
7058 }
7059 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7060 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7061 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vldr_gather_base, Tys: {Param0, Param1}), Args: {Val0, Val1});
7062}
7063case ARM::BI__builtin_arm_mve_sqrshr:
7064case ARM::BI__builtin_arm_mve_sqshl:
7065case ARM::BI__builtin_arm_mve_srshr:
7066case ARM::BI__builtin_arm_mve_uqrshl:
7067case ARM::BI__builtin_arm_mve_uqshl:
7068case ARM::BI__builtin_arm_mve_urshr: {
7069 Intrinsic::ID Param0;
7070 switch (BuiltinID) {
7071 case ARM::BI__builtin_arm_mve_sqrshr:
7072 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sqrshr);
7073 break;
7074 case ARM::BI__builtin_arm_mve_sqshl:
7075 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sqshl);
7076 break;
7077 case ARM::BI__builtin_arm_mve_srshr:
7078 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_srshr);
7079 break;
7080 case ARM::BI__builtin_arm_mve_uqrshl:
7081 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_uqrshl);
7082 break;
7083 case ARM::BI__builtin_arm_mve_uqshl:
7084 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_uqshl);
7085 break;
7086 case ARM::BI__builtin_arm_mve_urshr:
7087 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_urshr);
7088 break;
7089 }
7090 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7091 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7092 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0), Args: {Val0, Val1});
7093}
7094case ARM::BI__builtin_arm_mve_vbrsrq_n_f16:
7095case ARM::BI__builtin_arm_mve_vbrsrq_n_f32:
7096case ARM::BI__builtin_arm_mve_vbrsrq_n_s16:
7097case ARM::BI__builtin_arm_mve_vbrsrq_n_s32:
7098case ARM::BI__builtin_arm_mve_vbrsrq_n_s8:
7099case ARM::BI__builtin_arm_mve_vbrsrq_n_u16:
7100case ARM::BI__builtin_arm_mve_vbrsrq_n_u32:
7101case ARM::BI__builtin_arm_mve_vbrsrq_n_u8:
7102case ARM::BI__builtin_arm_mve_vqaddq_s16:
7103case ARM::BI__builtin_arm_mve_vqaddq_s32:
7104case ARM::BI__builtin_arm_mve_vqaddq_s8:
7105case ARM::BI__builtin_arm_mve_vqaddq_u16:
7106case ARM::BI__builtin_arm_mve_vqaddq_u32:
7107case ARM::BI__builtin_arm_mve_vqaddq_u8:
7108case ARM::BI__builtin_arm_mve_vqdmulhq_s16:
7109case ARM::BI__builtin_arm_mve_vqdmulhq_s32:
7110case ARM::BI__builtin_arm_mve_vqdmulhq_s8:
7111case ARM::BI__builtin_arm_mve_vqrdmulhq_s16:
7112case ARM::BI__builtin_arm_mve_vqrdmulhq_s32:
7113case ARM::BI__builtin_arm_mve_vqrdmulhq_s8:
7114case ARM::BI__builtin_arm_mve_vqshluq_n_s16:
7115case ARM::BI__builtin_arm_mve_vqshluq_n_s32:
7116case ARM::BI__builtin_arm_mve_vqshluq_n_s8:
7117case ARM::BI__builtin_arm_mve_vqsubq_s16:
7118case ARM::BI__builtin_arm_mve_vqsubq_s32:
7119case ARM::BI__builtin_arm_mve_vqsubq_s8:
7120case ARM::BI__builtin_arm_mve_vqsubq_u16:
7121case ARM::BI__builtin_arm_mve_vqsubq_u32:
7122case ARM::BI__builtin_arm_mve_vqsubq_u8: {
7123 Intrinsic::ID Param0;
7124 llvm::Type * Param1;
7125 switch (BuiltinID) {
7126 case ARM::BI__builtin_arm_mve_vbrsrq_n_f16:
7127 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7128 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
7129 break;
7130 case ARM::BI__builtin_arm_mve_vbrsrq_n_f32:
7131 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7132 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
7133 break;
7134 case ARM::BI__builtin_arm_mve_vbrsrq_n_s16:
7135 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7136 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7137 break;
7138 case ARM::BI__builtin_arm_mve_vbrsrq_n_s32:
7139 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7140 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7141 break;
7142 case ARM::BI__builtin_arm_mve_vbrsrq_n_s8:
7143 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7144 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7145 break;
7146 case ARM::BI__builtin_arm_mve_vbrsrq_n_u16:
7147 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7148 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7149 break;
7150 case ARM::BI__builtin_arm_mve_vbrsrq_n_u32:
7151 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7152 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7153 break;
7154 case ARM::BI__builtin_arm_mve_vbrsrq_n_u8:
7155 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr);
7156 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7157 break;
7158 case ARM::BI__builtin_arm_mve_vqaddq_s16:
7159 Param0 = static_cast<Intrinsic::ID>(Intrinsic::sadd_sat);
7160 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7161 break;
7162 case ARM::BI__builtin_arm_mve_vqaddq_s32:
7163 Param0 = static_cast<Intrinsic::ID>(Intrinsic::sadd_sat);
7164 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7165 break;
7166 case ARM::BI__builtin_arm_mve_vqaddq_s8:
7167 Param0 = static_cast<Intrinsic::ID>(Intrinsic::sadd_sat);
7168 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7169 break;
7170 case ARM::BI__builtin_arm_mve_vqaddq_u16:
7171 Param0 = static_cast<Intrinsic::ID>(Intrinsic::uadd_sat);
7172 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7173 break;
7174 case ARM::BI__builtin_arm_mve_vqaddq_u32:
7175 Param0 = static_cast<Intrinsic::ID>(Intrinsic::uadd_sat);
7176 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7177 break;
7178 case ARM::BI__builtin_arm_mve_vqaddq_u8:
7179 Param0 = static_cast<Intrinsic::ID>(Intrinsic::uadd_sat);
7180 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7181 break;
7182 case ARM::BI__builtin_arm_mve_vqdmulhq_s16:
7183 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmulh);
7184 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7185 break;
7186 case ARM::BI__builtin_arm_mve_vqdmulhq_s32:
7187 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmulh);
7188 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7189 break;
7190 case ARM::BI__builtin_arm_mve_vqdmulhq_s8:
7191 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmulh);
7192 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7193 break;
7194 case ARM::BI__builtin_arm_mve_vqrdmulhq_s16:
7195 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmulh);
7196 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7197 break;
7198 case ARM::BI__builtin_arm_mve_vqrdmulhq_s32:
7199 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmulh);
7200 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7201 break;
7202 case ARM::BI__builtin_arm_mve_vqrdmulhq_s8:
7203 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqrdmulh);
7204 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7205 break;
7206 case ARM::BI__builtin_arm_mve_vqshluq_n_s16:
7207 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshlu_imm);
7208 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7209 break;
7210 case ARM::BI__builtin_arm_mve_vqshluq_n_s32:
7211 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshlu_imm);
7212 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7213 break;
7214 case ARM::BI__builtin_arm_mve_vqshluq_n_s8:
7215 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshlu_imm);
7216 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7217 break;
7218 case ARM::BI__builtin_arm_mve_vqsubq_s16:
7219 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ssub_sat);
7220 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7221 break;
7222 case ARM::BI__builtin_arm_mve_vqsubq_s32:
7223 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ssub_sat);
7224 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7225 break;
7226 case ARM::BI__builtin_arm_mve_vqsubq_s8:
7227 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ssub_sat);
7228 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7229 break;
7230 case ARM::BI__builtin_arm_mve_vqsubq_u16:
7231 Param0 = static_cast<Intrinsic::ID>(Intrinsic::usub_sat);
7232 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7233 break;
7234 case ARM::BI__builtin_arm_mve_vqsubq_u32:
7235 Param0 = static_cast<Intrinsic::ID>(Intrinsic::usub_sat);
7236 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7237 break;
7238 case ARM::BI__builtin_arm_mve_vqsubq_u8:
7239 Param0 = static_cast<Intrinsic::ID>(Intrinsic::usub_sat);
7240 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7241 break;
7242 }
7243 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7244 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7245 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0, Val1});
7246}
7247case ARM::BI__builtin_arm_mve_vgetq_lane_f16:
7248case ARM::BI__builtin_arm_mve_vgetq_lane_f32:
7249case ARM::BI__builtin_arm_mve_vgetq_lane_s16:
7250case ARM::BI__builtin_arm_mve_vgetq_lane_s32:
7251case ARM::BI__builtin_arm_mve_vgetq_lane_s64:
7252case ARM::BI__builtin_arm_mve_vgetq_lane_s8:
7253case ARM::BI__builtin_arm_mve_vgetq_lane_u16:
7254case ARM::BI__builtin_arm_mve_vgetq_lane_u32:
7255case ARM::BI__builtin_arm_mve_vgetq_lane_u64:
7256case ARM::BI__builtin_arm_mve_vgetq_lane_u8: {
7257 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7258 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7259 return Builder.CreateExtractElement(Vec: Val0, Idx: Val1);
7260}
7261case ARM::BI__builtin_arm_mve_vmulq_s16:
7262case ARM::BI__builtin_arm_mve_vmulq_s32:
7263case ARM::BI__builtin_arm_mve_vmulq_s8:
7264case ARM::BI__builtin_arm_mve_vmulq_u16:
7265case ARM::BI__builtin_arm_mve_vmulq_u32:
7266case ARM::BI__builtin_arm_mve_vmulq_u8: {
7267 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7268 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7269 return Builder.CreateMul(LHS: Val0, RHS: Val1);
7270}
7271case ARM::BI__builtin_arm_mve_vorrq_s16:
7272case ARM::BI__builtin_arm_mve_vorrq_s32:
7273case ARM::BI__builtin_arm_mve_vorrq_s8:
7274case ARM::BI__builtin_arm_mve_vorrq_u16:
7275case ARM::BI__builtin_arm_mve_vorrq_u32:
7276case ARM::BI__builtin_arm_mve_vorrq_u8: {
7277 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7278 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7279 return Builder.CreateOr(LHS: Val0, RHS: Val1);
7280}
7281case ARM::BI__builtin_arm_mve_vsubq_s16:
7282case ARM::BI__builtin_arm_mve_vsubq_s32:
7283case ARM::BI__builtin_arm_mve_vsubq_s8:
7284case ARM::BI__builtin_arm_mve_vsubq_u16:
7285case ARM::BI__builtin_arm_mve_vsubq_u32:
7286case ARM::BI__builtin_arm_mve_vsubq_u8: {
7287 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7288 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7289 return Builder.CreateSub(LHS: Val0, RHS: Val1);
7290}
7291case ARM::BI__builtin_arm_mve_veorq_s16:
7292case ARM::BI__builtin_arm_mve_veorq_s32:
7293case ARM::BI__builtin_arm_mve_veorq_s8:
7294case ARM::BI__builtin_arm_mve_veorq_u16:
7295case ARM::BI__builtin_arm_mve_veorq_u32:
7296case ARM::BI__builtin_arm_mve_veorq_u8: {
7297 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7298 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 1));
7299 return Builder.CreateXor(LHS: Val0, RHS: Val1);
7300}
7301case ARM::BI__builtin_arm_mve_vmovlbq_s8:
7302case ARM::BI__builtin_arm_mve_vmovlbq_u8:
7303case ARM::BI__builtin_arm_mve_vmovltq_s8:
7304case ARM::BI__builtin_arm_mve_vmovltq_u8: {
7305 bool Param0;
7306 bool Param1;
7307 switch (BuiltinID) {
7308 case ARM::BI__builtin_arm_mve_vmovlbq_s8:
7309 Param0 = static_cast<bool>(0);
7310 Param1 = static_cast<bool>(0);
7311 break;
7312 case ARM::BI__builtin_arm_mve_vmovlbq_u8:
7313 Param0 = static_cast<bool>(0);
7314 Param1 = static_cast<bool>(1);
7315 break;
7316 case ARM::BI__builtin_arm_mve_vmovltq_s8:
7317 Param0 = static_cast<bool>(1);
7318 Param1 = static_cast<bool>(0);
7319 break;
7320 case ARM::BI__builtin_arm_mve_vmovltq_u8:
7321 Param0 = static_cast<bool>(1);
7322 Param1 = static_cast<bool>(1);
7323 break;
7324 }
7325 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7326 Value *Val1 = VectorUnzip(Builder, V: Val0, Odd: static_cast<bool>(Param0));
7327 llvm::Type *Val2 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
7328 return SignOrZeroExtend(Builder, V: Val1, T: Val2, Unsigned: static_cast<bool>(Param1));
7329}
7330case ARM::BI__builtin_arm_mve_vmovlbq_s16:
7331case ARM::BI__builtin_arm_mve_vmovlbq_u16:
7332case ARM::BI__builtin_arm_mve_vmovltq_s16:
7333case ARM::BI__builtin_arm_mve_vmovltq_u16: {
7334 bool Param0;
7335 bool Param1;
7336 switch (BuiltinID) {
7337 case ARM::BI__builtin_arm_mve_vmovlbq_s16:
7338 Param0 = static_cast<bool>(0);
7339 Param1 = static_cast<bool>(0);
7340 break;
7341 case ARM::BI__builtin_arm_mve_vmovlbq_u16:
7342 Param0 = static_cast<bool>(0);
7343 Param1 = static_cast<bool>(1);
7344 break;
7345 case ARM::BI__builtin_arm_mve_vmovltq_s16:
7346 Param0 = static_cast<bool>(1);
7347 Param1 = static_cast<bool>(0);
7348 break;
7349 case ARM::BI__builtin_arm_mve_vmovltq_u16:
7350 Param0 = static_cast<bool>(1);
7351 Param1 = static_cast<bool>(1);
7352 break;
7353 }
7354 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7355 Value *Val1 = VectorUnzip(Builder, V: Val0, Odd: static_cast<bool>(Param0));
7356 llvm::Type *Val2 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
7357 return SignOrZeroExtend(Builder, V: Val1, T: Val2, Unsigned: static_cast<bool>(Param1));
7358}
7359case ARM::BI__builtin_arm_mve_vclzq_s16:
7360case ARM::BI__builtin_arm_mve_vclzq_s32:
7361case ARM::BI__builtin_arm_mve_vclzq_s8:
7362case ARM::BI__builtin_arm_mve_vclzq_u16:
7363case ARM::BI__builtin_arm_mve_vclzq_u32:
7364case ARM::BI__builtin_arm_mve_vclzq_u8: {
7365 llvm::Type * Param0;
7366 switch (BuiltinID) {
7367 case ARM::BI__builtin_arm_mve_vclzq_s16:
7368 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7369 break;
7370 case ARM::BI__builtin_arm_mve_vclzq_s32:
7371 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7372 break;
7373 case ARM::BI__builtin_arm_mve_vclzq_s8:
7374 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7375 break;
7376 case ARM::BI__builtin_arm_mve_vclzq_u16:
7377 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7378 break;
7379 case ARM::BI__builtin_arm_mve_vclzq_u32:
7380 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7381 break;
7382 case ARM::BI__builtin_arm_mve_vclzq_u8:
7383 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7384 break;
7385 }
7386 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7387 Value *Val1 = llvm::ConstantInt::get(Ty: Builder.getInt1Ty(), V: static_cast<bool>(0));
7388 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::ctlz, Tys: {Param0}), Args: {Val0, Val1});
7389}
7390case ARM::BI__builtin_arm_mve_vpnot: {
7391 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7392 Value *Val1 = llvm::ConstantInt::get(Ty: Int16Ty, V: 65535);
7393 return Builder.CreateXor(LHS: Val0, RHS: Val1);
7394}
7395case ARM::BI__builtin_arm_mve_vaddlvq_p_s32:
7396case ARM::BI__builtin_arm_mve_vaddlvq_p_u32:
7397case ARM::BI__builtin_arm_mve_vaddvq_p_s16:
7398case ARM::BI__builtin_arm_mve_vaddvq_p_s32:
7399case ARM::BI__builtin_arm_mve_vaddvq_p_s8:
7400case ARM::BI__builtin_arm_mve_vaddvq_p_u16:
7401case ARM::BI__builtin_arm_mve_vaddvq_p_u32:
7402case ARM::BI__builtin_arm_mve_vaddvq_p_u8: {
7403 uint32_t Param0;
7404 llvm::Type * Param1;
7405 Intrinsic::ID Param2;
7406 llvm::Type * Param3;
7407 switch (BuiltinID) {
7408 case ARM::BI__builtin_arm_mve_vaddlvq_p_s32:
7409 Param0 = static_cast<uint32_t>(0);
7410 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7411 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv_predicated);
7412 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7413 break;
7414 case ARM::BI__builtin_arm_mve_vaddlvq_p_u32:
7415 Param0 = static_cast<uint32_t>(1);
7416 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7417 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv_predicated);
7418 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7419 break;
7420 case ARM::BI__builtin_arm_mve_vaddvq_p_s16:
7421 Param0 = static_cast<uint32_t>(0);
7422 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7423 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
7424 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7425 break;
7426 case ARM::BI__builtin_arm_mve_vaddvq_p_s32:
7427 Param0 = static_cast<uint32_t>(0);
7428 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7429 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
7430 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7431 break;
7432 case ARM::BI__builtin_arm_mve_vaddvq_p_s8:
7433 Param0 = static_cast<uint32_t>(0);
7434 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
7435 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
7436 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7437 break;
7438 case ARM::BI__builtin_arm_mve_vaddvq_p_u16:
7439 Param0 = static_cast<uint32_t>(1);
7440 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7441 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
7442 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7443 break;
7444 case ARM::BI__builtin_arm_mve_vaddvq_p_u32:
7445 Param0 = static_cast<uint32_t>(1);
7446 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7447 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
7448 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7449 break;
7450 case ARM::BI__builtin_arm_mve_vaddvq_p_u8:
7451 Param0 = static_cast<uint32_t>(1);
7452 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
7453 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
7454 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7455 break;
7456 }
7457 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7458 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7459 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
7460 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
7461 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val3});
7462 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param1}), Args: {Val0, Val1, Val4});
7463}
7464case ARM::BI__builtin_arm_mve_vcvtbq_f32_f16:
7465case ARM::BI__builtin_arm_mve_vcvttq_f32_f16: {
7466 uint32_t Param0;
7467 switch (BuiltinID) {
7468 case ARM::BI__builtin_arm_mve_vcvtbq_f32_f16:
7469 Param0 = static_cast<uint32_t>(0);
7470 break;
7471 case ARM::BI__builtin_arm_mve_vcvttq_f32_f16:
7472 Param0 = static_cast<uint32_t>(1);
7473 break;
7474 }
7475 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7476 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7477 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_widen), Args: {Val0, Val1});
7478}
7479case ARM::BI__builtin_arm_mve_vaddlvq_s32:
7480case ARM::BI__builtin_arm_mve_vaddlvq_u32:
7481case ARM::BI__builtin_arm_mve_vaddvq_s16:
7482case ARM::BI__builtin_arm_mve_vaddvq_s32:
7483case ARM::BI__builtin_arm_mve_vaddvq_s8:
7484case ARM::BI__builtin_arm_mve_vaddvq_u16:
7485case ARM::BI__builtin_arm_mve_vaddvq_u32:
7486case ARM::BI__builtin_arm_mve_vaddvq_u8: {
7487 uint32_t Param0;
7488 Intrinsic::ID Param1;
7489 llvm::Type * Param2;
7490 switch (BuiltinID) {
7491 case ARM::BI__builtin_arm_mve_vaddlvq_s32:
7492 Param0 = static_cast<uint32_t>(0);
7493 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv);
7494 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7495 break;
7496 case ARM::BI__builtin_arm_mve_vaddlvq_u32:
7497 Param0 = static_cast<uint32_t>(1);
7498 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv);
7499 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7500 break;
7501 case ARM::BI__builtin_arm_mve_vaddvq_s16:
7502 Param0 = static_cast<uint32_t>(0);
7503 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
7504 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7505 break;
7506 case ARM::BI__builtin_arm_mve_vaddvq_s32:
7507 Param0 = static_cast<uint32_t>(0);
7508 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
7509 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7510 break;
7511 case ARM::BI__builtin_arm_mve_vaddvq_s8:
7512 Param0 = static_cast<uint32_t>(0);
7513 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
7514 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7515 break;
7516 case ARM::BI__builtin_arm_mve_vaddvq_u16:
7517 Param0 = static_cast<uint32_t>(1);
7518 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
7519 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7520 break;
7521 case ARM::BI__builtin_arm_mve_vaddvq_u32:
7522 Param0 = static_cast<uint32_t>(1);
7523 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
7524 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7525 break;
7526 case ARM::BI__builtin_arm_mve_vaddvq_u8:
7527 Param0 = static_cast<uint32_t>(1);
7528 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
7529 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
7530 break;
7531 }
7532 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7533 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7534 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2}), Args: {Val0, Val1});
7535}
7536case ARM::BI__builtin_arm_mve_asrl:
7537case ARM::BI__builtin_arm_mve_lsll:
7538case ARM::BI__builtin_arm_mve_sqshll:
7539case ARM::BI__builtin_arm_mve_srshrl:
7540case ARM::BI__builtin_arm_mve_uqshll:
7541case ARM::BI__builtin_arm_mve_urshrl: {
7542 Intrinsic::ID Param0;
7543 switch (BuiltinID) {
7544 case ARM::BI__builtin_arm_mve_asrl:
7545 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_asrl);
7546 break;
7547 case ARM::BI__builtin_arm_mve_lsll:
7548 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_lsll);
7549 break;
7550 case ARM::BI__builtin_arm_mve_sqshll:
7551 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sqshll);
7552 break;
7553 case ARM::BI__builtin_arm_mve_srshrl:
7554 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_srshrl);
7555 break;
7556 case ARM::BI__builtin_arm_mve_uqshll:
7557 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_uqshll);
7558 break;
7559 case ARM::BI__builtin_arm_mve_urshrl:
7560 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_urshrl);
7561 break;
7562 }
7563 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7564 Value *Val1 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7565 Value *Val2 = Builder.CreateLShr(LHS: Val0, RHS: Val1);
7566 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
7567 Value *Val4 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
7568 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
7569 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0), Args: {Val4, Val3, Val5});
7570 Value *Val7 = Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(1));
7571 Value *Val8 = Builder.CreateIntCast(V: Val7, DestTy: Int64Ty, isSigned: false);
7572 Value *Val9 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7573 Value *Val10 = Builder.CreateShl(LHS: Val8, RHS: Val9);
7574 Value *Val11 = Builder.CreateExtractValue(Agg: Val6, Idxs: static_cast<unsigned>(0));
7575 Value *Val12 = Builder.CreateIntCast(V: Val11, DestTy: Int64Ty, isSigned: false);
7576 return Builder.CreateOr(LHS: Val10, RHS: Val12);
7577}
7578case ARM::BI__builtin_arm_mve_sqrshrl:
7579case ARM::BI__builtin_arm_mve_sqrshrl_sat48: {
7580 uint32_t Param0;
7581 switch (BuiltinID) {
7582 case ARM::BI__builtin_arm_mve_sqrshrl:
7583 Param0 = static_cast<uint32_t>(64);
7584 break;
7585 case ARM::BI__builtin_arm_mve_sqrshrl_sat48:
7586 Param0 = static_cast<uint32_t>(48);
7587 break;
7588 }
7589 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7590 Value *Val1 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7591 Value *Val2 = Builder.CreateLShr(LHS: Val0, RHS: Val1);
7592 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
7593 Value *Val4 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
7594 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
7595 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7596 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_sqrshrl), Args: {Val4, Val3, Val5, Val6});
7597 Value *Val8 = Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(1));
7598 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int64Ty, isSigned: false);
7599 Value *Val10 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7600 Value *Val11 = Builder.CreateShl(LHS: Val9, RHS: Val10);
7601 Value *Val12 = Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
7602 Value *Val13 = Builder.CreateIntCast(V: Val12, DestTy: Int64Ty, isSigned: false);
7603 return Builder.CreateOr(LHS: Val11, RHS: Val13);
7604}
7605case ARM::BI__builtin_arm_mve_uqrshll:
7606case ARM::BI__builtin_arm_mve_uqrshll_sat48: {
7607 uint32_t Param0;
7608 switch (BuiltinID) {
7609 case ARM::BI__builtin_arm_mve_uqrshll:
7610 Param0 = static_cast<uint32_t>(64);
7611 break;
7612 case ARM::BI__builtin_arm_mve_uqrshll_sat48:
7613 Param0 = static_cast<uint32_t>(48);
7614 break;
7615 }
7616 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7617 Value *Val1 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7618 Value *Val2 = Builder.CreateLShr(LHS: Val0, RHS: Val1);
7619 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
7620 Value *Val4 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
7621 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
7622 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7623 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_uqrshll), Args: {Val4, Val3, Val5, Val6});
7624 Value *Val8 = Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(1));
7625 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int64Ty, isSigned: false);
7626 Value *Val10 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7627 Value *Val11 = Builder.CreateShl(LHS: Val9, RHS: Val10);
7628 Value *Val12 = Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
7629 Value *Val13 = Builder.CreateIntCast(V: Val12, DestTy: Int64Ty, isSigned: false);
7630 return Builder.CreateOr(LHS: Val11, RHS: Val13);
7631}
7632case ARM::BI__builtin_arm_mve_vmlaldavaq_s16:
7633case ARM::BI__builtin_arm_mve_vmlaldavaq_s32:
7634case ARM::BI__builtin_arm_mve_vmlaldavaq_u16:
7635case ARM::BI__builtin_arm_mve_vmlaldavaq_u32:
7636case ARM::BI__builtin_arm_mve_vmlaldavaxq_s16:
7637case ARM::BI__builtin_arm_mve_vmlaldavaxq_s32:
7638case ARM::BI__builtin_arm_mve_vmlsldavaq_s16:
7639case ARM::BI__builtin_arm_mve_vmlsldavaq_s32:
7640case ARM::BI__builtin_arm_mve_vmlsldavaxq_s16:
7641case ARM::BI__builtin_arm_mve_vmlsldavaxq_s32:
7642case ARM::BI__builtin_arm_mve_vrmlaldavhaq_s32:
7643case ARM::BI__builtin_arm_mve_vrmlaldavhaq_u32:
7644case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_s32:
7645case ARM::BI__builtin_arm_mve_vrmlsldavhaq_s32:
7646case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_s32: {
7647 uint32_t Param0;
7648 uint32_t Param1;
7649 uint32_t Param2;
7650 Intrinsic::ID Param3;
7651 llvm::Type * Param4;
7652 switch (BuiltinID) {
7653 case ARM::BI__builtin_arm_mve_vmlaldavaq_s16:
7654 Param0 = static_cast<uint32_t>(0);
7655 Param1 = static_cast<uint32_t>(0);
7656 Param2 = static_cast<uint32_t>(0);
7657 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7658 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7659 break;
7660 case ARM::BI__builtin_arm_mve_vmlaldavaq_s32:
7661 Param0 = static_cast<uint32_t>(0);
7662 Param1 = static_cast<uint32_t>(0);
7663 Param2 = static_cast<uint32_t>(0);
7664 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7665 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7666 break;
7667 case ARM::BI__builtin_arm_mve_vmlaldavaq_u16:
7668 Param0 = static_cast<uint32_t>(1);
7669 Param1 = static_cast<uint32_t>(0);
7670 Param2 = static_cast<uint32_t>(0);
7671 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7672 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7673 break;
7674 case ARM::BI__builtin_arm_mve_vmlaldavaq_u32:
7675 Param0 = static_cast<uint32_t>(1);
7676 Param1 = static_cast<uint32_t>(0);
7677 Param2 = static_cast<uint32_t>(0);
7678 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7679 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7680 break;
7681 case ARM::BI__builtin_arm_mve_vmlaldavaxq_s16:
7682 Param0 = static_cast<uint32_t>(0);
7683 Param1 = static_cast<uint32_t>(0);
7684 Param2 = static_cast<uint32_t>(1);
7685 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7686 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7687 break;
7688 case ARM::BI__builtin_arm_mve_vmlaldavaxq_s32:
7689 Param0 = static_cast<uint32_t>(0);
7690 Param1 = static_cast<uint32_t>(0);
7691 Param2 = static_cast<uint32_t>(1);
7692 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7693 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7694 break;
7695 case ARM::BI__builtin_arm_mve_vmlsldavaq_s16:
7696 Param0 = static_cast<uint32_t>(0);
7697 Param1 = static_cast<uint32_t>(1);
7698 Param2 = static_cast<uint32_t>(0);
7699 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7700 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7701 break;
7702 case ARM::BI__builtin_arm_mve_vmlsldavaq_s32:
7703 Param0 = static_cast<uint32_t>(0);
7704 Param1 = static_cast<uint32_t>(1);
7705 Param2 = static_cast<uint32_t>(0);
7706 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7707 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7708 break;
7709 case ARM::BI__builtin_arm_mve_vmlsldavaxq_s16:
7710 Param0 = static_cast<uint32_t>(0);
7711 Param1 = static_cast<uint32_t>(1);
7712 Param2 = static_cast<uint32_t>(1);
7713 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7714 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7715 break;
7716 case ARM::BI__builtin_arm_mve_vmlsldavaxq_s32:
7717 Param0 = static_cast<uint32_t>(0);
7718 Param1 = static_cast<uint32_t>(1);
7719 Param2 = static_cast<uint32_t>(1);
7720 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
7721 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7722 break;
7723 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_s32:
7724 Param0 = static_cast<uint32_t>(0);
7725 Param1 = static_cast<uint32_t>(0);
7726 Param2 = static_cast<uint32_t>(0);
7727 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
7728 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7729 break;
7730 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_u32:
7731 Param0 = static_cast<uint32_t>(1);
7732 Param1 = static_cast<uint32_t>(0);
7733 Param2 = static_cast<uint32_t>(0);
7734 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
7735 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7736 break;
7737 case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_s32:
7738 Param0 = static_cast<uint32_t>(0);
7739 Param1 = static_cast<uint32_t>(0);
7740 Param2 = static_cast<uint32_t>(1);
7741 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
7742 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7743 break;
7744 case ARM::BI__builtin_arm_mve_vrmlsldavhaq_s32:
7745 Param0 = static_cast<uint32_t>(0);
7746 Param1 = static_cast<uint32_t>(1);
7747 Param2 = static_cast<uint32_t>(0);
7748 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
7749 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7750 break;
7751 case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_s32:
7752 Param0 = static_cast<uint32_t>(0);
7753 Param1 = static_cast<uint32_t>(1);
7754 Param2 = static_cast<uint32_t>(1);
7755 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
7756 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7757 break;
7758 }
7759 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7760 Value *Val1 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7761 Value *Val2 = Builder.CreateLShr(LHS: Val0, RHS: Val1);
7762 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
7763 Value *Val4 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
7764 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7765 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
7766 Value *Val7 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
7767 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 1));
7768 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 2));
7769 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param3, Tys: {Param4}), Args: {Val5, Val6, Val7, Val4, Val3, Val8, Val9});
7770 Value *Val11 = Builder.CreateExtractValue(Agg: Val10, Idxs: static_cast<unsigned>(1));
7771 Value *Val12 = Builder.CreateIntCast(V: Val11, DestTy: Int64Ty, isSigned: false);
7772 Value *Val13 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7773 Value *Val14 = Builder.CreateShl(LHS: Val12, RHS: Val13);
7774 Value *Val15 = Builder.CreateExtractValue(Agg: Val10, Idxs: static_cast<unsigned>(0));
7775 Value *Val16 = Builder.CreateIntCast(V: Val15, DestTy: Int64Ty, isSigned: false);
7776 return Builder.CreateOr(LHS: Val14, RHS: Val16);
7777}
7778case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s16:
7779case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s32:
7780case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u16:
7781case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u32:
7782case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s16:
7783case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s32:
7784case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s16:
7785case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s32:
7786case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s16:
7787case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s32:
7788case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_s32:
7789case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_u32:
7790case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_p_s32:
7791case ARM::BI__builtin_arm_mve_vrmlsldavhaq_p_s32:
7792case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_p_s32: {
7793 uint32_t Param0;
7794 uint32_t Param1;
7795 uint32_t Param2;
7796 llvm::Type * Param3;
7797 Intrinsic::ID Param4;
7798 llvm::Type * Param5;
7799 switch (BuiltinID) {
7800 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s16:
7801 Param0 = static_cast<uint32_t>(0);
7802 Param1 = static_cast<uint32_t>(0);
7803 Param2 = static_cast<uint32_t>(0);
7804 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7805 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7806 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7807 break;
7808 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s32:
7809 Param0 = static_cast<uint32_t>(0);
7810 Param1 = static_cast<uint32_t>(0);
7811 Param2 = static_cast<uint32_t>(0);
7812 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7813 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7814 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7815 break;
7816 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u16:
7817 Param0 = static_cast<uint32_t>(1);
7818 Param1 = static_cast<uint32_t>(0);
7819 Param2 = static_cast<uint32_t>(0);
7820 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7821 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7822 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7823 break;
7824 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u32:
7825 Param0 = static_cast<uint32_t>(1);
7826 Param1 = static_cast<uint32_t>(0);
7827 Param2 = static_cast<uint32_t>(0);
7828 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7829 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7830 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7831 break;
7832 case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s16:
7833 Param0 = static_cast<uint32_t>(0);
7834 Param1 = static_cast<uint32_t>(0);
7835 Param2 = static_cast<uint32_t>(1);
7836 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7837 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7838 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7839 break;
7840 case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s32:
7841 Param0 = static_cast<uint32_t>(0);
7842 Param1 = static_cast<uint32_t>(0);
7843 Param2 = static_cast<uint32_t>(1);
7844 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7845 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7846 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7847 break;
7848 case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s16:
7849 Param0 = static_cast<uint32_t>(0);
7850 Param1 = static_cast<uint32_t>(1);
7851 Param2 = static_cast<uint32_t>(0);
7852 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7853 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7854 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7855 break;
7856 case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s32:
7857 Param0 = static_cast<uint32_t>(0);
7858 Param1 = static_cast<uint32_t>(1);
7859 Param2 = static_cast<uint32_t>(0);
7860 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7861 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7862 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7863 break;
7864 case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s16:
7865 Param0 = static_cast<uint32_t>(0);
7866 Param1 = static_cast<uint32_t>(1);
7867 Param2 = static_cast<uint32_t>(1);
7868 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
7869 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7870 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
7871 break;
7872 case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s32:
7873 Param0 = static_cast<uint32_t>(0);
7874 Param1 = static_cast<uint32_t>(1);
7875 Param2 = static_cast<uint32_t>(1);
7876 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7877 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
7878 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7879 break;
7880 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_s32:
7881 Param0 = static_cast<uint32_t>(0);
7882 Param1 = static_cast<uint32_t>(0);
7883 Param2 = static_cast<uint32_t>(0);
7884 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7885 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
7886 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7887 break;
7888 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_u32:
7889 Param0 = static_cast<uint32_t>(1);
7890 Param1 = static_cast<uint32_t>(0);
7891 Param2 = static_cast<uint32_t>(0);
7892 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7893 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
7894 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7895 break;
7896 case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_p_s32:
7897 Param0 = static_cast<uint32_t>(0);
7898 Param1 = static_cast<uint32_t>(0);
7899 Param2 = static_cast<uint32_t>(1);
7900 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7901 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
7902 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7903 break;
7904 case ARM::BI__builtin_arm_mve_vrmlsldavhaq_p_s32:
7905 Param0 = static_cast<uint32_t>(0);
7906 Param1 = static_cast<uint32_t>(1);
7907 Param2 = static_cast<uint32_t>(0);
7908 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7909 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
7910 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7911 break;
7912 case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_p_s32:
7913 Param0 = static_cast<uint32_t>(0);
7914 Param1 = static_cast<uint32_t>(1);
7915 Param2 = static_cast<uint32_t>(1);
7916 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
7917 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
7918 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
7919 break;
7920 }
7921 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7922 Value *Val1 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7923 Value *Val2 = Builder.CreateLShr(LHS: Val0, RHS: Val1);
7924 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
7925 Value *Val4 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
7926 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
7927 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
7928 Value *Val7 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
7929 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 1));
7930 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 2));
7931 Value *Val10 = EmitScalarExpr(E: E->getArg(Arg: 3));
7932 Value *Val11 = Builder.CreateIntCast(V: Val10, DestTy: Int32Ty, isSigned: false);
7933 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val11});
7934 Value *Val13 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param4, Tys: {Param5, Param3}), Args: {Val5, Val6, Val7, Val4, Val3, Val8, Val9, Val12});
7935 Value *Val14 = Builder.CreateExtractValue(Agg: Val13, Idxs: static_cast<unsigned>(1));
7936 Value *Val15 = Builder.CreateIntCast(V: Val14, DestTy: Int64Ty, isSigned: false);
7937 Value *Val16 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
7938 Value *Val17 = Builder.CreateShl(LHS: Val15, RHS: Val16);
7939 Value *Val18 = Builder.CreateExtractValue(Agg: Val13, Idxs: static_cast<unsigned>(0));
7940 Value *Val19 = Builder.CreateIntCast(V: Val18, DestTy: Int64Ty, isSigned: false);
7941 return Builder.CreateOr(LHS: Val17, RHS: Val19);
7942}
7943case ARM::BI__builtin_arm_mve_vcvtq_f32_s32: {
7944 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7945 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
7946 return !Builder.getIsFPConstrained() ? Builder.CreateSIToFP(V: Val0, DestTy: Val1) : ARMMVECreateSIToFP(Builder, CGF: this, V: Val0, Ty: Val1);
7947}
7948case ARM::BI__builtin_arm_mve_vcvtq_f32_u32: {
7949 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7950 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
7951 return !Builder.getIsFPConstrained() ? Builder.CreateUIToFP(V: Val0, DestTy: Val1) : ARMMVECreateUIToFP(Builder, CGF: this, V: Val0, Ty: Val1);
7952}
7953case ARM::BI__builtin_arm_mve_vreinterpretq_f32_f16:
7954case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s16:
7955case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s32:
7956case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s64:
7957case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s8:
7958case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u16:
7959case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u32:
7960case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u64:
7961case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u8: {
7962 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7963 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
7964 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
7965}
7966case ARM::BI__builtin_arm_mve_vcvtq_f16_s16: {
7967 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7968 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
7969 return !Builder.getIsFPConstrained() ? Builder.CreateSIToFP(V: Val0, DestTy: Val1) : ARMMVECreateSIToFP(Builder, CGF: this, V: Val0, Ty: Val1);
7970}
7971case ARM::BI__builtin_arm_mve_vcvtq_f16_u16: {
7972 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7973 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
7974 return !Builder.getIsFPConstrained() ? Builder.CreateUIToFP(V: Val0, DestTy: Val1) : ARMMVECreateUIToFP(Builder, CGF: this, V: Val0, Ty: Val1);
7975}
7976case ARM::BI__builtin_arm_mve_vreinterpretq_f16_f32:
7977case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s16:
7978case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s32:
7979case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s64:
7980case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s8:
7981case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u16:
7982case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u32:
7983case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u64:
7984case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u8: {
7985 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7986 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
7987 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
7988}
7989case ARM::BI__builtin_arm_mve_vqnegq_s16: {
7990 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
7991 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
7992 Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, VT: Val1);
7993 Value *Val3 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val2);
7994 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
7995 Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, VT: Val4);
7996 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
7997 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
7998 Value *Val8 = Builder.CreateSub(LHS: Val7, RHS: Val0);
7999 return Builder.CreateSelect(C: Val3, True: Val5, False: Val8);
8000}
8001case ARM::BI__builtin_arm_mve_vmvnq_s16:
8002case ARM::BI__builtin_arm_mve_vmvnq_u16: {
8003 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8004 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8005 Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, VT: Val1);
8006 return Builder.CreateXor(LHS: Val0, RHS: Val2);
8007}
8008case ARM::BI__builtin_arm_mve_vmovntq_s16:
8009case ARM::BI__builtin_arm_mve_vmovntq_u16: {
8010 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8011 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8012 Value *Val2 = ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
8013 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8014 Value *Val4 = VectorZip(Builder, V0: Val2, V1: Val3);
8015 llvm::Type *Val5 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8016 return Builder.CreateTrunc(V: Val4, DestTy: Val5);
8017}
8018case ARM::BI__builtin_arm_mve_vandq_f16: {
8019 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8020 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8021 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8022 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8023 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8024 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8025 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
8026 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
8027 return Builder.CreateBitCast(V: Val6, DestTy: Val7);
8028}
8029case ARM::BI__builtin_arm_mve_vbicq_f16: {
8030 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8031 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8032 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8033 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8034 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8035 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8036 Value *Val6 = Builder.CreateNot(V: Val5);
8037 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
8038 llvm::Type *Val8 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
8039 return Builder.CreateBitCast(V: Val7, DestTy: Val8);
8040}
8041case ARM::BI__builtin_arm_mve_vornq_f16: {
8042 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8043 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8044 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8045 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8046 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8047 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8048 Value *Val6 = Builder.CreateNot(V: Val5);
8049 Value *Val7 = Builder.CreateOr(LHS: Val2, RHS: Val6);
8050 llvm::Type *Val8 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
8051 return Builder.CreateBitCast(V: Val7, DestTy: Val8);
8052}
8053case ARM::BI__builtin_arm_mve_vorrq_f16: {
8054 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8055 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8056 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8057 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8058 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8059 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8060 Value *Val6 = Builder.CreateOr(LHS: Val2, RHS: Val5);
8061 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
8062 return Builder.CreateBitCast(V: Val6, DestTy: Val7);
8063}
8064case ARM::BI__builtin_arm_mve_veorq_f16: {
8065 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8066 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8067 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8068 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8069 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8070 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8071 Value *Val6 = Builder.CreateXor(LHS: Val2, RHS: Val5);
8072 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
8073 return Builder.CreateBitCast(V: Val6, DestTy: Val7);
8074}
8075case ARM::BI__builtin_arm_mve_vqabsq_s16: {
8076 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8077 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8078 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
8079 Value *Val3 = Builder.CreateICmpSGT(LHS: Val0, RHS: Val2);
8080 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8081 Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, VT: Val4);
8082 Value *Val6 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val5);
8083 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8084 Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, VT: Val7);
8085 llvm::Type *Val9 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8086 Value *Val10 = llvm::Constant::getNullValue(Ty: Val9);
8087 Value *Val11 = Builder.CreateSub(LHS: Val10, RHS: Val0);
8088 Value *Val12 = Builder.CreateSelect(C: Val6, True: Val8, False: Val11);
8089 return Builder.CreateSelect(C: Val3, True: Val0, False: Val12);
8090}
8091case ARM::BI__builtin_arm_mve_vabsq_s16: {
8092 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8093 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8094 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
8095 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
8096 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8097 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
8098 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
8099 return Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
8100}
8101case ARM::BI__builtin_arm_mve_vcvtq_s16_f16: {
8102 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8103 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8104 return !Builder.getIsFPConstrained() ? Builder.CreateFPToSI(V: Val0, DestTy: Val1) : ARMMVECreateFPToSI(Builder, CGF: this, V: Val0, Ty: Val1);
8105}
8106case ARM::BI__builtin_arm_mve_vcvtq_u16_f16: {
8107 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8108 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8109 return !Builder.getIsFPConstrained() ? Builder.CreateFPToUI(V: Val0, DestTy: Val1) : ARMMVECreateFPToUI(Builder, CGF: this, V: Val0, Ty: Val1);
8110}
8111case ARM::BI__builtin_arm_mve_vreinterpretq_s16_f16:
8112case ARM::BI__builtin_arm_mve_vreinterpretq_s16_f32:
8113case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s32:
8114case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s64:
8115case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s8:
8116case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u16:
8117case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u32:
8118case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u64:
8119case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u8:
8120case ARM::BI__builtin_arm_mve_vreinterpretq_u16_f16:
8121case ARM::BI__builtin_arm_mve_vreinterpretq_u16_f32:
8122case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s16:
8123case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s32:
8124case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s64:
8125case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s8:
8126case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u32:
8127case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u64:
8128case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u8: {
8129 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8130 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8131 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
8132}
8133case ARM::BI__builtin_arm_mve_vqnegq_s32: {
8134 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8135 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8136 Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, VT: Val1);
8137 Value *Val3 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val2);
8138 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8139 Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, VT: Val4);
8140 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8141 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
8142 Value *Val8 = Builder.CreateSub(LHS: Val7, RHS: Val0);
8143 return Builder.CreateSelect(C: Val3, True: Val5, False: Val8);
8144}
8145case ARM::BI__builtin_arm_mve_vmvnq_s32:
8146case ARM::BI__builtin_arm_mve_vmvnq_u32: {
8147 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8148 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8149 Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, VT: Val1);
8150 return Builder.CreateXor(LHS: Val0, RHS: Val2);
8151}
8152case ARM::BI__builtin_arm_mve_vmovntq_s32:
8153case ARM::BI__builtin_arm_mve_vmovntq_u32: {
8154 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8155 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8156 Value *Val2 = ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
8157 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8158 Value *Val4 = VectorZip(Builder, V0: Val2, V1: Val3);
8159 llvm::Type *Val5 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8160 return Builder.CreateTrunc(V: Val4, DestTy: Val5);
8161}
8162case ARM::BI__builtin_arm_mve_vandq_f32: {
8163 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8164 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8165 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8166 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8167 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8168 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8169 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
8170 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
8171 return Builder.CreateBitCast(V: Val6, DestTy: Val7);
8172}
8173case ARM::BI__builtin_arm_mve_vbicq_f32: {
8174 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8175 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8176 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8177 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8178 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8179 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8180 Value *Val6 = Builder.CreateNot(V: Val5);
8181 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
8182 llvm::Type *Val8 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
8183 return Builder.CreateBitCast(V: Val7, DestTy: Val8);
8184}
8185case ARM::BI__builtin_arm_mve_vornq_f32: {
8186 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8187 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8188 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8189 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8190 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8191 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8192 Value *Val6 = Builder.CreateNot(V: Val5);
8193 Value *Val7 = Builder.CreateOr(LHS: Val2, RHS: Val6);
8194 llvm::Type *Val8 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
8195 return Builder.CreateBitCast(V: Val7, DestTy: Val8);
8196}
8197case ARM::BI__builtin_arm_mve_vorrq_f32: {
8198 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8199 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8200 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8201 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8202 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8203 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8204 Value *Val6 = Builder.CreateOr(LHS: Val2, RHS: Val5);
8205 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
8206 return Builder.CreateBitCast(V: Val6, DestTy: Val7);
8207}
8208case ARM::BI__builtin_arm_mve_veorq_f32: {
8209 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8210 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8211 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
8212 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
8213 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8214 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
8215 Value *Val6 = Builder.CreateXor(LHS: Val2, RHS: Val5);
8216 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
8217 return Builder.CreateBitCast(V: Val6, DestTy: Val7);
8218}
8219case ARM::BI__builtin_arm_mve_vqabsq_s32: {
8220 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8221 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8222 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
8223 Value *Val3 = Builder.CreateICmpSGT(LHS: Val0, RHS: Val2);
8224 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8225 Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, VT: Val4);
8226 Value *Val6 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val5);
8227 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8228 Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, VT: Val7);
8229 llvm::Type *Val9 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8230 Value *Val10 = llvm::Constant::getNullValue(Ty: Val9);
8231 Value *Val11 = Builder.CreateSub(LHS: Val10, RHS: Val0);
8232 Value *Val12 = Builder.CreateSelect(C: Val6, True: Val8, False: Val11);
8233 return Builder.CreateSelect(C: Val3, True: Val0, False: Val12);
8234}
8235case ARM::BI__builtin_arm_mve_vabsq_s32: {
8236 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8237 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8238 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
8239 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
8240 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8241 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
8242 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
8243 return Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
8244}
8245case ARM::BI__builtin_arm_mve_vcvtq_s32_f32: {
8246 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8247 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8248 return !Builder.getIsFPConstrained() ? Builder.CreateFPToSI(V: Val0, DestTy: Val1) : ARMMVECreateFPToSI(Builder, CGF: this, V: Val0, Ty: Val1);
8249}
8250case ARM::BI__builtin_arm_mve_vcvtq_u32_f32: {
8251 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8252 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8253 return !Builder.getIsFPConstrained() ? Builder.CreateFPToUI(V: Val0, DestTy: Val1) : ARMMVECreateFPToUI(Builder, CGF: this, V: Val0, Ty: Val1);
8254}
8255case ARM::BI__builtin_arm_mve_vreinterpretq_s32_f16:
8256case ARM::BI__builtin_arm_mve_vreinterpretq_s32_f32:
8257case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s16:
8258case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s64:
8259case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s8:
8260case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u16:
8261case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u32:
8262case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u64:
8263case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u8:
8264case ARM::BI__builtin_arm_mve_vreinterpretq_u32_f16:
8265case ARM::BI__builtin_arm_mve_vreinterpretq_u32_f32:
8266case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s16:
8267case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s32:
8268case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s64:
8269case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s8:
8270case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u16:
8271case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u64:
8272case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u8: {
8273 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8274 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8275 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
8276}
8277case ARM::BI__builtin_arm_mve_vreinterpretq_s64_f16:
8278case ARM::BI__builtin_arm_mve_vreinterpretq_s64_f32:
8279case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s16:
8280case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s32:
8281case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s8:
8282case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u16:
8283case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u32:
8284case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u64:
8285case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u8:
8286case ARM::BI__builtin_arm_mve_vreinterpretq_u64_f16:
8287case ARM::BI__builtin_arm_mve_vreinterpretq_u64_f32:
8288case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s16:
8289case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s32:
8290case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s64:
8291case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s8:
8292case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u16:
8293case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u32:
8294case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u8: {
8295 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8296 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
8297 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
8298}
8299case ARM::BI__builtin_arm_mve_vqnegq_s8: {
8300 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8301 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8302 Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, VT: Val1);
8303 Value *Val3 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val2);
8304 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8305 Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, VT: Val4);
8306 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8307 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
8308 Value *Val8 = Builder.CreateSub(LHS: Val7, RHS: Val0);
8309 return Builder.CreateSelect(C: Val3, True: Val5, False: Val8);
8310}
8311case ARM::BI__builtin_arm_mve_vmvnq_s8:
8312case ARM::BI__builtin_arm_mve_vmvnq_u8: {
8313 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8314 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8315 Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, VT: Val1);
8316 return Builder.CreateXor(LHS: Val0, RHS: Val2);
8317}
8318case ARM::BI__builtin_arm_mve_vqabsq_s8: {
8319 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8320 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8321 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
8322 Value *Val3 = Builder.CreateICmpSGT(LHS: Val0, RHS: Val2);
8323 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8324 Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, VT: Val4);
8325 Value *Val6 = Builder.CreateICmpEQ(LHS: Val0, RHS: Val5);
8326 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8327 Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, VT: Val7);
8328 llvm::Type *Val9 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8329 Value *Val10 = llvm::Constant::getNullValue(Ty: Val9);
8330 Value *Val11 = Builder.CreateSub(LHS: Val10, RHS: Val0);
8331 Value *Val12 = Builder.CreateSelect(C: Val6, True: Val8, False: Val11);
8332 return Builder.CreateSelect(C: Val3, True: Val0, False: Val12);
8333}
8334case ARM::BI__builtin_arm_mve_vabsq_s8: {
8335 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8336 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8337 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
8338 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
8339 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8340 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
8341 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
8342 return Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
8343}
8344case ARM::BI__builtin_arm_mve_vreinterpretq_s8_f16:
8345case ARM::BI__builtin_arm_mve_vreinterpretq_s8_f32:
8346case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s16:
8347case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s32:
8348case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s64:
8349case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u16:
8350case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u32:
8351case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u64:
8352case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u8:
8353case ARM::BI__builtin_arm_mve_vreinterpretq_u8_f16:
8354case ARM::BI__builtin_arm_mve_vreinterpretq_u8_f32:
8355case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s16:
8356case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s32:
8357case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s64:
8358case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s8:
8359case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u16:
8360case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u32:
8361case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u64: {
8362 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8363 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8364 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val0, DestType: Val1);
8365}
8366case ARM::BI__builtin_arm_mve_vrndaq_f16:
8367case ARM::BI__builtin_arm_mve_vrndaq_f32:
8368case ARM::BI__builtin_arm_mve_vrndmq_f16:
8369case ARM::BI__builtin_arm_mve_vrndmq_f32:
8370case ARM::BI__builtin_arm_mve_vrndnq_f16:
8371case ARM::BI__builtin_arm_mve_vrndnq_f32:
8372case ARM::BI__builtin_arm_mve_vrndpq_f16:
8373case ARM::BI__builtin_arm_mve_vrndpq_f32:
8374case ARM::BI__builtin_arm_mve_vrndq_f16:
8375case ARM::BI__builtin_arm_mve_vrndq_f32:
8376case ARM::BI__builtin_arm_mve_vrndxq_f16:
8377case ARM::BI__builtin_arm_mve_vrndxq_f32: {
8378 Intrinsic::ID Param0;
8379 llvm::Type * Param1;
8380 Intrinsic::ID Param2;
8381 switch (BuiltinID) {
8382 case ARM::BI__builtin_arm_mve_vrndaq_f16:
8383 Param0 = static_cast<Intrinsic::ID>(Intrinsic::round);
8384 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8385 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrinta);
8386 break;
8387 case ARM::BI__builtin_arm_mve_vrndaq_f32:
8388 Param0 = static_cast<Intrinsic::ID>(Intrinsic::round);
8389 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8390 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrinta);
8391 break;
8392 case ARM::BI__builtin_arm_mve_vrndmq_f16:
8393 Param0 = static_cast<Intrinsic::ID>(Intrinsic::floor);
8394 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8395 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintm);
8396 break;
8397 case ARM::BI__builtin_arm_mve_vrndmq_f32:
8398 Param0 = static_cast<Intrinsic::ID>(Intrinsic::floor);
8399 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8400 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintm);
8401 break;
8402 case ARM::BI__builtin_arm_mve_vrndnq_f16:
8403 Param0 = static_cast<Intrinsic::ID>(Intrinsic::roundeven);
8404 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8405 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintn);
8406 break;
8407 case ARM::BI__builtin_arm_mve_vrndnq_f32:
8408 Param0 = static_cast<Intrinsic::ID>(Intrinsic::roundeven);
8409 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8410 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintn);
8411 break;
8412 case ARM::BI__builtin_arm_mve_vrndpq_f16:
8413 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ceil);
8414 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8415 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintp);
8416 break;
8417 case ARM::BI__builtin_arm_mve_vrndpq_f32:
8418 Param0 = static_cast<Intrinsic::ID>(Intrinsic::ceil);
8419 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8420 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintp);
8421 break;
8422 case ARM::BI__builtin_arm_mve_vrndq_f16:
8423 Param0 = static_cast<Intrinsic::ID>(Intrinsic::trunc);
8424 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8425 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintz);
8426 break;
8427 case ARM::BI__builtin_arm_mve_vrndq_f32:
8428 Param0 = static_cast<Intrinsic::ID>(Intrinsic::trunc);
8429 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8430 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintz);
8431 break;
8432 case ARM::BI__builtin_arm_mve_vrndxq_f16:
8433 Param0 = static_cast<Intrinsic::ID>(Intrinsic::rint);
8434 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8435 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintx);
8436 break;
8437 case ARM::BI__builtin_arm_mve_vrndxq_f32:
8438 Param0 = static_cast<Intrinsic::ID>(Intrinsic::rint);
8439 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8440 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintx);
8441 break;
8442 }
8443 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8444 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param1}), Args: {Val0});
8445}
8446case ARM::BI__builtin_arm_mve_vrev16q_s8:
8447case ARM::BI__builtin_arm_mve_vrev16q_u8:
8448case ARM::BI__builtin_arm_mve_vrev32q_f16:
8449case ARM::BI__builtin_arm_mve_vrev32q_s16:
8450case ARM::BI__builtin_arm_mve_vrev32q_s8:
8451case ARM::BI__builtin_arm_mve_vrev32q_u16:
8452case ARM::BI__builtin_arm_mve_vrev32q_u8:
8453case ARM::BI__builtin_arm_mve_vrev64q_f16:
8454case ARM::BI__builtin_arm_mve_vrev64q_f32:
8455case ARM::BI__builtin_arm_mve_vrev64q_s16:
8456case ARM::BI__builtin_arm_mve_vrev64q_s32:
8457case ARM::BI__builtin_arm_mve_vrev64q_s8:
8458case ARM::BI__builtin_arm_mve_vrev64q_u16:
8459case ARM::BI__builtin_arm_mve_vrev64q_u32:
8460case ARM::BI__builtin_arm_mve_vrev64q_u8: {
8461 unsigned Param0;
8462 switch (BuiltinID) {
8463 case ARM::BI__builtin_arm_mve_vrev16q_s8:
8464 Param0 = static_cast<unsigned>(16);
8465 break;
8466 case ARM::BI__builtin_arm_mve_vrev16q_u8:
8467 Param0 = static_cast<unsigned>(16);
8468 break;
8469 case ARM::BI__builtin_arm_mve_vrev32q_f16:
8470 Param0 = static_cast<unsigned>(32);
8471 break;
8472 case ARM::BI__builtin_arm_mve_vrev32q_s16:
8473 Param0 = static_cast<unsigned>(32);
8474 break;
8475 case ARM::BI__builtin_arm_mve_vrev32q_s8:
8476 Param0 = static_cast<unsigned>(32);
8477 break;
8478 case ARM::BI__builtin_arm_mve_vrev32q_u16:
8479 Param0 = static_cast<unsigned>(32);
8480 break;
8481 case ARM::BI__builtin_arm_mve_vrev32q_u8:
8482 Param0 = static_cast<unsigned>(32);
8483 break;
8484 case ARM::BI__builtin_arm_mve_vrev64q_f16:
8485 Param0 = static_cast<unsigned>(64);
8486 break;
8487 case ARM::BI__builtin_arm_mve_vrev64q_f32:
8488 Param0 = static_cast<unsigned>(64);
8489 break;
8490 case ARM::BI__builtin_arm_mve_vrev64q_s16:
8491 Param0 = static_cast<unsigned>(64);
8492 break;
8493 case ARM::BI__builtin_arm_mve_vrev64q_s32:
8494 Param0 = static_cast<unsigned>(64);
8495 break;
8496 case ARM::BI__builtin_arm_mve_vrev64q_s8:
8497 Param0 = static_cast<unsigned>(64);
8498 break;
8499 case ARM::BI__builtin_arm_mve_vrev64q_u16:
8500 Param0 = static_cast<unsigned>(64);
8501 break;
8502 case ARM::BI__builtin_arm_mve_vrev64q_u32:
8503 Param0 = static_cast<unsigned>(64);
8504 break;
8505 case ARM::BI__builtin_arm_mve_vrev64q_u8:
8506 Param0 = static_cast<unsigned>(64);
8507 break;
8508 }
8509 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8510 return ARMMVEVectorElementReverse(Builder, V: Val0, ReverseWidth: static_cast<unsigned>(Param0));
8511}
8512case ARM::BI__builtin_arm_mve_vdupq_n_f16:
8513case ARM::BI__builtin_arm_mve_vdupq_n_f32:
8514case ARM::BI__builtin_arm_mve_vdupq_n_s16:
8515case ARM::BI__builtin_arm_mve_vdupq_n_s32:
8516case ARM::BI__builtin_arm_mve_vdupq_n_s8:
8517case ARM::BI__builtin_arm_mve_vdupq_n_u16:
8518case ARM::BI__builtin_arm_mve_vdupq_n_u32:
8519case ARM::BI__builtin_arm_mve_vdupq_n_u8: {
8520 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8521 return ARMMVEVectorSplat(Builder, V: Val0);
8522}
8523case ARM::BI__builtin_arm_mve_vabsq_f16:
8524case ARM::BI__builtin_arm_mve_vabsq_f32:
8525case ARM::BI__builtin_arm_mve_vclsq_s16:
8526case ARM::BI__builtin_arm_mve_vclsq_s32:
8527case ARM::BI__builtin_arm_mve_vclsq_s8: {
8528 Intrinsic::ID Param0;
8529 llvm::Type * Param1;
8530 switch (BuiltinID) {
8531 case ARM::BI__builtin_arm_mve_vabsq_f16:
8532 Param0 = static_cast<Intrinsic::ID>(Intrinsic::fabs);
8533 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8534 break;
8535 case ARM::BI__builtin_arm_mve_vabsq_f32:
8536 Param0 = static_cast<Intrinsic::ID>(Intrinsic::fabs);
8537 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8538 break;
8539 case ARM::BI__builtin_arm_mve_vclsq_s16:
8540 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcls);
8541 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8542 break;
8543 case ARM::BI__builtin_arm_mve_vclsq_s32:
8544 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcls);
8545 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8546 break;
8547 case ARM::BI__builtin_arm_mve_vclsq_s8:
8548 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcls);
8549 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8550 break;
8551 }
8552 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8553 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {Param1}), Args: {Val0});
8554}
8555case ARM::BI__builtin_arm_mve_vnegq_f16:
8556case ARM::BI__builtin_arm_mve_vnegq_f32: {
8557 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8558 return Builder.CreateFNeg(V: Val0);
8559}
8560case ARM::BI__builtin_arm_mve_vshrq_n_s16:
8561case ARM::BI__builtin_arm_mve_vshrq_n_s32:
8562case ARM::BI__builtin_arm_mve_vshrq_n_s8:
8563case ARM::BI__builtin_arm_mve_vshrq_n_u16:
8564case ARM::BI__builtin_arm_mve_vshrq_n_u32:
8565case ARM::BI__builtin_arm_mve_vshrq_n_u8: {
8566 bool Param0;
8567 switch (BuiltinID) {
8568 case ARM::BI__builtin_arm_mve_vshrq_n_s16:
8569 Param0 = static_cast<bool>(0);
8570 break;
8571 case ARM::BI__builtin_arm_mve_vshrq_n_s32:
8572 Param0 = static_cast<bool>(0);
8573 break;
8574 case ARM::BI__builtin_arm_mve_vshrq_n_s8:
8575 Param0 = static_cast<bool>(0);
8576 break;
8577 case ARM::BI__builtin_arm_mve_vshrq_n_u16:
8578 Param0 = static_cast<bool>(1);
8579 break;
8580 case ARM::BI__builtin_arm_mve_vshrq_n_u32:
8581 Param0 = static_cast<bool>(1);
8582 break;
8583 case ARM::BI__builtin_arm_mve_vshrq_n_u8:
8584 Param0 = static_cast<bool>(1);
8585 break;
8586 }
8587 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 0));
8588 return MVEImmediateShr(Builder, V: Val0, Shift: GetIntegerConstantValue<unsigned>(E: E->getArg(Arg: 1), Context&: getContext()), Unsigned: static_cast<bool>(Param0));
8589}
8590case ARM::BI__builtin_arm_mve_vst1q_f32:
8591case ARM::BI__builtin_arm_mve_vstrwq_f32: {
8592 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8593 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
8594 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
8595 Address Val3 = Address(Val2, llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), CharUnits::fromQuantity(Quantity: 4));
8596 return Builder.CreateStore(Val: Val0, Addr: Val3);
8597}
8598case ARM::BI__builtin_arm_mve_vst1q_f16:
8599case ARM::BI__builtin_arm_mve_vstrhq_f16: {
8600 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8601 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
8602 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
8603 Address Val3 = Address(Val2, llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), CharUnits::fromQuantity(Quantity: 2));
8604 return Builder.CreateStore(Val: Val0, Addr: Val3);
8605}
8606case ARM::BI__builtin_arm_mve_vst1q_s16:
8607case ARM::BI__builtin_arm_mve_vst1q_u16:
8608case ARM::BI__builtin_arm_mve_vstrhq_s16:
8609case ARM::BI__builtin_arm_mve_vstrhq_u16: {
8610 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8611 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
8612 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
8613 Address Val3 = Address(Val2, llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), CharUnits::fromQuantity(Quantity: 2));
8614 return Builder.CreateStore(Val: Val0, Addr: Val3);
8615}
8616case ARM::BI__builtin_arm_mve_vst1q_s32:
8617case ARM::BI__builtin_arm_mve_vst1q_u32:
8618case ARM::BI__builtin_arm_mve_vstrwq_s32:
8619case ARM::BI__builtin_arm_mve_vstrwq_u32: {
8620 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8621 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
8622 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
8623 Address Val3 = Address(Val2, llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), CharUnits::fromQuantity(Quantity: 4));
8624 return Builder.CreateStore(Val: Val0, Addr: Val3);
8625}
8626case ARM::BI__builtin_arm_mve_vst1q_s8:
8627case ARM::BI__builtin_arm_mve_vst1q_u8:
8628case ARM::BI__builtin_arm_mve_vstrbq_s8:
8629case ARM::BI__builtin_arm_mve_vstrbq_u8: {
8630 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8631 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
8632 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
8633 Address Val3 = Address(Val2, llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), CharUnits::fromQuantity(Quantity: 1));
8634 return Builder.CreateStore(Val: Val0, Addr: Val3);
8635}
8636case ARM::BI__builtin_arm_mve_vst1q_p_f16:
8637case ARM::BI__builtin_arm_mve_vst1q_p_f32:
8638case ARM::BI__builtin_arm_mve_vst1q_p_s16:
8639case ARM::BI__builtin_arm_mve_vst1q_p_s32:
8640case ARM::BI__builtin_arm_mve_vst1q_p_s8:
8641case ARM::BI__builtin_arm_mve_vst1q_p_u16:
8642case ARM::BI__builtin_arm_mve_vst1q_p_u32:
8643case ARM::BI__builtin_arm_mve_vst1q_p_u8:
8644case ARM::BI__builtin_arm_mve_vstrbq_p_s8:
8645case ARM::BI__builtin_arm_mve_vstrbq_p_u8:
8646case ARM::BI__builtin_arm_mve_vstrhq_p_f16:
8647case ARM::BI__builtin_arm_mve_vstrhq_p_s16:
8648case ARM::BI__builtin_arm_mve_vstrhq_p_u16:
8649case ARM::BI__builtin_arm_mve_vstrwq_p_f32:
8650case ARM::BI__builtin_arm_mve_vstrwq_p_s32:
8651case ARM::BI__builtin_arm_mve_vstrwq_p_u32: {
8652 llvm::Type * Param0;
8653 Align Param1;
8654 switch (BuiltinID) {
8655 case ARM::BI__builtin_arm_mve_vst1q_p_f16:
8656 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8657 Param1 = static_cast<Align>(2);
8658 break;
8659 case ARM::BI__builtin_arm_mve_vst1q_p_f32:
8660 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8661 Param1 = static_cast<Align>(4);
8662 break;
8663 case ARM::BI__builtin_arm_mve_vst1q_p_s16:
8664 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8665 Param1 = static_cast<Align>(2);
8666 break;
8667 case ARM::BI__builtin_arm_mve_vst1q_p_s32:
8668 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8669 Param1 = static_cast<Align>(4);
8670 break;
8671 case ARM::BI__builtin_arm_mve_vst1q_p_s8:
8672 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8673 Param1 = static_cast<Align>(1);
8674 break;
8675 case ARM::BI__builtin_arm_mve_vst1q_p_u16:
8676 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8677 Param1 = static_cast<Align>(2);
8678 break;
8679 case ARM::BI__builtin_arm_mve_vst1q_p_u32:
8680 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8681 Param1 = static_cast<Align>(4);
8682 break;
8683 case ARM::BI__builtin_arm_mve_vst1q_p_u8:
8684 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8685 Param1 = static_cast<Align>(1);
8686 break;
8687 case ARM::BI__builtin_arm_mve_vstrbq_p_s8:
8688 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8689 Param1 = static_cast<Align>(1);
8690 break;
8691 case ARM::BI__builtin_arm_mve_vstrbq_p_u8:
8692 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8693 Param1 = static_cast<Align>(1);
8694 break;
8695 case ARM::BI__builtin_arm_mve_vstrhq_p_f16:
8696 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8697 Param1 = static_cast<Align>(2);
8698 break;
8699 case ARM::BI__builtin_arm_mve_vstrhq_p_s16:
8700 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8701 Param1 = static_cast<Align>(2);
8702 break;
8703 case ARM::BI__builtin_arm_mve_vstrhq_p_u16:
8704 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8705 Param1 = static_cast<Align>(2);
8706 break;
8707 case ARM::BI__builtin_arm_mve_vstrwq_p_f32:
8708 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8709 Param1 = static_cast<Align>(4);
8710 break;
8711 case ARM::BI__builtin_arm_mve_vstrwq_p_s32:
8712 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8713 Param1 = static_cast<Align>(4);
8714 break;
8715 case ARM::BI__builtin_arm_mve_vstrwq_p_u32:
8716 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8717 Param1 = static_cast<Align>(4);
8718 break;
8719 }
8720 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8721 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
8722 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
8723 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
8724 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
8725 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
8726 return Builder.CreateMaskedStore(Val: Val0, Ptr: Val2, Alignment: static_cast<Align>(Param1), Mask: Val5);
8727}
8728case ARM::BI__builtin_arm_mve_vctp16q_m:
8729case ARM::BI__builtin_arm_mve_vctp32q_m:
8730case ARM::BI__builtin_arm_mve_vctp64q_m:
8731case ARM::BI__builtin_arm_mve_vctp8q_m: {
8732 llvm::Type * Param0;
8733 Intrinsic::ID Param1;
8734 switch (BuiltinID) {
8735 case ARM::BI__builtin_arm_mve_vctp16q_m:
8736 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8737 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp16);
8738 break;
8739 case ARM::BI__builtin_arm_mve_vctp32q_m:
8740 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8741 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp32);
8742 break;
8743 case ARM::BI__builtin_arm_mve_vctp64q_m:
8744 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
8745 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp64);
8746 break;
8747 case ARM::BI__builtin_arm_mve_vctp8q_m:
8748 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8749 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vctp8);
8750 break;
8751 }
8752 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8753 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
8754 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
8755 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
8756 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1), Args: {Val3});
8757 Value *Val5 = Builder.CreateAnd(LHS: Val2, RHS: Val4);
8758 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val5});
8759 return Builder.CreateIntCast(V: Val6, DestTy: Int16Ty, isSigned: false);
8760}
8761case ARM::BI__builtin_arm_mve_vmovnbq_s16:
8762case ARM::BI__builtin_arm_mve_vmovnbq_u16: {
8763 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8764 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
8765 Value *Val2 = ARMMVEVectorElementReverse(Builder, V: Val1, ReverseWidth: static_cast<unsigned>(16));
8766 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8767 Value *Val4 = ARMMVEVectorReinterpret(Builder, CGF: this, V: Val2, DestType: Val3);
8768 Value *Val5 = VectorZip(Builder, V0: Val0, V1: Val4);
8769 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
8770 return Builder.CreateTrunc(V: Val5, DestTy: Val6);
8771}
8772case ARM::BI__builtin_arm_mve_vmovnbq_s32:
8773case ARM::BI__builtin_arm_mve_vmovnbq_u32: {
8774 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8775 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
8776 Value *Val2 = ARMMVEVectorElementReverse(Builder, V: Val1, ReverseWidth: static_cast<unsigned>(32));
8777 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
8778 Value *Val4 = ARMMVEVectorReinterpret(Builder, CGF: this, V: Val2, DestType: Val3);
8779 Value *Val5 = VectorZip(Builder, V0: Val0, V1: Val4);
8780 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
8781 return Builder.CreateTrunc(V: Val5, DestTy: Val6);
8782}
8783case ARM::BI__builtin_arm_mve_vsetq_lane_f16:
8784case ARM::BI__builtin_arm_mve_vsetq_lane_f32:
8785case ARM::BI__builtin_arm_mve_vsetq_lane_s16:
8786case ARM::BI__builtin_arm_mve_vsetq_lane_s32:
8787case ARM::BI__builtin_arm_mve_vsetq_lane_s64:
8788case ARM::BI__builtin_arm_mve_vsetq_lane_s8:
8789case ARM::BI__builtin_arm_mve_vsetq_lane_u16:
8790case ARM::BI__builtin_arm_mve_vsetq_lane_u32:
8791case ARM::BI__builtin_arm_mve_vsetq_lane_u64:
8792case ARM::BI__builtin_arm_mve_vsetq_lane_u8: {
8793 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8794 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
8795 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
8796 return Builder.CreateInsertElement(Vec: Val0, NewElt: Val1, Idx: Val2);
8797}
8798case ARM::BI__builtin_arm_mve_vfmaq_m_f16:
8799case ARM::BI__builtin_arm_mve_vfmaq_m_f32: {
8800 llvm::Type * Param0;
8801 llvm::Type * Param1;
8802 switch (BuiltinID) {
8803 case ARM::BI__builtin_arm_mve_vfmaq_m_f16:
8804 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8805 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8806 break;
8807 case ARM::BI__builtin_arm_mve_vfmaq_m_f32:
8808 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8809 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8810 break;
8811 }
8812 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8813 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
8814 Value *Val2 = (Val1);
8815 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
8816 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
8817 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
8818 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val5});
8819 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma_predicated, Tys: {Param1, Param0}), Args: {Val0, Val2, Val3, Val6});
8820}
8821case ARM::BI__builtin_arm_mve_vfmaq_f16:
8822case ARM::BI__builtin_arm_mve_vfmaq_f32: {
8823 llvm::Type * Param0;
8824 switch (BuiltinID) {
8825 case ARM::BI__builtin_arm_mve_vfmaq_f16:
8826 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8827 break;
8828 case ARM::BI__builtin_arm_mve_vfmaq_f32:
8829 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8830 break;
8831 }
8832 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8833 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
8834 Value *Val2 = (Val1);
8835 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
8836 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fma, Tys: {Param0}), Args: {Val0, Val2, Val3}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma, Tys: {Param0}), Args: {Val0, Val2, Val3});
8837}
8838case ARM::BI__builtin_arm_mve_vmlaq_n_s16:
8839case ARM::BI__builtin_arm_mve_vmlaq_n_s32:
8840case ARM::BI__builtin_arm_mve_vmlaq_n_s8:
8841case ARM::BI__builtin_arm_mve_vmlaq_n_u16:
8842case ARM::BI__builtin_arm_mve_vmlaq_n_u32:
8843case ARM::BI__builtin_arm_mve_vmlaq_n_u8: {
8844 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
8845 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
8846 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
8847 Value *Val3 = Builder.CreateMul(LHS: Val0, RHS: Val2);
8848 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
8849 return Builder.CreateAdd(LHS: Val3, RHS: Val4);
8850}
8851case ARM::BI__builtin_arm_mve_vaddq_m_n_f16:
8852case ARM::BI__builtin_arm_mve_vaddq_m_n_f32:
8853case ARM::BI__builtin_arm_mve_vaddq_m_n_s16:
8854case ARM::BI__builtin_arm_mve_vaddq_m_n_s32:
8855case ARM::BI__builtin_arm_mve_vaddq_m_n_s8:
8856case ARM::BI__builtin_arm_mve_vaddq_m_n_u16:
8857case ARM::BI__builtin_arm_mve_vaddq_m_n_u32:
8858case ARM::BI__builtin_arm_mve_vaddq_m_n_u8:
8859case ARM::BI__builtin_arm_mve_vmulq_m_n_f16:
8860case ARM::BI__builtin_arm_mve_vmulq_m_n_f32:
8861case ARM::BI__builtin_arm_mve_vmulq_m_n_s16:
8862case ARM::BI__builtin_arm_mve_vmulq_m_n_s32:
8863case ARM::BI__builtin_arm_mve_vmulq_m_n_s8:
8864case ARM::BI__builtin_arm_mve_vmulq_m_n_u16:
8865case ARM::BI__builtin_arm_mve_vmulq_m_n_u32:
8866case ARM::BI__builtin_arm_mve_vmulq_m_n_u8:
8867case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s16:
8868case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s32:
8869case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s8:
8870case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s16:
8871case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s32:
8872case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s8:
8873case ARM::BI__builtin_arm_mve_vsubq_m_n_f16:
8874case ARM::BI__builtin_arm_mve_vsubq_m_n_f32:
8875case ARM::BI__builtin_arm_mve_vsubq_m_n_s16:
8876case ARM::BI__builtin_arm_mve_vsubq_m_n_s32:
8877case ARM::BI__builtin_arm_mve_vsubq_m_n_s8:
8878case ARM::BI__builtin_arm_mve_vsubq_m_n_u16:
8879case ARM::BI__builtin_arm_mve_vsubq_m_n_u32:
8880case ARM::BI__builtin_arm_mve_vsubq_m_n_u8: {
8881 llvm::Type * Param0;
8882 Intrinsic::ID Param1;
8883 llvm::Type * Param2;
8884 switch (BuiltinID) {
8885 case ARM::BI__builtin_arm_mve_vaddq_m_n_f16:
8886 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8887 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8888 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8889 break;
8890 case ARM::BI__builtin_arm_mve_vaddq_m_n_f32:
8891 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8892 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8893 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8894 break;
8895 case ARM::BI__builtin_arm_mve_vaddq_m_n_s16:
8896 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8897 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8898 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8899 break;
8900 case ARM::BI__builtin_arm_mve_vaddq_m_n_s32:
8901 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8902 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8903 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8904 break;
8905 case ARM::BI__builtin_arm_mve_vaddq_m_n_s8:
8906 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8907 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8908 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8909 break;
8910 case ARM::BI__builtin_arm_mve_vaddq_m_n_u16:
8911 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8912 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8913 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8914 break;
8915 case ARM::BI__builtin_arm_mve_vaddq_m_n_u32:
8916 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8917 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8918 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8919 break;
8920 case ARM::BI__builtin_arm_mve_vaddq_m_n_u8:
8921 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8922 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
8923 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8924 break;
8925 case ARM::BI__builtin_arm_mve_vmulq_m_n_f16:
8926 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8927 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8928 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8929 break;
8930 case ARM::BI__builtin_arm_mve_vmulq_m_n_f32:
8931 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8932 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8933 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
8934 break;
8935 case ARM::BI__builtin_arm_mve_vmulq_m_n_s16:
8936 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8937 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8938 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8939 break;
8940 case ARM::BI__builtin_arm_mve_vmulq_m_n_s32:
8941 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8942 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8943 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8944 break;
8945 case ARM::BI__builtin_arm_mve_vmulq_m_n_s8:
8946 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8947 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8948 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8949 break;
8950 case ARM::BI__builtin_arm_mve_vmulq_m_n_u16:
8951 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8952 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8953 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8954 break;
8955 case ARM::BI__builtin_arm_mve_vmulq_m_n_u32:
8956 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8957 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8958 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8959 break;
8960 case ARM::BI__builtin_arm_mve_vmulq_m_n_u8:
8961 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8962 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
8963 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8964 break;
8965 case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s16:
8966 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8967 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qdmulh_predicated);
8968 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8969 break;
8970 case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s32:
8971 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8972 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qdmulh_predicated);
8973 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8974 break;
8975 case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s8:
8976 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8977 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qdmulh_predicated);
8978 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8979 break;
8980 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s16:
8981 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8982 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qrdmulh_predicated);
8983 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
8984 break;
8985 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s32:
8986 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
8987 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qrdmulh_predicated);
8988 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
8989 break;
8990 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s8:
8991 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
8992 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qrdmulh_predicated);
8993 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
8994 break;
8995 case ARM::BI__builtin_arm_mve_vsubq_m_n_f16:
8996 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
8997 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
8998 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
8999 break;
9000 case ARM::BI__builtin_arm_mve_vsubq_m_n_f32:
9001 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9002 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9003 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9004 break;
9005 case ARM::BI__builtin_arm_mve_vsubq_m_n_s16:
9006 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9007 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9008 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9009 break;
9010 case ARM::BI__builtin_arm_mve_vsubq_m_n_s32:
9011 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9012 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9013 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9014 break;
9015 case ARM::BI__builtin_arm_mve_vsubq_m_n_s8:
9016 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9017 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9018 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9019 break;
9020 case ARM::BI__builtin_arm_mve_vsubq_m_n_u16:
9021 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9022 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9023 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9024 break;
9025 case ARM::BI__builtin_arm_mve_vsubq_m_n_u32:
9026 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9027 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9028 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9029 break;
9030 case ARM::BI__builtin_arm_mve_vsubq_m_n_u8:
9031 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9032 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9033 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9034 break;
9035 }
9036 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9037 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9038 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
9039 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
9040 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
9041 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val4});
9042 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 0));
9043 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val2, Val5, Val6});
9044}
9045case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
9046case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
9047case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
9048case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32: {
9049 uint32_t Param0;
9050 llvm::Type * Param1;
9051 llvm::Type * Param2;
9052 llvm::Type * Param3;
9053 switch (BuiltinID) {
9054 case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
9055 Param0 = static_cast<uint32_t>(0);
9056 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9057 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9058 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9059 break;
9060 case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
9061 Param0 = static_cast<uint32_t>(0);
9062 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
9063 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
9064 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9065 break;
9066 case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
9067 Param0 = static_cast<uint32_t>(1);
9068 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9069 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9070 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9071 break;
9072 case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32:
9073 Param0 = static_cast<uint32_t>(1);
9074 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
9075 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
9076 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9077 break;
9078 }
9079 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9080 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9081 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
9082 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
9083 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
9084 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
9085 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val5});
9086 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 0));
9087 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vqdmull_predicated, Tys: {Param2, Param3, Param1}), Args: {Val0, Val2, Val3, Val6, Val7});
9088}
9089case ARM::BI__builtin_arm_mve_vhaddq_m_n_s16:
9090case ARM::BI__builtin_arm_mve_vhaddq_m_n_s32:
9091case ARM::BI__builtin_arm_mve_vhaddq_m_n_s8:
9092case ARM::BI__builtin_arm_mve_vhaddq_m_n_u16:
9093case ARM::BI__builtin_arm_mve_vhaddq_m_n_u32:
9094case ARM::BI__builtin_arm_mve_vhaddq_m_n_u8:
9095case ARM::BI__builtin_arm_mve_vhsubq_m_n_s16:
9096case ARM::BI__builtin_arm_mve_vhsubq_m_n_s32:
9097case ARM::BI__builtin_arm_mve_vhsubq_m_n_s8:
9098case ARM::BI__builtin_arm_mve_vhsubq_m_n_u16:
9099case ARM::BI__builtin_arm_mve_vhsubq_m_n_u32:
9100case ARM::BI__builtin_arm_mve_vhsubq_m_n_u8:
9101case ARM::BI__builtin_arm_mve_vqaddq_m_n_s16:
9102case ARM::BI__builtin_arm_mve_vqaddq_m_n_s32:
9103case ARM::BI__builtin_arm_mve_vqaddq_m_n_s8:
9104case ARM::BI__builtin_arm_mve_vqaddq_m_n_u16:
9105case ARM::BI__builtin_arm_mve_vqaddq_m_n_u32:
9106case ARM::BI__builtin_arm_mve_vqaddq_m_n_u8:
9107case ARM::BI__builtin_arm_mve_vqsubq_m_n_s16:
9108case ARM::BI__builtin_arm_mve_vqsubq_m_n_s32:
9109case ARM::BI__builtin_arm_mve_vqsubq_m_n_s8:
9110case ARM::BI__builtin_arm_mve_vqsubq_m_n_u16:
9111case ARM::BI__builtin_arm_mve_vqsubq_m_n_u32:
9112case ARM::BI__builtin_arm_mve_vqsubq_m_n_u8: {
9113 uint32_t Param0;
9114 llvm::Type * Param1;
9115 Intrinsic::ID Param2;
9116 llvm::Type * Param3;
9117 switch (BuiltinID) {
9118 case ARM::BI__builtin_arm_mve_vhaddq_m_n_s16:
9119 Param0 = static_cast<uint32_t>(0);
9120 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9121 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9122 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9123 break;
9124 case ARM::BI__builtin_arm_mve_vhaddq_m_n_s32:
9125 Param0 = static_cast<uint32_t>(0);
9126 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9127 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9128 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9129 break;
9130 case ARM::BI__builtin_arm_mve_vhaddq_m_n_s8:
9131 Param0 = static_cast<uint32_t>(0);
9132 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9133 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9134 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9135 break;
9136 case ARM::BI__builtin_arm_mve_vhaddq_m_n_u16:
9137 Param0 = static_cast<uint32_t>(1);
9138 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9139 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9140 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9141 break;
9142 case ARM::BI__builtin_arm_mve_vhaddq_m_n_u32:
9143 Param0 = static_cast<uint32_t>(1);
9144 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9145 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9146 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9147 break;
9148 case ARM::BI__builtin_arm_mve_vhaddq_m_n_u8:
9149 Param0 = static_cast<uint32_t>(1);
9150 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9151 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9152 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9153 break;
9154 case ARM::BI__builtin_arm_mve_vhsubq_m_n_s16:
9155 Param0 = static_cast<uint32_t>(0);
9156 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9157 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
9158 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9159 break;
9160 case ARM::BI__builtin_arm_mve_vhsubq_m_n_s32:
9161 Param0 = static_cast<uint32_t>(0);
9162 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9163 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
9164 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9165 break;
9166 case ARM::BI__builtin_arm_mve_vhsubq_m_n_s8:
9167 Param0 = static_cast<uint32_t>(0);
9168 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9169 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
9170 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9171 break;
9172 case ARM::BI__builtin_arm_mve_vhsubq_m_n_u16:
9173 Param0 = static_cast<uint32_t>(1);
9174 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9175 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
9176 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9177 break;
9178 case ARM::BI__builtin_arm_mve_vhsubq_m_n_u32:
9179 Param0 = static_cast<uint32_t>(1);
9180 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9181 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
9182 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9183 break;
9184 case ARM::BI__builtin_arm_mve_vhsubq_m_n_u8:
9185 Param0 = static_cast<uint32_t>(1);
9186 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9187 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
9188 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9189 break;
9190 case ARM::BI__builtin_arm_mve_vqaddq_m_n_s16:
9191 Param0 = static_cast<uint32_t>(0);
9192 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9193 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
9194 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9195 break;
9196 case ARM::BI__builtin_arm_mve_vqaddq_m_n_s32:
9197 Param0 = static_cast<uint32_t>(0);
9198 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9199 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
9200 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9201 break;
9202 case ARM::BI__builtin_arm_mve_vqaddq_m_n_s8:
9203 Param0 = static_cast<uint32_t>(0);
9204 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9205 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
9206 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9207 break;
9208 case ARM::BI__builtin_arm_mve_vqaddq_m_n_u16:
9209 Param0 = static_cast<uint32_t>(1);
9210 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9211 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
9212 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9213 break;
9214 case ARM::BI__builtin_arm_mve_vqaddq_m_n_u32:
9215 Param0 = static_cast<uint32_t>(1);
9216 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9217 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
9218 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9219 break;
9220 case ARM::BI__builtin_arm_mve_vqaddq_m_n_u8:
9221 Param0 = static_cast<uint32_t>(1);
9222 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9223 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
9224 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9225 break;
9226 case ARM::BI__builtin_arm_mve_vqsubq_m_n_s16:
9227 Param0 = static_cast<uint32_t>(0);
9228 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9229 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
9230 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9231 break;
9232 case ARM::BI__builtin_arm_mve_vqsubq_m_n_s32:
9233 Param0 = static_cast<uint32_t>(0);
9234 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9235 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
9236 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9237 break;
9238 case ARM::BI__builtin_arm_mve_vqsubq_m_n_s8:
9239 Param0 = static_cast<uint32_t>(0);
9240 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9241 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
9242 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9243 break;
9244 case ARM::BI__builtin_arm_mve_vqsubq_m_n_u16:
9245 Param0 = static_cast<uint32_t>(1);
9246 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9247 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
9248 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9249 break;
9250 case ARM::BI__builtin_arm_mve_vqsubq_m_n_u32:
9251 Param0 = static_cast<uint32_t>(1);
9252 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9253 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
9254 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9255 break;
9256 case ARM::BI__builtin_arm_mve_vqsubq_m_n_u8:
9257 Param0 = static_cast<uint32_t>(1);
9258 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9259 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
9260 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9261 break;
9262 }
9263 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9264 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9265 Value *Val2 = ARMMVEVectorSplat(Builder, V: Val1);
9266 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
9267 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
9268 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
9269 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val5});
9270 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 0));
9271 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param1}), Args: {Val0, Val2, Val3, Val6, Val7});
9272}
9273case ARM::BI__builtin_arm_mve_vfmsq_m_f16:
9274case ARM::BI__builtin_arm_mve_vfmsq_m_f32: {
9275 llvm::Type * Param0;
9276 llvm::Type * Param1;
9277 switch (BuiltinID) {
9278 case ARM::BI__builtin_arm_mve_vfmsq_m_f16:
9279 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9280 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9281 break;
9282 case ARM::BI__builtin_arm_mve_vfmsq_m_f32:
9283 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9284 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9285 break;
9286 }
9287 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9288 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9289 Value *Val2 = Builder.CreateFNeg(V: Val1);
9290 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
9291 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
9292 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
9293 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val5});
9294 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma_predicated, Tys: {Param1, Param0}), Args: {Val0, Val2, Val3, Val6});
9295}
9296case ARM::BI__builtin_arm_mve_vfmsq_f16:
9297case ARM::BI__builtin_arm_mve_vfmsq_f32: {
9298 llvm::Type * Param0;
9299 switch (BuiltinID) {
9300 case ARM::BI__builtin_arm_mve_vfmsq_f16:
9301 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9302 break;
9303 case ARM::BI__builtin_arm_mve_vfmsq_f32:
9304 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9305 break;
9306 }
9307 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9308 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9309 Value *Val2 = Builder.CreateFNeg(V: Val1);
9310 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
9311 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fma, Tys: {Param0}), Args: {Val0, Val2, Val3}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma, Tys: {Param0}), Args: {Val0, Val2, Val3});
9312}
9313case ARM::BI__builtin_arm_mve_vabsq_m_f16:
9314case ARM::BI__builtin_arm_mve_vabsq_m_f32:
9315case ARM::BI__builtin_arm_mve_vabsq_m_s16:
9316case ARM::BI__builtin_arm_mve_vabsq_m_s32:
9317case ARM::BI__builtin_arm_mve_vabsq_m_s8:
9318case ARM::BI__builtin_arm_mve_vclsq_m_s16:
9319case ARM::BI__builtin_arm_mve_vclsq_m_s32:
9320case ARM::BI__builtin_arm_mve_vclsq_m_s8:
9321case ARM::BI__builtin_arm_mve_vclzq_m_s16:
9322case ARM::BI__builtin_arm_mve_vclzq_m_s32:
9323case ARM::BI__builtin_arm_mve_vclzq_m_s8:
9324case ARM::BI__builtin_arm_mve_vclzq_m_u16:
9325case ARM::BI__builtin_arm_mve_vclzq_m_u32:
9326case ARM::BI__builtin_arm_mve_vclzq_m_u8:
9327case ARM::BI__builtin_arm_mve_vmvnq_m_s16:
9328case ARM::BI__builtin_arm_mve_vmvnq_m_s32:
9329case ARM::BI__builtin_arm_mve_vmvnq_m_s8:
9330case ARM::BI__builtin_arm_mve_vmvnq_m_u16:
9331case ARM::BI__builtin_arm_mve_vmvnq_m_u32:
9332case ARM::BI__builtin_arm_mve_vmvnq_m_u8:
9333case ARM::BI__builtin_arm_mve_vnegq_m_f16:
9334case ARM::BI__builtin_arm_mve_vnegq_m_f32:
9335case ARM::BI__builtin_arm_mve_vnegq_m_s16:
9336case ARM::BI__builtin_arm_mve_vnegq_m_s32:
9337case ARM::BI__builtin_arm_mve_vnegq_m_s8:
9338case ARM::BI__builtin_arm_mve_vqabsq_m_s16:
9339case ARM::BI__builtin_arm_mve_vqabsq_m_s32:
9340case ARM::BI__builtin_arm_mve_vqabsq_m_s8:
9341case ARM::BI__builtin_arm_mve_vqnegq_m_s16:
9342case ARM::BI__builtin_arm_mve_vqnegq_m_s32:
9343case ARM::BI__builtin_arm_mve_vqnegq_m_s8:
9344case ARM::BI__builtin_arm_mve_vrndaq_m_f16:
9345case ARM::BI__builtin_arm_mve_vrndaq_m_f32:
9346case ARM::BI__builtin_arm_mve_vrndmq_m_f16:
9347case ARM::BI__builtin_arm_mve_vrndmq_m_f32:
9348case ARM::BI__builtin_arm_mve_vrndnq_m_f16:
9349case ARM::BI__builtin_arm_mve_vrndnq_m_f32:
9350case ARM::BI__builtin_arm_mve_vrndpq_m_f16:
9351case ARM::BI__builtin_arm_mve_vrndpq_m_f32:
9352case ARM::BI__builtin_arm_mve_vrndq_m_f16:
9353case ARM::BI__builtin_arm_mve_vrndq_m_f32:
9354case ARM::BI__builtin_arm_mve_vrndxq_m_f16:
9355case ARM::BI__builtin_arm_mve_vrndxq_m_f32: {
9356 llvm::Type * Param0;
9357 Intrinsic::ID Param1;
9358 llvm::Type * Param2;
9359 switch (BuiltinID) {
9360 case ARM::BI__builtin_arm_mve_vabsq_m_f16:
9361 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9362 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
9363 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9364 break;
9365 case ARM::BI__builtin_arm_mve_vabsq_m_f32:
9366 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9367 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
9368 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9369 break;
9370 case ARM::BI__builtin_arm_mve_vabsq_m_s16:
9371 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9372 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
9373 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9374 break;
9375 case ARM::BI__builtin_arm_mve_vabsq_m_s32:
9376 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9377 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
9378 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9379 break;
9380 case ARM::BI__builtin_arm_mve_vabsq_m_s8:
9381 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9382 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
9383 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9384 break;
9385 case ARM::BI__builtin_arm_mve_vclsq_m_s16:
9386 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9387 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_cls_predicated);
9388 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9389 break;
9390 case ARM::BI__builtin_arm_mve_vclsq_m_s32:
9391 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9392 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_cls_predicated);
9393 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9394 break;
9395 case ARM::BI__builtin_arm_mve_vclsq_m_s8:
9396 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9397 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_cls_predicated);
9398 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9399 break;
9400 case ARM::BI__builtin_arm_mve_vclzq_m_s16:
9401 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9402 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
9403 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9404 break;
9405 case ARM::BI__builtin_arm_mve_vclzq_m_s32:
9406 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9407 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
9408 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9409 break;
9410 case ARM::BI__builtin_arm_mve_vclzq_m_s8:
9411 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9412 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
9413 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9414 break;
9415 case ARM::BI__builtin_arm_mve_vclzq_m_u16:
9416 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9417 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
9418 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9419 break;
9420 case ARM::BI__builtin_arm_mve_vclzq_m_u32:
9421 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9422 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
9423 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9424 break;
9425 case ARM::BI__builtin_arm_mve_vclzq_m_u8:
9426 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9427 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
9428 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9429 break;
9430 case ARM::BI__builtin_arm_mve_vmvnq_m_s16:
9431 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9432 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
9433 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9434 break;
9435 case ARM::BI__builtin_arm_mve_vmvnq_m_s32:
9436 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9437 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
9438 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9439 break;
9440 case ARM::BI__builtin_arm_mve_vmvnq_m_s8:
9441 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9442 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
9443 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9444 break;
9445 case ARM::BI__builtin_arm_mve_vmvnq_m_u16:
9446 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9447 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
9448 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9449 break;
9450 case ARM::BI__builtin_arm_mve_vmvnq_m_u32:
9451 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9452 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
9453 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9454 break;
9455 case ARM::BI__builtin_arm_mve_vmvnq_m_u8:
9456 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9457 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
9458 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9459 break;
9460 case ARM::BI__builtin_arm_mve_vnegq_m_f16:
9461 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9462 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
9463 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9464 break;
9465 case ARM::BI__builtin_arm_mve_vnegq_m_f32:
9466 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9467 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
9468 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9469 break;
9470 case ARM::BI__builtin_arm_mve_vnegq_m_s16:
9471 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9472 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
9473 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9474 break;
9475 case ARM::BI__builtin_arm_mve_vnegq_m_s32:
9476 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9477 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
9478 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9479 break;
9480 case ARM::BI__builtin_arm_mve_vnegq_m_s8:
9481 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9482 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
9483 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9484 break;
9485 case ARM::BI__builtin_arm_mve_vqabsq_m_s16:
9486 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9487 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qabs_predicated);
9488 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9489 break;
9490 case ARM::BI__builtin_arm_mve_vqabsq_m_s32:
9491 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9492 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qabs_predicated);
9493 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9494 break;
9495 case ARM::BI__builtin_arm_mve_vqabsq_m_s8:
9496 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9497 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qabs_predicated);
9498 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9499 break;
9500 case ARM::BI__builtin_arm_mve_vqnegq_m_s16:
9501 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9502 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qneg_predicated);
9503 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9504 break;
9505 case ARM::BI__builtin_arm_mve_vqnegq_m_s32:
9506 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9507 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qneg_predicated);
9508 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9509 break;
9510 case ARM::BI__builtin_arm_mve_vqnegq_m_s8:
9511 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9512 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qneg_predicated);
9513 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9514 break;
9515 case ARM::BI__builtin_arm_mve_vrndaq_m_f16:
9516 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9517 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrinta_predicated);
9518 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9519 break;
9520 case ARM::BI__builtin_arm_mve_vrndaq_m_f32:
9521 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9522 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrinta_predicated);
9523 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9524 break;
9525 case ARM::BI__builtin_arm_mve_vrndmq_m_f16:
9526 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9527 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintm_predicated);
9528 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9529 break;
9530 case ARM::BI__builtin_arm_mve_vrndmq_m_f32:
9531 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9532 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintm_predicated);
9533 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9534 break;
9535 case ARM::BI__builtin_arm_mve_vrndnq_m_f16:
9536 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9537 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintn_predicated);
9538 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9539 break;
9540 case ARM::BI__builtin_arm_mve_vrndnq_m_f32:
9541 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9542 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintn_predicated);
9543 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9544 break;
9545 case ARM::BI__builtin_arm_mve_vrndpq_m_f16:
9546 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9547 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintp_predicated);
9548 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9549 break;
9550 case ARM::BI__builtin_arm_mve_vrndpq_m_f32:
9551 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9552 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintp_predicated);
9553 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9554 break;
9555 case ARM::BI__builtin_arm_mve_vrndq_m_f16:
9556 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9557 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintz_predicated);
9558 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9559 break;
9560 case ARM::BI__builtin_arm_mve_vrndq_m_f32:
9561 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9562 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintz_predicated);
9563 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9564 break;
9565 case ARM::BI__builtin_arm_mve_vrndxq_m_f16:
9566 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9567 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintx_predicated);
9568 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9569 break;
9570 case ARM::BI__builtin_arm_mve_vrndxq_m_f32:
9571 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9572 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintx_predicated);
9573 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9574 break;
9575 }
9576 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9577 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9578 Value *Val2 = Builder.CreateIntCast(V: Val1, DestTy: Int32Ty, isSigned: false);
9579 Value *Val3 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val2});
9580 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
9581 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val3, Val4});
9582}
9583case ARM::BI__builtin_arm_mve_vaddq_m_f16:
9584case ARM::BI__builtin_arm_mve_vaddq_m_f32:
9585case ARM::BI__builtin_arm_mve_vaddq_m_s16:
9586case ARM::BI__builtin_arm_mve_vaddq_m_s32:
9587case ARM::BI__builtin_arm_mve_vaddq_m_s8:
9588case ARM::BI__builtin_arm_mve_vaddq_m_u16:
9589case ARM::BI__builtin_arm_mve_vaddq_m_u32:
9590case ARM::BI__builtin_arm_mve_vaddq_m_u8:
9591case ARM::BI__builtin_arm_mve_vmulq_m_f16:
9592case ARM::BI__builtin_arm_mve_vmulq_m_f32:
9593case ARM::BI__builtin_arm_mve_vmulq_m_s16:
9594case ARM::BI__builtin_arm_mve_vmulq_m_s32:
9595case ARM::BI__builtin_arm_mve_vmulq_m_s8:
9596case ARM::BI__builtin_arm_mve_vmulq_m_u16:
9597case ARM::BI__builtin_arm_mve_vmulq_m_u32:
9598case ARM::BI__builtin_arm_mve_vmulq_m_u8:
9599case ARM::BI__builtin_arm_mve_vqdmulhq_m_s16:
9600case ARM::BI__builtin_arm_mve_vqdmulhq_m_s32:
9601case ARM::BI__builtin_arm_mve_vqdmulhq_m_s8:
9602case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s16:
9603case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s32:
9604case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s8:
9605case ARM::BI__builtin_arm_mve_vqshluq_m_n_s16:
9606case ARM::BI__builtin_arm_mve_vqshluq_m_n_s32:
9607case ARM::BI__builtin_arm_mve_vqshluq_m_n_s8:
9608case ARM::BI__builtin_arm_mve_vshlq_m_n_s16:
9609case ARM::BI__builtin_arm_mve_vshlq_m_n_s32:
9610case ARM::BI__builtin_arm_mve_vshlq_m_n_s8:
9611case ARM::BI__builtin_arm_mve_vshlq_m_n_u16:
9612case ARM::BI__builtin_arm_mve_vshlq_m_n_u32:
9613case ARM::BI__builtin_arm_mve_vshlq_m_n_u8:
9614case ARM::BI__builtin_arm_mve_vsubq_m_f16:
9615case ARM::BI__builtin_arm_mve_vsubq_m_f32:
9616case ARM::BI__builtin_arm_mve_vsubq_m_s16:
9617case ARM::BI__builtin_arm_mve_vsubq_m_s32:
9618case ARM::BI__builtin_arm_mve_vsubq_m_s8:
9619case ARM::BI__builtin_arm_mve_vsubq_m_u16:
9620case ARM::BI__builtin_arm_mve_vsubq_m_u32:
9621case ARM::BI__builtin_arm_mve_vsubq_m_u8: {
9622 llvm::Type * Param0;
9623 Intrinsic::ID Param1;
9624 llvm::Type * Param2;
9625 switch (BuiltinID) {
9626 case ARM::BI__builtin_arm_mve_vaddq_m_f16:
9627 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9628 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9629 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9630 break;
9631 case ARM::BI__builtin_arm_mve_vaddq_m_f32:
9632 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9633 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9634 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9635 break;
9636 case ARM::BI__builtin_arm_mve_vaddq_m_s16:
9637 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9638 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9639 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9640 break;
9641 case ARM::BI__builtin_arm_mve_vaddq_m_s32:
9642 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9643 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9644 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9645 break;
9646 case ARM::BI__builtin_arm_mve_vaddq_m_s8:
9647 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9648 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9649 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9650 break;
9651 case ARM::BI__builtin_arm_mve_vaddq_m_u16:
9652 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9653 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9654 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9655 break;
9656 case ARM::BI__builtin_arm_mve_vaddq_m_u32:
9657 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9658 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9659 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9660 break;
9661 case ARM::BI__builtin_arm_mve_vaddq_m_u8:
9662 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9663 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
9664 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9665 break;
9666 case ARM::BI__builtin_arm_mve_vmulq_m_f16:
9667 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9668 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9669 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9670 break;
9671 case ARM::BI__builtin_arm_mve_vmulq_m_f32:
9672 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9673 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9674 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9675 break;
9676 case ARM::BI__builtin_arm_mve_vmulq_m_s16:
9677 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9678 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9679 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9680 break;
9681 case ARM::BI__builtin_arm_mve_vmulq_m_s32:
9682 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9683 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9684 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9685 break;
9686 case ARM::BI__builtin_arm_mve_vmulq_m_s8:
9687 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9688 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9689 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9690 break;
9691 case ARM::BI__builtin_arm_mve_vmulq_m_u16:
9692 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9693 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9694 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9695 break;
9696 case ARM::BI__builtin_arm_mve_vmulq_m_u32:
9697 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9698 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9699 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9700 break;
9701 case ARM::BI__builtin_arm_mve_vmulq_m_u8:
9702 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9703 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
9704 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9705 break;
9706 case ARM::BI__builtin_arm_mve_vqdmulhq_m_s16:
9707 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9708 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qdmulh_predicated);
9709 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9710 break;
9711 case ARM::BI__builtin_arm_mve_vqdmulhq_m_s32:
9712 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9713 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qdmulh_predicated);
9714 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9715 break;
9716 case ARM::BI__builtin_arm_mve_vqdmulhq_m_s8:
9717 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9718 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qdmulh_predicated);
9719 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9720 break;
9721 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s16:
9722 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9723 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qrdmulh_predicated);
9724 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9725 break;
9726 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s32:
9727 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9728 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qrdmulh_predicated);
9729 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9730 break;
9731 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s8:
9732 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9733 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qrdmulh_predicated);
9734 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9735 break;
9736 case ARM::BI__builtin_arm_mve_vqshluq_m_n_s16:
9737 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9738 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshlu_imm_predicated);
9739 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9740 break;
9741 case ARM::BI__builtin_arm_mve_vqshluq_m_n_s32:
9742 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9743 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshlu_imm_predicated);
9744 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9745 break;
9746 case ARM::BI__builtin_arm_mve_vqshluq_m_n_s8:
9747 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9748 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshlu_imm_predicated);
9749 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9750 break;
9751 case ARM::BI__builtin_arm_mve_vshlq_m_n_s16:
9752 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9753 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
9754 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9755 break;
9756 case ARM::BI__builtin_arm_mve_vshlq_m_n_s32:
9757 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9758 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
9759 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9760 break;
9761 case ARM::BI__builtin_arm_mve_vshlq_m_n_s8:
9762 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9763 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
9764 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9765 break;
9766 case ARM::BI__builtin_arm_mve_vshlq_m_n_u16:
9767 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9768 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
9769 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9770 break;
9771 case ARM::BI__builtin_arm_mve_vshlq_m_n_u32:
9772 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9773 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
9774 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9775 break;
9776 case ARM::BI__builtin_arm_mve_vshlq_m_n_u8:
9777 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9778 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
9779 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9780 break;
9781 case ARM::BI__builtin_arm_mve_vsubq_m_f16:
9782 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9783 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9784 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9785 break;
9786 case ARM::BI__builtin_arm_mve_vsubq_m_f32:
9787 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9788 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9789 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9790 break;
9791 case ARM::BI__builtin_arm_mve_vsubq_m_s16:
9792 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9793 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9794 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9795 break;
9796 case ARM::BI__builtin_arm_mve_vsubq_m_s32:
9797 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9798 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9799 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9800 break;
9801 case ARM::BI__builtin_arm_mve_vsubq_m_s8:
9802 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9803 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9804 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9805 break;
9806 case ARM::BI__builtin_arm_mve_vsubq_m_u16:
9807 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9808 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9809 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9810 break;
9811 case ARM::BI__builtin_arm_mve_vsubq_m_u32:
9812 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9813 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9814 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9815 break;
9816 case ARM::BI__builtin_arm_mve_vsubq_m_u8:
9817 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9818 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
9819 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9820 break;
9821 }
9822 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
9823 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
9824 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 3));
9825 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
9826 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val3});
9827 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
9828 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param0}), Args: {Val0, Val1, Val4, Val5});
9829}
9830case ARM::BI__builtin_arm_mve_vabdq_m_f16:
9831case ARM::BI__builtin_arm_mve_vabdq_m_f32:
9832case ARM::BI__builtin_arm_mve_vabdq_m_s16:
9833case ARM::BI__builtin_arm_mve_vabdq_m_s32:
9834case ARM::BI__builtin_arm_mve_vabdq_m_s8:
9835case ARM::BI__builtin_arm_mve_vabdq_m_u16:
9836case ARM::BI__builtin_arm_mve_vabdq_m_u32:
9837case ARM::BI__builtin_arm_mve_vabdq_m_u8:
9838case ARM::BI__builtin_arm_mve_vhaddq_m_s16:
9839case ARM::BI__builtin_arm_mve_vhaddq_m_s32:
9840case ARM::BI__builtin_arm_mve_vhaddq_m_s8:
9841case ARM::BI__builtin_arm_mve_vhaddq_m_u16:
9842case ARM::BI__builtin_arm_mve_vhaddq_m_u32:
9843case ARM::BI__builtin_arm_mve_vhaddq_m_u8:
9844case ARM::BI__builtin_arm_mve_vhsubq_m_s16:
9845case ARM::BI__builtin_arm_mve_vhsubq_m_s32:
9846case ARM::BI__builtin_arm_mve_vhsubq_m_s8:
9847case ARM::BI__builtin_arm_mve_vhsubq_m_u16:
9848case ARM::BI__builtin_arm_mve_vhsubq_m_u32:
9849case ARM::BI__builtin_arm_mve_vhsubq_m_u8:
9850case ARM::BI__builtin_arm_mve_vmaxnmq_m_f16:
9851case ARM::BI__builtin_arm_mve_vmaxnmq_m_f32:
9852case ARM::BI__builtin_arm_mve_vmaxq_m_s16:
9853case ARM::BI__builtin_arm_mve_vmaxq_m_s32:
9854case ARM::BI__builtin_arm_mve_vmaxq_m_s8:
9855case ARM::BI__builtin_arm_mve_vmaxq_m_u16:
9856case ARM::BI__builtin_arm_mve_vmaxq_m_u32:
9857case ARM::BI__builtin_arm_mve_vmaxq_m_u8:
9858case ARM::BI__builtin_arm_mve_vminnmq_m_f16:
9859case ARM::BI__builtin_arm_mve_vminnmq_m_f32:
9860case ARM::BI__builtin_arm_mve_vminq_m_s16:
9861case ARM::BI__builtin_arm_mve_vminq_m_s32:
9862case ARM::BI__builtin_arm_mve_vminq_m_s8:
9863case ARM::BI__builtin_arm_mve_vminq_m_u16:
9864case ARM::BI__builtin_arm_mve_vminq_m_u32:
9865case ARM::BI__builtin_arm_mve_vminq_m_u8:
9866case ARM::BI__builtin_arm_mve_vmulhq_m_s16:
9867case ARM::BI__builtin_arm_mve_vmulhq_m_s32:
9868case ARM::BI__builtin_arm_mve_vmulhq_m_s8:
9869case ARM::BI__builtin_arm_mve_vmulhq_m_u16:
9870case ARM::BI__builtin_arm_mve_vmulhq_m_u32:
9871case ARM::BI__builtin_arm_mve_vmulhq_m_u8:
9872case ARM::BI__builtin_arm_mve_vqaddq_m_s16:
9873case ARM::BI__builtin_arm_mve_vqaddq_m_s32:
9874case ARM::BI__builtin_arm_mve_vqaddq_m_s8:
9875case ARM::BI__builtin_arm_mve_vqaddq_m_u16:
9876case ARM::BI__builtin_arm_mve_vqaddq_m_u32:
9877case ARM::BI__builtin_arm_mve_vqaddq_m_u8:
9878case ARM::BI__builtin_arm_mve_vqshlq_m_n_s16:
9879case ARM::BI__builtin_arm_mve_vqshlq_m_n_s32:
9880case ARM::BI__builtin_arm_mve_vqshlq_m_n_s8:
9881case ARM::BI__builtin_arm_mve_vqshlq_m_n_u16:
9882case ARM::BI__builtin_arm_mve_vqshlq_m_n_u32:
9883case ARM::BI__builtin_arm_mve_vqshlq_m_n_u8:
9884case ARM::BI__builtin_arm_mve_vqsubq_m_s16:
9885case ARM::BI__builtin_arm_mve_vqsubq_m_s32:
9886case ARM::BI__builtin_arm_mve_vqsubq_m_s8:
9887case ARM::BI__builtin_arm_mve_vqsubq_m_u16:
9888case ARM::BI__builtin_arm_mve_vqsubq_m_u32:
9889case ARM::BI__builtin_arm_mve_vqsubq_m_u8:
9890case ARM::BI__builtin_arm_mve_vrhaddq_m_s16:
9891case ARM::BI__builtin_arm_mve_vrhaddq_m_s32:
9892case ARM::BI__builtin_arm_mve_vrhaddq_m_s8:
9893case ARM::BI__builtin_arm_mve_vrhaddq_m_u16:
9894case ARM::BI__builtin_arm_mve_vrhaddq_m_u32:
9895case ARM::BI__builtin_arm_mve_vrhaddq_m_u8:
9896case ARM::BI__builtin_arm_mve_vrmulhq_m_s16:
9897case ARM::BI__builtin_arm_mve_vrmulhq_m_s32:
9898case ARM::BI__builtin_arm_mve_vrmulhq_m_s8:
9899case ARM::BI__builtin_arm_mve_vrmulhq_m_u16:
9900case ARM::BI__builtin_arm_mve_vrmulhq_m_u32:
9901case ARM::BI__builtin_arm_mve_vrmulhq_m_u8:
9902case ARM::BI__builtin_arm_mve_vrshrq_m_n_s16:
9903case ARM::BI__builtin_arm_mve_vrshrq_m_n_s32:
9904case ARM::BI__builtin_arm_mve_vrshrq_m_n_s8:
9905case ARM::BI__builtin_arm_mve_vrshrq_m_n_u16:
9906case ARM::BI__builtin_arm_mve_vrshrq_m_n_u32:
9907case ARM::BI__builtin_arm_mve_vrshrq_m_n_u8:
9908case ARM::BI__builtin_arm_mve_vshrq_m_n_s16:
9909case ARM::BI__builtin_arm_mve_vshrq_m_n_s32:
9910case ARM::BI__builtin_arm_mve_vshrq_m_n_s8:
9911case ARM::BI__builtin_arm_mve_vshrq_m_n_u16:
9912case ARM::BI__builtin_arm_mve_vshrq_m_n_u32:
9913case ARM::BI__builtin_arm_mve_vshrq_m_n_u8: {
9914 uint32_t Param0;
9915 llvm::Type * Param1;
9916 Intrinsic::ID Param2;
9917 llvm::Type * Param3;
9918 switch (BuiltinID) {
9919 case ARM::BI__builtin_arm_mve_vabdq_m_f16:
9920 Param0 = static_cast<uint32_t>(0);
9921 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9922 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9923 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
9924 break;
9925 case ARM::BI__builtin_arm_mve_vabdq_m_f32:
9926 Param0 = static_cast<uint32_t>(0);
9927 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9928 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9929 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
9930 break;
9931 case ARM::BI__builtin_arm_mve_vabdq_m_s16:
9932 Param0 = static_cast<uint32_t>(0);
9933 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9934 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9935 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9936 break;
9937 case ARM::BI__builtin_arm_mve_vabdq_m_s32:
9938 Param0 = static_cast<uint32_t>(0);
9939 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9940 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9941 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9942 break;
9943 case ARM::BI__builtin_arm_mve_vabdq_m_s8:
9944 Param0 = static_cast<uint32_t>(0);
9945 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9946 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9947 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9948 break;
9949 case ARM::BI__builtin_arm_mve_vabdq_m_u16:
9950 Param0 = static_cast<uint32_t>(1);
9951 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9952 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9953 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9954 break;
9955 case ARM::BI__builtin_arm_mve_vabdq_m_u32:
9956 Param0 = static_cast<uint32_t>(1);
9957 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9958 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9959 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9960 break;
9961 case ARM::BI__builtin_arm_mve_vabdq_m_u8:
9962 Param0 = static_cast<uint32_t>(1);
9963 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9964 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
9965 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9966 break;
9967 case ARM::BI__builtin_arm_mve_vhaddq_m_s16:
9968 Param0 = static_cast<uint32_t>(0);
9969 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9970 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9971 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9972 break;
9973 case ARM::BI__builtin_arm_mve_vhaddq_m_s32:
9974 Param0 = static_cast<uint32_t>(0);
9975 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9976 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9977 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9978 break;
9979 case ARM::BI__builtin_arm_mve_vhaddq_m_s8:
9980 Param0 = static_cast<uint32_t>(0);
9981 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
9982 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9983 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
9984 break;
9985 case ARM::BI__builtin_arm_mve_vhaddq_m_u16:
9986 Param0 = static_cast<uint32_t>(1);
9987 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
9988 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9989 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
9990 break;
9991 case ARM::BI__builtin_arm_mve_vhaddq_m_u32:
9992 Param0 = static_cast<uint32_t>(1);
9993 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
9994 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
9995 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
9996 break;
9997 case ARM::BI__builtin_arm_mve_vhaddq_m_u8:
9998 Param0 = static_cast<uint32_t>(1);
9999 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10000 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
10001 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10002 break;
10003 case ARM::BI__builtin_arm_mve_vhsubq_m_s16:
10004 Param0 = static_cast<uint32_t>(0);
10005 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10006 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
10007 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10008 break;
10009 case ARM::BI__builtin_arm_mve_vhsubq_m_s32:
10010 Param0 = static_cast<uint32_t>(0);
10011 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10012 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
10013 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10014 break;
10015 case ARM::BI__builtin_arm_mve_vhsubq_m_s8:
10016 Param0 = static_cast<uint32_t>(0);
10017 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10018 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
10019 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10020 break;
10021 case ARM::BI__builtin_arm_mve_vhsubq_m_u16:
10022 Param0 = static_cast<uint32_t>(1);
10023 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10024 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
10025 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10026 break;
10027 case ARM::BI__builtin_arm_mve_vhsubq_m_u32:
10028 Param0 = static_cast<uint32_t>(1);
10029 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10030 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
10031 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10032 break;
10033 case ARM::BI__builtin_arm_mve_vhsubq_m_u8:
10034 Param0 = static_cast<uint32_t>(1);
10035 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10036 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
10037 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10038 break;
10039 case ARM::BI__builtin_arm_mve_vmaxnmq_m_f16:
10040 Param0 = static_cast<uint32_t>(0);
10041 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10042 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10043 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
10044 break;
10045 case ARM::BI__builtin_arm_mve_vmaxnmq_m_f32:
10046 Param0 = static_cast<uint32_t>(0);
10047 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10048 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10049 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
10050 break;
10051 case ARM::BI__builtin_arm_mve_vmaxq_m_s16:
10052 Param0 = static_cast<uint32_t>(0);
10053 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10054 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10055 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10056 break;
10057 case ARM::BI__builtin_arm_mve_vmaxq_m_s32:
10058 Param0 = static_cast<uint32_t>(0);
10059 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10060 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10061 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10062 break;
10063 case ARM::BI__builtin_arm_mve_vmaxq_m_s8:
10064 Param0 = static_cast<uint32_t>(0);
10065 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10066 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10067 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10068 break;
10069 case ARM::BI__builtin_arm_mve_vmaxq_m_u16:
10070 Param0 = static_cast<uint32_t>(1);
10071 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10072 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10073 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10074 break;
10075 case ARM::BI__builtin_arm_mve_vmaxq_m_u32:
10076 Param0 = static_cast<uint32_t>(1);
10077 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10078 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10079 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10080 break;
10081 case ARM::BI__builtin_arm_mve_vmaxq_m_u8:
10082 Param0 = static_cast<uint32_t>(1);
10083 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10084 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
10085 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10086 break;
10087 case ARM::BI__builtin_arm_mve_vminnmq_m_f16:
10088 Param0 = static_cast<uint32_t>(0);
10089 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10090 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10091 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
10092 break;
10093 case ARM::BI__builtin_arm_mve_vminnmq_m_f32:
10094 Param0 = static_cast<uint32_t>(0);
10095 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10096 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10097 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
10098 break;
10099 case ARM::BI__builtin_arm_mve_vminq_m_s16:
10100 Param0 = static_cast<uint32_t>(0);
10101 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10102 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10103 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10104 break;
10105 case ARM::BI__builtin_arm_mve_vminq_m_s32:
10106 Param0 = static_cast<uint32_t>(0);
10107 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10108 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10109 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10110 break;
10111 case ARM::BI__builtin_arm_mve_vminq_m_s8:
10112 Param0 = static_cast<uint32_t>(0);
10113 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10114 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10115 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10116 break;
10117 case ARM::BI__builtin_arm_mve_vminq_m_u16:
10118 Param0 = static_cast<uint32_t>(1);
10119 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10120 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10121 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10122 break;
10123 case ARM::BI__builtin_arm_mve_vminq_m_u32:
10124 Param0 = static_cast<uint32_t>(1);
10125 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10126 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10127 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10128 break;
10129 case ARM::BI__builtin_arm_mve_vminq_m_u8:
10130 Param0 = static_cast<uint32_t>(1);
10131 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10132 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
10133 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10134 break;
10135 case ARM::BI__builtin_arm_mve_vmulhq_m_s16:
10136 Param0 = static_cast<uint32_t>(0);
10137 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10138 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
10139 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10140 break;
10141 case ARM::BI__builtin_arm_mve_vmulhq_m_s32:
10142 Param0 = static_cast<uint32_t>(0);
10143 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10144 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
10145 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10146 break;
10147 case ARM::BI__builtin_arm_mve_vmulhq_m_s8:
10148 Param0 = static_cast<uint32_t>(0);
10149 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10150 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
10151 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10152 break;
10153 case ARM::BI__builtin_arm_mve_vmulhq_m_u16:
10154 Param0 = static_cast<uint32_t>(1);
10155 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10156 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
10157 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10158 break;
10159 case ARM::BI__builtin_arm_mve_vmulhq_m_u32:
10160 Param0 = static_cast<uint32_t>(1);
10161 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10162 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
10163 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10164 break;
10165 case ARM::BI__builtin_arm_mve_vmulhq_m_u8:
10166 Param0 = static_cast<uint32_t>(1);
10167 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10168 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
10169 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10170 break;
10171 case ARM::BI__builtin_arm_mve_vqaddq_m_s16:
10172 Param0 = static_cast<uint32_t>(0);
10173 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10174 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
10175 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10176 break;
10177 case ARM::BI__builtin_arm_mve_vqaddq_m_s32:
10178 Param0 = static_cast<uint32_t>(0);
10179 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10180 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
10181 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10182 break;
10183 case ARM::BI__builtin_arm_mve_vqaddq_m_s8:
10184 Param0 = static_cast<uint32_t>(0);
10185 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10186 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
10187 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10188 break;
10189 case ARM::BI__builtin_arm_mve_vqaddq_m_u16:
10190 Param0 = static_cast<uint32_t>(1);
10191 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10192 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
10193 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10194 break;
10195 case ARM::BI__builtin_arm_mve_vqaddq_m_u32:
10196 Param0 = static_cast<uint32_t>(1);
10197 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10198 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
10199 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10200 break;
10201 case ARM::BI__builtin_arm_mve_vqaddq_m_u8:
10202 Param0 = static_cast<uint32_t>(1);
10203 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10204 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qadd_predicated);
10205 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10206 break;
10207 case ARM::BI__builtin_arm_mve_vqshlq_m_n_s16:
10208 Param0 = static_cast<uint32_t>(0);
10209 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10210 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm_predicated);
10211 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10212 break;
10213 case ARM::BI__builtin_arm_mve_vqshlq_m_n_s32:
10214 Param0 = static_cast<uint32_t>(0);
10215 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10216 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm_predicated);
10217 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10218 break;
10219 case ARM::BI__builtin_arm_mve_vqshlq_m_n_s8:
10220 Param0 = static_cast<uint32_t>(0);
10221 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10222 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm_predicated);
10223 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10224 break;
10225 case ARM::BI__builtin_arm_mve_vqshlq_m_n_u16:
10226 Param0 = static_cast<uint32_t>(1);
10227 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10228 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm_predicated);
10229 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10230 break;
10231 case ARM::BI__builtin_arm_mve_vqshlq_m_n_u32:
10232 Param0 = static_cast<uint32_t>(1);
10233 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10234 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm_predicated);
10235 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10236 break;
10237 case ARM::BI__builtin_arm_mve_vqshlq_m_n_u8:
10238 Param0 = static_cast<uint32_t>(1);
10239 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10240 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqshl_imm_predicated);
10241 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10242 break;
10243 case ARM::BI__builtin_arm_mve_vqsubq_m_s16:
10244 Param0 = static_cast<uint32_t>(0);
10245 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10246 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
10247 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10248 break;
10249 case ARM::BI__builtin_arm_mve_vqsubq_m_s32:
10250 Param0 = static_cast<uint32_t>(0);
10251 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10252 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
10253 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10254 break;
10255 case ARM::BI__builtin_arm_mve_vqsubq_m_s8:
10256 Param0 = static_cast<uint32_t>(0);
10257 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10258 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
10259 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10260 break;
10261 case ARM::BI__builtin_arm_mve_vqsubq_m_u16:
10262 Param0 = static_cast<uint32_t>(1);
10263 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10264 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
10265 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10266 break;
10267 case ARM::BI__builtin_arm_mve_vqsubq_m_u32:
10268 Param0 = static_cast<uint32_t>(1);
10269 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10270 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
10271 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10272 break;
10273 case ARM::BI__builtin_arm_mve_vqsubq_m_u8:
10274 Param0 = static_cast<uint32_t>(1);
10275 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10276 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_qsub_predicated);
10277 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10278 break;
10279 case ARM::BI__builtin_arm_mve_vrhaddq_m_s16:
10280 Param0 = static_cast<uint32_t>(0);
10281 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10282 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
10283 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10284 break;
10285 case ARM::BI__builtin_arm_mve_vrhaddq_m_s32:
10286 Param0 = static_cast<uint32_t>(0);
10287 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10288 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
10289 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10290 break;
10291 case ARM::BI__builtin_arm_mve_vrhaddq_m_s8:
10292 Param0 = static_cast<uint32_t>(0);
10293 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10294 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
10295 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10296 break;
10297 case ARM::BI__builtin_arm_mve_vrhaddq_m_u16:
10298 Param0 = static_cast<uint32_t>(1);
10299 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10300 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
10301 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10302 break;
10303 case ARM::BI__builtin_arm_mve_vrhaddq_m_u32:
10304 Param0 = static_cast<uint32_t>(1);
10305 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10306 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
10307 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10308 break;
10309 case ARM::BI__builtin_arm_mve_vrhaddq_m_u8:
10310 Param0 = static_cast<uint32_t>(1);
10311 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10312 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
10313 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10314 break;
10315 case ARM::BI__builtin_arm_mve_vrmulhq_m_s16:
10316 Param0 = static_cast<uint32_t>(0);
10317 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10318 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
10319 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10320 break;
10321 case ARM::BI__builtin_arm_mve_vrmulhq_m_s32:
10322 Param0 = static_cast<uint32_t>(0);
10323 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10324 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
10325 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10326 break;
10327 case ARM::BI__builtin_arm_mve_vrmulhq_m_s8:
10328 Param0 = static_cast<uint32_t>(0);
10329 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10330 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
10331 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10332 break;
10333 case ARM::BI__builtin_arm_mve_vrmulhq_m_u16:
10334 Param0 = static_cast<uint32_t>(1);
10335 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10336 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
10337 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10338 break;
10339 case ARM::BI__builtin_arm_mve_vrmulhq_m_u32:
10340 Param0 = static_cast<uint32_t>(1);
10341 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10342 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
10343 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10344 break;
10345 case ARM::BI__builtin_arm_mve_vrmulhq_m_u8:
10346 Param0 = static_cast<uint32_t>(1);
10347 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10348 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
10349 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10350 break;
10351 case ARM::BI__builtin_arm_mve_vrshrq_m_n_s16:
10352 Param0 = static_cast<uint32_t>(0);
10353 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10354 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
10355 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10356 break;
10357 case ARM::BI__builtin_arm_mve_vrshrq_m_n_s32:
10358 Param0 = static_cast<uint32_t>(0);
10359 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10360 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
10361 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10362 break;
10363 case ARM::BI__builtin_arm_mve_vrshrq_m_n_s8:
10364 Param0 = static_cast<uint32_t>(0);
10365 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10366 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
10367 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10368 break;
10369 case ARM::BI__builtin_arm_mve_vrshrq_m_n_u16:
10370 Param0 = static_cast<uint32_t>(1);
10371 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10372 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
10373 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10374 break;
10375 case ARM::BI__builtin_arm_mve_vrshrq_m_n_u32:
10376 Param0 = static_cast<uint32_t>(1);
10377 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10378 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
10379 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10380 break;
10381 case ARM::BI__builtin_arm_mve_vrshrq_m_n_u8:
10382 Param0 = static_cast<uint32_t>(1);
10383 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10384 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
10385 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10386 break;
10387 case ARM::BI__builtin_arm_mve_vshrq_m_n_s16:
10388 Param0 = static_cast<uint32_t>(0);
10389 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10390 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
10391 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10392 break;
10393 case ARM::BI__builtin_arm_mve_vshrq_m_n_s32:
10394 Param0 = static_cast<uint32_t>(0);
10395 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10396 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
10397 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10398 break;
10399 case ARM::BI__builtin_arm_mve_vshrq_m_n_s8:
10400 Param0 = static_cast<uint32_t>(0);
10401 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10402 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
10403 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10404 break;
10405 case ARM::BI__builtin_arm_mve_vshrq_m_n_u16:
10406 Param0 = static_cast<uint32_t>(1);
10407 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10408 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
10409 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10410 break;
10411 case ARM::BI__builtin_arm_mve_vshrq_m_n_u32:
10412 Param0 = static_cast<uint32_t>(1);
10413 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10414 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
10415 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10416 break;
10417 case ARM::BI__builtin_arm_mve_vshrq_m_n_u8:
10418 Param0 = static_cast<uint32_t>(1);
10419 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10420 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
10421 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10422 break;
10423 }
10424 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
10425 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
10426 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
10427 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
10428 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
10429 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val4});
10430 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 0));
10431 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param1}), Args: {Val0, Val1, Val2, Val5, Val6});
10432}
10433case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p16:
10434case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p8:
10435case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p16:
10436case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p8:
10437case ARM::BI__builtin_arm_mve_vqdmullbq_m_s16:
10438case ARM::BI__builtin_arm_mve_vqdmullbq_m_s32:
10439case ARM::BI__builtin_arm_mve_vqdmulltq_m_s16:
10440case ARM::BI__builtin_arm_mve_vqdmulltq_m_s32: {
10441 uint32_t Param0;
10442 llvm::Type * Param1;
10443 Intrinsic::ID Param2;
10444 llvm::Type * Param3;
10445 llvm::Type * Param4;
10446 switch (BuiltinID) {
10447 case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p16:
10448 Param0 = static_cast<uint32_t>(0);
10449 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10450 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_poly_predicated);
10451 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10452 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10453 break;
10454 case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p8:
10455 Param0 = static_cast<uint32_t>(0);
10456 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10457 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_poly_predicated);
10458 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10459 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10460 break;
10461 case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p16:
10462 Param0 = static_cast<uint32_t>(1);
10463 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10464 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_poly_predicated);
10465 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10466 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10467 break;
10468 case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p8:
10469 Param0 = static_cast<uint32_t>(1);
10470 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10471 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_poly_predicated);
10472 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10473 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10474 break;
10475 case ARM::BI__builtin_arm_mve_vqdmullbq_m_s16:
10476 Param0 = static_cast<uint32_t>(0);
10477 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10478 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull_predicated);
10479 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10480 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10481 break;
10482 case ARM::BI__builtin_arm_mve_vqdmullbq_m_s32:
10483 Param0 = static_cast<uint32_t>(0);
10484 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
10485 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull_predicated);
10486 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
10487 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10488 break;
10489 case ARM::BI__builtin_arm_mve_vqdmulltq_m_s16:
10490 Param0 = static_cast<uint32_t>(1);
10491 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10492 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull_predicated);
10493 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10494 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10495 break;
10496 case ARM::BI__builtin_arm_mve_vqdmulltq_m_s32:
10497 Param0 = static_cast<uint32_t>(1);
10498 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
10499 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vqdmull_predicated);
10500 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
10501 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10502 break;
10503 }
10504 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
10505 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
10506 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
10507 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 3));
10508 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
10509 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val4});
10510 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 0));
10511 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param4, Param1}), Args: {Val0, Val1, Val2, Val5, Val6});
10512}
10513case ARM::BI__builtin_arm_mve_vmullbq_int_m_s16:
10514case ARM::BI__builtin_arm_mve_vmullbq_int_m_s32:
10515case ARM::BI__builtin_arm_mve_vmullbq_int_m_s8:
10516case ARM::BI__builtin_arm_mve_vmullbq_int_m_u16:
10517case ARM::BI__builtin_arm_mve_vmullbq_int_m_u32:
10518case ARM::BI__builtin_arm_mve_vmullbq_int_m_u8:
10519case ARM::BI__builtin_arm_mve_vmulltq_int_m_s16:
10520case ARM::BI__builtin_arm_mve_vmulltq_int_m_s32:
10521case ARM::BI__builtin_arm_mve_vmulltq_int_m_s8:
10522case ARM::BI__builtin_arm_mve_vmulltq_int_m_u16:
10523case ARM::BI__builtin_arm_mve_vmulltq_int_m_u32:
10524case ARM::BI__builtin_arm_mve_vmulltq_int_m_u8:
10525case ARM::BI__builtin_arm_mve_vshllbq_m_n_s16:
10526case ARM::BI__builtin_arm_mve_vshllbq_m_n_s8:
10527case ARM::BI__builtin_arm_mve_vshllbq_m_n_u16:
10528case ARM::BI__builtin_arm_mve_vshllbq_m_n_u8:
10529case ARM::BI__builtin_arm_mve_vshlltq_m_n_s16:
10530case ARM::BI__builtin_arm_mve_vshlltq_m_n_s8:
10531case ARM::BI__builtin_arm_mve_vshlltq_m_n_u16:
10532case ARM::BI__builtin_arm_mve_vshlltq_m_n_u8: {
10533 uint32_t Param0;
10534 uint32_t Param1;
10535 llvm::Type * Param2;
10536 Intrinsic::ID Param3;
10537 llvm::Type * Param4;
10538 llvm::Type * Param5;
10539 switch (BuiltinID) {
10540 case ARM::BI__builtin_arm_mve_vmullbq_int_m_s16:
10541 Param0 = static_cast<uint32_t>(0);
10542 Param1 = static_cast<uint32_t>(0);
10543 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10544 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10545 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10546 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10547 break;
10548 case ARM::BI__builtin_arm_mve_vmullbq_int_m_s32:
10549 Param0 = static_cast<uint32_t>(0);
10550 Param1 = static_cast<uint32_t>(0);
10551 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
10552 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10553 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
10554 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10555 break;
10556 case ARM::BI__builtin_arm_mve_vmullbq_int_m_s8:
10557 Param0 = static_cast<uint32_t>(0);
10558 Param1 = static_cast<uint32_t>(0);
10559 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10560 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10561 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10562 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10563 break;
10564 case ARM::BI__builtin_arm_mve_vmullbq_int_m_u16:
10565 Param0 = static_cast<uint32_t>(1);
10566 Param1 = static_cast<uint32_t>(0);
10567 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10568 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10569 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10570 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10571 break;
10572 case ARM::BI__builtin_arm_mve_vmullbq_int_m_u32:
10573 Param0 = static_cast<uint32_t>(1);
10574 Param1 = static_cast<uint32_t>(0);
10575 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
10576 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10577 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
10578 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10579 break;
10580 case ARM::BI__builtin_arm_mve_vmullbq_int_m_u8:
10581 Param0 = static_cast<uint32_t>(1);
10582 Param1 = static_cast<uint32_t>(0);
10583 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10584 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10585 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10586 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10587 break;
10588 case ARM::BI__builtin_arm_mve_vmulltq_int_m_s16:
10589 Param0 = static_cast<uint32_t>(0);
10590 Param1 = static_cast<uint32_t>(1);
10591 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10592 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10593 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10594 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10595 break;
10596 case ARM::BI__builtin_arm_mve_vmulltq_int_m_s32:
10597 Param0 = static_cast<uint32_t>(0);
10598 Param1 = static_cast<uint32_t>(1);
10599 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
10600 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10601 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
10602 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10603 break;
10604 case ARM::BI__builtin_arm_mve_vmulltq_int_m_s8:
10605 Param0 = static_cast<uint32_t>(0);
10606 Param1 = static_cast<uint32_t>(1);
10607 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10608 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10609 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10610 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10611 break;
10612 case ARM::BI__builtin_arm_mve_vmulltq_int_m_u16:
10613 Param0 = static_cast<uint32_t>(1);
10614 Param1 = static_cast<uint32_t>(1);
10615 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10616 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10617 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10618 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10619 break;
10620 case ARM::BI__builtin_arm_mve_vmulltq_int_m_u32:
10621 Param0 = static_cast<uint32_t>(1);
10622 Param1 = static_cast<uint32_t>(1);
10623 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2));
10624 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10625 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2));
10626 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10627 break;
10628 case ARM::BI__builtin_arm_mve_vmulltq_int_m_u8:
10629 Param0 = static_cast<uint32_t>(1);
10630 Param1 = static_cast<uint32_t>(1);
10631 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10632 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
10633 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10634 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10635 break;
10636 case ARM::BI__builtin_arm_mve_vshllbq_m_n_s16:
10637 Param0 = static_cast<uint32_t>(0);
10638 Param1 = static_cast<uint32_t>(0);
10639 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10640 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10641 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10642 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10643 break;
10644 case ARM::BI__builtin_arm_mve_vshllbq_m_n_s8:
10645 Param0 = static_cast<uint32_t>(0);
10646 Param1 = static_cast<uint32_t>(0);
10647 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10648 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10649 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10650 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10651 break;
10652 case ARM::BI__builtin_arm_mve_vshllbq_m_n_u16:
10653 Param0 = static_cast<uint32_t>(1);
10654 Param1 = static_cast<uint32_t>(0);
10655 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10656 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10657 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10658 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10659 break;
10660 case ARM::BI__builtin_arm_mve_vshllbq_m_n_u8:
10661 Param0 = static_cast<uint32_t>(1);
10662 Param1 = static_cast<uint32_t>(0);
10663 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10664 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10665 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10666 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10667 break;
10668 case ARM::BI__builtin_arm_mve_vshlltq_m_n_s16:
10669 Param0 = static_cast<uint32_t>(0);
10670 Param1 = static_cast<uint32_t>(1);
10671 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10672 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10673 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10674 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10675 break;
10676 case ARM::BI__builtin_arm_mve_vshlltq_m_n_s8:
10677 Param0 = static_cast<uint32_t>(0);
10678 Param1 = static_cast<uint32_t>(1);
10679 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10680 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10681 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10682 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10683 break;
10684 case ARM::BI__builtin_arm_mve_vshlltq_m_n_u16:
10685 Param0 = static_cast<uint32_t>(1);
10686 Param1 = static_cast<uint32_t>(1);
10687 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10688 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10689 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10690 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10691 break;
10692 case ARM::BI__builtin_arm_mve_vshlltq_m_n_u8:
10693 Param0 = static_cast<uint32_t>(1);
10694 Param1 = static_cast<uint32_t>(1);
10695 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10696 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
10697 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10698 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10699 break;
10700 }
10701 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
10702 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
10703 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
10704 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
10705 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
10706 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
10707 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param2}), Args: {Val5});
10708 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 0));
10709 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param3, Tys: {Param4, Param5, Param2}), Args: {Val0, Val1, Val2, Val3, Val6, Val7});
10710}
10711case ARM::BI__builtin_arm_mve_vqrshlq_m_s16:
10712case ARM::BI__builtin_arm_mve_vqrshlq_m_s32:
10713case ARM::BI__builtin_arm_mve_vqrshlq_m_s8:
10714case ARM::BI__builtin_arm_mve_vqrshlq_m_u16:
10715case ARM::BI__builtin_arm_mve_vqrshlq_m_u32:
10716case ARM::BI__builtin_arm_mve_vqrshlq_m_u8:
10717case ARM::BI__builtin_arm_mve_vqshlq_m_s16:
10718case ARM::BI__builtin_arm_mve_vqshlq_m_s32:
10719case ARM::BI__builtin_arm_mve_vqshlq_m_s8:
10720case ARM::BI__builtin_arm_mve_vqshlq_m_u16:
10721case ARM::BI__builtin_arm_mve_vqshlq_m_u32:
10722case ARM::BI__builtin_arm_mve_vqshlq_m_u8:
10723case ARM::BI__builtin_arm_mve_vrshlq_m_s16:
10724case ARM::BI__builtin_arm_mve_vrshlq_m_s32:
10725case ARM::BI__builtin_arm_mve_vrshlq_m_s8:
10726case ARM::BI__builtin_arm_mve_vrshlq_m_u16:
10727case ARM::BI__builtin_arm_mve_vrshlq_m_u32:
10728case ARM::BI__builtin_arm_mve_vrshlq_m_u8:
10729case ARM::BI__builtin_arm_mve_vshlq_m_s16:
10730case ARM::BI__builtin_arm_mve_vshlq_m_s32:
10731case ARM::BI__builtin_arm_mve_vshlq_m_s8:
10732case ARM::BI__builtin_arm_mve_vshlq_m_u16:
10733case ARM::BI__builtin_arm_mve_vshlq_m_u32:
10734case ARM::BI__builtin_arm_mve_vshlq_m_u8: {
10735 uint32_t Param0;
10736 uint32_t Param1;
10737 uint32_t Param2;
10738 llvm::Type * Param3;
10739 llvm::Type * Param4;
10740 switch (BuiltinID) {
10741 case ARM::BI__builtin_arm_mve_vqrshlq_m_s16:
10742 Param0 = static_cast<uint32_t>(1);
10743 Param1 = static_cast<uint32_t>(1);
10744 Param2 = static_cast<uint32_t>(0);
10745 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10746 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10747 break;
10748 case ARM::BI__builtin_arm_mve_vqrshlq_m_s32:
10749 Param0 = static_cast<uint32_t>(1);
10750 Param1 = static_cast<uint32_t>(1);
10751 Param2 = static_cast<uint32_t>(0);
10752 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10753 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10754 break;
10755 case ARM::BI__builtin_arm_mve_vqrshlq_m_s8:
10756 Param0 = static_cast<uint32_t>(1);
10757 Param1 = static_cast<uint32_t>(1);
10758 Param2 = static_cast<uint32_t>(0);
10759 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10760 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10761 break;
10762 case ARM::BI__builtin_arm_mve_vqrshlq_m_u16:
10763 Param0 = static_cast<uint32_t>(1);
10764 Param1 = static_cast<uint32_t>(1);
10765 Param2 = static_cast<uint32_t>(1);
10766 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10767 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10768 break;
10769 case ARM::BI__builtin_arm_mve_vqrshlq_m_u32:
10770 Param0 = static_cast<uint32_t>(1);
10771 Param1 = static_cast<uint32_t>(1);
10772 Param2 = static_cast<uint32_t>(1);
10773 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10774 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10775 break;
10776 case ARM::BI__builtin_arm_mve_vqrshlq_m_u8:
10777 Param0 = static_cast<uint32_t>(1);
10778 Param1 = static_cast<uint32_t>(1);
10779 Param2 = static_cast<uint32_t>(1);
10780 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10781 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10782 break;
10783 case ARM::BI__builtin_arm_mve_vqshlq_m_s16:
10784 Param0 = static_cast<uint32_t>(1);
10785 Param1 = static_cast<uint32_t>(0);
10786 Param2 = static_cast<uint32_t>(0);
10787 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10788 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10789 break;
10790 case ARM::BI__builtin_arm_mve_vqshlq_m_s32:
10791 Param0 = static_cast<uint32_t>(1);
10792 Param1 = static_cast<uint32_t>(0);
10793 Param2 = static_cast<uint32_t>(0);
10794 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10795 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10796 break;
10797 case ARM::BI__builtin_arm_mve_vqshlq_m_s8:
10798 Param0 = static_cast<uint32_t>(1);
10799 Param1 = static_cast<uint32_t>(0);
10800 Param2 = static_cast<uint32_t>(0);
10801 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10802 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10803 break;
10804 case ARM::BI__builtin_arm_mve_vqshlq_m_u16:
10805 Param0 = static_cast<uint32_t>(1);
10806 Param1 = static_cast<uint32_t>(0);
10807 Param2 = static_cast<uint32_t>(1);
10808 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10809 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10810 break;
10811 case ARM::BI__builtin_arm_mve_vqshlq_m_u32:
10812 Param0 = static_cast<uint32_t>(1);
10813 Param1 = static_cast<uint32_t>(0);
10814 Param2 = static_cast<uint32_t>(1);
10815 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10816 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10817 break;
10818 case ARM::BI__builtin_arm_mve_vqshlq_m_u8:
10819 Param0 = static_cast<uint32_t>(1);
10820 Param1 = static_cast<uint32_t>(0);
10821 Param2 = static_cast<uint32_t>(1);
10822 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10823 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10824 break;
10825 case ARM::BI__builtin_arm_mve_vrshlq_m_s16:
10826 Param0 = static_cast<uint32_t>(0);
10827 Param1 = static_cast<uint32_t>(1);
10828 Param2 = static_cast<uint32_t>(0);
10829 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10830 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10831 break;
10832 case ARM::BI__builtin_arm_mve_vrshlq_m_s32:
10833 Param0 = static_cast<uint32_t>(0);
10834 Param1 = static_cast<uint32_t>(1);
10835 Param2 = static_cast<uint32_t>(0);
10836 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10837 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10838 break;
10839 case ARM::BI__builtin_arm_mve_vrshlq_m_s8:
10840 Param0 = static_cast<uint32_t>(0);
10841 Param1 = static_cast<uint32_t>(1);
10842 Param2 = static_cast<uint32_t>(0);
10843 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10844 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10845 break;
10846 case ARM::BI__builtin_arm_mve_vrshlq_m_u16:
10847 Param0 = static_cast<uint32_t>(0);
10848 Param1 = static_cast<uint32_t>(1);
10849 Param2 = static_cast<uint32_t>(1);
10850 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10851 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10852 break;
10853 case ARM::BI__builtin_arm_mve_vrshlq_m_u32:
10854 Param0 = static_cast<uint32_t>(0);
10855 Param1 = static_cast<uint32_t>(1);
10856 Param2 = static_cast<uint32_t>(1);
10857 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10858 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10859 break;
10860 case ARM::BI__builtin_arm_mve_vrshlq_m_u8:
10861 Param0 = static_cast<uint32_t>(0);
10862 Param1 = static_cast<uint32_t>(1);
10863 Param2 = static_cast<uint32_t>(1);
10864 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10865 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10866 break;
10867 case ARM::BI__builtin_arm_mve_vshlq_m_s16:
10868 Param0 = static_cast<uint32_t>(0);
10869 Param1 = static_cast<uint32_t>(0);
10870 Param2 = static_cast<uint32_t>(0);
10871 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10872 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10873 break;
10874 case ARM::BI__builtin_arm_mve_vshlq_m_s32:
10875 Param0 = static_cast<uint32_t>(0);
10876 Param1 = static_cast<uint32_t>(0);
10877 Param2 = static_cast<uint32_t>(0);
10878 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10879 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10880 break;
10881 case ARM::BI__builtin_arm_mve_vshlq_m_s8:
10882 Param0 = static_cast<uint32_t>(0);
10883 Param1 = static_cast<uint32_t>(0);
10884 Param2 = static_cast<uint32_t>(0);
10885 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10886 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10887 break;
10888 case ARM::BI__builtin_arm_mve_vshlq_m_u16:
10889 Param0 = static_cast<uint32_t>(0);
10890 Param1 = static_cast<uint32_t>(0);
10891 Param2 = static_cast<uint32_t>(1);
10892 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
10893 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10894 break;
10895 case ARM::BI__builtin_arm_mve_vshlq_m_u32:
10896 Param0 = static_cast<uint32_t>(0);
10897 Param1 = static_cast<uint32_t>(0);
10898 Param2 = static_cast<uint32_t>(1);
10899 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10900 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10901 break;
10902 case ARM::BI__builtin_arm_mve_vshlq_m_u8:
10903 Param0 = static_cast<uint32_t>(0);
10904 Param1 = static_cast<uint32_t>(0);
10905 Param2 = static_cast<uint32_t>(1);
10906 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
10907 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10908 break;
10909 }
10910 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
10911 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 2));
10912 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
10913 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
10914 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
10915 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
10916 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
10917 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val6});
10918 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
10919 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshl_vector_predicated, Tys: {Param4, Param4, Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val7, Val8});
10920}
10921case ARM::BI__builtin_arm_mve_vaddlvaq_s32:
10922case ARM::BI__builtin_arm_mve_vaddlvaq_u32:
10923case ARM::BI__builtin_arm_mve_vaddvaq_s16:
10924case ARM::BI__builtin_arm_mve_vaddvaq_s32:
10925case ARM::BI__builtin_arm_mve_vaddvaq_s8:
10926case ARM::BI__builtin_arm_mve_vaddvaq_u16:
10927case ARM::BI__builtin_arm_mve_vaddvaq_u32:
10928case ARM::BI__builtin_arm_mve_vaddvaq_u8: {
10929 uint32_t Param0;
10930 Intrinsic::ID Param1;
10931 llvm::Type * Param2;
10932 switch (BuiltinID) {
10933 case ARM::BI__builtin_arm_mve_vaddlvaq_s32:
10934 Param0 = static_cast<uint32_t>(0);
10935 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv);
10936 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10937 break;
10938 case ARM::BI__builtin_arm_mve_vaddlvaq_u32:
10939 Param0 = static_cast<uint32_t>(1);
10940 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv);
10941 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10942 break;
10943 case ARM::BI__builtin_arm_mve_vaddvaq_s16:
10944 Param0 = static_cast<uint32_t>(0);
10945 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
10946 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10947 break;
10948 case ARM::BI__builtin_arm_mve_vaddvaq_s32:
10949 Param0 = static_cast<uint32_t>(0);
10950 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
10951 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10952 break;
10953 case ARM::BI__builtin_arm_mve_vaddvaq_s8:
10954 Param0 = static_cast<uint32_t>(0);
10955 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
10956 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10957 break;
10958 case ARM::BI__builtin_arm_mve_vaddvaq_u16:
10959 Param0 = static_cast<uint32_t>(1);
10960 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
10961 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
10962 break;
10963 case ARM::BI__builtin_arm_mve_vaddvaq_u32:
10964 Param0 = static_cast<uint32_t>(1);
10965 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
10966 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10967 break;
10968 case ARM::BI__builtin_arm_mve_vaddvaq_u8:
10969 Param0 = static_cast<uint32_t>(1);
10970 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv);
10971 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
10972 break;
10973 }
10974 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
10975 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
10976 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2}), Args: {Val0, Val1});
10977 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
10978 return Builder.CreateAdd(LHS: Val2, RHS: Val3);
10979}
10980case ARM::BI__builtin_arm_mve_vaddlvaq_p_s32:
10981case ARM::BI__builtin_arm_mve_vaddlvaq_p_u32:
10982case ARM::BI__builtin_arm_mve_vaddvaq_p_s16:
10983case ARM::BI__builtin_arm_mve_vaddvaq_p_s32:
10984case ARM::BI__builtin_arm_mve_vaddvaq_p_s8:
10985case ARM::BI__builtin_arm_mve_vaddvaq_p_u16:
10986case ARM::BI__builtin_arm_mve_vaddvaq_p_u32:
10987case ARM::BI__builtin_arm_mve_vaddvaq_p_u8: {
10988 uint32_t Param0;
10989 llvm::Type * Param1;
10990 Intrinsic::ID Param2;
10991 llvm::Type * Param3;
10992 switch (BuiltinID) {
10993 case ARM::BI__builtin_arm_mve_vaddlvaq_p_s32:
10994 Param0 = static_cast<uint32_t>(0);
10995 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
10996 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv_predicated);
10997 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
10998 break;
10999 case ARM::BI__builtin_arm_mve_vaddlvaq_p_u32:
11000 Param0 = static_cast<uint32_t>(1);
11001 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11002 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addlv_predicated);
11003 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11004 break;
11005 case ARM::BI__builtin_arm_mve_vaddvaq_p_s16:
11006 Param0 = static_cast<uint32_t>(0);
11007 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11008 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
11009 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11010 break;
11011 case ARM::BI__builtin_arm_mve_vaddvaq_p_s32:
11012 Param0 = static_cast<uint32_t>(0);
11013 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11014 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
11015 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11016 break;
11017 case ARM::BI__builtin_arm_mve_vaddvaq_p_s8:
11018 Param0 = static_cast<uint32_t>(0);
11019 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11020 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
11021 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11022 break;
11023 case ARM::BI__builtin_arm_mve_vaddvaq_p_u16:
11024 Param0 = static_cast<uint32_t>(1);
11025 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11026 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
11027 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11028 break;
11029 case ARM::BI__builtin_arm_mve_vaddvaq_p_u32:
11030 Param0 = static_cast<uint32_t>(1);
11031 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11032 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
11033 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11034 break;
11035 case ARM::BI__builtin_arm_mve_vaddvaq_p_u8:
11036 Param0 = static_cast<uint32_t>(1);
11037 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11038 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_addv_predicated);
11039 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11040 break;
11041 }
11042 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11043 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
11044 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
11045 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
11046 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val3});
11047 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param1}), Args: {Val0, Val1, Val4});
11048 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 0));
11049 return Builder.CreateAdd(LHS: Val5, RHS: Val6);
11050}
11051case ARM::BI__builtin_arm_mve_vcvtq_m_f16_s16:
11052case ARM::BI__builtin_arm_mve_vcvtq_m_f16_u16:
11053case ARM::BI__builtin_arm_mve_vcvtq_m_f32_s32:
11054case ARM::BI__builtin_arm_mve_vcvtq_m_f32_u32:
11055case ARM::BI__builtin_arm_mve_vcvtq_m_s16_f16:
11056case ARM::BI__builtin_arm_mve_vcvtq_m_s32_f32:
11057case ARM::BI__builtin_arm_mve_vcvtq_m_u16_f16:
11058case ARM::BI__builtin_arm_mve_vcvtq_m_u32_f32: {
11059 uint32_t Param0;
11060 llvm::Type * Param1;
11061 llvm::Type * Param2;
11062 llvm::Type * Param3;
11063 switch (BuiltinID) {
11064 case ARM::BI__builtin_arm_mve_vcvtq_m_f16_s16:
11065 Param0 = static_cast<uint32_t>(0);
11066 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11067 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11068 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11069 break;
11070 case ARM::BI__builtin_arm_mve_vcvtq_m_f16_u16:
11071 Param0 = static_cast<uint32_t>(1);
11072 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11073 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11074 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11075 break;
11076 case ARM::BI__builtin_arm_mve_vcvtq_m_f32_s32:
11077 Param0 = static_cast<uint32_t>(0);
11078 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11079 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11080 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11081 break;
11082 case ARM::BI__builtin_arm_mve_vcvtq_m_f32_u32:
11083 Param0 = static_cast<uint32_t>(1);
11084 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11085 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11086 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11087 break;
11088 case ARM::BI__builtin_arm_mve_vcvtq_m_s16_f16:
11089 Param0 = static_cast<uint32_t>(0);
11090 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11091 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11092 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11093 break;
11094 case ARM::BI__builtin_arm_mve_vcvtq_m_s32_f32:
11095 Param0 = static_cast<uint32_t>(0);
11096 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11097 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11098 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11099 break;
11100 case ARM::BI__builtin_arm_mve_vcvtq_m_u16_f16:
11101 Param0 = static_cast<uint32_t>(1);
11102 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11103 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11104 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11105 break;
11106 case ARM::BI__builtin_arm_mve_vcvtq_m_u32_f32:
11107 Param0 = static_cast<uint32_t>(1);
11108 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11109 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11110 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11111 break;
11112 }
11113 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11114 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
11115 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
11116 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
11117 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val3});
11118 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
11119 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fp_int_predicated, Tys: {Param2, Param3, Param1}), Args: {Val0, Val1, Val4, Val5});
11120}
11121case ARM::BI__builtin_arm_mve_vrev16q_m_s8:
11122case ARM::BI__builtin_arm_mve_vrev16q_m_u8:
11123case ARM::BI__builtin_arm_mve_vrev32q_m_f16:
11124case ARM::BI__builtin_arm_mve_vrev32q_m_s16:
11125case ARM::BI__builtin_arm_mve_vrev32q_m_s8:
11126case ARM::BI__builtin_arm_mve_vrev32q_m_u16:
11127case ARM::BI__builtin_arm_mve_vrev32q_m_u8:
11128case ARM::BI__builtin_arm_mve_vrev64q_m_f16:
11129case ARM::BI__builtin_arm_mve_vrev64q_m_f32:
11130case ARM::BI__builtin_arm_mve_vrev64q_m_s16:
11131case ARM::BI__builtin_arm_mve_vrev64q_m_s32:
11132case ARM::BI__builtin_arm_mve_vrev64q_m_s8:
11133case ARM::BI__builtin_arm_mve_vrev64q_m_u16:
11134case ARM::BI__builtin_arm_mve_vrev64q_m_u32:
11135case ARM::BI__builtin_arm_mve_vrev64q_m_u8: {
11136 uint32_t Param0;
11137 llvm::Type * Param1;
11138 llvm::Type * Param2;
11139 switch (BuiltinID) {
11140 case ARM::BI__builtin_arm_mve_vrev16q_m_s8:
11141 Param0 = static_cast<uint32_t>(16);
11142 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11143 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11144 break;
11145 case ARM::BI__builtin_arm_mve_vrev16q_m_u8:
11146 Param0 = static_cast<uint32_t>(16);
11147 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11148 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11149 break;
11150 case ARM::BI__builtin_arm_mve_vrev32q_m_f16:
11151 Param0 = static_cast<uint32_t>(32);
11152 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11153 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11154 break;
11155 case ARM::BI__builtin_arm_mve_vrev32q_m_s16:
11156 Param0 = static_cast<uint32_t>(32);
11157 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11158 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11159 break;
11160 case ARM::BI__builtin_arm_mve_vrev32q_m_s8:
11161 Param0 = static_cast<uint32_t>(32);
11162 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11163 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11164 break;
11165 case ARM::BI__builtin_arm_mve_vrev32q_m_u16:
11166 Param0 = static_cast<uint32_t>(32);
11167 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11168 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11169 break;
11170 case ARM::BI__builtin_arm_mve_vrev32q_m_u8:
11171 Param0 = static_cast<uint32_t>(32);
11172 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11173 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11174 break;
11175 case ARM::BI__builtin_arm_mve_vrev64q_m_f16:
11176 Param0 = static_cast<uint32_t>(64);
11177 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11178 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11179 break;
11180 case ARM::BI__builtin_arm_mve_vrev64q_m_f32:
11181 Param0 = static_cast<uint32_t>(64);
11182 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11183 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11184 break;
11185 case ARM::BI__builtin_arm_mve_vrev64q_m_s16:
11186 Param0 = static_cast<uint32_t>(64);
11187 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11188 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11189 break;
11190 case ARM::BI__builtin_arm_mve_vrev64q_m_s32:
11191 Param0 = static_cast<uint32_t>(64);
11192 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11193 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11194 break;
11195 case ARM::BI__builtin_arm_mve_vrev64q_m_s8:
11196 Param0 = static_cast<uint32_t>(64);
11197 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11198 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11199 break;
11200 case ARM::BI__builtin_arm_mve_vrev64q_m_u16:
11201 Param0 = static_cast<uint32_t>(64);
11202 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11203 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11204 break;
11205 case ARM::BI__builtin_arm_mve_vrev64q_m_u32:
11206 Param0 = static_cast<uint32_t>(64);
11207 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11208 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11209 break;
11210 case ARM::BI__builtin_arm_mve_vrev64q_m_u8:
11211 Param0 = static_cast<uint32_t>(64);
11212 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
11213 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11214 break;
11215 }
11216 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11217 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
11218 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 2));
11219 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
11220 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val3});
11221 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
11222 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vrev_predicated, Tys: {Param2, Param1}), Args: {Val0, Val1, Val4, Val5});
11223}
11224case ARM::BI__builtin_arm_mve_vmovlbq_m_s16:
11225case ARM::BI__builtin_arm_mve_vmovlbq_m_s8:
11226case ARM::BI__builtin_arm_mve_vmovlbq_m_u16:
11227case ARM::BI__builtin_arm_mve_vmovlbq_m_u8:
11228case ARM::BI__builtin_arm_mve_vmovltq_m_s16:
11229case ARM::BI__builtin_arm_mve_vmovltq_m_s8:
11230case ARM::BI__builtin_arm_mve_vmovltq_m_u16:
11231case ARM::BI__builtin_arm_mve_vmovltq_m_u8: {
11232 uint32_t Param0;
11233 uint32_t Param1;
11234 llvm::Type * Param2;
11235 llvm::Type * Param3;
11236 llvm::Type * Param4;
11237 switch (BuiltinID) {
11238 case ARM::BI__builtin_arm_mve_vmovlbq_m_s16:
11239 Param0 = static_cast<uint32_t>(0);
11240 Param1 = static_cast<uint32_t>(0);
11241 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11242 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11243 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11244 break;
11245 case ARM::BI__builtin_arm_mve_vmovlbq_m_s8:
11246 Param0 = static_cast<uint32_t>(0);
11247 Param1 = static_cast<uint32_t>(0);
11248 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11249 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11250 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11251 break;
11252 case ARM::BI__builtin_arm_mve_vmovlbq_m_u16:
11253 Param0 = static_cast<uint32_t>(1);
11254 Param1 = static_cast<uint32_t>(0);
11255 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11256 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11257 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11258 break;
11259 case ARM::BI__builtin_arm_mve_vmovlbq_m_u8:
11260 Param0 = static_cast<uint32_t>(1);
11261 Param1 = static_cast<uint32_t>(0);
11262 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11263 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11264 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11265 break;
11266 case ARM::BI__builtin_arm_mve_vmovltq_m_s16:
11267 Param0 = static_cast<uint32_t>(0);
11268 Param1 = static_cast<uint32_t>(1);
11269 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11270 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11271 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11272 break;
11273 case ARM::BI__builtin_arm_mve_vmovltq_m_s8:
11274 Param0 = static_cast<uint32_t>(0);
11275 Param1 = static_cast<uint32_t>(1);
11276 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11277 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11278 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11279 break;
11280 case ARM::BI__builtin_arm_mve_vmovltq_m_u16:
11281 Param0 = static_cast<uint32_t>(1);
11282 Param1 = static_cast<uint32_t>(1);
11283 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11284 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
11285 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11286 break;
11287 case ARM::BI__builtin_arm_mve_vmovltq_m_u8:
11288 Param0 = static_cast<uint32_t>(1);
11289 Param1 = static_cast<uint32_t>(1);
11290 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11291 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
11292 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
11293 break;
11294 }
11295 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11296 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
11297 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
11298 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
11299 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
11300 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param2}), Args: {Val4});
11301 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 0));
11302 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmovl_predicated, Tys: {Param3, Param4, Param2}), Args: {Val0, Val1, Val2, Val5, Val6});
11303}
11304case ARM::BI__builtin_arm_mve_vstrhq_s32:
11305case ARM::BI__builtin_arm_mve_vstrhq_u32: {
11306 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11307 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 4);
11308 Value *Val2 = Builder.CreateTrunc(V: Val0, DestTy: Val1);
11309 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
11310 Value *Val4 = Builder.CreatePointerCast(V: (Val3.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
11311 Address Val5 = Address(Val4, llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 4), CharUnits::fromQuantity(Quantity: 2));
11312 return Builder.CreateStore(Val: Val2, Addr: Val5);
11313}
11314case ARM::BI__builtin_arm_mve_vstrhq_p_s32:
11315case ARM::BI__builtin_arm_mve_vstrhq_p_u32: {
11316 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11317 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 4);
11318 Value *Val2 = Builder.CreateTrunc(V: Val0, DestTy: Val1);
11319 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
11320 Value *Val4 = Builder.CreatePointerCast(V: (Val3.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
11321 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
11322 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
11323 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
11324 return Builder.CreateMaskedStore(Val: Val2, Ptr: Val4, Alignment: static_cast<Align>(2), Mask: Val7);
11325}
11326case ARM::BI__builtin_arm_mve_vandq_m_f16:
11327case ARM::BI__builtin_arm_mve_vbicq_m_f16:
11328case ARM::BI__builtin_arm_mve_veorq_m_f16:
11329case ARM::BI__builtin_arm_mve_vornq_m_f16:
11330case ARM::BI__builtin_arm_mve_vorrq_m_f16: {
11331 Intrinsic::ID Param0;
11332 switch (BuiltinID) {
11333 case ARM::BI__builtin_arm_mve_vandq_m_f16:
11334 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11335 break;
11336 case ARM::BI__builtin_arm_mve_vbicq_m_f16:
11337 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11338 break;
11339 case ARM::BI__builtin_arm_mve_veorq_m_f16:
11340 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11341 break;
11342 case ARM::BI__builtin_arm_mve_vornq_m_f16:
11343 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11344 break;
11345 case ARM::BI__builtin_arm_mve_vorrq_m_f16:
11346 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11347 break;
11348 }
11349 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11350 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11351 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
11352 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
11353 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11354 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
11355 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
11356 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
11357 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
11358 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 0));
11359 llvm::Type *Val10 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11360 Value *Val11 = Builder.CreateBitCast(V: Val9, DestTy: Val10);
11361 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val5, Val8, Val11});
11362 llvm::Type *Val13 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
11363 return Builder.CreateBitCast(V: Val12, DestTy: Val13);
11364}
11365case ARM::BI__builtin_arm_mve_vandq_m_s16:
11366case ARM::BI__builtin_arm_mve_vandq_m_u16:
11367case ARM::BI__builtin_arm_mve_vbicq_m_s16:
11368case ARM::BI__builtin_arm_mve_vbicq_m_u16:
11369case ARM::BI__builtin_arm_mve_veorq_m_s16:
11370case ARM::BI__builtin_arm_mve_veorq_m_u16:
11371case ARM::BI__builtin_arm_mve_vornq_m_s16:
11372case ARM::BI__builtin_arm_mve_vornq_m_u16:
11373case ARM::BI__builtin_arm_mve_vorrq_m_s16:
11374case ARM::BI__builtin_arm_mve_vorrq_m_u16: {
11375 Intrinsic::ID Param0;
11376 switch (BuiltinID) {
11377 case ARM::BI__builtin_arm_mve_vandq_m_s16:
11378 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11379 break;
11380 case ARM::BI__builtin_arm_mve_vandq_m_u16:
11381 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11382 break;
11383 case ARM::BI__builtin_arm_mve_vbicq_m_s16:
11384 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11385 break;
11386 case ARM::BI__builtin_arm_mve_vbicq_m_u16:
11387 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11388 break;
11389 case ARM::BI__builtin_arm_mve_veorq_m_s16:
11390 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11391 break;
11392 case ARM::BI__builtin_arm_mve_veorq_m_u16:
11393 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11394 break;
11395 case ARM::BI__builtin_arm_mve_vornq_m_s16:
11396 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11397 break;
11398 case ARM::BI__builtin_arm_mve_vornq_m_u16:
11399 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11400 break;
11401 case ARM::BI__builtin_arm_mve_vorrq_m_s16:
11402 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11403 break;
11404 case ARM::BI__builtin_arm_mve_vorrq_m_u16:
11405 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11406 break;
11407 }
11408 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11409 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11410 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
11411 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
11412 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11413 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
11414 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
11415 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
11416 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
11417 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 0));
11418 llvm::Type *Val10 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11419 Value *Val11 = Builder.CreateBitCast(V: Val9, DestTy: Val10);
11420 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val5, Val8, Val11});
11421 llvm::Type *Val13 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11422 return Builder.CreateBitCast(V: Val12, DestTy: Val13);
11423}
11424case ARM::BI__builtin_arm_mve_vmaxaq_s16: {
11425 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11426 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11427 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
11428 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
11429 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11430 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
11431 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
11432 Value *Val7 = Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
11433 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
11434 Value *Val9 = Builder.CreateICmpUGE(LHS: Val8, RHS: Val7);
11435 return Builder.CreateSelect(C: Val9, True: Val8, False: Val7);
11436}
11437case ARM::BI__builtin_arm_mve_vminaq_s16: {
11438 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11439 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11440 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
11441 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
11442 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
11443 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
11444 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
11445 Value *Val7 = Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
11446 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
11447 Value *Val9 = Builder.CreateICmpULE(LHS: Val8, RHS: Val7);
11448 return Builder.CreateSelect(C: Val9, True: Val8, False: Val7);
11449}
11450case ARM::BI__builtin_arm_mve_vandq_m_f32:
11451case ARM::BI__builtin_arm_mve_vbicq_m_f32:
11452case ARM::BI__builtin_arm_mve_veorq_m_f32:
11453case ARM::BI__builtin_arm_mve_vornq_m_f32:
11454case ARM::BI__builtin_arm_mve_vorrq_m_f32: {
11455 Intrinsic::ID Param0;
11456 switch (BuiltinID) {
11457 case ARM::BI__builtin_arm_mve_vandq_m_f32:
11458 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11459 break;
11460 case ARM::BI__builtin_arm_mve_vbicq_m_f32:
11461 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11462 break;
11463 case ARM::BI__builtin_arm_mve_veorq_m_f32:
11464 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11465 break;
11466 case ARM::BI__builtin_arm_mve_vornq_m_f32:
11467 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11468 break;
11469 case ARM::BI__builtin_arm_mve_vorrq_m_f32:
11470 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11471 break;
11472 }
11473 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11474 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11475 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
11476 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
11477 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11478 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
11479 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
11480 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
11481 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
11482 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 0));
11483 llvm::Type *Val10 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11484 Value *Val11 = Builder.CreateBitCast(V: Val9, DestTy: Val10);
11485 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val5, Val8, Val11});
11486 llvm::Type *Val13 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
11487 return Builder.CreateBitCast(V: Val12, DestTy: Val13);
11488}
11489case ARM::BI__builtin_arm_mve_vandq_m_s32:
11490case ARM::BI__builtin_arm_mve_vandq_m_u32:
11491case ARM::BI__builtin_arm_mve_vbicq_m_s32:
11492case ARM::BI__builtin_arm_mve_vbicq_m_u32:
11493case ARM::BI__builtin_arm_mve_veorq_m_s32:
11494case ARM::BI__builtin_arm_mve_veorq_m_u32:
11495case ARM::BI__builtin_arm_mve_vornq_m_s32:
11496case ARM::BI__builtin_arm_mve_vornq_m_u32:
11497case ARM::BI__builtin_arm_mve_vorrq_m_s32:
11498case ARM::BI__builtin_arm_mve_vorrq_m_u32: {
11499 Intrinsic::ID Param0;
11500 switch (BuiltinID) {
11501 case ARM::BI__builtin_arm_mve_vandq_m_s32:
11502 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11503 break;
11504 case ARM::BI__builtin_arm_mve_vandq_m_u32:
11505 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11506 break;
11507 case ARM::BI__builtin_arm_mve_vbicq_m_s32:
11508 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11509 break;
11510 case ARM::BI__builtin_arm_mve_vbicq_m_u32:
11511 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11512 break;
11513 case ARM::BI__builtin_arm_mve_veorq_m_s32:
11514 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11515 break;
11516 case ARM::BI__builtin_arm_mve_veorq_m_u32:
11517 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11518 break;
11519 case ARM::BI__builtin_arm_mve_vornq_m_s32:
11520 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11521 break;
11522 case ARM::BI__builtin_arm_mve_vornq_m_u32:
11523 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11524 break;
11525 case ARM::BI__builtin_arm_mve_vorrq_m_s32:
11526 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11527 break;
11528 case ARM::BI__builtin_arm_mve_vorrq_m_u32:
11529 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11530 break;
11531 }
11532 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11533 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11534 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
11535 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
11536 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11537 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
11538 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
11539 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
11540 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
11541 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 0));
11542 llvm::Type *Val10 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11543 Value *Val11 = Builder.CreateBitCast(V: Val9, DestTy: Val10);
11544 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val5, Val8, Val11});
11545 llvm::Type *Val13 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11546 return Builder.CreateBitCast(V: Val12, DestTy: Val13);
11547}
11548case ARM::BI__builtin_arm_mve_vmaxaq_s32: {
11549 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11550 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11551 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
11552 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
11553 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11554 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
11555 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
11556 Value *Val7 = Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
11557 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
11558 Value *Val9 = Builder.CreateICmpUGE(LHS: Val8, RHS: Val7);
11559 return Builder.CreateSelect(C: Val9, True: Val8, False: Val7);
11560}
11561case ARM::BI__builtin_arm_mve_vminaq_s32: {
11562 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11563 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11564 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
11565 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
11566 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
11567 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
11568 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
11569 Value *Val7 = Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
11570 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
11571 Value *Val9 = Builder.CreateICmpULE(LHS: Val8, RHS: Val7);
11572 return Builder.CreateSelect(C: Val9, True: Val8, False: Val7);
11573}
11574case ARM::BI__builtin_arm_mve_vandq_m_s8:
11575case ARM::BI__builtin_arm_mve_vandq_m_u8:
11576case ARM::BI__builtin_arm_mve_vbicq_m_s8:
11577case ARM::BI__builtin_arm_mve_vbicq_m_u8:
11578case ARM::BI__builtin_arm_mve_veorq_m_s8:
11579case ARM::BI__builtin_arm_mve_veorq_m_u8:
11580case ARM::BI__builtin_arm_mve_vornq_m_s8:
11581case ARM::BI__builtin_arm_mve_vornq_m_u8:
11582case ARM::BI__builtin_arm_mve_vorrq_m_s8:
11583case ARM::BI__builtin_arm_mve_vorrq_m_u8: {
11584 Intrinsic::ID Param0;
11585 switch (BuiltinID) {
11586 case ARM::BI__builtin_arm_mve_vandq_m_s8:
11587 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11588 break;
11589 case ARM::BI__builtin_arm_mve_vandq_m_u8:
11590 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
11591 break;
11592 case ARM::BI__builtin_arm_mve_vbicq_m_s8:
11593 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11594 break;
11595 case ARM::BI__builtin_arm_mve_vbicq_m_u8:
11596 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
11597 break;
11598 case ARM::BI__builtin_arm_mve_veorq_m_s8:
11599 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11600 break;
11601 case ARM::BI__builtin_arm_mve_veorq_m_u8:
11602 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
11603 break;
11604 case ARM::BI__builtin_arm_mve_vornq_m_s8:
11605 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11606 break;
11607 case ARM::BI__builtin_arm_mve_vornq_m_u8:
11608 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
11609 break;
11610 case ARM::BI__builtin_arm_mve_vorrq_m_s8:
11611 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11612 break;
11613 case ARM::BI__builtin_arm_mve_vorrq_m_u8:
11614 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
11615 break;
11616 }
11617 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11618 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11619 Value *Val2 = Builder.CreateBitCast(V: Val0, DestTy: Val1);
11620 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
11621 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11622 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
11623 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
11624 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
11625 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val7});
11626 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 0));
11627 llvm::Type *Val10 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11628 Value *Val11 = Builder.CreateBitCast(V: Val9, DestTy: Val10);
11629 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val5, Val8, Val11});
11630 llvm::Type *Val13 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11631 return Builder.CreateBitCast(V: Val12, DestTy: Val13);
11632}
11633case ARM::BI__builtin_arm_mve_vmaxaq_s8: {
11634 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11635 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11636 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
11637 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
11638 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11639 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
11640 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
11641 Value *Val7 = Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
11642 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
11643 Value *Val9 = Builder.CreateICmpUGE(LHS: Val8, RHS: Val7);
11644 return Builder.CreateSelect(C: Val9, True: Val8, False: Val7);
11645}
11646case ARM::BI__builtin_arm_mve_vminaq_s8: {
11647 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11648 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11649 Value *Val2 = llvm::Constant::getNullValue(Ty: Val1);
11650 Value *Val3 = Builder.CreateICmpSLT(LHS: Val0, RHS: Val2);
11651 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
11652 Value *Val5 = llvm::Constant::getNullValue(Ty: Val4);
11653 Value *Val6 = Builder.CreateSub(LHS: Val5, RHS: Val0);
11654 Value *Val7 = Builder.CreateSelect(C: Val3, True: Val6, False: Val0);
11655 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
11656 Value *Val9 = Builder.CreateICmpULE(LHS: Val8, RHS: Val7);
11657 return Builder.CreateSelect(C: Val9, True: Val8, False: Val7);
11658}
11659case ARM::BI__builtin_arm_mve_vstrbq_s32:
11660case ARM::BI__builtin_arm_mve_vstrbq_u32: {
11661 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11662 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 4);
11663 Value *Val2 = Builder.CreateTrunc(V: Val0, DestTy: Val1);
11664 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
11665 Value *Val4 = Builder.CreatePointerCast(V: (Val3.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
11666 Address Val5 = Address(Val4, llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 4), CharUnits::fromQuantity(Quantity: 1));
11667 return Builder.CreateStore(Val: Val2, Addr: Val5);
11668}
11669case ARM::BI__builtin_arm_mve_vstrbq_p_s32:
11670case ARM::BI__builtin_arm_mve_vstrbq_p_u32: {
11671 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11672 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 4);
11673 Value *Val2 = Builder.CreateTrunc(V: Val0, DestTy: Val1);
11674 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
11675 Value *Val4 = Builder.CreatePointerCast(V: (Val3.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
11676 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
11677 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
11678 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
11679 return Builder.CreateMaskedStore(Val: Val2, Ptr: Val4, Alignment: static_cast<Align>(1), Mask: Val7);
11680}
11681case ARM::BI__builtin_arm_mve_vstrbq_s16:
11682case ARM::BI__builtin_arm_mve_vstrbq_u16: {
11683 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11684 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 8);
11685 Value *Val2 = Builder.CreateTrunc(V: Val0, DestTy: Val1);
11686 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
11687 Value *Val4 = Builder.CreatePointerCast(V: (Val3.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
11688 Address Val5 = Address(Val4, llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 8), CharUnits::fromQuantity(Quantity: 1));
11689 return Builder.CreateStore(Val: Val2, Addr: Val5);
11690}
11691case ARM::BI__builtin_arm_mve_vstrbq_p_s16:
11692case ARM::BI__builtin_arm_mve_vstrbq_p_u16: {
11693 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 1));
11694 llvm::Type *Val1 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 8);
11695 Value *Val2 = Builder.CreateTrunc(V: Val0, DestTy: Val1);
11696 Address Val3 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
11697 Value *Val4 = Builder.CreatePointerCast(V: (Val3.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
11698 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
11699 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
11700 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
11701 return Builder.CreateMaskedStore(Val: Val2, Ptr: Val4, Alignment: static_cast<Align>(1), Mask: Val7);
11702}
11703case ARM::BI__builtin_arm_mve_vfmasq_n_f16:
11704case ARM::BI__builtin_arm_mve_vfmasq_n_f32: {
11705 llvm::Type * Param0;
11706 switch (BuiltinID) {
11707 case ARM::BI__builtin_arm_mve_vfmasq_n_f16:
11708 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11709 break;
11710 case ARM::BI__builtin_arm_mve_vfmasq_n_f32:
11711 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11712 break;
11713 }
11714 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11715 Value *Val1 = ARMMVEVectorSplat(Builder, V: Val0);
11716 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
11717 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
11718 Value *Val4 = (Val3);
11719 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fma, Tys: {Param0}), Args: {Val2, Val4, Val1}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma, Tys: {Param0}), Args: {Val2, Val4, Val1});
11720}
11721case ARM::BI__builtin_arm_mve_vfmaq_m_n_f16:
11722case ARM::BI__builtin_arm_mve_vfmaq_m_n_f32: {
11723 llvm::Type * Param0;
11724 llvm::Type * Param1;
11725 switch (BuiltinID) {
11726 case ARM::BI__builtin_arm_mve_vfmaq_m_n_f16:
11727 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11728 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11729 break;
11730 case ARM::BI__builtin_arm_mve_vfmaq_m_n_f32:
11731 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11732 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11733 break;
11734 }
11735 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11736 Value *Val1 = ARMMVEVectorSplat(Builder, V: Val0);
11737 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
11738 Value *Val3 = (Val1);
11739 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
11740 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
11741 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
11742 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val6});
11743 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma_predicated, Tys: {Param1, Param0}), Args: {Val2, Val3, Val4, Val7});
11744}
11745case ARM::BI__builtin_arm_mve_vfmaq_n_f16:
11746case ARM::BI__builtin_arm_mve_vfmaq_n_f32: {
11747 llvm::Type * Param0;
11748 switch (BuiltinID) {
11749 case ARM::BI__builtin_arm_mve_vfmaq_n_f16:
11750 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11751 break;
11752 case ARM::BI__builtin_arm_mve_vfmaq_n_f32:
11753 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11754 break;
11755 }
11756 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11757 Value *Val1 = ARMMVEVectorSplat(Builder, V: Val0);
11758 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
11759 Value *Val3 = (Val1);
11760 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
11761 return !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fma, Tys: {Param0}), Args: {Val2, Val3, Val4}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma, Tys: {Param0}), Args: {Val2, Val3, Val4});
11762}
11763case ARM::BI__builtin_arm_mve_vcmpeqq_m_f16:
11764case ARM::BI__builtin_arm_mve_vcmpeqq_m_f32: {
11765 llvm::Type * Param0;
11766 llvm::Type * Param1;
11767 switch (BuiltinID) {
11768 case ARM::BI__builtin_arm_mve_vcmpeqq_m_f16:
11769 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11770 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11771 break;
11772 case ARM::BI__builtin_arm_mve_vcmpeqq_m_f32:
11773 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11774 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11775 break;
11776 }
11777 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11778 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11779 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11780 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11781 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11782 Value *Val5 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOEQ(LHS: Val3, RHS: Val4) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_eq, Tys: {Param0, Param1}), Args: {Val3, Val4});
11783 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
11784 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
11785 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
11786}
11787case ARM::BI__builtin_arm_mve_vcmpgeq_m_f16:
11788case ARM::BI__builtin_arm_mve_vcmpgeq_m_f32: {
11789 llvm::Type * Param0;
11790 llvm::Type * Param1;
11791 switch (BuiltinID) {
11792 case ARM::BI__builtin_arm_mve_vcmpgeq_m_f16:
11793 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11794 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11795 break;
11796 case ARM::BI__builtin_arm_mve_vcmpgeq_m_f32:
11797 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11798 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11799 break;
11800 }
11801 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11802 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11803 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11804 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11805 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11806 Value *Val5 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGE(LHS: Val3, RHS: Val4) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ge, Tys: {Param0, Param1}), Args: {Val3, Val4});
11807 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
11808 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
11809 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
11810}
11811case ARM::BI__builtin_arm_mve_vcmpgtq_m_f16:
11812case ARM::BI__builtin_arm_mve_vcmpgtq_m_f32: {
11813 llvm::Type * Param0;
11814 llvm::Type * Param1;
11815 switch (BuiltinID) {
11816 case ARM::BI__builtin_arm_mve_vcmpgtq_m_f16:
11817 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11818 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11819 break;
11820 case ARM::BI__builtin_arm_mve_vcmpgtq_m_f32:
11821 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11822 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11823 break;
11824 }
11825 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11826 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11827 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11828 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11829 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11830 Value *Val5 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGT(LHS: Val3, RHS: Val4) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_gt, Tys: {Param0, Param1}), Args: {Val3, Val4});
11831 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
11832 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
11833 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
11834}
11835case ARM::BI__builtin_arm_mve_vcmpleq_m_f16:
11836case ARM::BI__builtin_arm_mve_vcmpleq_m_f32: {
11837 llvm::Type * Param0;
11838 llvm::Type * Param1;
11839 switch (BuiltinID) {
11840 case ARM::BI__builtin_arm_mve_vcmpleq_m_f16:
11841 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11842 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11843 break;
11844 case ARM::BI__builtin_arm_mve_vcmpleq_m_f32:
11845 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11846 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11847 break;
11848 }
11849 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11850 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11851 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11852 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11853 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11854 Value *Val5 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULE(LHS: Val3, RHS: Val4) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_le, Tys: {Param0, Param1}), Args: {Val3, Val4});
11855 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
11856 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
11857 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
11858}
11859case ARM::BI__builtin_arm_mve_vcmpltq_m_f16:
11860case ARM::BI__builtin_arm_mve_vcmpltq_m_f32: {
11861 llvm::Type * Param0;
11862 llvm::Type * Param1;
11863 switch (BuiltinID) {
11864 case ARM::BI__builtin_arm_mve_vcmpltq_m_f16:
11865 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11866 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11867 break;
11868 case ARM::BI__builtin_arm_mve_vcmpltq_m_f32:
11869 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11870 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11871 break;
11872 }
11873 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11874 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11875 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11876 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11877 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11878 Value *Val5 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULT(LHS: Val3, RHS: Val4) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_lt, Tys: {Param0, Param1}), Args: {Val3, Val4});
11879 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
11880 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
11881 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
11882}
11883case ARM::BI__builtin_arm_mve_vcmpneq_m_f16:
11884case ARM::BI__builtin_arm_mve_vcmpneq_m_f32: {
11885 llvm::Type * Param0;
11886 llvm::Type * Param1;
11887 switch (BuiltinID) {
11888 case ARM::BI__builtin_arm_mve_vcmpneq_m_f16:
11889 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11890 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11891 break;
11892 case ARM::BI__builtin_arm_mve_vcmpneq_m_f32:
11893 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11894 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11895 break;
11896 }
11897 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11898 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11899 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11900 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11901 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11902 Value *Val5 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpUNE(LHS: Val3, RHS: Val4) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ne, Tys: {Param0, Param1}), Args: {Val3, Val4});
11903 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
11904 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
11905 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
11906}
11907case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f16:
11908case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f32: {
11909 llvm::Type * Param0;
11910 llvm::Type * Param1;
11911 switch (BuiltinID) {
11912 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f16:
11913 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11914 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11915 break;
11916 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f32:
11917 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11918 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11919 break;
11920 }
11921 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11922 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11923 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11924 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11925 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11926 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
11927 Value *Val6 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOEQ(LHS: Val3, RHS: Val5) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_eq, Tys: {Param0, Param1}), Args: {Val3, Val5});
11928 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
11929 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
11930 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
11931}
11932case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f16:
11933case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f32: {
11934 llvm::Type * Param0;
11935 llvm::Type * Param1;
11936 switch (BuiltinID) {
11937 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f16:
11938 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11939 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11940 break;
11941 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f32:
11942 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11943 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11944 break;
11945 }
11946 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11947 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11948 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11949 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11950 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11951 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
11952 Value *Val6 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGE(LHS: Val3, RHS: Val5) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ge, Tys: {Param0, Param1}), Args: {Val3, Val5});
11953 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
11954 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
11955 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
11956}
11957case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f16:
11958case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f32: {
11959 llvm::Type * Param0;
11960 llvm::Type * Param1;
11961 switch (BuiltinID) {
11962 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f16:
11963 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11964 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11965 break;
11966 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f32:
11967 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11968 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11969 break;
11970 }
11971 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11972 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11973 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11974 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
11975 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
11976 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
11977 Value *Val6 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpOGT(LHS: Val3, RHS: Val5) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_gt, Tys: {Param0, Param1}), Args: {Val3, Val5});
11978 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
11979 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
11980 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
11981}
11982case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f16:
11983case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f32: {
11984 llvm::Type * Param0;
11985 llvm::Type * Param1;
11986 switch (BuiltinID) {
11987 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f16:
11988 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
11989 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
11990 break;
11991 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f32:
11992 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
11993 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
11994 break;
11995 }
11996 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
11997 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
11998 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
11999 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12000 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12001 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12002 Value *Val6 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULE(LHS: Val3, RHS: Val5) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_le, Tys: {Param0, Param1}), Args: {Val3, Val5});
12003 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12004 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12005 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12006}
12007case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f16:
12008case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f32: {
12009 llvm::Type * Param0;
12010 llvm::Type * Param1;
12011 switch (BuiltinID) {
12012 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f16:
12013 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12014 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12015 break;
12016 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f32:
12017 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12018 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12019 break;
12020 }
12021 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12022 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12023 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12024 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12025 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12026 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12027 Value *Val6 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpULT(LHS: Val3, RHS: Val5) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_lt, Tys: {Param0, Param1}), Args: {Val3, Val5});
12028 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12029 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12030 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12031}
12032case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f16:
12033case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f32: {
12034 llvm::Type * Param0;
12035 llvm::Type * Param1;
12036 switch (BuiltinID) {
12037 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f16:
12038 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12039 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12040 break;
12041 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f32:
12042 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12043 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12044 break;
12045 }
12046 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12047 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12048 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12049 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12050 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12051 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12052 Value *Val6 = !Builder.getIsFPConstrained() ? Builder.CreateFCmpUNE(LHS: Val3, RHS: Val5) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_cmp_ne, Tys: {Param0, Param1}), Args: {Val3, Val5});
12053 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12054 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12055 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12056}
12057case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s16:
12058case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s32:
12059case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s8:
12060case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u16:
12061case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u32:
12062case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u8: {
12063 llvm::Type * Param0;
12064 switch (BuiltinID) {
12065 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s16:
12066 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12067 break;
12068 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s32:
12069 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12070 break;
12071 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s8:
12072 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12073 break;
12074 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u16:
12075 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12076 break;
12077 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u32:
12078 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12079 break;
12080 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u8:
12081 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12082 break;
12083 }
12084 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12085 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12086 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12087 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12088 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12089 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12090 Value *Val6 = Builder.CreateICmpEQ(LHS: Val3, RHS: Val5);
12091 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12092 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12093 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12094}
12095case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s16:
12096case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s32:
12097case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s8:
12098case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u16:
12099case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u32:
12100case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u8: {
12101 llvm::Type * Param0;
12102 switch (BuiltinID) {
12103 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s16:
12104 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12105 break;
12106 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s32:
12107 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12108 break;
12109 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s8:
12110 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12111 break;
12112 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u16:
12113 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12114 break;
12115 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u32:
12116 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12117 break;
12118 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u8:
12119 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12120 break;
12121 }
12122 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12123 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12124 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12125 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12126 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12127 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12128 Value *Val6 = Builder.CreateICmpNE(LHS: Val3, RHS: Val5);
12129 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12130 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12131 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12132}
12133case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s16:
12134case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s32:
12135case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s8: {
12136 llvm::Type * Param0;
12137 switch (BuiltinID) {
12138 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s16:
12139 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12140 break;
12141 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s32:
12142 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12143 break;
12144 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s8:
12145 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12146 break;
12147 }
12148 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12149 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12150 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12151 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12152 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12153 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12154 Value *Val6 = Builder.CreateICmpSGE(LHS: Val3, RHS: Val5);
12155 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12156 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12157 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12158}
12159case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s16:
12160case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s32:
12161case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s8: {
12162 llvm::Type * Param0;
12163 switch (BuiltinID) {
12164 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s16:
12165 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12166 break;
12167 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s32:
12168 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12169 break;
12170 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s8:
12171 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12172 break;
12173 }
12174 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12175 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12176 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12177 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12178 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12179 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12180 Value *Val6 = Builder.CreateICmpSGT(LHS: Val3, RHS: Val5);
12181 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12182 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12183 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12184}
12185case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s16:
12186case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s32:
12187case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s8: {
12188 llvm::Type * Param0;
12189 switch (BuiltinID) {
12190 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s16:
12191 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12192 break;
12193 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s32:
12194 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12195 break;
12196 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s8:
12197 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12198 break;
12199 }
12200 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12201 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12202 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12203 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12204 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12205 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12206 Value *Val6 = Builder.CreateICmpSLE(LHS: Val3, RHS: Val5);
12207 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12208 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12209 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12210}
12211case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s16:
12212case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s32:
12213case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s8: {
12214 llvm::Type * Param0;
12215 switch (BuiltinID) {
12216 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s16:
12217 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12218 break;
12219 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s32:
12220 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12221 break;
12222 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s8:
12223 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12224 break;
12225 }
12226 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12227 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12228 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12229 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12230 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12231 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12232 Value *Val6 = Builder.CreateICmpSLT(LHS: Val3, RHS: Val5);
12233 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12234 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12235 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12236}
12237case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u16:
12238case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u32:
12239case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u8: {
12240 llvm::Type * Param0;
12241 switch (BuiltinID) {
12242 case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u16:
12243 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12244 break;
12245 case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u32:
12246 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12247 break;
12248 case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u8:
12249 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12250 break;
12251 }
12252 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12253 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12254 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12255 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12256 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12257 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12258 Value *Val6 = Builder.CreateICmpUGE(LHS: Val3, RHS: Val5);
12259 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12260 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12261 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12262}
12263case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u16:
12264case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u32:
12265case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u8: {
12266 llvm::Type * Param0;
12267 switch (BuiltinID) {
12268 case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u16:
12269 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12270 break;
12271 case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u32:
12272 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12273 break;
12274 case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u8:
12275 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12276 break;
12277 }
12278 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12279 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12280 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12281 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12282 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12283 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12284 Value *Val6 = Builder.CreateICmpUGT(LHS: Val3, RHS: Val5);
12285 Value *Val7 = Builder.CreateAnd(LHS: Val2, RHS: Val6);
12286 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val7});
12287 return Builder.CreateIntCast(V: Val8, DestTy: Int16Ty, isSigned: false);
12288}
12289case ARM::BI__builtin_arm_mve_vcmpeqq_m_s16:
12290case ARM::BI__builtin_arm_mve_vcmpeqq_m_s32:
12291case ARM::BI__builtin_arm_mve_vcmpeqq_m_s8:
12292case ARM::BI__builtin_arm_mve_vcmpeqq_m_u16:
12293case ARM::BI__builtin_arm_mve_vcmpeqq_m_u32:
12294case ARM::BI__builtin_arm_mve_vcmpeqq_m_u8: {
12295 llvm::Type * Param0;
12296 switch (BuiltinID) {
12297 case ARM::BI__builtin_arm_mve_vcmpeqq_m_s16:
12298 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12299 break;
12300 case ARM::BI__builtin_arm_mve_vcmpeqq_m_s32:
12301 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12302 break;
12303 case ARM::BI__builtin_arm_mve_vcmpeqq_m_s8:
12304 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12305 break;
12306 case ARM::BI__builtin_arm_mve_vcmpeqq_m_u16:
12307 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12308 break;
12309 case ARM::BI__builtin_arm_mve_vcmpeqq_m_u32:
12310 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12311 break;
12312 case ARM::BI__builtin_arm_mve_vcmpeqq_m_u8:
12313 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12314 break;
12315 }
12316 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12317 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12318 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12319 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12320 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12321 Value *Val5 = Builder.CreateICmpEQ(LHS: Val3, RHS: Val4);
12322 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12323 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12324 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12325}
12326case ARM::BI__builtin_arm_mve_vcmpneq_m_s16:
12327case ARM::BI__builtin_arm_mve_vcmpneq_m_s32:
12328case ARM::BI__builtin_arm_mve_vcmpneq_m_s8:
12329case ARM::BI__builtin_arm_mve_vcmpneq_m_u16:
12330case ARM::BI__builtin_arm_mve_vcmpneq_m_u32:
12331case ARM::BI__builtin_arm_mve_vcmpneq_m_u8: {
12332 llvm::Type * Param0;
12333 switch (BuiltinID) {
12334 case ARM::BI__builtin_arm_mve_vcmpneq_m_s16:
12335 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12336 break;
12337 case ARM::BI__builtin_arm_mve_vcmpneq_m_s32:
12338 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12339 break;
12340 case ARM::BI__builtin_arm_mve_vcmpneq_m_s8:
12341 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12342 break;
12343 case ARM::BI__builtin_arm_mve_vcmpneq_m_u16:
12344 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12345 break;
12346 case ARM::BI__builtin_arm_mve_vcmpneq_m_u32:
12347 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12348 break;
12349 case ARM::BI__builtin_arm_mve_vcmpneq_m_u8:
12350 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12351 break;
12352 }
12353 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12354 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12355 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12356 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12357 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12358 Value *Val5 = Builder.CreateICmpNE(LHS: Val3, RHS: Val4);
12359 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12360 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12361 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12362}
12363case ARM::BI__builtin_arm_mve_vcmpgeq_m_s16:
12364case ARM::BI__builtin_arm_mve_vcmpgeq_m_s32:
12365case ARM::BI__builtin_arm_mve_vcmpgeq_m_s8: {
12366 llvm::Type * Param0;
12367 switch (BuiltinID) {
12368 case ARM::BI__builtin_arm_mve_vcmpgeq_m_s16:
12369 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12370 break;
12371 case ARM::BI__builtin_arm_mve_vcmpgeq_m_s32:
12372 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12373 break;
12374 case ARM::BI__builtin_arm_mve_vcmpgeq_m_s8:
12375 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12376 break;
12377 }
12378 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12379 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12380 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12381 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12382 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12383 Value *Val5 = Builder.CreateICmpSGE(LHS: Val3, RHS: Val4);
12384 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12385 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12386 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12387}
12388case ARM::BI__builtin_arm_mve_vcmpgtq_m_s16:
12389case ARM::BI__builtin_arm_mve_vcmpgtq_m_s32:
12390case ARM::BI__builtin_arm_mve_vcmpgtq_m_s8: {
12391 llvm::Type * Param0;
12392 switch (BuiltinID) {
12393 case ARM::BI__builtin_arm_mve_vcmpgtq_m_s16:
12394 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12395 break;
12396 case ARM::BI__builtin_arm_mve_vcmpgtq_m_s32:
12397 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12398 break;
12399 case ARM::BI__builtin_arm_mve_vcmpgtq_m_s8:
12400 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12401 break;
12402 }
12403 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12404 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12405 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12406 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12407 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12408 Value *Val5 = Builder.CreateICmpSGT(LHS: Val3, RHS: Val4);
12409 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12410 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12411 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12412}
12413case ARM::BI__builtin_arm_mve_vcmpleq_m_s16:
12414case ARM::BI__builtin_arm_mve_vcmpleq_m_s32:
12415case ARM::BI__builtin_arm_mve_vcmpleq_m_s8: {
12416 llvm::Type * Param0;
12417 switch (BuiltinID) {
12418 case ARM::BI__builtin_arm_mve_vcmpleq_m_s16:
12419 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12420 break;
12421 case ARM::BI__builtin_arm_mve_vcmpleq_m_s32:
12422 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12423 break;
12424 case ARM::BI__builtin_arm_mve_vcmpleq_m_s8:
12425 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12426 break;
12427 }
12428 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12429 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12430 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12431 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12432 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12433 Value *Val5 = Builder.CreateICmpSLE(LHS: Val3, RHS: Val4);
12434 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12435 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12436 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12437}
12438case ARM::BI__builtin_arm_mve_vcmpltq_m_s16:
12439case ARM::BI__builtin_arm_mve_vcmpltq_m_s32:
12440case ARM::BI__builtin_arm_mve_vcmpltq_m_s8: {
12441 llvm::Type * Param0;
12442 switch (BuiltinID) {
12443 case ARM::BI__builtin_arm_mve_vcmpltq_m_s16:
12444 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12445 break;
12446 case ARM::BI__builtin_arm_mve_vcmpltq_m_s32:
12447 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12448 break;
12449 case ARM::BI__builtin_arm_mve_vcmpltq_m_s8:
12450 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12451 break;
12452 }
12453 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12454 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12455 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12456 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12457 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12458 Value *Val5 = Builder.CreateICmpSLT(LHS: Val3, RHS: Val4);
12459 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12460 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12461 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12462}
12463case ARM::BI__builtin_arm_mve_vcmpcsq_m_u16:
12464case ARM::BI__builtin_arm_mve_vcmpcsq_m_u32:
12465case ARM::BI__builtin_arm_mve_vcmpcsq_m_u8: {
12466 llvm::Type * Param0;
12467 switch (BuiltinID) {
12468 case ARM::BI__builtin_arm_mve_vcmpcsq_m_u16:
12469 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12470 break;
12471 case ARM::BI__builtin_arm_mve_vcmpcsq_m_u32:
12472 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12473 break;
12474 case ARM::BI__builtin_arm_mve_vcmpcsq_m_u8:
12475 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12476 break;
12477 }
12478 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12479 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12480 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12481 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12482 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12483 Value *Val5 = Builder.CreateICmpUGE(LHS: Val3, RHS: Val4);
12484 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12485 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12486 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12487}
12488case ARM::BI__builtin_arm_mve_vcmphiq_m_u16:
12489case ARM::BI__builtin_arm_mve_vcmphiq_m_u32:
12490case ARM::BI__builtin_arm_mve_vcmphiq_m_u8: {
12491 llvm::Type * Param0;
12492 switch (BuiltinID) {
12493 case ARM::BI__builtin_arm_mve_vcmphiq_m_u16:
12494 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12495 break;
12496 case ARM::BI__builtin_arm_mve_vcmphiq_m_u32:
12497 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12498 break;
12499 case ARM::BI__builtin_arm_mve_vcmphiq_m_u8:
12500 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12501 break;
12502 }
12503 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12504 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12505 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12506 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12507 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12508 Value *Val5 = Builder.CreateICmpUGT(LHS: Val3, RHS: Val4);
12509 Value *Val6 = Builder.CreateAnd(LHS: Val2, RHS: Val5);
12510 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_v2i, Tys: {Param0}), Args: {Val6});
12511 return Builder.CreateIntCast(V: Val7, DestTy: Int16Ty, isSigned: false);
12512}
12513case ARM::BI__builtin_arm_mve_vpselq_f16:
12514case ARM::BI__builtin_arm_mve_vpselq_f32:
12515case ARM::BI__builtin_arm_mve_vpselq_s16:
12516case ARM::BI__builtin_arm_mve_vpselq_s32:
12517case ARM::BI__builtin_arm_mve_vpselq_s8:
12518case ARM::BI__builtin_arm_mve_vpselq_u16:
12519case ARM::BI__builtin_arm_mve_vpselq_u32:
12520case ARM::BI__builtin_arm_mve_vpselq_u8: {
12521 llvm::Type * Param0;
12522 switch (BuiltinID) {
12523 case ARM::BI__builtin_arm_mve_vpselq_f16:
12524 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12525 break;
12526 case ARM::BI__builtin_arm_mve_vpselq_f32:
12527 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12528 break;
12529 case ARM::BI__builtin_arm_mve_vpselq_s16:
12530 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12531 break;
12532 case ARM::BI__builtin_arm_mve_vpselq_s32:
12533 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12534 break;
12535 case ARM::BI__builtin_arm_mve_vpselq_s8:
12536 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12537 break;
12538 case ARM::BI__builtin_arm_mve_vpselq_u16:
12539 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12540 break;
12541 case ARM::BI__builtin_arm_mve_vpselq_u32:
12542 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12543 break;
12544 case ARM::BI__builtin_arm_mve_vpselq_u8:
12545 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12546 break;
12547 }
12548 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12549 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12550 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12551 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12552 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12553 return Builder.CreateSelect(C: Val2, True: Val3, False: Val4);
12554}
12555case ARM::BI__builtin_arm_mve_vdupq_m_n_f16:
12556case ARM::BI__builtin_arm_mve_vdupq_m_n_f32:
12557case ARM::BI__builtin_arm_mve_vdupq_m_n_s16:
12558case ARM::BI__builtin_arm_mve_vdupq_m_n_s32:
12559case ARM::BI__builtin_arm_mve_vdupq_m_n_s8:
12560case ARM::BI__builtin_arm_mve_vdupq_m_n_u16:
12561case ARM::BI__builtin_arm_mve_vdupq_m_n_u32:
12562case ARM::BI__builtin_arm_mve_vdupq_m_n_u8: {
12563 llvm::Type * Param0;
12564 switch (BuiltinID) {
12565 case ARM::BI__builtin_arm_mve_vdupq_m_n_f16:
12566 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12567 break;
12568 case ARM::BI__builtin_arm_mve_vdupq_m_n_f32:
12569 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12570 break;
12571 case ARM::BI__builtin_arm_mve_vdupq_m_n_s16:
12572 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12573 break;
12574 case ARM::BI__builtin_arm_mve_vdupq_m_n_s32:
12575 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12576 break;
12577 case ARM::BI__builtin_arm_mve_vdupq_m_n_s8:
12578 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12579 break;
12580 case ARM::BI__builtin_arm_mve_vdupq_m_n_u16:
12581 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12582 break;
12583 case ARM::BI__builtin_arm_mve_vdupq_m_n_u32:
12584 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12585 break;
12586 case ARM::BI__builtin_arm_mve_vdupq_m_n_u8:
12587 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
12588 break;
12589 }
12590 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12591 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12592 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12593 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
12594 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
12595 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
12596 return Builder.CreateSelect(C: Val2, True: Val4, False: Val5);
12597}
12598case ARM::BI__builtin_arm_mve_vbicq_m_n_s32:
12599case ARM::BI__builtin_arm_mve_vbicq_m_n_u32: {
12600 bool Param0;
12601 switch (BuiltinID) {
12602 case ARM::BI__builtin_arm_mve_vbicq_m_n_s32:
12603 Param0 = static_cast<bool>(true);
12604 break;
12605 case ARM::BI__builtin_arm_mve_vbicq_m_n_u32:
12606 Param0 = static_cast<bool>(false);
12607 break;
12608 }
12609 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12610 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12611 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1});
12612 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12613 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12614 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: Param0);
12615 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
12616 Value *Val7 = Builder.CreateNot(V: Val6);
12617 Value *Val8 = Builder.CreateAnd(LHS: Val3, RHS: Val7);
12618 return Builder.CreateSelect(C: Val2, True: Val8, False: Val3);
12619}
12620case ARM::BI__builtin_arm_mve_vorrq_m_n_s32:
12621case ARM::BI__builtin_arm_mve_vorrq_m_n_u32: {
12622 bool Param0;
12623 switch (BuiltinID) {
12624 case ARM::BI__builtin_arm_mve_vorrq_m_n_s32:
12625 Param0 = static_cast<bool>(true);
12626 break;
12627 case ARM::BI__builtin_arm_mve_vorrq_m_n_u32:
12628 Param0 = static_cast<bool>(false);
12629 break;
12630 }
12631 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12632 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12633 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1});
12634 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12635 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12636 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: Param0);
12637 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
12638 Value *Val7 = Builder.CreateOr(LHS: Val3, RHS: Val6);
12639 return Builder.CreateSelect(C: Val2, True: Val7, False: Val3);
12640}
12641case ARM::BI__builtin_arm_mve_vpselq_s64:
12642case ARM::BI__builtin_arm_mve_vpselq_u64: {
12643 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12644 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12645 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1});
12646 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12647 llvm::Type *Val4 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
12648 Value *Val5 = Builder.CreateBitCast(V: Val3, DestTy: Val4);
12649 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 1));
12650 llvm::Type *Val7 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
12651 Value *Val8 = Builder.CreateBitCast(V: Val6, DestTy: Val7);
12652 Value *Val9 = Builder.CreateSelect(C: Val2, True: Val5, False: Val8);
12653 llvm::Type *Val10 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
12654 return Builder.CreateBitCast(V: Val9, DestTy: Val10);
12655}
12656case ARM::BI__builtin_arm_mve_vmvnq_m_n_s32:
12657case ARM::BI__builtin_arm_mve_vmvnq_m_n_u32: {
12658 bool Param0;
12659 switch (BuiltinID) {
12660 case ARM::BI__builtin_arm_mve_vmvnq_m_n_s32:
12661 Param0 = static_cast<bool>(true);
12662 break;
12663 case ARM::BI__builtin_arm_mve_vmvnq_m_n_u32:
12664 Param0 = static_cast<bool>(false);
12665 break;
12666 }
12667 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12668 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12669 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1});
12670 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
12671 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: Param0);
12672 Value *Val5 = ARMMVEVectorSplat(Builder, V: Val4);
12673 Value *Val6 = Builder.CreateNot(V: Val5);
12674 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 0));
12675 return Builder.CreateSelect(C: Val2, True: Val6, False: Val7);
12676}
12677case ARM::BI__builtin_arm_mve_vbicq_m_n_s16:
12678case ARM::BI__builtin_arm_mve_vbicq_m_n_u16: {
12679 bool Param0;
12680 switch (BuiltinID) {
12681 case ARM::BI__builtin_arm_mve_vbicq_m_n_s16:
12682 Param0 = static_cast<bool>(true);
12683 break;
12684 case ARM::BI__builtin_arm_mve_vbicq_m_n_u16:
12685 Param0 = static_cast<bool>(false);
12686 break;
12687 }
12688 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12689 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12690 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1});
12691 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12692 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12693 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
12694 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int16Ty, isSigned: Param0);
12695 Value *Val7 = ARMMVEVectorSplat(Builder, V: Val6);
12696 Value *Val8 = Builder.CreateNot(V: Val7);
12697 Value *Val9 = Builder.CreateAnd(LHS: Val3, RHS: Val8);
12698 return Builder.CreateSelect(C: Val2, True: Val9, False: Val3);
12699}
12700case ARM::BI__builtin_arm_mve_vorrq_m_n_s16:
12701case ARM::BI__builtin_arm_mve_vorrq_m_n_u16: {
12702 bool Param0;
12703 switch (BuiltinID) {
12704 case ARM::BI__builtin_arm_mve_vorrq_m_n_s16:
12705 Param0 = static_cast<bool>(true);
12706 break;
12707 case ARM::BI__builtin_arm_mve_vorrq_m_n_u16:
12708 Param0 = static_cast<bool>(false);
12709 break;
12710 }
12711 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12712 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12713 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1});
12714 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
12715 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
12716 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
12717 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int16Ty, isSigned: Param0);
12718 Value *Val7 = ARMMVEVectorSplat(Builder, V: Val6);
12719 Value *Val8 = Builder.CreateOr(LHS: Val3, RHS: Val7);
12720 return Builder.CreateSelect(C: Val2, True: Val8, False: Val3);
12721}
12722case ARM::BI__builtin_arm_mve_vmvnq_m_n_s16:
12723case ARM::BI__builtin_arm_mve_vmvnq_m_n_u16: {
12724 bool Param0;
12725 switch (BuiltinID) {
12726 case ARM::BI__builtin_arm_mve_vmvnq_m_n_s16:
12727 Param0 = static_cast<bool>(true);
12728 break;
12729 case ARM::BI__builtin_arm_mve_vmvnq_m_n_u16:
12730 Param0 = static_cast<bool>(false);
12731 break;
12732 }
12733 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 2));
12734 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12735 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1});
12736 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
12737 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
12738 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int16Ty, isSigned: Param0);
12739 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
12740 Value *Val7 = Builder.CreateNot(V: Val6);
12741 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 0));
12742 return Builder.CreateSelect(C: Val2, True: Val7, False: Val8);
12743}
12744case ARM::BI__builtin_arm_mve_vfmasq_m_n_f16:
12745case ARM::BI__builtin_arm_mve_vfmasq_m_n_f32: {
12746 llvm::Type * Param0;
12747 llvm::Type * Param1;
12748 switch (BuiltinID) {
12749 case ARM::BI__builtin_arm_mve_vfmasq_m_n_f16:
12750 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12751 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12752 break;
12753 case ARM::BI__builtin_arm_mve_vfmasq_m_n_f32:
12754 Param0 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12755 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12756 break;
12757 }
12758 Value *Val0 = EmitScalarExpr(E: E->getArg(Arg: 3));
12759 Value *Val1 = Builder.CreateIntCast(V: Val0, DestTy: Int32Ty, isSigned: false);
12760 Value *Val2 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param0}), Args: {Val1});
12761 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
12762 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
12763 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
12764 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 1));
12765 Value *Val7 = (Val6);
12766 Value *Val8 = !Builder.getIsFPConstrained() ? Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::fma, Tys: {Param1}), Args: {Val5, Val7, Val4}) : Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_fma, Tys: {Param1}), Args: {Val5, Val7, Val4});
12767 return Builder.CreateSelect(C: Val2, True: Val8, False: Val5);
12768}
12769case ARM::BI__builtin_arm_mve_vcvtaq_m_s16_f16:
12770case ARM::BI__builtin_arm_mve_vcvtaq_m_s32_f32:
12771case ARM::BI__builtin_arm_mve_vcvtaq_m_u16_f16:
12772case ARM::BI__builtin_arm_mve_vcvtaq_m_u32_f32:
12773case ARM::BI__builtin_arm_mve_vcvtmq_m_s16_f16:
12774case ARM::BI__builtin_arm_mve_vcvtmq_m_s32_f32:
12775case ARM::BI__builtin_arm_mve_vcvtmq_m_u16_f16:
12776case ARM::BI__builtin_arm_mve_vcvtmq_m_u32_f32:
12777case ARM::BI__builtin_arm_mve_vcvtnq_m_s16_f16:
12778case ARM::BI__builtin_arm_mve_vcvtnq_m_s32_f32:
12779case ARM::BI__builtin_arm_mve_vcvtnq_m_u16_f16:
12780case ARM::BI__builtin_arm_mve_vcvtnq_m_u32_f32:
12781case ARM::BI__builtin_arm_mve_vcvtpq_m_s16_f16:
12782case ARM::BI__builtin_arm_mve_vcvtpq_m_s32_f32:
12783case ARM::BI__builtin_arm_mve_vcvtpq_m_u16_f16:
12784case ARM::BI__builtin_arm_mve_vcvtpq_m_u32_f32: {
12785 uint32_t Param0;
12786 llvm::Type * Param1;
12787 Intrinsic::ID Param2;
12788 llvm::Type * Param3;
12789 llvm::Type * Param4;
12790 switch (BuiltinID) {
12791 case ARM::BI__builtin_arm_mve_vcvtaq_m_s16_f16:
12792 Param0 = static_cast<uint32_t>(0);
12793 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12794 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
12795 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12796 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12797 break;
12798 case ARM::BI__builtin_arm_mve_vcvtaq_m_s32_f32:
12799 Param0 = static_cast<uint32_t>(0);
12800 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12801 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
12802 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12803 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12804 break;
12805 case ARM::BI__builtin_arm_mve_vcvtaq_m_u16_f16:
12806 Param0 = static_cast<uint32_t>(1);
12807 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12808 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
12809 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12810 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12811 break;
12812 case ARM::BI__builtin_arm_mve_vcvtaq_m_u32_f32:
12813 Param0 = static_cast<uint32_t>(1);
12814 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12815 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
12816 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12817 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12818 break;
12819 case ARM::BI__builtin_arm_mve_vcvtmq_m_s16_f16:
12820 Param0 = static_cast<uint32_t>(0);
12821 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12822 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
12823 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12824 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12825 break;
12826 case ARM::BI__builtin_arm_mve_vcvtmq_m_s32_f32:
12827 Param0 = static_cast<uint32_t>(0);
12828 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12829 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
12830 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12831 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12832 break;
12833 case ARM::BI__builtin_arm_mve_vcvtmq_m_u16_f16:
12834 Param0 = static_cast<uint32_t>(1);
12835 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12836 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
12837 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12838 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12839 break;
12840 case ARM::BI__builtin_arm_mve_vcvtmq_m_u32_f32:
12841 Param0 = static_cast<uint32_t>(1);
12842 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12843 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
12844 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12845 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12846 break;
12847 case ARM::BI__builtin_arm_mve_vcvtnq_m_s16_f16:
12848 Param0 = static_cast<uint32_t>(0);
12849 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12850 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
12851 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12852 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12853 break;
12854 case ARM::BI__builtin_arm_mve_vcvtnq_m_s32_f32:
12855 Param0 = static_cast<uint32_t>(0);
12856 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12857 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
12858 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12859 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12860 break;
12861 case ARM::BI__builtin_arm_mve_vcvtnq_m_u16_f16:
12862 Param0 = static_cast<uint32_t>(1);
12863 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12864 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
12865 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12866 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12867 break;
12868 case ARM::BI__builtin_arm_mve_vcvtnq_m_u32_f32:
12869 Param0 = static_cast<uint32_t>(1);
12870 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12871 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
12872 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12873 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12874 break;
12875 case ARM::BI__builtin_arm_mve_vcvtpq_m_s16_f16:
12876 Param0 = static_cast<uint32_t>(0);
12877 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12878 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
12879 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12880 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12881 break;
12882 case ARM::BI__builtin_arm_mve_vcvtpq_m_s32_f32:
12883 Param0 = static_cast<uint32_t>(0);
12884 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12885 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
12886 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12887 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12888 break;
12889 case ARM::BI__builtin_arm_mve_vcvtpq_m_u16_f16:
12890 Param0 = static_cast<uint32_t>(1);
12891 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12892 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
12893 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12894 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12895 break;
12896 case ARM::BI__builtin_arm_mve_vcvtpq_m_u32_f32:
12897 Param0 = static_cast<uint32_t>(1);
12898 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12899 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
12900 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12901 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12902 break;
12903 }
12904 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
12905 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
12906 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
12907 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
12908 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
12909 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val4});
12910 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param4, Param1}), Args: {Val0, Val1, Val2, Val5});
12911}
12912case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_s16:
12913case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_u16:
12914case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_s32:
12915case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_u32:
12916case ARM::BI__builtin_arm_mve_vcvtq_m_n_s16_f16:
12917case ARM::BI__builtin_arm_mve_vcvtq_m_n_s32_f32:
12918case ARM::BI__builtin_arm_mve_vcvtq_m_n_u16_f16:
12919case ARM::BI__builtin_arm_mve_vcvtq_m_n_u32_f32: {
12920 uint32_t Param0;
12921 llvm::Type * Param1;
12922 llvm::Type * Param2;
12923 llvm::Type * Param3;
12924 switch (BuiltinID) {
12925 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_s16:
12926 Param0 = static_cast<uint32_t>(0);
12927 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12928 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12929 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12930 break;
12931 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_u16:
12932 Param0 = static_cast<uint32_t>(1);
12933 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12934 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12935 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12936 break;
12937 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_s32:
12938 Param0 = static_cast<uint32_t>(0);
12939 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12940 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12941 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12942 break;
12943 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_u32:
12944 Param0 = static_cast<uint32_t>(1);
12945 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12946 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12947 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12948 break;
12949 case ARM::BI__builtin_arm_mve_vcvtq_m_n_s16_f16:
12950 Param0 = static_cast<uint32_t>(0);
12951 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12952 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12953 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12954 break;
12955 case ARM::BI__builtin_arm_mve_vcvtq_m_n_s32_f32:
12956 Param0 = static_cast<uint32_t>(0);
12957 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12958 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12959 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12960 break;
12961 case ARM::BI__builtin_arm_mve_vcvtq_m_n_u16_f16:
12962 Param0 = static_cast<uint32_t>(1);
12963 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
12964 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
12965 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
12966 break;
12967 case ARM::BI__builtin_arm_mve_vcvtq_m_n_u32_f32:
12968 Param0 = static_cast<uint32_t>(1);
12969 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
12970 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
12971 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
12972 break;
12973 }
12974 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
12975 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
12976 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
12977 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
12978 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
12979 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
12980 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val5});
12981 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fix_predicated, Tys: {Param2, Param3, Param1}), Args: {Val0, Val1, Val2, Val3, Val6});
12982}
12983case ARM::BI__builtin_arm_mve_vabavq_p_s16:
12984case ARM::BI__builtin_arm_mve_vabavq_p_s32:
12985case ARM::BI__builtin_arm_mve_vabavq_p_s8:
12986case ARM::BI__builtin_arm_mve_vabavq_p_u16:
12987case ARM::BI__builtin_arm_mve_vabavq_p_u32:
12988case ARM::BI__builtin_arm_mve_vabavq_p_u8:
12989case ARM::BI__builtin_arm_mve_vcmlaq_m_f16:
12990case ARM::BI__builtin_arm_mve_vcmlaq_m_f32:
12991case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f16:
12992case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f32:
12993case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f16:
12994case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f32:
12995case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f16:
12996case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f32:
12997case ARM::BI__builtin_arm_mve_vcmulq_m_f16:
12998case ARM::BI__builtin_arm_mve_vcmulq_m_f32:
12999case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f16:
13000case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f32:
13001case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f16:
13002case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f32:
13003case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f16:
13004case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f32: {
13005 uint32_t Param0;
13006 llvm::Type * Param1;
13007 Intrinsic::ID Param2;
13008 llvm::Type * Param3;
13009 switch (BuiltinID) {
13010 case ARM::BI__builtin_arm_mve_vabavq_p_s16:
13011 Param0 = static_cast<uint32_t>(0);
13012 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13013 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav_predicated);
13014 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13015 break;
13016 case ARM::BI__builtin_arm_mve_vabavq_p_s32:
13017 Param0 = static_cast<uint32_t>(0);
13018 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13019 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav_predicated);
13020 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13021 break;
13022 case ARM::BI__builtin_arm_mve_vabavq_p_s8:
13023 Param0 = static_cast<uint32_t>(0);
13024 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13025 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav_predicated);
13026 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13027 break;
13028 case ARM::BI__builtin_arm_mve_vabavq_p_u16:
13029 Param0 = static_cast<uint32_t>(1);
13030 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13031 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav_predicated);
13032 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13033 break;
13034 case ARM::BI__builtin_arm_mve_vabavq_p_u32:
13035 Param0 = static_cast<uint32_t>(1);
13036 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13037 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav_predicated);
13038 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13039 break;
13040 case ARM::BI__builtin_arm_mve_vabavq_p_u8:
13041 Param0 = static_cast<uint32_t>(1);
13042 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13043 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav_predicated);
13044 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13045 break;
13046 case ARM::BI__builtin_arm_mve_vcmlaq_m_f16:
13047 Param0 = static_cast<uint32_t>(0);
13048 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13049 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13050 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13051 break;
13052 case ARM::BI__builtin_arm_mve_vcmlaq_m_f32:
13053 Param0 = static_cast<uint32_t>(0);
13054 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13055 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13056 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13057 break;
13058 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f16:
13059 Param0 = static_cast<uint32_t>(2);
13060 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13061 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13062 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13063 break;
13064 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f32:
13065 Param0 = static_cast<uint32_t>(2);
13066 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13067 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13068 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13069 break;
13070 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f16:
13071 Param0 = static_cast<uint32_t>(3);
13072 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13073 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13074 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13075 break;
13076 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f32:
13077 Param0 = static_cast<uint32_t>(3);
13078 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13079 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13080 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13081 break;
13082 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f16:
13083 Param0 = static_cast<uint32_t>(1);
13084 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13085 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13086 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13087 break;
13088 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f32:
13089 Param0 = static_cast<uint32_t>(1);
13090 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13091 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq_predicated);
13092 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13093 break;
13094 case ARM::BI__builtin_arm_mve_vcmulq_m_f16:
13095 Param0 = static_cast<uint32_t>(0);
13096 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13097 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13098 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13099 break;
13100 case ARM::BI__builtin_arm_mve_vcmulq_m_f32:
13101 Param0 = static_cast<uint32_t>(0);
13102 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13103 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13104 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13105 break;
13106 case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f16:
13107 Param0 = static_cast<uint32_t>(2);
13108 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13109 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13110 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13111 break;
13112 case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f32:
13113 Param0 = static_cast<uint32_t>(2);
13114 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13115 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13116 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13117 break;
13118 case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f16:
13119 Param0 = static_cast<uint32_t>(3);
13120 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13121 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13122 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13123 break;
13124 case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f32:
13125 Param0 = static_cast<uint32_t>(3);
13126 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13127 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13128 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13129 break;
13130 case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f16:
13131 Param0 = static_cast<uint32_t>(1);
13132 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13133 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13134 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13135 break;
13136 case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f32:
13137 Param0 = static_cast<uint32_t>(1);
13138 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13139 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmulq_predicated);
13140 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13141 break;
13142 }
13143 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13144 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
13145 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
13146 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
13147 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 3));
13148 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
13149 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param1}), Args: {Val5});
13150 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {Param3, Param1}), Args: {Val0, Val1, Val2, Val3, Val6});
13151}
13152case ARM::BI__builtin_arm_mve_vabavq_s16:
13153case ARM::BI__builtin_arm_mve_vabavq_s32:
13154case ARM::BI__builtin_arm_mve_vabavq_s8:
13155case ARM::BI__builtin_arm_mve_vabavq_u16:
13156case ARM::BI__builtin_arm_mve_vabavq_u32:
13157case ARM::BI__builtin_arm_mve_vabavq_u8:
13158case ARM::BI__builtin_arm_mve_vcmlaq_f16:
13159case ARM::BI__builtin_arm_mve_vcmlaq_f32:
13160case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f16:
13161case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f32:
13162case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f16:
13163case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f32:
13164case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f16:
13165case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f32: {
13166 uint32_t Param0;
13167 Intrinsic::ID Param1;
13168 llvm::Type * Param2;
13169 switch (BuiltinID) {
13170 case ARM::BI__builtin_arm_mve_vabavq_s16:
13171 Param0 = static_cast<uint32_t>(0);
13172 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav);
13173 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13174 break;
13175 case ARM::BI__builtin_arm_mve_vabavq_s32:
13176 Param0 = static_cast<uint32_t>(0);
13177 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav);
13178 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13179 break;
13180 case ARM::BI__builtin_arm_mve_vabavq_s8:
13181 Param0 = static_cast<uint32_t>(0);
13182 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav);
13183 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13184 break;
13185 case ARM::BI__builtin_arm_mve_vabavq_u16:
13186 Param0 = static_cast<uint32_t>(1);
13187 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav);
13188 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13189 break;
13190 case ARM::BI__builtin_arm_mve_vabavq_u32:
13191 Param0 = static_cast<uint32_t>(1);
13192 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav);
13193 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13194 break;
13195 case ARM::BI__builtin_arm_mve_vabavq_u8:
13196 Param0 = static_cast<uint32_t>(1);
13197 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vabav);
13198 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13199 break;
13200 case ARM::BI__builtin_arm_mve_vcmlaq_f16:
13201 Param0 = static_cast<uint32_t>(0);
13202 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13203 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13204 break;
13205 case ARM::BI__builtin_arm_mve_vcmlaq_f32:
13206 Param0 = static_cast<uint32_t>(0);
13207 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13208 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13209 break;
13210 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f16:
13211 Param0 = static_cast<uint32_t>(2);
13212 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13213 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13214 break;
13215 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f32:
13216 Param0 = static_cast<uint32_t>(2);
13217 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13218 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13219 break;
13220 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f16:
13221 Param0 = static_cast<uint32_t>(3);
13222 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13223 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13224 break;
13225 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f32:
13226 Param0 = static_cast<uint32_t>(3);
13227 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13228 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13229 break;
13230 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f16:
13231 Param0 = static_cast<uint32_t>(1);
13232 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13233 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13234 break;
13235 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f32:
13236 Param0 = static_cast<uint32_t>(1);
13237 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcmlaq);
13238 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13239 break;
13240 }
13241 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13242 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
13243 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
13244 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 2));
13245 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2}), Args: {Val0, Val1, Val2, Val3});
13246}
13247case ARM::BI__builtin_arm_mve_vcmulq_f16:
13248case ARM::BI__builtin_arm_mve_vcmulq_f32:
13249case ARM::BI__builtin_arm_mve_vcmulq_rot180_f16:
13250case ARM::BI__builtin_arm_mve_vcmulq_rot180_f32:
13251case ARM::BI__builtin_arm_mve_vcmulq_rot270_f16:
13252case ARM::BI__builtin_arm_mve_vcmulq_rot270_f32:
13253case ARM::BI__builtin_arm_mve_vcmulq_rot90_f16:
13254case ARM::BI__builtin_arm_mve_vcmulq_rot90_f32: {
13255 uint32_t Param0;
13256 llvm::Type * Param1;
13257 switch (BuiltinID) {
13258 case ARM::BI__builtin_arm_mve_vcmulq_f16:
13259 Param0 = static_cast<uint32_t>(0);
13260 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13261 break;
13262 case ARM::BI__builtin_arm_mve_vcmulq_f32:
13263 Param0 = static_cast<uint32_t>(0);
13264 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13265 break;
13266 case ARM::BI__builtin_arm_mve_vcmulq_rot180_f16:
13267 Param0 = static_cast<uint32_t>(2);
13268 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13269 break;
13270 case ARM::BI__builtin_arm_mve_vcmulq_rot180_f32:
13271 Param0 = static_cast<uint32_t>(2);
13272 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13273 break;
13274 case ARM::BI__builtin_arm_mve_vcmulq_rot270_f16:
13275 Param0 = static_cast<uint32_t>(3);
13276 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13277 break;
13278 case ARM::BI__builtin_arm_mve_vcmulq_rot270_f32:
13279 Param0 = static_cast<uint32_t>(3);
13280 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13281 break;
13282 case ARM::BI__builtin_arm_mve_vcmulq_rot90_f16:
13283 Param0 = static_cast<uint32_t>(1);
13284 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13285 break;
13286 case ARM::BI__builtin_arm_mve_vcmulq_rot90_f32:
13287 Param0 = static_cast<uint32_t>(1);
13288 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13289 break;
13290 }
13291 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13292 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
13293 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
13294 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcmulq, Tys: {Param1}), Args: {Val0, Val1, Val2});
13295}
13296case ARM::BI__builtin_arm_mve_vcvtq_n_f16_s16:
13297case ARM::BI__builtin_arm_mve_vcvtq_n_f16_u16:
13298case ARM::BI__builtin_arm_mve_vcvtq_n_f32_s32:
13299case ARM::BI__builtin_arm_mve_vcvtq_n_f32_u32:
13300case ARM::BI__builtin_arm_mve_vcvtq_n_s16_f16:
13301case ARM::BI__builtin_arm_mve_vcvtq_n_s32_f32:
13302case ARM::BI__builtin_arm_mve_vcvtq_n_u16_f16:
13303case ARM::BI__builtin_arm_mve_vcvtq_n_u32_f32: {
13304 uint32_t Param0;
13305 llvm::Type * Param1;
13306 llvm::Type * Param2;
13307 switch (BuiltinID) {
13308 case ARM::BI__builtin_arm_mve_vcvtq_n_f16_s16:
13309 Param0 = static_cast<uint32_t>(0);
13310 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13311 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13312 break;
13313 case ARM::BI__builtin_arm_mve_vcvtq_n_f16_u16:
13314 Param0 = static_cast<uint32_t>(1);
13315 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13316 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13317 break;
13318 case ARM::BI__builtin_arm_mve_vcvtq_n_f32_s32:
13319 Param0 = static_cast<uint32_t>(0);
13320 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13321 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13322 break;
13323 case ARM::BI__builtin_arm_mve_vcvtq_n_f32_u32:
13324 Param0 = static_cast<uint32_t>(1);
13325 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13326 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13327 break;
13328 case ARM::BI__builtin_arm_mve_vcvtq_n_s16_f16:
13329 Param0 = static_cast<uint32_t>(0);
13330 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13331 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13332 break;
13333 case ARM::BI__builtin_arm_mve_vcvtq_n_s32_f32:
13334 Param0 = static_cast<uint32_t>(0);
13335 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13336 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13337 break;
13338 case ARM::BI__builtin_arm_mve_vcvtq_n_u16_f16:
13339 Param0 = static_cast<uint32_t>(1);
13340 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13341 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13342 break;
13343 case ARM::BI__builtin_arm_mve_vcvtq_n_u32_f32:
13344 Param0 = static_cast<uint32_t>(1);
13345 Param1 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13346 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13347 break;
13348 }
13349 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13350 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
13351 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
13352 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fix, Tys: {Param1, Param2}), Args: {Val0, Val1, Val2});
13353}
13354case ARM::BI__builtin_arm_mve_vcvtaq_s16_f16:
13355case ARM::BI__builtin_arm_mve_vcvtaq_s32_f32:
13356case ARM::BI__builtin_arm_mve_vcvtaq_u16_f16:
13357case ARM::BI__builtin_arm_mve_vcvtaq_u32_f32:
13358case ARM::BI__builtin_arm_mve_vcvtmq_s16_f16:
13359case ARM::BI__builtin_arm_mve_vcvtmq_s32_f32:
13360case ARM::BI__builtin_arm_mve_vcvtmq_u16_f16:
13361case ARM::BI__builtin_arm_mve_vcvtmq_u32_f32:
13362case ARM::BI__builtin_arm_mve_vcvtnq_s16_f16:
13363case ARM::BI__builtin_arm_mve_vcvtnq_s32_f32:
13364case ARM::BI__builtin_arm_mve_vcvtnq_u16_f16:
13365case ARM::BI__builtin_arm_mve_vcvtnq_u32_f32:
13366case ARM::BI__builtin_arm_mve_vcvtpq_s16_f16:
13367case ARM::BI__builtin_arm_mve_vcvtpq_s32_f32:
13368case ARM::BI__builtin_arm_mve_vcvtpq_u16_f16:
13369case ARM::BI__builtin_arm_mve_vcvtpq_u32_f32: {
13370 uint32_t Param0;
13371 Intrinsic::ID Param1;
13372 llvm::Type * Param2;
13373 llvm::Type * Param3;
13374 switch (BuiltinID) {
13375 case ARM::BI__builtin_arm_mve_vcvtaq_s16_f16:
13376 Param0 = static_cast<uint32_t>(0);
13377 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta);
13378 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13379 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13380 break;
13381 case ARM::BI__builtin_arm_mve_vcvtaq_s32_f32:
13382 Param0 = static_cast<uint32_t>(0);
13383 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta);
13384 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13385 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13386 break;
13387 case ARM::BI__builtin_arm_mve_vcvtaq_u16_f16:
13388 Param0 = static_cast<uint32_t>(1);
13389 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta);
13390 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13391 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13392 break;
13393 case ARM::BI__builtin_arm_mve_vcvtaq_u32_f32:
13394 Param0 = static_cast<uint32_t>(1);
13395 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta);
13396 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13397 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13398 break;
13399 case ARM::BI__builtin_arm_mve_vcvtmq_s16_f16:
13400 Param0 = static_cast<uint32_t>(0);
13401 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm);
13402 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13403 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13404 break;
13405 case ARM::BI__builtin_arm_mve_vcvtmq_s32_f32:
13406 Param0 = static_cast<uint32_t>(0);
13407 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm);
13408 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13409 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13410 break;
13411 case ARM::BI__builtin_arm_mve_vcvtmq_u16_f16:
13412 Param0 = static_cast<uint32_t>(1);
13413 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm);
13414 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13415 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13416 break;
13417 case ARM::BI__builtin_arm_mve_vcvtmq_u32_f32:
13418 Param0 = static_cast<uint32_t>(1);
13419 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm);
13420 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13421 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13422 break;
13423 case ARM::BI__builtin_arm_mve_vcvtnq_s16_f16:
13424 Param0 = static_cast<uint32_t>(0);
13425 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn);
13426 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13427 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13428 break;
13429 case ARM::BI__builtin_arm_mve_vcvtnq_s32_f32:
13430 Param0 = static_cast<uint32_t>(0);
13431 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn);
13432 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13433 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13434 break;
13435 case ARM::BI__builtin_arm_mve_vcvtnq_u16_f16:
13436 Param0 = static_cast<uint32_t>(1);
13437 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn);
13438 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13439 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13440 break;
13441 case ARM::BI__builtin_arm_mve_vcvtnq_u32_f32:
13442 Param0 = static_cast<uint32_t>(1);
13443 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn);
13444 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13445 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13446 break;
13447 case ARM::BI__builtin_arm_mve_vcvtpq_s16_f16:
13448 Param0 = static_cast<uint32_t>(0);
13449 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp);
13450 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13451 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13452 break;
13453 case ARM::BI__builtin_arm_mve_vcvtpq_s32_f32:
13454 Param0 = static_cast<uint32_t>(0);
13455 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp);
13456 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13457 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13458 break;
13459 case ARM::BI__builtin_arm_mve_vcvtpq_u16_f16:
13460 Param0 = static_cast<uint32_t>(1);
13461 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp);
13462 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13463 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13464 break;
13465 case ARM::BI__builtin_arm_mve_vcvtpq_u32_f32:
13466 Param0 = static_cast<uint32_t>(1);
13467 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp);
13468 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13469 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13470 break;
13471 }
13472 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13473 Value *Val1 = EmitScalarExpr(E: E->getArg(Arg: 0));
13474 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {Param2, Param3}), Args: {Val0, Val1});
13475}
13476case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f16:
13477case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f32:
13478case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s16:
13479case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s32:
13480case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s8:
13481case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u16:
13482case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u32:
13483case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u8:
13484case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f16:
13485case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f32:
13486case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s16:
13487case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s32:
13488case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s8:
13489case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u16:
13490case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u32:
13491case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u8:
13492case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s16:
13493case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s32:
13494case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s8:
13495case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s16:
13496case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s32:
13497case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s8: {
13498 uint32_t Param0;
13499 uint32_t Param1;
13500 llvm::Type * Param2;
13501 llvm::Type * Param3;
13502 switch (BuiltinID) {
13503 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f16:
13504 Param0 = static_cast<uint32_t>(1);
13505 Param1 = static_cast<uint32_t>(1);
13506 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13507 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13508 break;
13509 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f32:
13510 Param0 = static_cast<uint32_t>(1);
13511 Param1 = static_cast<uint32_t>(1);
13512 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13513 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13514 break;
13515 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s16:
13516 Param0 = static_cast<uint32_t>(1);
13517 Param1 = static_cast<uint32_t>(1);
13518 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13519 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13520 break;
13521 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s32:
13522 Param0 = static_cast<uint32_t>(1);
13523 Param1 = static_cast<uint32_t>(1);
13524 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13525 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13526 break;
13527 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s8:
13528 Param0 = static_cast<uint32_t>(1);
13529 Param1 = static_cast<uint32_t>(1);
13530 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13531 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13532 break;
13533 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u16:
13534 Param0 = static_cast<uint32_t>(1);
13535 Param1 = static_cast<uint32_t>(1);
13536 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13537 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13538 break;
13539 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u32:
13540 Param0 = static_cast<uint32_t>(1);
13541 Param1 = static_cast<uint32_t>(1);
13542 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13543 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13544 break;
13545 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u8:
13546 Param0 = static_cast<uint32_t>(1);
13547 Param1 = static_cast<uint32_t>(1);
13548 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13549 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13550 break;
13551 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f16:
13552 Param0 = static_cast<uint32_t>(1);
13553 Param1 = static_cast<uint32_t>(0);
13554 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13555 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13556 break;
13557 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f32:
13558 Param0 = static_cast<uint32_t>(1);
13559 Param1 = static_cast<uint32_t>(0);
13560 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13561 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13562 break;
13563 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s16:
13564 Param0 = static_cast<uint32_t>(1);
13565 Param1 = static_cast<uint32_t>(0);
13566 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13567 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13568 break;
13569 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s32:
13570 Param0 = static_cast<uint32_t>(1);
13571 Param1 = static_cast<uint32_t>(0);
13572 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13573 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13574 break;
13575 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s8:
13576 Param0 = static_cast<uint32_t>(1);
13577 Param1 = static_cast<uint32_t>(0);
13578 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13579 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13580 break;
13581 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u16:
13582 Param0 = static_cast<uint32_t>(1);
13583 Param1 = static_cast<uint32_t>(0);
13584 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13585 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13586 break;
13587 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u32:
13588 Param0 = static_cast<uint32_t>(1);
13589 Param1 = static_cast<uint32_t>(0);
13590 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13591 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13592 break;
13593 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u8:
13594 Param0 = static_cast<uint32_t>(1);
13595 Param1 = static_cast<uint32_t>(0);
13596 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13597 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13598 break;
13599 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s16:
13600 Param0 = static_cast<uint32_t>(0);
13601 Param1 = static_cast<uint32_t>(1);
13602 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13603 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13604 break;
13605 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s32:
13606 Param0 = static_cast<uint32_t>(0);
13607 Param1 = static_cast<uint32_t>(1);
13608 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13609 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13610 break;
13611 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s8:
13612 Param0 = static_cast<uint32_t>(0);
13613 Param1 = static_cast<uint32_t>(1);
13614 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13615 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13616 break;
13617 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s16:
13618 Param0 = static_cast<uint32_t>(0);
13619 Param1 = static_cast<uint32_t>(0);
13620 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13621 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13622 break;
13623 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s32:
13624 Param0 = static_cast<uint32_t>(0);
13625 Param1 = static_cast<uint32_t>(0);
13626 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13627 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13628 break;
13629 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s8:
13630 Param0 = static_cast<uint32_t>(0);
13631 Param1 = static_cast<uint32_t>(0);
13632 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13633 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13634 break;
13635 }
13636 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13637 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
13638 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
13639 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
13640 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
13641 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
13642 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
13643 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param2}), Args: {Val6});
13644 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq_predicated, Tys: {Param3, Param2}), Args: {Val0, Val1, Val2, Val3, Val4, Val7});
13645}
13646case ARM::BI__builtin_arm_mve_vcaddq_rot270_f16:
13647case ARM::BI__builtin_arm_mve_vcaddq_rot270_f32:
13648case ARM::BI__builtin_arm_mve_vcaddq_rot270_s16:
13649case ARM::BI__builtin_arm_mve_vcaddq_rot270_s32:
13650case ARM::BI__builtin_arm_mve_vcaddq_rot270_s8:
13651case ARM::BI__builtin_arm_mve_vcaddq_rot270_u16:
13652case ARM::BI__builtin_arm_mve_vcaddq_rot270_u32:
13653case ARM::BI__builtin_arm_mve_vcaddq_rot270_u8:
13654case ARM::BI__builtin_arm_mve_vcaddq_rot90_f16:
13655case ARM::BI__builtin_arm_mve_vcaddq_rot90_f32:
13656case ARM::BI__builtin_arm_mve_vcaddq_rot90_s16:
13657case ARM::BI__builtin_arm_mve_vcaddq_rot90_s32:
13658case ARM::BI__builtin_arm_mve_vcaddq_rot90_s8:
13659case ARM::BI__builtin_arm_mve_vcaddq_rot90_u16:
13660case ARM::BI__builtin_arm_mve_vcaddq_rot90_u32:
13661case ARM::BI__builtin_arm_mve_vcaddq_rot90_u8:
13662case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s16:
13663case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s32:
13664case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s8:
13665case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s16:
13666case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s32:
13667case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s8: {
13668 uint32_t Param0;
13669 uint32_t Param1;
13670 llvm::Type * Param2;
13671 switch (BuiltinID) {
13672 case ARM::BI__builtin_arm_mve_vcaddq_rot270_f16:
13673 Param0 = static_cast<uint32_t>(1);
13674 Param1 = static_cast<uint32_t>(1);
13675 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13676 break;
13677 case ARM::BI__builtin_arm_mve_vcaddq_rot270_f32:
13678 Param0 = static_cast<uint32_t>(1);
13679 Param1 = static_cast<uint32_t>(1);
13680 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13681 break;
13682 case ARM::BI__builtin_arm_mve_vcaddq_rot270_s16:
13683 Param0 = static_cast<uint32_t>(1);
13684 Param1 = static_cast<uint32_t>(1);
13685 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13686 break;
13687 case ARM::BI__builtin_arm_mve_vcaddq_rot270_s32:
13688 Param0 = static_cast<uint32_t>(1);
13689 Param1 = static_cast<uint32_t>(1);
13690 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13691 break;
13692 case ARM::BI__builtin_arm_mve_vcaddq_rot270_s8:
13693 Param0 = static_cast<uint32_t>(1);
13694 Param1 = static_cast<uint32_t>(1);
13695 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13696 break;
13697 case ARM::BI__builtin_arm_mve_vcaddq_rot270_u16:
13698 Param0 = static_cast<uint32_t>(1);
13699 Param1 = static_cast<uint32_t>(1);
13700 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13701 break;
13702 case ARM::BI__builtin_arm_mve_vcaddq_rot270_u32:
13703 Param0 = static_cast<uint32_t>(1);
13704 Param1 = static_cast<uint32_t>(1);
13705 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13706 break;
13707 case ARM::BI__builtin_arm_mve_vcaddq_rot270_u8:
13708 Param0 = static_cast<uint32_t>(1);
13709 Param1 = static_cast<uint32_t>(1);
13710 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13711 break;
13712 case ARM::BI__builtin_arm_mve_vcaddq_rot90_f16:
13713 Param0 = static_cast<uint32_t>(1);
13714 Param1 = static_cast<uint32_t>(0);
13715 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8));
13716 break;
13717 case ARM::BI__builtin_arm_mve_vcaddq_rot90_f32:
13718 Param0 = static_cast<uint32_t>(1);
13719 Param1 = static_cast<uint32_t>(0);
13720 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4));
13721 break;
13722 case ARM::BI__builtin_arm_mve_vcaddq_rot90_s16:
13723 Param0 = static_cast<uint32_t>(1);
13724 Param1 = static_cast<uint32_t>(0);
13725 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13726 break;
13727 case ARM::BI__builtin_arm_mve_vcaddq_rot90_s32:
13728 Param0 = static_cast<uint32_t>(1);
13729 Param1 = static_cast<uint32_t>(0);
13730 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13731 break;
13732 case ARM::BI__builtin_arm_mve_vcaddq_rot90_s8:
13733 Param0 = static_cast<uint32_t>(1);
13734 Param1 = static_cast<uint32_t>(0);
13735 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13736 break;
13737 case ARM::BI__builtin_arm_mve_vcaddq_rot90_u16:
13738 Param0 = static_cast<uint32_t>(1);
13739 Param1 = static_cast<uint32_t>(0);
13740 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13741 break;
13742 case ARM::BI__builtin_arm_mve_vcaddq_rot90_u32:
13743 Param0 = static_cast<uint32_t>(1);
13744 Param1 = static_cast<uint32_t>(0);
13745 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13746 break;
13747 case ARM::BI__builtin_arm_mve_vcaddq_rot90_u8:
13748 Param0 = static_cast<uint32_t>(1);
13749 Param1 = static_cast<uint32_t>(0);
13750 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13751 break;
13752 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s16:
13753 Param0 = static_cast<uint32_t>(0);
13754 Param1 = static_cast<uint32_t>(1);
13755 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13756 break;
13757 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s32:
13758 Param0 = static_cast<uint32_t>(0);
13759 Param1 = static_cast<uint32_t>(1);
13760 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13761 break;
13762 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s8:
13763 Param0 = static_cast<uint32_t>(0);
13764 Param1 = static_cast<uint32_t>(1);
13765 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13766 break;
13767 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s16:
13768 Param0 = static_cast<uint32_t>(0);
13769 Param1 = static_cast<uint32_t>(0);
13770 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13771 break;
13772 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s32:
13773 Param0 = static_cast<uint32_t>(0);
13774 Param1 = static_cast<uint32_t>(0);
13775 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13776 break;
13777 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s8:
13778 Param0 = static_cast<uint32_t>(0);
13779 Param1 = static_cast<uint32_t>(0);
13780 Param2 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13781 break;
13782 }
13783 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13784 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
13785 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
13786 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
13787 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq, Tys: {Param2}), Args: {Val0, Val1, Val2, Val3});
13788}
13789case ARM::BI__builtin_arm_mve_vmladavaq_p_s16:
13790case ARM::BI__builtin_arm_mve_vmladavaq_p_s32:
13791case ARM::BI__builtin_arm_mve_vmladavaq_p_s8:
13792case ARM::BI__builtin_arm_mve_vmladavaq_p_u16:
13793case ARM::BI__builtin_arm_mve_vmladavaq_p_u32:
13794case ARM::BI__builtin_arm_mve_vmladavaq_p_u8:
13795case ARM::BI__builtin_arm_mve_vmladavaxq_p_s16:
13796case ARM::BI__builtin_arm_mve_vmladavaxq_p_s32:
13797case ARM::BI__builtin_arm_mve_vmladavaxq_p_s8:
13798case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s16:
13799case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s32:
13800case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s8:
13801case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s16:
13802case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s32:
13803case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s8: {
13804 uint32_t Param0;
13805 uint32_t Param1;
13806 uint32_t Param2;
13807 llvm::Type * Param3;
13808 llvm::Type * Param4;
13809 switch (BuiltinID) {
13810 case ARM::BI__builtin_arm_mve_vmladavaq_p_s16:
13811 Param0 = static_cast<uint32_t>(0);
13812 Param1 = static_cast<uint32_t>(0);
13813 Param2 = static_cast<uint32_t>(0);
13814 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13815 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13816 break;
13817 case ARM::BI__builtin_arm_mve_vmladavaq_p_s32:
13818 Param0 = static_cast<uint32_t>(0);
13819 Param1 = static_cast<uint32_t>(0);
13820 Param2 = static_cast<uint32_t>(0);
13821 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13822 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13823 break;
13824 case ARM::BI__builtin_arm_mve_vmladavaq_p_s8:
13825 Param0 = static_cast<uint32_t>(0);
13826 Param1 = static_cast<uint32_t>(0);
13827 Param2 = static_cast<uint32_t>(0);
13828 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13829 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13830 break;
13831 case ARM::BI__builtin_arm_mve_vmladavaq_p_u16:
13832 Param0 = static_cast<uint32_t>(1);
13833 Param1 = static_cast<uint32_t>(0);
13834 Param2 = static_cast<uint32_t>(0);
13835 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13836 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13837 break;
13838 case ARM::BI__builtin_arm_mve_vmladavaq_p_u32:
13839 Param0 = static_cast<uint32_t>(1);
13840 Param1 = static_cast<uint32_t>(0);
13841 Param2 = static_cast<uint32_t>(0);
13842 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13843 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13844 break;
13845 case ARM::BI__builtin_arm_mve_vmladavaq_p_u8:
13846 Param0 = static_cast<uint32_t>(1);
13847 Param1 = static_cast<uint32_t>(0);
13848 Param2 = static_cast<uint32_t>(0);
13849 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13850 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13851 break;
13852 case ARM::BI__builtin_arm_mve_vmladavaxq_p_s16:
13853 Param0 = static_cast<uint32_t>(0);
13854 Param1 = static_cast<uint32_t>(0);
13855 Param2 = static_cast<uint32_t>(1);
13856 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13857 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13858 break;
13859 case ARM::BI__builtin_arm_mve_vmladavaxq_p_s32:
13860 Param0 = static_cast<uint32_t>(0);
13861 Param1 = static_cast<uint32_t>(0);
13862 Param2 = static_cast<uint32_t>(1);
13863 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13864 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13865 break;
13866 case ARM::BI__builtin_arm_mve_vmladavaxq_p_s8:
13867 Param0 = static_cast<uint32_t>(0);
13868 Param1 = static_cast<uint32_t>(0);
13869 Param2 = static_cast<uint32_t>(1);
13870 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13871 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13872 break;
13873 case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s16:
13874 Param0 = static_cast<uint32_t>(0);
13875 Param1 = static_cast<uint32_t>(1);
13876 Param2 = static_cast<uint32_t>(0);
13877 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13878 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13879 break;
13880 case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s32:
13881 Param0 = static_cast<uint32_t>(0);
13882 Param1 = static_cast<uint32_t>(1);
13883 Param2 = static_cast<uint32_t>(0);
13884 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13885 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13886 break;
13887 case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s8:
13888 Param0 = static_cast<uint32_t>(0);
13889 Param1 = static_cast<uint32_t>(1);
13890 Param2 = static_cast<uint32_t>(0);
13891 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13892 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13893 break;
13894 case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s16:
13895 Param0 = static_cast<uint32_t>(0);
13896 Param1 = static_cast<uint32_t>(1);
13897 Param2 = static_cast<uint32_t>(1);
13898 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
13899 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13900 break;
13901 case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s32:
13902 Param0 = static_cast<uint32_t>(0);
13903 Param1 = static_cast<uint32_t>(1);
13904 Param2 = static_cast<uint32_t>(1);
13905 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
13906 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13907 break;
13908 case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s8:
13909 Param0 = static_cast<uint32_t>(0);
13910 Param1 = static_cast<uint32_t>(1);
13911 Param2 = static_cast<uint32_t>(1);
13912 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
13913 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13914 break;
13915 }
13916 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
13917 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
13918 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
13919 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
13920 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
13921 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
13922 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
13923 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
13924 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val7});
13925 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmldava_predicated, Tys: {Param4, Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val5, Val8});
13926}
13927case ARM::BI__builtin_arm_mve_vmladavaq_s16:
13928case ARM::BI__builtin_arm_mve_vmladavaq_s32:
13929case ARM::BI__builtin_arm_mve_vmladavaq_s8:
13930case ARM::BI__builtin_arm_mve_vmladavaq_u16:
13931case ARM::BI__builtin_arm_mve_vmladavaq_u32:
13932case ARM::BI__builtin_arm_mve_vmladavaq_u8:
13933case ARM::BI__builtin_arm_mve_vmladavaxq_s16:
13934case ARM::BI__builtin_arm_mve_vmladavaxq_s32:
13935case ARM::BI__builtin_arm_mve_vmladavaxq_s8:
13936case ARM::BI__builtin_arm_mve_vmlsdavaq_s16:
13937case ARM::BI__builtin_arm_mve_vmlsdavaq_s32:
13938case ARM::BI__builtin_arm_mve_vmlsdavaq_s8:
13939case ARM::BI__builtin_arm_mve_vmlsdavaxq_s16:
13940case ARM::BI__builtin_arm_mve_vmlsdavaxq_s32:
13941case ARM::BI__builtin_arm_mve_vmlsdavaxq_s8: {
13942 uint32_t Param0;
13943 uint32_t Param1;
13944 uint32_t Param2;
13945 llvm::Type * Param3;
13946 switch (BuiltinID) {
13947 case ARM::BI__builtin_arm_mve_vmladavaq_s16:
13948 Param0 = static_cast<uint32_t>(0);
13949 Param1 = static_cast<uint32_t>(0);
13950 Param2 = static_cast<uint32_t>(0);
13951 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13952 break;
13953 case ARM::BI__builtin_arm_mve_vmladavaq_s32:
13954 Param0 = static_cast<uint32_t>(0);
13955 Param1 = static_cast<uint32_t>(0);
13956 Param2 = static_cast<uint32_t>(0);
13957 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13958 break;
13959 case ARM::BI__builtin_arm_mve_vmladavaq_s8:
13960 Param0 = static_cast<uint32_t>(0);
13961 Param1 = static_cast<uint32_t>(0);
13962 Param2 = static_cast<uint32_t>(0);
13963 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13964 break;
13965 case ARM::BI__builtin_arm_mve_vmladavaq_u16:
13966 Param0 = static_cast<uint32_t>(1);
13967 Param1 = static_cast<uint32_t>(0);
13968 Param2 = static_cast<uint32_t>(0);
13969 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13970 break;
13971 case ARM::BI__builtin_arm_mve_vmladavaq_u32:
13972 Param0 = static_cast<uint32_t>(1);
13973 Param1 = static_cast<uint32_t>(0);
13974 Param2 = static_cast<uint32_t>(0);
13975 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13976 break;
13977 case ARM::BI__builtin_arm_mve_vmladavaq_u8:
13978 Param0 = static_cast<uint32_t>(1);
13979 Param1 = static_cast<uint32_t>(0);
13980 Param2 = static_cast<uint32_t>(0);
13981 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
13982 break;
13983 case ARM::BI__builtin_arm_mve_vmladavaxq_s16:
13984 Param0 = static_cast<uint32_t>(0);
13985 Param1 = static_cast<uint32_t>(0);
13986 Param2 = static_cast<uint32_t>(1);
13987 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
13988 break;
13989 case ARM::BI__builtin_arm_mve_vmladavaxq_s32:
13990 Param0 = static_cast<uint32_t>(0);
13991 Param1 = static_cast<uint32_t>(0);
13992 Param2 = static_cast<uint32_t>(1);
13993 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
13994 break;
13995 case ARM::BI__builtin_arm_mve_vmladavaxq_s8:
13996 Param0 = static_cast<uint32_t>(0);
13997 Param1 = static_cast<uint32_t>(0);
13998 Param2 = static_cast<uint32_t>(1);
13999 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14000 break;
14001 case ARM::BI__builtin_arm_mve_vmlsdavaq_s16:
14002 Param0 = static_cast<uint32_t>(0);
14003 Param1 = static_cast<uint32_t>(1);
14004 Param2 = static_cast<uint32_t>(0);
14005 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14006 break;
14007 case ARM::BI__builtin_arm_mve_vmlsdavaq_s32:
14008 Param0 = static_cast<uint32_t>(0);
14009 Param1 = static_cast<uint32_t>(1);
14010 Param2 = static_cast<uint32_t>(0);
14011 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14012 break;
14013 case ARM::BI__builtin_arm_mve_vmlsdavaq_s8:
14014 Param0 = static_cast<uint32_t>(0);
14015 Param1 = static_cast<uint32_t>(1);
14016 Param2 = static_cast<uint32_t>(0);
14017 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14018 break;
14019 case ARM::BI__builtin_arm_mve_vmlsdavaxq_s16:
14020 Param0 = static_cast<uint32_t>(0);
14021 Param1 = static_cast<uint32_t>(1);
14022 Param2 = static_cast<uint32_t>(1);
14023 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14024 break;
14025 case ARM::BI__builtin_arm_mve_vmlsdavaxq_s32:
14026 Param0 = static_cast<uint32_t>(0);
14027 Param1 = static_cast<uint32_t>(1);
14028 Param2 = static_cast<uint32_t>(1);
14029 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14030 break;
14031 case ARM::BI__builtin_arm_mve_vmlsdavaxq_s8:
14032 Param0 = static_cast<uint32_t>(0);
14033 Param1 = static_cast<uint32_t>(1);
14034 Param2 = static_cast<uint32_t>(1);
14035 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14036 break;
14037 }
14038 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14039 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
14040 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
14041 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
14042 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
14043 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
14044 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmldava, Tys: {Param3}), Args: {Val0, Val1, Val2, Val3, Val4, Val5});
14045}
14046case ARM::BI__builtin_arm_mve_vmladavq_p_s16:
14047case ARM::BI__builtin_arm_mve_vmladavq_p_s32:
14048case ARM::BI__builtin_arm_mve_vmladavq_p_s8:
14049case ARM::BI__builtin_arm_mve_vmladavq_p_u16:
14050case ARM::BI__builtin_arm_mve_vmladavq_p_u32:
14051case ARM::BI__builtin_arm_mve_vmladavq_p_u8:
14052case ARM::BI__builtin_arm_mve_vmladavxq_p_s16:
14053case ARM::BI__builtin_arm_mve_vmladavxq_p_s32:
14054case ARM::BI__builtin_arm_mve_vmladavxq_p_s8:
14055case ARM::BI__builtin_arm_mve_vmlsdavq_p_s16:
14056case ARM::BI__builtin_arm_mve_vmlsdavq_p_s32:
14057case ARM::BI__builtin_arm_mve_vmlsdavq_p_s8:
14058case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s16:
14059case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s32:
14060case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s8: {
14061 uint32_t Param0;
14062 uint32_t Param1;
14063 uint32_t Param2;
14064 llvm::Type * Param3;
14065 llvm::Type * Param4;
14066 switch (BuiltinID) {
14067 case ARM::BI__builtin_arm_mve_vmladavq_p_s16:
14068 Param0 = static_cast<uint32_t>(0);
14069 Param1 = static_cast<uint32_t>(0);
14070 Param2 = static_cast<uint32_t>(0);
14071 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14072 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14073 break;
14074 case ARM::BI__builtin_arm_mve_vmladavq_p_s32:
14075 Param0 = static_cast<uint32_t>(0);
14076 Param1 = static_cast<uint32_t>(0);
14077 Param2 = static_cast<uint32_t>(0);
14078 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14079 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14080 break;
14081 case ARM::BI__builtin_arm_mve_vmladavq_p_s8:
14082 Param0 = static_cast<uint32_t>(0);
14083 Param1 = static_cast<uint32_t>(0);
14084 Param2 = static_cast<uint32_t>(0);
14085 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
14086 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14087 break;
14088 case ARM::BI__builtin_arm_mve_vmladavq_p_u16:
14089 Param0 = static_cast<uint32_t>(1);
14090 Param1 = static_cast<uint32_t>(0);
14091 Param2 = static_cast<uint32_t>(0);
14092 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14093 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14094 break;
14095 case ARM::BI__builtin_arm_mve_vmladavq_p_u32:
14096 Param0 = static_cast<uint32_t>(1);
14097 Param1 = static_cast<uint32_t>(0);
14098 Param2 = static_cast<uint32_t>(0);
14099 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14100 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14101 break;
14102 case ARM::BI__builtin_arm_mve_vmladavq_p_u8:
14103 Param0 = static_cast<uint32_t>(1);
14104 Param1 = static_cast<uint32_t>(0);
14105 Param2 = static_cast<uint32_t>(0);
14106 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
14107 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14108 break;
14109 case ARM::BI__builtin_arm_mve_vmladavxq_p_s16:
14110 Param0 = static_cast<uint32_t>(0);
14111 Param1 = static_cast<uint32_t>(0);
14112 Param2 = static_cast<uint32_t>(1);
14113 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14114 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14115 break;
14116 case ARM::BI__builtin_arm_mve_vmladavxq_p_s32:
14117 Param0 = static_cast<uint32_t>(0);
14118 Param1 = static_cast<uint32_t>(0);
14119 Param2 = static_cast<uint32_t>(1);
14120 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14121 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14122 break;
14123 case ARM::BI__builtin_arm_mve_vmladavxq_p_s8:
14124 Param0 = static_cast<uint32_t>(0);
14125 Param1 = static_cast<uint32_t>(0);
14126 Param2 = static_cast<uint32_t>(1);
14127 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
14128 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14129 break;
14130 case ARM::BI__builtin_arm_mve_vmlsdavq_p_s16:
14131 Param0 = static_cast<uint32_t>(0);
14132 Param1 = static_cast<uint32_t>(1);
14133 Param2 = static_cast<uint32_t>(0);
14134 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14135 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14136 break;
14137 case ARM::BI__builtin_arm_mve_vmlsdavq_p_s32:
14138 Param0 = static_cast<uint32_t>(0);
14139 Param1 = static_cast<uint32_t>(1);
14140 Param2 = static_cast<uint32_t>(0);
14141 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14142 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14143 break;
14144 case ARM::BI__builtin_arm_mve_vmlsdavq_p_s8:
14145 Param0 = static_cast<uint32_t>(0);
14146 Param1 = static_cast<uint32_t>(1);
14147 Param2 = static_cast<uint32_t>(0);
14148 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
14149 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14150 break;
14151 case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s16:
14152 Param0 = static_cast<uint32_t>(0);
14153 Param1 = static_cast<uint32_t>(1);
14154 Param2 = static_cast<uint32_t>(1);
14155 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14156 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14157 break;
14158 case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s32:
14159 Param0 = static_cast<uint32_t>(0);
14160 Param1 = static_cast<uint32_t>(1);
14161 Param2 = static_cast<uint32_t>(1);
14162 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14163 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14164 break;
14165 case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s8:
14166 Param0 = static_cast<uint32_t>(0);
14167 Param1 = static_cast<uint32_t>(1);
14168 Param2 = static_cast<uint32_t>(1);
14169 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16));
14170 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14171 break;
14172 }
14173 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14174 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
14175 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
14176 llvm::Type *Val3 = Int32Ty;
14177 Value *Val4 = llvm::Constant::getNullValue(Ty: Val3);
14178 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
14179 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 1));
14180 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 2));
14181 Value *Val8 = Builder.CreateIntCast(V: Val7, DestTy: Int32Ty, isSigned: false);
14182 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val8});
14183 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmldava_predicated, Tys: {Param4, Param3}), Args: {Val0, Val1, Val2, Val4, Val5, Val6, Val9});
14184}
14185case ARM::BI__builtin_arm_mve_vmladavq_s16:
14186case ARM::BI__builtin_arm_mve_vmladavq_s32:
14187case ARM::BI__builtin_arm_mve_vmladavq_s8:
14188case ARM::BI__builtin_arm_mve_vmladavq_u16:
14189case ARM::BI__builtin_arm_mve_vmladavq_u32:
14190case ARM::BI__builtin_arm_mve_vmladavq_u8:
14191case ARM::BI__builtin_arm_mve_vmladavxq_s16:
14192case ARM::BI__builtin_arm_mve_vmladavxq_s32:
14193case ARM::BI__builtin_arm_mve_vmladavxq_s8:
14194case ARM::BI__builtin_arm_mve_vmlsdavq_s16:
14195case ARM::BI__builtin_arm_mve_vmlsdavq_s32:
14196case ARM::BI__builtin_arm_mve_vmlsdavq_s8:
14197case ARM::BI__builtin_arm_mve_vmlsdavxq_s16:
14198case ARM::BI__builtin_arm_mve_vmlsdavxq_s32:
14199case ARM::BI__builtin_arm_mve_vmlsdavxq_s8: {
14200 uint32_t Param0;
14201 uint32_t Param1;
14202 uint32_t Param2;
14203 llvm::Type * Param3;
14204 switch (BuiltinID) {
14205 case ARM::BI__builtin_arm_mve_vmladavq_s16:
14206 Param0 = static_cast<uint32_t>(0);
14207 Param1 = static_cast<uint32_t>(0);
14208 Param2 = static_cast<uint32_t>(0);
14209 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14210 break;
14211 case ARM::BI__builtin_arm_mve_vmladavq_s32:
14212 Param0 = static_cast<uint32_t>(0);
14213 Param1 = static_cast<uint32_t>(0);
14214 Param2 = static_cast<uint32_t>(0);
14215 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14216 break;
14217 case ARM::BI__builtin_arm_mve_vmladavq_s8:
14218 Param0 = static_cast<uint32_t>(0);
14219 Param1 = static_cast<uint32_t>(0);
14220 Param2 = static_cast<uint32_t>(0);
14221 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14222 break;
14223 case ARM::BI__builtin_arm_mve_vmladavq_u16:
14224 Param0 = static_cast<uint32_t>(1);
14225 Param1 = static_cast<uint32_t>(0);
14226 Param2 = static_cast<uint32_t>(0);
14227 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14228 break;
14229 case ARM::BI__builtin_arm_mve_vmladavq_u32:
14230 Param0 = static_cast<uint32_t>(1);
14231 Param1 = static_cast<uint32_t>(0);
14232 Param2 = static_cast<uint32_t>(0);
14233 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14234 break;
14235 case ARM::BI__builtin_arm_mve_vmladavq_u8:
14236 Param0 = static_cast<uint32_t>(1);
14237 Param1 = static_cast<uint32_t>(0);
14238 Param2 = static_cast<uint32_t>(0);
14239 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14240 break;
14241 case ARM::BI__builtin_arm_mve_vmladavxq_s16:
14242 Param0 = static_cast<uint32_t>(0);
14243 Param1 = static_cast<uint32_t>(0);
14244 Param2 = static_cast<uint32_t>(1);
14245 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14246 break;
14247 case ARM::BI__builtin_arm_mve_vmladavxq_s32:
14248 Param0 = static_cast<uint32_t>(0);
14249 Param1 = static_cast<uint32_t>(0);
14250 Param2 = static_cast<uint32_t>(1);
14251 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14252 break;
14253 case ARM::BI__builtin_arm_mve_vmladavxq_s8:
14254 Param0 = static_cast<uint32_t>(0);
14255 Param1 = static_cast<uint32_t>(0);
14256 Param2 = static_cast<uint32_t>(1);
14257 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14258 break;
14259 case ARM::BI__builtin_arm_mve_vmlsdavq_s16:
14260 Param0 = static_cast<uint32_t>(0);
14261 Param1 = static_cast<uint32_t>(1);
14262 Param2 = static_cast<uint32_t>(0);
14263 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14264 break;
14265 case ARM::BI__builtin_arm_mve_vmlsdavq_s32:
14266 Param0 = static_cast<uint32_t>(0);
14267 Param1 = static_cast<uint32_t>(1);
14268 Param2 = static_cast<uint32_t>(0);
14269 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14270 break;
14271 case ARM::BI__builtin_arm_mve_vmlsdavq_s8:
14272 Param0 = static_cast<uint32_t>(0);
14273 Param1 = static_cast<uint32_t>(1);
14274 Param2 = static_cast<uint32_t>(0);
14275 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14276 break;
14277 case ARM::BI__builtin_arm_mve_vmlsdavxq_s16:
14278 Param0 = static_cast<uint32_t>(0);
14279 Param1 = static_cast<uint32_t>(1);
14280 Param2 = static_cast<uint32_t>(1);
14281 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14282 break;
14283 case ARM::BI__builtin_arm_mve_vmlsdavxq_s32:
14284 Param0 = static_cast<uint32_t>(0);
14285 Param1 = static_cast<uint32_t>(1);
14286 Param2 = static_cast<uint32_t>(1);
14287 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14288 break;
14289 case ARM::BI__builtin_arm_mve_vmlsdavxq_s8:
14290 Param0 = static_cast<uint32_t>(0);
14291 Param1 = static_cast<uint32_t>(1);
14292 Param2 = static_cast<uint32_t>(1);
14293 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16));
14294 break;
14295 }
14296 Value *Val0 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14297 Value *Val1 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
14298 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
14299 llvm::Type *Val3 = Int32Ty;
14300 Value *Val4 = llvm::Constant::getNullValue(Ty: Val3);
14301 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
14302 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 1));
14303 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmldava, Tys: {Param3}), Args: {Val0, Val1, Val2, Val4, Val5, Val6});
14304}
14305case ARM::BI__builtin_arm_mve_vmlaldavq_s16:
14306case ARM::BI__builtin_arm_mve_vmlaldavq_s32:
14307case ARM::BI__builtin_arm_mve_vmlaldavq_u16:
14308case ARM::BI__builtin_arm_mve_vmlaldavq_u32:
14309case ARM::BI__builtin_arm_mve_vmlaldavxq_s16:
14310case ARM::BI__builtin_arm_mve_vmlaldavxq_s32:
14311case ARM::BI__builtin_arm_mve_vmlsldavq_s16:
14312case ARM::BI__builtin_arm_mve_vmlsldavq_s32:
14313case ARM::BI__builtin_arm_mve_vmlsldavxq_s16:
14314case ARM::BI__builtin_arm_mve_vmlsldavxq_s32:
14315case ARM::BI__builtin_arm_mve_vrmlaldavhq_s32:
14316case ARM::BI__builtin_arm_mve_vrmlaldavhq_u32:
14317case ARM::BI__builtin_arm_mve_vrmlaldavhxq_s32:
14318case ARM::BI__builtin_arm_mve_vrmlsldavhq_s32:
14319case ARM::BI__builtin_arm_mve_vrmlsldavhxq_s32: {
14320 uint32_t Param0;
14321 uint32_t Param1;
14322 uint32_t Param2;
14323 Intrinsic::ID Param3;
14324 llvm::Type * Param4;
14325 switch (BuiltinID) {
14326 case ARM::BI__builtin_arm_mve_vmlaldavq_s16:
14327 Param0 = static_cast<uint32_t>(0);
14328 Param1 = static_cast<uint32_t>(0);
14329 Param2 = static_cast<uint32_t>(0);
14330 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14331 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14332 break;
14333 case ARM::BI__builtin_arm_mve_vmlaldavq_s32:
14334 Param0 = static_cast<uint32_t>(0);
14335 Param1 = static_cast<uint32_t>(0);
14336 Param2 = static_cast<uint32_t>(0);
14337 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14338 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14339 break;
14340 case ARM::BI__builtin_arm_mve_vmlaldavq_u16:
14341 Param0 = static_cast<uint32_t>(1);
14342 Param1 = static_cast<uint32_t>(0);
14343 Param2 = static_cast<uint32_t>(0);
14344 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14345 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14346 break;
14347 case ARM::BI__builtin_arm_mve_vmlaldavq_u32:
14348 Param0 = static_cast<uint32_t>(1);
14349 Param1 = static_cast<uint32_t>(0);
14350 Param2 = static_cast<uint32_t>(0);
14351 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14352 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14353 break;
14354 case ARM::BI__builtin_arm_mve_vmlaldavxq_s16:
14355 Param0 = static_cast<uint32_t>(0);
14356 Param1 = static_cast<uint32_t>(0);
14357 Param2 = static_cast<uint32_t>(1);
14358 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14359 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14360 break;
14361 case ARM::BI__builtin_arm_mve_vmlaldavxq_s32:
14362 Param0 = static_cast<uint32_t>(0);
14363 Param1 = static_cast<uint32_t>(0);
14364 Param2 = static_cast<uint32_t>(1);
14365 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14366 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14367 break;
14368 case ARM::BI__builtin_arm_mve_vmlsldavq_s16:
14369 Param0 = static_cast<uint32_t>(0);
14370 Param1 = static_cast<uint32_t>(1);
14371 Param2 = static_cast<uint32_t>(0);
14372 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14373 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14374 break;
14375 case ARM::BI__builtin_arm_mve_vmlsldavq_s32:
14376 Param0 = static_cast<uint32_t>(0);
14377 Param1 = static_cast<uint32_t>(1);
14378 Param2 = static_cast<uint32_t>(0);
14379 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14380 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14381 break;
14382 case ARM::BI__builtin_arm_mve_vmlsldavxq_s16:
14383 Param0 = static_cast<uint32_t>(0);
14384 Param1 = static_cast<uint32_t>(1);
14385 Param2 = static_cast<uint32_t>(1);
14386 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14387 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14388 break;
14389 case ARM::BI__builtin_arm_mve_vmlsldavxq_s32:
14390 Param0 = static_cast<uint32_t>(0);
14391 Param1 = static_cast<uint32_t>(1);
14392 Param2 = static_cast<uint32_t>(1);
14393 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava);
14394 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14395 break;
14396 case ARM::BI__builtin_arm_mve_vrmlaldavhq_s32:
14397 Param0 = static_cast<uint32_t>(0);
14398 Param1 = static_cast<uint32_t>(0);
14399 Param2 = static_cast<uint32_t>(0);
14400 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
14401 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14402 break;
14403 case ARM::BI__builtin_arm_mve_vrmlaldavhq_u32:
14404 Param0 = static_cast<uint32_t>(1);
14405 Param1 = static_cast<uint32_t>(0);
14406 Param2 = static_cast<uint32_t>(0);
14407 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
14408 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14409 break;
14410 case ARM::BI__builtin_arm_mve_vrmlaldavhxq_s32:
14411 Param0 = static_cast<uint32_t>(0);
14412 Param1 = static_cast<uint32_t>(0);
14413 Param2 = static_cast<uint32_t>(1);
14414 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
14415 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14416 break;
14417 case ARM::BI__builtin_arm_mve_vrmlsldavhq_s32:
14418 Param0 = static_cast<uint32_t>(0);
14419 Param1 = static_cast<uint32_t>(1);
14420 Param2 = static_cast<uint32_t>(0);
14421 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
14422 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14423 break;
14424 case ARM::BI__builtin_arm_mve_vrmlsldavhxq_s32:
14425 Param0 = static_cast<uint32_t>(0);
14426 Param1 = static_cast<uint32_t>(1);
14427 Param2 = static_cast<uint32_t>(1);
14428 Param3 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha);
14429 Param4 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14430 break;
14431 }
14432 llvm::Type *Val0 = Int32Ty;
14433 Value *Val1 = llvm::Constant::getNullValue(Ty: Val0);
14434 llvm::Type *Val2 = Int32Ty;
14435 Value *Val3 = llvm::Constant::getNullValue(Ty: Val2);
14436 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14437 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
14438 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
14439 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 0));
14440 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 1));
14441 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param3, Tys: {Param4}), Args: {Val4, Val5, Val6, Val3, Val1, Val7, Val8});
14442 Value *Val10 = Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(1));
14443 Value *Val11 = Builder.CreateIntCast(V: Val10, DestTy: Int64Ty, isSigned: false);
14444 Value *Val12 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
14445 Value *Val13 = Builder.CreateShl(LHS: Val11, RHS: Val12);
14446 Value *Val14 = Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(0));
14447 Value *Val15 = Builder.CreateIntCast(V: Val14, DestTy: Int64Ty, isSigned: false);
14448 return Builder.CreateOr(LHS: Val13, RHS: Val15);
14449}
14450case ARM::BI__builtin_arm_mve_vmlaldavq_p_s16:
14451case ARM::BI__builtin_arm_mve_vmlaldavq_p_s32:
14452case ARM::BI__builtin_arm_mve_vmlaldavq_p_u16:
14453case ARM::BI__builtin_arm_mve_vmlaldavq_p_u32:
14454case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s16:
14455case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s32:
14456case ARM::BI__builtin_arm_mve_vmlsldavq_p_s16:
14457case ARM::BI__builtin_arm_mve_vmlsldavq_p_s32:
14458case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s16:
14459case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s32:
14460case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_s32:
14461case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_u32:
14462case ARM::BI__builtin_arm_mve_vrmlaldavhxq_p_s32:
14463case ARM::BI__builtin_arm_mve_vrmlsldavhq_p_s32:
14464case ARM::BI__builtin_arm_mve_vrmlsldavhxq_p_s32: {
14465 uint32_t Param0;
14466 uint32_t Param1;
14467 uint32_t Param2;
14468 llvm::Type * Param3;
14469 Intrinsic::ID Param4;
14470 llvm::Type * Param5;
14471 switch (BuiltinID) {
14472 case ARM::BI__builtin_arm_mve_vmlaldavq_p_s16:
14473 Param0 = static_cast<uint32_t>(0);
14474 Param1 = static_cast<uint32_t>(0);
14475 Param2 = static_cast<uint32_t>(0);
14476 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14477 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14478 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14479 break;
14480 case ARM::BI__builtin_arm_mve_vmlaldavq_p_s32:
14481 Param0 = static_cast<uint32_t>(0);
14482 Param1 = static_cast<uint32_t>(0);
14483 Param2 = static_cast<uint32_t>(0);
14484 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14485 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14486 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14487 break;
14488 case ARM::BI__builtin_arm_mve_vmlaldavq_p_u16:
14489 Param0 = static_cast<uint32_t>(1);
14490 Param1 = static_cast<uint32_t>(0);
14491 Param2 = static_cast<uint32_t>(0);
14492 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14493 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14494 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14495 break;
14496 case ARM::BI__builtin_arm_mve_vmlaldavq_p_u32:
14497 Param0 = static_cast<uint32_t>(1);
14498 Param1 = static_cast<uint32_t>(0);
14499 Param2 = static_cast<uint32_t>(0);
14500 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14501 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14502 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14503 break;
14504 case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s16:
14505 Param0 = static_cast<uint32_t>(0);
14506 Param1 = static_cast<uint32_t>(0);
14507 Param2 = static_cast<uint32_t>(1);
14508 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14509 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14510 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14511 break;
14512 case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s32:
14513 Param0 = static_cast<uint32_t>(0);
14514 Param1 = static_cast<uint32_t>(0);
14515 Param2 = static_cast<uint32_t>(1);
14516 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14517 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14518 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14519 break;
14520 case ARM::BI__builtin_arm_mve_vmlsldavq_p_s16:
14521 Param0 = static_cast<uint32_t>(0);
14522 Param1 = static_cast<uint32_t>(1);
14523 Param2 = static_cast<uint32_t>(0);
14524 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14525 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14526 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14527 break;
14528 case ARM::BI__builtin_arm_mve_vmlsldavq_p_s32:
14529 Param0 = static_cast<uint32_t>(0);
14530 Param1 = static_cast<uint32_t>(1);
14531 Param2 = static_cast<uint32_t>(0);
14532 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14533 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14534 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14535 break;
14536 case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s16:
14537 Param0 = static_cast<uint32_t>(0);
14538 Param1 = static_cast<uint32_t>(1);
14539 Param2 = static_cast<uint32_t>(1);
14540 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8));
14541 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14542 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8));
14543 break;
14544 case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s32:
14545 Param0 = static_cast<uint32_t>(0);
14546 Param1 = static_cast<uint32_t>(1);
14547 Param2 = static_cast<uint32_t>(1);
14548 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14549 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vmlldava_predicated);
14550 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14551 break;
14552 case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_s32:
14553 Param0 = static_cast<uint32_t>(0);
14554 Param1 = static_cast<uint32_t>(0);
14555 Param2 = static_cast<uint32_t>(0);
14556 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14557 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
14558 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14559 break;
14560 case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_u32:
14561 Param0 = static_cast<uint32_t>(1);
14562 Param1 = static_cast<uint32_t>(0);
14563 Param2 = static_cast<uint32_t>(0);
14564 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14565 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
14566 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14567 break;
14568 case ARM::BI__builtin_arm_mve_vrmlaldavhxq_p_s32:
14569 Param0 = static_cast<uint32_t>(0);
14570 Param1 = static_cast<uint32_t>(0);
14571 Param2 = static_cast<uint32_t>(1);
14572 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14573 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
14574 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14575 break;
14576 case ARM::BI__builtin_arm_mve_vrmlsldavhq_p_s32:
14577 Param0 = static_cast<uint32_t>(0);
14578 Param1 = static_cast<uint32_t>(1);
14579 Param2 = static_cast<uint32_t>(0);
14580 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14581 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
14582 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14583 break;
14584 case ARM::BI__builtin_arm_mve_vrmlsldavhxq_p_s32:
14585 Param0 = static_cast<uint32_t>(0);
14586 Param1 = static_cast<uint32_t>(1);
14587 Param2 = static_cast<uint32_t>(1);
14588 Param3 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4));
14589 Param4 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrmlldavha_predicated);
14590 Param5 = static_cast<llvm::Type *>(llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4));
14591 break;
14592 }
14593 llvm::Type *Val0 = Int32Ty;
14594 Value *Val1 = llvm::Constant::getNullValue(Ty: Val0);
14595 llvm::Type *Val2 = Int32Ty;
14596 Value *Val3 = llvm::Constant::getNullValue(Ty: Val2);
14597 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14598 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
14599 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param2);
14600 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 0));
14601 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 1));
14602 Value *Val9 = EmitScalarExpr(E: E->getArg(Arg: 2));
14603 Value *Val10 = Builder.CreateIntCast(V: Val9, DestTy: Int32Ty, isSigned: false);
14604 Value *Val11 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {Param3}), Args: {Val10});
14605 Value *Val12 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param4, Tys: {Param5, Param3}), Args: {Val4, Val5, Val6, Val3, Val1, Val7, Val8, Val11});
14606 Value *Val13 = Builder.CreateExtractValue(Agg: Val12, Idxs: static_cast<unsigned>(1));
14607 Value *Val14 = Builder.CreateIntCast(V: Val13, DestTy: Int64Ty, isSigned: false);
14608 Value *Val15 = llvm::ConstantInt::get(Ty: Int64Ty, V: 32);
14609 Value *Val16 = Builder.CreateShl(LHS: Val14, RHS: Val15);
14610 Value *Val17 = Builder.CreateExtractValue(Agg: Val12, Idxs: static_cast<unsigned>(0));
14611 Value *Val18 = Builder.CreateIntCast(V: Val17, DestTy: Int64Ty, isSigned: false);
14612 return Builder.CreateOr(LHS: Val16, RHS: Val18);
14613}
14614case ARM::BI__builtin_arm_mve_vld1q_z_f32:
14615case ARM::BI__builtin_arm_mve_vldrwq_z_f32: {
14616 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14617 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
14618 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
14619 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14620 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
14621 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
14622 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14623 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
14624 return Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(4), Mask: Val5, PassThru: Val7);
14625}
14626case ARM::BI__builtin_arm_mve_vaddq_x_n_f32:
14627case ARM::BI__builtin_arm_mve_vmulq_x_n_f32:
14628case ARM::BI__builtin_arm_mve_vsubq_x_n_f32: {
14629 Intrinsic::ID Param0;
14630 switch (BuiltinID) {
14631 case ARM::BI__builtin_arm_mve_vaddq_x_n_f32:
14632 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
14633 break;
14634 case ARM::BI__builtin_arm_mve_vmulq_x_n_f32:
14635 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
14636 break;
14637 case ARM::BI__builtin_arm_mve_vsubq_x_n_f32:
14638 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
14639 break;
14640 }
14641 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14642 Value *Val1 = UndefValue::get(T: Val0);
14643 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14644 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14645 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
14646 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
14647 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
14648 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
14649 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val4, Val7, Val1});
14650}
14651case ARM::BI__builtin_arm_mve_vabsq_x_f32:
14652case ARM::BI__builtin_arm_mve_vnegq_x_f32:
14653case ARM::BI__builtin_arm_mve_vrndaq_x_f32:
14654case ARM::BI__builtin_arm_mve_vrndmq_x_f32:
14655case ARM::BI__builtin_arm_mve_vrndnq_x_f32:
14656case ARM::BI__builtin_arm_mve_vrndpq_x_f32:
14657case ARM::BI__builtin_arm_mve_vrndq_x_f32:
14658case ARM::BI__builtin_arm_mve_vrndxq_x_f32: {
14659 Intrinsic::ID Param0;
14660 switch (BuiltinID) {
14661 case ARM::BI__builtin_arm_mve_vabsq_x_f32:
14662 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
14663 break;
14664 case ARM::BI__builtin_arm_mve_vnegq_x_f32:
14665 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
14666 break;
14667 case ARM::BI__builtin_arm_mve_vrndaq_x_f32:
14668 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrinta_predicated);
14669 break;
14670 case ARM::BI__builtin_arm_mve_vrndmq_x_f32:
14671 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintm_predicated);
14672 break;
14673 case ARM::BI__builtin_arm_mve_vrndnq_x_f32:
14674 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintn_predicated);
14675 break;
14676 case ARM::BI__builtin_arm_mve_vrndpq_x_f32:
14677 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintp_predicated);
14678 break;
14679 case ARM::BI__builtin_arm_mve_vrndq_x_f32:
14680 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintz_predicated);
14681 break;
14682 case ARM::BI__builtin_arm_mve_vrndxq_x_f32:
14683 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintx_predicated);
14684 break;
14685 }
14686 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14687 Value *Val1 = UndefValue::get(T: Val0);
14688 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14689 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14690 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
14691 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
14692 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val5, Val1});
14693}
14694case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f32: {
14695 Intrinsic::ID Param0;
14696 switch (BuiltinID) {
14697 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f32:
14698 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
14699 break;
14700 }
14701 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14702 Value *Val1 = UndefValue::get(T: Val0);
14703 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14704 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14705 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
14706 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
14707 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
14708 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1, Val2, Val3, Val6});
14709}
14710case ARM::BI__builtin_arm_mve_vaddq_x_f32:
14711case ARM::BI__builtin_arm_mve_vmulq_x_f32:
14712case ARM::BI__builtin_arm_mve_vsubq_x_f32: {
14713 Intrinsic::ID Param0;
14714 switch (BuiltinID) {
14715 case ARM::BI__builtin_arm_mve_vaddq_x_f32:
14716 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
14717 break;
14718 case ARM::BI__builtin_arm_mve_vmulq_x_f32:
14719 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
14720 break;
14721 case ARM::BI__builtin_arm_mve_vsubq_x_f32:
14722 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
14723 break;
14724 }
14725 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14726 Value *Val1 = UndefValue::get(T: Val0);
14727 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14728 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14729 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
14730 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
14731 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
14732 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val6, Val1});
14733}
14734case ARM::BI__builtin_arm_mve_vabdq_x_f32:
14735case ARM::BI__builtin_arm_mve_vmaxnmq_x_f32:
14736case ARM::BI__builtin_arm_mve_vminnmq_x_f32: {
14737 Intrinsic::ID Param0;
14738 switch (BuiltinID) {
14739 case ARM::BI__builtin_arm_mve_vabdq_x_f32:
14740 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
14741 break;
14742 case ARM::BI__builtin_arm_mve_vmaxnmq_x_f32:
14743 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
14744 break;
14745 case ARM::BI__builtin_arm_mve_vminnmq_x_f32:
14746 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
14747 break;
14748 }
14749 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14750 Value *Val1 = UndefValue::get(T: Val0);
14751 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14752 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14753 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
14754 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
14755 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
14756 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
14757 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val4, Val7, Val1});
14758}
14759case ARM::BI__builtin_arm_mve_vrev64q_x_f32: {
14760 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14761 Value *Val1 = UndefValue::get(T: Val0);
14762 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14763 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: 64);
14764 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
14765 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
14766 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
14767 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vrev_predicated, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val6, Val1});
14768}
14769case ARM::BI__builtin_arm_mve_vcvtq_x_f32_s32:
14770case ARM::BI__builtin_arm_mve_vcvtq_x_f32_u32: {
14771 uint32_t Param0;
14772 switch (BuiltinID) {
14773 case ARM::BI__builtin_arm_mve_vcvtq_x_f32_s32:
14774 Param0 = static_cast<uint32_t>(0);
14775 break;
14776 case ARM::BI__builtin_arm_mve_vcvtq_x_f32_u32:
14777 Param0 = static_cast<uint32_t>(1);
14778 break;
14779 }
14780 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14781 Value *Val1 = UndefValue::get(T: Val0);
14782 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14783 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14784 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
14785 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
14786 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
14787 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fp_int_predicated, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val6, Val1});
14788}
14789case ARM::BI__builtin_arm_mve_vcvtbq_x_f32_f16:
14790case ARM::BI__builtin_arm_mve_vcvttq_x_f32_f16: {
14791 uint32_t Param0;
14792 switch (BuiltinID) {
14793 case ARM::BI__builtin_arm_mve_vcvtbq_x_f32_f16:
14794 Param0 = static_cast<uint32_t>(0);
14795 break;
14796 case ARM::BI__builtin_arm_mve_vcvttq_x_f32_f16:
14797 Param0 = static_cast<uint32_t>(1);
14798 break;
14799 }
14800 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14801 Value *Val1 = UndefValue::get(T: Val0);
14802 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14803 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14804 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
14805 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
14806 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
14807 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_widen_predicated), Args: {Val1, Val2, Val3, Val6});
14808}
14809case ARM::BI__builtin_arm_mve_vandq_x_f32:
14810case ARM::BI__builtin_arm_mve_vbicq_x_f32:
14811case ARM::BI__builtin_arm_mve_veorq_x_f32:
14812case ARM::BI__builtin_arm_mve_vornq_x_f32:
14813case ARM::BI__builtin_arm_mve_vorrq_x_f32: {
14814 Intrinsic::ID Param0;
14815 switch (BuiltinID) {
14816 case ARM::BI__builtin_arm_mve_vandq_x_f32:
14817 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
14818 break;
14819 case ARM::BI__builtin_arm_mve_vbicq_x_f32:
14820 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
14821 break;
14822 case ARM::BI__builtin_arm_mve_veorq_x_f32:
14823 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
14824 break;
14825 case ARM::BI__builtin_arm_mve_vornq_x_f32:
14826 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
14827 break;
14828 case ARM::BI__builtin_arm_mve_vorrq_x_f32:
14829 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
14830 break;
14831 }
14832 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14833 Value *Val1 = UndefValue::get(T: Val0);
14834 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14835 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
14836 Value *Val4 = Builder.CreateBitCast(V: Val2, DestTy: Val3);
14837 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
14838 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
14839 Value *Val7 = Builder.CreateBitCast(V: Val5, DestTy: Val6);
14840 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 2));
14841 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int32Ty, isSigned: false);
14842 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val9});
14843 llvm::Type *Val11 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
14844 Value *Val12 = Builder.CreateBitCast(V: Val1, DestTy: Val11);
14845 Value *Val13 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4, Val7, Val10, Val12});
14846 llvm::Type *Val14 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14847 return Builder.CreateBitCast(V: Val13, DestTy: Val14);
14848}
14849case ARM::BI__builtin_arm_mve_vdupq_x_n_f32: {
14850 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14851 Value *Val1 = UndefValue::get(T: Val0);
14852 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
14853 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
14854 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val3});
14855 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
14856 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
14857 return Builder.CreateSelect(C: Val4, True: Val6, False: Val1);
14858}
14859case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f32:
14860case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f32: {
14861 uint32_t Param0;
14862 switch (BuiltinID) {
14863 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f32:
14864 Param0 = static_cast<uint32_t>(1);
14865 break;
14866 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f32:
14867 Param0 = static_cast<uint32_t>(0);
14868 break;
14869 }
14870 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14871 Value *Val1 = UndefValue::get(T: Val0);
14872 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
14873 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14874 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
14875 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
14876 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
14877 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
14878 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
14879 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val1, Val4, Val5, Val8});
14880}
14881case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f32:
14882case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f32:
14883case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f32:
14884case ARM::BI__builtin_arm_mve_vcmulq_x_f32: {
14885 uint32_t Param0;
14886 switch (BuiltinID) {
14887 case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f32:
14888 Param0 = static_cast<uint32_t>(2);
14889 break;
14890 case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f32:
14891 Param0 = static_cast<uint32_t>(3);
14892 break;
14893 case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f32:
14894 Param0 = static_cast<uint32_t>(1);
14895 break;
14896 case ARM::BI__builtin_arm_mve_vcmulq_x_f32:
14897 Param0 = static_cast<uint32_t>(0);
14898 break;
14899 }
14900 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14901 Value *Val1 = UndefValue::get(T: Val0);
14902 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14903 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
14904 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
14905 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
14906 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
14907 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
14908 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcmulq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val1, Val3, Val4, Val7});
14909}
14910case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_s32:
14911case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_u32: {
14912 uint32_t Param0;
14913 switch (BuiltinID) {
14914 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_s32:
14915 Param0 = static_cast<uint32_t>(0);
14916 break;
14917 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_u32:
14918 Param0 = static_cast<uint32_t>(1);
14919 break;
14920 }
14921 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14922 Value *Val1 = UndefValue::get(T: Val0);
14923 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
14924 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
14925 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
14926 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
14927 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
14928 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
14929 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fix_predicated, Tys: {llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val1, Val3, Val4, Val7});
14930}
14931case ARM::BI__builtin_arm_mve_vuninitializedq_f32:
14932case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_f32: {
14933 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
14934 return UndefValue::get(T: Val0);
14935}
14936case ARM::BI__builtin_arm_mve_vld1q_z_f16:
14937case ARM::BI__builtin_arm_mve_vldrhq_z_f16: {
14938 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
14939 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
14940 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
14941 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14942 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
14943 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4});
14944 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
14945 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
14946 return Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(2), Mask: Val5, PassThru: Val7);
14947}
14948case ARM::BI__builtin_arm_mve_vaddq_x_n_f16:
14949case ARM::BI__builtin_arm_mve_vmulq_x_n_f16:
14950case ARM::BI__builtin_arm_mve_vsubq_x_n_f16: {
14951 Intrinsic::ID Param0;
14952 switch (BuiltinID) {
14953 case ARM::BI__builtin_arm_mve_vaddq_x_n_f16:
14954 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
14955 break;
14956 case ARM::BI__builtin_arm_mve_vmulq_x_n_f16:
14957 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
14958 break;
14959 case ARM::BI__builtin_arm_mve_vsubq_x_n_f16:
14960 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
14961 break;
14962 }
14963 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
14964 Value *Val1 = UndefValue::get(T: Val0);
14965 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
14966 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
14967 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
14968 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
14969 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
14970 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
14971 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val4, Val7, Val1});
14972}
14973case ARM::BI__builtin_arm_mve_vabsq_x_f16:
14974case ARM::BI__builtin_arm_mve_vnegq_x_f16:
14975case ARM::BI__builtin_arm_mve_vrndaq_x_f16:
14976case ARM::BI__builtin_arm_mve_vrndmq_x_f16:
14977case ARM::BI__builtin_arm_mve_vrndnq_x_f16:
14978case ARM::BI__builtin_arm_mve_vrndpq_x_f16:
14979case ARM::BI__builtin_arm_mve_vrndq_x_f16:
14980case ARM::BI__builtin_arm_mve_vrndxq_x_f16: {
14981 Intrinsic::ID Param0;
14982 switch (BuiltinID) {
14983 case ARM::BI__builtin_arm_mve_vabsq_x_f16:
14984 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
14985 break;
14986 case ARM::BI__builtin_arm_mve_vnegq_x_f16:
14987 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
14988 break;
14989 case ARM::BI__builtin_arm_mve_vrndaq_x_f16:
14990 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrinta_predicated);
14991 break;
14992 case ARM::BI__builtin_arm_mve_vrndmq_x_f16:
14993 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintm_predicated);
14994 break;
14995 case ARM::BI__builtin_arm_mve_vrndnq_x_f16:
14996 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintn_predicated);
14997 break;
14998 case ARM::BI__builtin_arm_mve_vrndpq_x_f16:
14999 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintp_predicated);
15000 break;
15001 case ARM::BI__builtin_arm_mve_vrndq_x_f16:
15002 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintz_predicated);
15003 break;
15004 case ARM::BI__builtin_arm_mve_vrndxq_x_f16:
15005 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrintx_predicated);
15006 break;
15007 }
15008 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15009 Value *Val1 = UndefValue::get(T: Val0);
15010 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15011 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15012 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
15013 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4});
15014 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val5, Val1});
15015}
15016case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f16: {
15017 Intrinsic::ID Param0;
15018 switch (BuiltinID) {
15019 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f16:
15020 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
15021 break;
15022 }
15023 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15024 Value *Val1 = UndefValue::get(T: Val0);
15025 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15026 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15027 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
15028 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15029 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15030 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1, Val2, Val3, Val6});
15031}
15032case ARM::BI__builtin_arm_mve_vaddq_x_f16:
15033case ARM::BI__builtin_arm_mve_vmulq_x_f16:
15034case ARM::BI__builtin_arm_mve_vsubq_x_f16: {
15035 Intrinsic::ID Param0;
15036 switch (BuiltinID) {
15037 case ARM::BI__builtin_arm_mve_vaddq_x_f16:
15038 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
15039 break;
15040 case ARM::BI__builtin_arm_mve_vmulq_x_f16:
15041 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
15042 break;
15043 case ARM::BI__builtin_arm_mve_vsubq_x_f16:
15044 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
15045 break;
15046 }
15047 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15048 Value *Val1 = UndefValue::get(T: Val0);
15049 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15050 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15051 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
15052 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15053 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15054 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val6, Val1});
15055}
15056case ARM::BI__builtin_arm_mve_vabdq_x_f16:
15057case ARM::BI__builtin_arm_mve_vmaxnmq_x_f16:
15058case ARM::BI__builtin_arm_mve_vminnmq_x_f16: {
15059 Intrinsic::ID Param0;
15060 switch (BuiltinID) {
15061 case ARM::BI__builtin_arm_mve_vabdq_x_f16:
15062 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
15063 break;
15064 case ARM::BI__builtin_arm_mve_vmaxnmq_x_f16:
15065 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
15066 break;
15067 case ARM::BI__builtin_arm_mve_vminnmq_x_f16:
15068 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
15069 break;
15070 }
15071 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15072 Value *Val1 = UndefValue::get(T: Val0);
15073 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15074 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15075 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
15076 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15077 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15078 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15079 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val4, Val7, Val1});
15080}
15081case ARM::BI__builtin_arm_mve_vcvtq_x_f16_s16:
15082case ARM::BI__builtin_arm_mve_vcvtq_x_f16_u16: {
15083 uint32_t Param0;
15084 switch (BuiltinID) {
15085 case ARM::BI__builtin_arm_mve_vcvtq_x_f16_s16:
15086 Param0 = static_cast<uint32_t>(0);
15087 break;
15088 case ARM::BI__builtin_arm_mve_vcvtq_x_f16_u16:
15089 Param0 = static_cast<uint32_t>(1);
15090 break;
15091 }
15092 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15093 Value *Val1 = UndefValue::get(T: Val0);
15094 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15095 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15096 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15097 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15098 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15099 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fp_int_predicated, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val6, Val1});
15100}
15101case ARM::BI__builtin_arm_mve_vrev32q_x_f16:
15102case ARM::BI__builtin_arm_mve_vrev64q_x_f16: {
15103 uint32_t Param0;
15104 switch (BuiltinID) {
15105 case ARM::BI__builtin_arm_mve_vrev32q_x_f16:
15106 Param0 = static_cast<uint32_t>(32);
15107 break;
15108 case ARM::BI__builtin_arm_mve_vrev64q_x_f16:
15109 Param0 = static_cast<uint32_t>(64);
15110 break;
15111 }
15112 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15113 Value *Val1 = UndefValue::get(T: Val0);
15114 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15115 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15116 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15117 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15118 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15119 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vrev_predicated, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val6, Val1});
15120}
15121case ARM::BI__builtin_arm_mve_vandq_x_f16:
15122case ARM::BI__builtin_arm_mve_vbicq_x_f16:
15123case ARM::BI__builtin_arm_mve_veorq_x_f16:
15124case ARM::BI__builtin_arm_mve_vornq_x_f16:
15125case ARM::BI__builtin_arm_mve_vorrq_x_f16: {
15126 Intrinsic::ID Param0;
15127 switch (BuiltinID) {
15128 case ARM::BI__builtin_arm_mve_vandq_x_f16:
15129 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
15130 break;
15131 case ARM::BI__builtin_arm_mve_vbicq_x_f16:
15132 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
15133 break;
15134 case ARM::BI__builtin_arm_mve_veorq_x_f16:
15135 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
15136 break;
15137 case ARM::BI__builtin_arm_mve_vornq_x_f16:
15138 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
15139 break;
15140 case ARM::BI__builtin_arm_mve_vorrq_x_f16:
15141 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
15142 break;
15143 }
15144 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15145 Value *Val1 = UndefValue::get(T: Val0);
15146 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15147 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15148 Value *Val4 = Builder.CreateBitCast(V: Val2, DestTy: Val3);
15149 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
15150 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15151 Value *Val7 = Builder.CreateBitCast(V: Val5, DestTy: Val6);
15152 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 2));
15153 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int32Ty, isSigned: false);
15154 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val9});
15155 llvm::Type *Val11 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15156 Value *Val12 = Builder.CreateBitCast(V: Val1, DestTy: Val11);
15157 Value *Val13 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4, Val7, Val10, Val12});
15158 llvm::Type *Val14 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15159 return Builder.CreateBitCast(V: Val13, DestTy: Val14);
15160}
15161case ARM::BI__builtin_arm_mve_vdupq_x_n_f16: {
15162 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15163 Value *Val1 = UndefValue::get(T: Val0);
15164 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
15165 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
15166 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val3});
15167 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
15168 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
15169 return Builder.CreateSelect(C: Val4, True: Val6, False: Val1);
15170}
15171case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f16:
15172case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f16: {
15173 uint32_t Param0;
15174 switch (BuiltinID) {
15175 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f16:
15176 Param0 = static_cast<uint32_t>(1);
15177 break;
15178 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f16:
15179 Param0 = static_cast<uint32_t>(0);
15180 break;
15181 }
15182 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15183 Value *Val1 = UndefValue::get(T: Val0);
15184 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: 1);
15185 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15186 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
15187 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
15188 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
15189 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
15190 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
15191 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val1, Val4, Val5, Val8});
15192}
15193case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f16:
15194case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f16:
15195case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f16:
15196case ARM::BI__builtin_arm_mve_vcmulq_x_f16: {
15197 uint32_t Param0;
15198 switch (BuiltinID) {
15199 case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f16:
15200 Param0 = static_cast<uint32_t>(2);
15201 break;
15202 case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f16:
15203 Param0 = static_cast<uint32_t>(3);
15204 break;
15205 case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f16:
15206 Param0 = static_cast<uint32_t>(1);
15207 break;
15208 case ARM::BI__builtin_arm_mve_vcmulq_x_f16:
15209 Param0 = static_cast<uint32_t>(0);
15210 break;
15211 }
15212 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15213 Value *Val1 = UndefValue::get(T: Val0);
15214 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15215 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
15216 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15217 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15218 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15219 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15220 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcmulq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val1, Val3, Val4, Val7});
15221}
15222case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_s16:
15223case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_u16: {
15224 uint32_t Param0;
15225 switch (BuiltinID) {
15226 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_s16:
15227 Param0 = static_cast<uint32_t>(0);
15228 break;
15229 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_u16:
15230 Param0 = static_cast<uint32_t>(1);
15231 break;
15232 }
15233 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15234 Value *Val1 = UndefValue::get(T: Val0);
15235 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15236 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
15237 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15238 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15239 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15240 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15241 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fix_predicated, Tys: {llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val1, Val3, Val4, Val7});
15242}
15243case ARM::BI__builtin_arm_mve_vuninitializedq_f16:
15244case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_f16: {
15245 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
15246 return UndefValue::get(T: Val0);
15247}
15248case ARM::BI__builtin_arm_mve_vldrhq_z_s32:
15249case ARM::BI__builtin_arm_mve_vldrhq_z_u32: {
15250 bool Param0;
15251 switch (BuiltinID) {
15252 case ARM::BI__builtin_arm_mve_vldrhq_z_s32:
15253 Param0 = static_cast<bool>(0);
15254 break;
15255 case ARM::BI__builtin_arm_mve_vldrhq_z_u32:
15256 Param0 = static_cast<bool>(1);
15257 break;
15258 }
15259 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 4);
15260 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
15261 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
15262 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15263 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
15264 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
15265 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 4);
15266 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
15267 Value *Val8 = Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(2), Mask: Val5, PassThru: Val7);
15268 llvm::Type *Val9 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
15269 return SignOrZeroExtend(Builder, V: Val8, T: Val9, Unsigned: static_cast<bool>(Param0));
15270}
15271case ARM::BI__builtin_arm_mve_vld1q_z_s16:
15272case ARM::BI__builtin_arm_mve_vld1q_z_u16:
15273case ARM::BI__builtin_arm_mve_vldrhq_z_s16:
15274case ARM::BI__builtin_arm_mve_vldrhq_z_u16: {
15275 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15276 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
15277 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
15278 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15279 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
15280 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4});
15281 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15282 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
15283 return Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(2), Mask: Val5, PassThru: Val7);
15284}
15285case ARM::BI__builtin_arm_mve_vddupq_x_wb_u16:
15286case ARM::BI__builtin_arm_mve_vidupq_x_wb_u16: {
15287 Intrinsic::ID Param0;
15288 switch (BuiltinID) {
15289 case ARM::BI__builtin_arm_mve_vddupq_x_wb_u16:
15290 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
15291 break;
15292 case ARM::BI__builtin_arm_mve_vidupq_x_wb_u16:
15293 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
15294 break;
15295 }
15296 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15297 Value *Val1 = UndefValue::get(T: Val0);
15298 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
15299 Value *Val3 = Builder.CreateLoad(Addr: Val2);
15300 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15301 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15302 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15303 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15304 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1, Val3, Val4, Val7});
15305 Value *Val9 = Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(1));
15306 Builder.CreateStore(Val: Val9, Addr: Val2);
15307 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
15308}
15309case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u16:
15310case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u16: {
15311 Intrinsic::ID Param0;
15312 switch (BuiltinID) {
15313 case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u16:
15314 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
15315 break;
15316 case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u16:
15317 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
15318 break;
15319 }
15320 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15321 Value *Val1 = UndefValue::get(T: Val0);
15322 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
15323 Value *Val3 = Builder.CreateLoad(Addr: Val2);
15324 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15325 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15326 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
15327 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
15328 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
15329 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1, Val3, Val4, Val5, Val8});
15330 Value *Val10 = Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(1));
15331 Builder.CreateStore(Val: Val10, Addr: Val2);
15332 return Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(0));
15333}
15334case ARM::BI__builtin_arm_mve_vaddq_x_n_s16:
15335case ARM::BI__builtin_arm_mve_vaddq_x_n_u16:
15336case ARM::BI__builtin_arm_mve_vmulq_x_n_s16:
15337case ARM::BI__builtin_arm_mve_vmulq_x_n_u16:
15338case ARM::BI__builtin_arm_mve_vsubq_x_n_s16:
15339case ARM::BI__builtin_arm_mve_vsubq_x_n_u16: {
15340 Intrinsic::ID Param0;
15341 switch (BuiltinID) {
15342 case ARM::BI__builtin_arm_mve_vaddq_x_n_s16:
15343 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
15344 break;
15345 case ARM::BI__builtin_arm_mve_vaddq_x_n_u16:
15346 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
15347 break;
15348 case ARM::BI__builtin_arm_mve_vmulq_x_n_s16:
15349 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
15350 break;
15351 case ARM::BI__builtin_arm_mve_vmulq_x_n_u16:
15352 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
15353 break;
15354 case ARM::BI__builtin_arm_mve_vsubq_x_n_s16:
15355 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
15356 break;
15357 case ARM::BI__builtin_arm_mve_vsubq_x_n_u16:
15358 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
15359 break;
15360 }
15361 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15362 Value *Val1 = UndefValue::get(T: Val0);
15363 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15364 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15365 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
15366 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15367 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15368 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15369 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val4, Val7, Val1});
15370}
15371case ARM::BI__builtin_arm_mve_vhaddq_x_n_s16:
15372case ARM::BI__builtin_arm_mve_vhaddq_x_n_u16:
15373case ARM::BI__builtin_arm_mve_vhsubq_x_n_s16:
15374case ARM::BI__builtin_arm_mve_vhsubq_x_n_u16: {
15375 uint32_t Param0;
15376 Intrinsic::ID Param1;
15377 switch (BuiltinID) {
15378 case ARM::BI__builtin_arm_mve_vhaddq_x_n_s16:
15379 Param0 = static_cast<uint32_t>(0);
15380 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
15381 break;
15382 case ARM::BI__builtin_arm_mve_vhaddq_x_n_u16:
15383 Param0 = static_cast<uint32_t>(1);
15384 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
15385 break;
15386 case ARM::BI__builtin_arm_mve_vhsubq_x_n_s16:
15387 Param0 = static_cast<uint32_t>(0);
15388 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
15389 break;
15390 case ARM::BI__builtin_arm_mve_vhsubq_x_n_u16:
15391 Param0 = static_cast<uint32_t>(1);
15392 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
15393 break;
15394 }
15395 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15396 Value *Val1 = UndefValue::get(T: Val0);
15397 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15398 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15399 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
15400 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15401 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
15402 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
15403 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
15404 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val4, Val5, Val8, Val1});
15405}
15406case ARM::BI__builtin_arm_mve_vabsq_x_s16:
15407case ARM::BI__builtin_arm_mve_vclsq_x_s16:
15408case ARM::BI__builtin_arm_mve_vclzq_x_s16:
15409case ARM::BI__builtin_arm_mve_vclzq_x_u16:
15410case ARM::BI__builtin_arm_mve_vmvnq_x_s16:
15411case ARM::BI__builtin_arm_mve_vmvnq_x_u16:
15412case ARM::BI__builtin_arm_mve_vnegq_x_s16: {
15413 Intrinsic::ID Param0;
15414 switch (BuiltinID) {
15415 case ARM::BI__builtin_arm_mve_vabsq_x_s16:
15416 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
15417 break;
15418 case ARM::BI__builtin_arm_mve_vclsq_x_s16:
15419 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_cls_predicated);
15420 break;
15421 case ARM::BI__builtin_arm_mve_vclzq_x_s16:
15422 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
15423 break;
15424 case ARM::BI__builtin_arm_mve_vclzq_x_u16:
15425 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
15426 break;
15427 case ARM::BI__builtin_arm_mve_vmvnq_x_s16:
15428 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
15429 break;
15430 case ARM::BI__builtin_arm_mve_vmvnq_x_u16:
15431 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
15432 break;
15433 case ARM::BI__builtin_arm_mve_vnegq_x_s16:
15434 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
15435 break;
15436 }
15437 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15438 Value *Val1 = UndefValue::get(T: Val0);
15439 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15440 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15441 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
15442 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4});
15443 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val5, Val1});
15444}
15445case ARM::BI__builtin_arm_mve_vddupq_x_n_u16:
15446case ARM::BI__builtin_arm_mve_vidupq_x_n_u16: {
15447 Intrinsic::ID Param0;
15448 switch (BuiltinID) {
15449 case ARM::BI__builtin_arm_mve_vddupq_x_n_u16:
15450 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
15451 break;
15452 case ARM::BI__builtin_arm_mve_vidupq_x_n_u16:
15453 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
15454 break;
15455 }
15456 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15457 Value *Val1 = UndefValue::get(T: Val0);
15458 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15459 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15460 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
15461 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15462 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15463 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1, Val2, Val3, Val6});
15464 return Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
15465}
15466case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s16:
15467case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u16: {
15468 Intrinsic::ID Param0;
15469 switch (BuiltinID) {
15470 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s16:
15471 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
15472 break;
15473 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u16:
15474 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
15475 break;
15476 }
15477 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15478 Value *Val1 = UndefValue::get(T: Val0);
15479 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15480 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15481 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
15482 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15483 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15484 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1, Val2, Val3, Val6});
15485}
15486case ARM::BI__builtin_arm_mve_vaddq_x_s16:
15487case ARM::BI__builtin_arm_mve_vaddq_x_u16:
15488case ARM::BI__builtin_arm_mve_vmulq_x_s16:
15489case ARM::BI__builtin_arm_mve_vmulq_x_u16:
15490case ARM::BI__builtin_arm_mve_vshlq_x_n_s16:
15491case ARM::BI__builtin_arm_mve_vshlq_x_n_u16:
15492case ARM::BI__builtin_arm_mve_vsubq_x_s16:
15493case ARM::BI__builtin_arm_mve_vsubq_x_u16: {
15494 Intrinsic::ID Param0;
15495 switch (BuiltinID) {
15496 case ARM::BI__builtin_arm_mve_vaddq_x_s16:
15497 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
15498 break;
15499 case ARM::BI__builtin_arm_mve_vaddq_x_u16:
15500 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
15501 break;
15502 case ARM::BI__builtin_arm_mve_vmulq_x_s16:
15503 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
15504 break;
15505 case ARM::BI__builtin_arm_mve_vmulq_x_u16:
15506 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
15507 break;
15508 case ARM::BI__builtin_arm_mve_vshlq_x_n_s16:
15509 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
15510 break;
15511 case ARM::BI__builtin_arm_mve_vshlq_x_n_u16:
15512 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
15513 break;
15514 case ARM::BI__builtin_arm_mve_vsubq_x_s16:
15515 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
15516 break;
15517 case ARM::BI__builtin_arm_mve_vsubq_x_u16:
15518 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
15519 break;
15520 }
15521 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15522 Value *Val1 = UndefValue::get(T: Val0);
15523 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15524 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15525 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
15526 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15527 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15528 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val6, Val1});
15529}
15530case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u16:
15531case ARM::BI__builtin_arm_mve_viwdupq_x_n_u16: {
15532 Intrinsic::ID Param0;
15533 switch (BuiltinID) {
15534 case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u16:
15535 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
15536 break;
15537 case ARM::BI__builtin_arm_mve_viwdupq_x_n_u16:
15538 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
15539 break;
15540 }
15541 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15542 Value *Val1 = UndefValue::get(T: Val0);
15543 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15544 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15545 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
15546 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
15547 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15548 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15549 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val1, Val2, Val3, Val4, Val7});
15550 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
15551}
15552case ARM::BI__builtin_arm_mve_vrshlq_x_s16:
15553case ARM::BI__builtin_arm_mve_vrshlq_x_u16:
15554case ARM::BI__builtin_arm_mve_vshlq_x_s16:
15555case ARM::BI__builtin_arm_mve_vshlq_x_u16: {
15556 uint32_t Param0;
15557 uint32_t Param1;
15558 switch (BuiltinID) {
15559 case ARM::BI__builtin_arm_mve_vrshlq_x_s16:
15560 Param0 = static_cast<uint32_t>(1);
15561 Param1 = static_cast<uint32_t>(0);
15562 break;
15563 case ARM::BI__builtin_arm_mve_vrshlq_x_u16:
15564 Param0 = static_cast<uint32_t>(1);
15565 Param1 = static_cast<uint32_t>(1);
15566 break;
15567 case ARM::BI__builtin_arm_mve_vshlq_x_s16:
15568 Param0 = static_cast<uint32_t>(0);
15569 Param1 = static_cast<uint32_t>(0);
15570 break;
15571 case ARM::BI__builtin_arm_mve_vshlq_x_u16:
15572 Param0 = static_cast<uint32_t>(0);
15573 Param1 = static_cast<uint32_t>(1);
15574 break;
15575 }
15576 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15577 Value *Val1 = UndefValue::get(T: Val0);
15578 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15579 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15580 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
15581 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15582 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
15583 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 2));
15584 Value *Val8 = Builder.CreateIntCast(V: Val7, DestTy: Int32Ty, isSigned: false);
15585 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val8});
15586 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshl_vector_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
15587}
15588case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p8:
15589case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p8: {
15590 uint32_t Param0;
15591 switch (BuiltinID) {
15592 case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p8:
15593 Param0 = static_cast<uint32_t>(0);
15594 break;
15595 case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p8:
15596 Param0 = static_cast<uint32_t>(1);
15597 break;
15598 }
15599 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15600 Value *Val1 = UndefValue::get(T: Val0);
15601 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15602 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15603 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15604 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15605 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15606 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15607 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_mull_poly_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val4, Val7, Val1});
15608}
15609case ARM::BI__builtin_arm_mve_vabdq_x_s16:
15610case ARM::BI__builtin_arm_mve_vabdq_x_u16:
15611case ARM::BI__builtin_arm_mve_vhaddq_x_s16:
15612case ARM::BI__builtin_arm_mve_vhaddq_x_u16:
15613case ARM::BI__builtin_arm_mve_vhsubq_x_s16:
15614case ARM::BI__builtin_arm_mve_vhsubq_x_u16:
15615case ARM::BI__builtin_arm_mve_vmaxq_x_s16:
15616case ARM::BI__builtin_arm_mve_vmaxq_x_u16:
15617case ARM::BI__builtin_arm_mve_vminq_x_s16:
15618case ARM::BI__builtin_arm_mve_vminq_x_u16:
15619case ARM::BI__builtin_arm_mve_vmulhq_x_s16:
15620case ARM::BI__builtin_arm_mve_vmulhq_x_u16:
15621case ARM::BI__builtin_arm_mve_vrhaddq_x_s16:
15622case ARM::BI__builtin_arm_mve_vrhaddq_x_u16:
15623case ARM::BI__builtin_arm_mve_vrmulhq_x_s16:
15624case ARM::BI__builtin_arm_mve_vrmulhq_x_u16:
15625case ARM::BI__builtin_arm_mve_vrshrq_x_n_s16:
15626case ARM::BI__builtin_arm_mve_vrshrq_x_n_u16:
15627case ARM::BI__builtin_arm_mve_vshrq_x_n_s16:
15628case ARM::BI__builtin_arm_mve_vshrq_x_n_u16: {
15629 uint32_t Param0;
15630 Intrinsic::ID Param1;
15631 switch (BuiltinID) {
15632 case ARM::BI__builtin_arm_mve_vabdq_x_s16:
15633 Param0 = static_cast<uint32_t>(0);
15634 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
15635 break;
15636 case ARM::BI__builtin_arm_mve_vabdq_x_u16:
15637 Param0 = static_cast<uint32_t>(1);
15638 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
15639 break;
15640 case ARM::BI__builtin_arm_mve_vhaddq_x_s16:
15641 Param0 = static_cast<uint32_t>(0);
15642 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
15643 break;
15644 case ARM::BI__builtin_arm_mve_vhaddq_x_u16:
15645 Param0 = static_cast<uint32_t>(1);
15646 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
15647 break;
15648 case ARM::BI__builtin_arm_mve_vhsubq_x_s16:
15649 Param0 = static_cast<uint32_t>(0);
15650 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
15651 break;
15652 case ARM::BI__builtin_arm_mve_vhsubq_x_u16:
15653 Param0 = static_cast<uint32_t>(1);
15654 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
15655 break;
15656 case ARM::BI__builtin_arm_mve_vmaxq_x_s16:
15657 Param0 = static_cast<uint32_t>(0);
15658 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
15659 break;
15660 case ARM::BI__builtin_arm_mve_vmaxq_x_u16:
15661 Param0 = static_cast<uint32_t>(1);
15662 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
15663 break;
15664 case ARM::BI__builtin_arm_mve_vminq_x_s16:
15665 Param0 = static_cast<uint32_t>(0);
15666 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
15667 break;
15668 case ARM::BI__builtin_arm_mve_vminq_x_u16:
15669 Param0 = static_cast<uint32_t>(1);
15670 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
15671 break;
15672 case ARM::BI__builtin_arm_mve_vmulhq_x_s16:
15673 Param0 = static_cast<uint32_t>(0);
15674 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
15675 break;
15676 case ARM::BI__builtin_arm_mve_vmulhq_x_u16:
15677 Param0 = static_cast<uint32_t>(1);
15678 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
15679 break;
15680 case ARM::BI__builtin_arm_mve_vrhaddq_x_s16:
15681 Param0 = static_cast<uint32_t>(0);
15682 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
15683 break;
15684 case ARM::BI__builtin_arm_mve_vrhaddq_x_u16:
15685 Param0 = static_cast<uint32_t>(1);
15686 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
15687 break;
15688 case ARM::BI__builtin_arm_mve_vrmulhq_x_s16:
15689 Param0 = static_cast<uint32_t>(0);
15690 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
15691 break;
15692 case ARM::BI__builtin_arm_mve_vrmulhq_x_u16:
15693 Param0 = static_cast<uint32_t>(1);
15694 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
15695 break;
15696 case ARM::BI__builtin_arm_mve_vrshrq_x_n_s16:
15697 Param0 = static_cast<uint32_t>(0);
15698 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
15699 break;
15700 case ARM::BI__builtin_arm_mve_vrshrq_x_n_u16:
15701 Param0 = static_cast<uint32_t>(1);
15702 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
15703 break;
15704 case ARM::BI__builtin_arm_mve_vshrq_x_n_s16:
15705 Param0 = static_cast<uint32_t>(0);
15706 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
15707 break;
15708 case ARM::BI__builtin_arm_mve_vshrq_x_n_u16:
15709 Param0 = static_cast<uint32_t>(1);
15710 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
15711 break;
15712 }
15713 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15714 Value *Val1 = UndefValue::get(T: Val0);
15715 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15716 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15717 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15718 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
15719 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15720 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15721 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val4, Val7, Val1});
15722}
15723case ARM::BI__builtin_arm_mve_vmullbq_int_x_s8:
15724case ARM::BI__builtin_arm_mve_vmullbq_int_x_u8:
15725case ARM::BI__builtin_arm_mve_vmulltq_int_x_s8:
15726case ARM::BI__builtin_arm_mve_vmulltq_int_x_u8:
15727case ARM::BI__builtin_arm_mve_vshllbq_x_n_s8:
15728case ARM::BI__builtin_arm_mve_vshllbq_x_n_u8:
15729case ARM::BI__builtin_arm_mve_vshlltq_x_n_s8:
15730case ARM::BI__builtin_arm_mve_vshlltq_x_n_u8: {
15731 uint32_t Param0;
15732 uint32_t Param1;
15733 Intrinsic::ID Param2;
15734 switch (BuiltinID) {
15735 case ARM::BI__builtin_arm_mve_vmullbq_int_x_s8:
15736 Param0 = static_cast<uint32_t>(0);
15737 Param1 = static_cast<uint32_t>(0);
15738 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
15739 break;
15740 case ARM::BI__builtin_arm_mve_vmullbq_int_x_u8:
15741 Param0 = static_cast<uint32_t>(1);
15742 Param1 = static_cast<uint32_t>(0);
15743 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
15744 break;
15745 case ARM::BI__builtin_arm_mve_vmulltq_int_x_s8:
15746 Param0 = static_cast<uint32_t>(0);
15747 Param1 = static_cast<uint32_t>(1);
15748 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
15749 break;
15750 case ARM::BI__builtin_arm_mve_vmulltq_int_x_u8:
15751 Param0 = static_cast<uint32_t>(1);
15752 Param1 = static_cast<uint32_t>(1);
15753 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
15754 break;
15755 case ARM::BI__builtin_arm_mve_vshllbq_x_n_s8:
15756 Param0 = static_cast<uint32_t>(0);
15757 Param1 = static_cast<uint32_t>(0);
15758 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
15759 break;
15760 case ARM::BI__builtin_arm_mve_vshllbq_x_n_u8:
15761 Param0 = static_cast<uint32_t>(1);
15762 Param1 = static_cast<uint32_t>(0);
15763 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
15764 break;
15765 case ARM::BI__builtin_arm_mve_vshlltq_x_n_s8:
15766 Param0 = static_cast<uint32_t>(0);
15767 Param1 = static_cast<uint32_t>(1);
15768 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
15769 break;
15770 case ARM::BI__builtin_arm_mve_vshlltq_x_n_u8:
15771 Param0 = static_cast<uint32_t>(1);
15772 Param1 = static_cast<uint32_t>(1);
15773 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
15774 break;
15775 }
15776 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15777 Value *Val1 = UndefValue::get(T: Val0);
15778 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15779 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
15780 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15781 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
15782 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
15783 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
15784 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
15785 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val4, Val5, Val8, Val1});
15786}
15787case ARM::BI__builtin_arm_mve_vcvtq_x_s16_f16:
15788case ARM::BI__builtin_arm_mve_vcvtq_x_u16_f16: {
15789 uint32_t Param0;
15790 switch (BuiltinID) {
15791 case ARM::BI__builtin_arm_mve_vcvtq_x_s16_f16:
15792 Param0 = static_cast<uint32_t>(0);
15793 break;
15794 case ARM::BI__builtin_arm_mve_vcvtq_x_u16_f16:
15795 Param0 = static_cast<uint32_t>(1);
15796 break;
15797 }
15798 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15799 Value *Val1 = UndefValue::get(T: Val0);
15800 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15801 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15802 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15803 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15804 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15805 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fp_int_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val6, Val1});
15806}
15807case ARM::BI__builtin_arm_mve_vrev32q_x_s16:
15808case ARM::BI__builtin_arm_mve_vrev32q_x_u16:
15809case ARM::BI__builtin_arm_mve_vrev64q_x_s16:
15810case ARM::BI__builtin_arm_mve_vrev64q_x_u16: {
15811 uint32_t Param0;
15812 switch (BuiltinID) {
15813 case ARM::BI__builtin_arm_mve_vrev32q_x_s16:
15814 Param0 = static_cast<uint32_t>(32);
15815 break;
15816 case ARM::BI__builtin_arm_mve_vrev32q_x_u16:
15817 Param0 = static_cast<uint32_t>(32);
15818 break;
15819 case ARM::BI__builtin_arm_mve_vrev64q_x_s16:
15820 Param0 = static_cast<uint32_t>(64);
15821 break;
15822 case ARM::BI__builtin_arm_mve_vrev64q_x_u16:
15823 Param0 = static_cast<uint32_t>(64);
15824 break;
15825 }
15826 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15827 Value *Val1 = UndefValue::get(T: Val0);
15828 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15829 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15830 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
15831 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
15832 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
15833 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vrev_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val6, Val1});
15834}
15835case ARM::BI__builtin_arm_mve_vmovlbq_x_s8:
15836case ARM::BI__builtin_arm_mve_vmovlbq_x_u8:
15837case ARM::BI__builtin_arm_mve_vmovltq_x_s8:
15838case ARM::BI__builtin_arm_mve_vmovltq_x_u8: {
15839 uint32_t Param0;
15840 uint32_t Param1;
15841 switch (BuiltinID) {
15842 case ARM::BI__builtin_arm_mve_vmovlbq_x_s8:
15843 Param0 = static_cast<uint32_t>(0);
15844 Param1 = static_cast<uint32_t>(0);
15845 break;
15846 case ARM::BI__builtin_arm_mve_vmovlbq_x_u8:
15847 Param0 = static_cast<uint32_t>(1);
15848 Param1 = static_cast<uint32_t>(0);
15849 break;
15850 case ARM::BI__builtin_arm_mve_vmovltq_x_s8:
15851 Param0 = static_cast<uint32_t>(0);
15852 Param1 = static_cast<uint32_t>(1);
15853 break;
15854 case ARM::BI__builtin_arm_mve_vmovltq_x_u8:
15855 Param0 = static_cast<uint32_t>(1);
15856 Param1 = static_cast<uint32_t>(1);
15857 break;
15858 }
15859 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15860 Value *Val1 = UndefValue::get(T: Val0);
15861 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15862 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
15863 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
15864 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
15865 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15866 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
15867 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmovl_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val4, Val7, Val1});
15868}
15869case ARM::BI__builtin_arm_mve_vandq_x_s16:
15870case ARM::BI__builtin_arm_mve_vandq_x_u16:
15871case ARM::BI__builtin_arm_mve_vbicq_x_s16:
15872case ARM::BI__builtin_arm_mve_vbicq_x_u16:
15873case ARM::BI__builtin_arm_mve_veorq_x_s16:
15874case ARM::BI__builtin_arm_mve_veorq_x_u16:
15875case ARM::BI__builtin_arm_mve_vornq_x_s16:
15876case ARM::BI__builtin_arm_mve_vornq_x_u16:
15877case ARM::BI__builtin_arm_mve_vorrq_x_s16:
15878case ARM::BI__builtin_arm_mve_vorrq_x_u16: {
15879 Intrinsic::ID Param0;
15880 switch (BuiltinID) {
15881 case ARM::BI__builtin_arm_mve_vandq_x_s16:
15882 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
15883 break;
15884 case ARM::BI__builtin_arm_mve_vandq_x_u16:
15885 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
15886 break;
15887 case ARM::BI__builtin_arm_mve_vbicq_x_s16:
15888 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
15889 break;
15890 case ARM::BI__builtin_arm_mve_vbicq_x_u16:
15891 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
15892 break;
15893 case ARM::BI__builtin_arm_mve_veorq_x_s16:
15894 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
15895 break;
15896 case ARM::BI__builtin_arm_mve_veorq_x_u16:
15897 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
15898 break;
15899 case ARM::BI__builtin_arm_mve_vornq_x_s16:
15900 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
15901 break;
15902 case ARM::BI__builtin_arm_mve_vornq_x_u16:
15903 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
15904 break;
15905 case ARM::BI__builtin_arm_mve_vorrq_x_s16:
15906 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
15907 break;
15908 case ARM::BI__builtin_arm_mve_vorrq_x_u16:
15909 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
15910 break;
15911 }
15912 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15913 Value *Val1 = UndefValue::get(T: Val0);
15914 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
15915 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15916 Value *Val4 = Builder.CreateBitCast(V: Val2, DestTy: Val3);
15917 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
15918 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15919 Value *Val7 = Builder.CreateBitCast(V: Val5, DestTy: Val6);
15920 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 2));
15921 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int32Ty, isSigned: false);
15922 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val9});
15923 llvm::Type *Val11 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15924 Value *Val12 = Builder.CreateBitCast(V: Val1, DestTy: Val11);
15925 Value *Val13 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4, Val7, Val10, Val12});
15926 llvm::Type *Val14 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15927 return Builder.CreateBitCast(V: Val13, DestTy: Val14);
15928}
15929case ARM::BI__builtin_arm_mve_vdupq_x_n_s16:
15930case ARM::BI__builtin_arm_mve_vdupq_x_n_u16: {
15931 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15932 Value *Val1 = UndefValue::get(T: Val0);
15933 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
15934 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
15935 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val3});
15936 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
15937 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
15938 return Builder.CreateSelect(C: Val4, True: Val6, False: Val1);
15939}
15940case ARM::BI__builtin_arm_mve_vmvnq_x_n_s16:
15941case ARM::BI__builtin_arm_mve_vmvnq_x_n_u16: {
15942 bool Param0;
15943 switch (BuiltinID) {
15944 case ARM::BI__builtin_arm_mve_vmvnq_x_n_s16:
15945 Param0 = static_cast<bool>(true);
15946 break;
15947 case ARM::BI__builtin_arm_mve_vmvnq_x_n_u16:
15948 Param0 = static_cast<bool>(false);
15949 break;
15950 }
15951 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
15952 Value *Val1 = UndefValue::get(T: Val0);
15953 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
15954 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
15955 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val3});
15956 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
15957 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
15958 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int16Ty, isSigned: Param0);
15959 Value *Val8 = ARMMVEVectorSplat(Builder, V: Val7);
15960 Value *Val9 = Builder.CreateNot(V: Val8);
15961 return Builder.CreateSelect(C: Val4, True: Val9, False: Val1);
15962}
15963case ARM::BI__builtin_arm_mve_vcvtaq_x_s16_f16:
15964case ARM::BI__builtin_arm_mve_vcvtaq_x_u16_f16:
15965case ARM::BI__builtin_arm_mve_vcvtmq_x_s16_f16:
15966case ARM::BI__builtin_arm_mve_vcvtmq_x_u16_f16:
15967case ARM::BI__builtin_arm_mve_vcvtnq_x_s16_f16:
15968case ARM::BI__builtin_arm_mve_vcvtnq_x_u16_f16:
15969case ARM::BI__builtin_arm_mve_vcvtpq_x_s16_f16:
15970case ARM::BI__builtin_arm_mve_vcvtpq_x_u16_f16: {
15971 uint32_t Param0;
15972 Intrinsic::ID Param1;
15973 switch (BuiltinID) {
15974 case ARM::BI__builtin_arm_mve_vcvtaq_x_s16_f16:
15975 Param0 = static_cast<uint32_t>(0);
15976 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
15977 break;
15978 case ARM::BI__builtin_arm_mve_vcvtaq_x_u16_f16:
15979 Param0 = static_cast<uint32_t>(1);
15980 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
15981 break;
15982 case ARM::BI__builtin_arm_mve_vcvtmq_x_s16_f16:
15983 Param0 = static_cast<uint32_t>(0);
15984 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
15985 break;
15986 case ARM::BI__builtin_arm_mve_vcvtmq_x_u16_f16:
15987 Param0 = static_cast<uint32_t>(1);
15988 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
15989 break;
15990 case ARM::BI__builtin_arm_mve_vcvtnq_x_s16_f16:
15991 Param0 = static_cast<uint32_t>(0);
15992 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
15993 break;
15994 case ARM::BI__builtin_arm_mve_vcvtnq_x_u16_f16:
15995 Param0 = static_cast<uint32_t>(1);
15996 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
15997 break;
15998 case ARM::BI__builtin_arm_mve_vcvtpq_x_s16_f16:
15999 Param0 = static_cast<uint32_t>(0);
16000 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
16001 break;
16002 case ARM::BI__builtin_arm_mve_vcvtpq_x_u16_f16:
16003 Param0 = static_cast<uint32_t>(1);
16004 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
16005 break;
16006 }
16007 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
16008 Value *Val1 = UndefValue::get(T: Val0);
16009 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16010 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
16011 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16012 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16013 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val5});
16014 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val1, Val3, Val6});
16015}
16016case ARM::BI__builtin_arm_mve_vcvtq_x_n_s16_f16:
16017case ARM::BI__builtin_arm_mve_vcvtq_x_n_u16_f16: {
16018 uint32_t Param0;
16019 switch (BuiltinID) {
16020 case ARM::BI__builtin_arm_mve_vcvtq_x_n_s16_f16:
16021 Param0 = static_cast<uint32_t>(0);
16022 break;
16023 case ARM::BI__builtin_arm_mve_vcvtq_x_n_u16_f16:
16024 Param0 = static_cast<uint32_t>(1);
16025 break;
16026 }
16027 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
16028 Value *Val1 = UndefValue::get(T: Val0);
16029 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16030 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
16031 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16032 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16033 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16034 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val6});
16035 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fix_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val1, Val3, Val4, Val7});
16036}
16037case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s16:
16038case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u16:
16039case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s16:
16040case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u16:
16041case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s16:
16042case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s16: {
16043 uint32_t Param0;
16044 uint32_t Param1;
16045 switch (BuiltinID) {
16046 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s16:
16047 Param0 = static_cast<uint32_t>(1);
16048 Param1 = static_cast<uint32_t>(1);
16049 break;
16050 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u16:
16051 Param0 = static_cast<uint32_t>(1);
16052 Param1 = static_cast<uint32_t>(1);
16053 break;
16054 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s16:
16055 Param0 = static_cast<uint32_t>(1);
16056 Param1 = static_cast<uint32_t>(0);
16057 break;
16058 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u16:
16059 Param0 = static_cast<uint32_t>(1);
16060 Param1 = static_cast<uint32_t>(0);
16061 break;
16062 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s16:
16063 Param0 = static_cast<uint32_t>(0);
16064 Param1 = static_cast<uint32_t>(1);
16065 break;
16066 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s16:
16067 Param0 = static_cast<uint32_t>(0);
16068 Param1 = static_cast<uint32_t>(0);
16069 break;
16070 }
16071 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
16072 Value *Val1 = UndefValue::get(T: Val0);
16073 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16074 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
16075 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
16076 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
16077 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
16078 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
16079 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val7});
16080 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val2, Val3, Val1, Val4, Val5, Val8});
16081}
16082case ARM::BI__builtin_arm_mve_vnegq_s16: {
16083 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
16084 Value *Val1 = llvm::Constant::getNullValue(Ty: Val0);
16085 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16086 return Builder.CreateSub(LHS: Val1, RHS: Val2);
16087}
16088case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s16:
16089case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u16:
16090case ARM::BI__builtin_arm_mve_vuninitializedq_s16:
16091case ARM::BI__builtin_arm_mve_vuninitializedq_u16: {
16092 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
16093 return UndefValue::get(T: Val0);
16094}
16095case ARM::BI__builtin_arm_mve_vld1q_z_s32:
16096case ARM::BI__builtin_arm_mve_vld1q_z_u32:
16097case ARM::BI__builtin_arm_mve_vldrwq_z_s32:
16098case ARM::BI__builtin_arm_mve_vldrwq_z_u32: {
16099 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16100 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
16101 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
16102 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16103 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
16104 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
16105 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16106 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
16107 return Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(4), Mask: Val5, PassThru: Val7);
16108}
16109case ARM::BI__builtin_arm_mve_vddupq_x_wb_u32:
16110case ARM::BI__builtin_arm_mve_vidupq_x_wb_u32: {
16111 Intrinsic::ID Param0;
16112 switch (BuiltinID) {
16113 case ARM::BI__builtin_arm_mve_vddupq_x_wb_u32:
16114 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
16115 break;
16116 case ARM::BI__builtin_arm_mve_vidupq_x_wb_u32:
16117 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
16118 break;
16119 }
16120 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16121 Value *Val1 = UndefValue::get(T: Val0);
16122 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
16123 Value *Val3 = Builder.CreateLoad(Addr: Val2);
16124 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16125 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16126 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16127 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16128 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1, Val3, Val4, Val7});
16129 Value *Val9 = Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(1));
16130 Builder.CreateStore(Val: Val9, Addr: Val2);
16131 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
16132}
16133case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u32:
16134case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u32: {
16135 Intrinsic::ID Param0;
16136 switch (BuiltinID) {
16137 case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u32:
16138 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
16139 break;
16140 case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u32:
16141 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
16142 break;
16143 }
16144 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16145 Value *Val1 = UndefValue::get(T: Val0);
16146 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
16147 Value *Val3 = Builder.CreateLoad(Addr: Val2);
16148 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16149 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16150 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
16151 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
16152 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
16153 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1, Val3, Val4, Val5, Val8});
16154 Value *Val10 = Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(1));
16155 Builder.CreateStore(Val: Val10, Addr: Val2);
16156 return Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(0));
16157}
16158case ARM::BI__builtin_arm_mve_vaddq_x_n_s32:
16159case ARM::BI__builtin_arm_mve_vaddq_x_n_u32:
16160case ARM::BI__builtin_arm_mve_vmulq_x_n_s32:
16161case ARM::BI__builtin_arm_mve_vmulq_x_n_u32:
16162case ARM::BI__builtin_arm_mve_vsubq_x_n_s32:
16163case ARM::BI__builtin_arm_mve_vsubq_x_n_u32: {
16164 Intrinsic::ID Param0;
16165 switch (BuiltinID) {
16166 case ARM::BI__builtin_arm_mve_vaddq_x_n_s32:
16167 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
16168 break;
16169 case ARM::BI__builtin_arm_mve_vaddq_x_n_u32:
16170 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
16171 break;
16172 case ARM::BI__builtin_arm_mve_vmulq_x_n_s32:
16173 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
16174 break;
16175 case ARM::BI__builtin_arm_mve_vmulq_x_n_u32:
16176 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
16177 break;
16178 case ARM::BI__builtin_arm_mve_vsubq_x_n_s32:
16179 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
16180 break;
16181 case ARM::BI__builtin_arm_mve_vsubq_x_n_u32:
16182 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
16183 break;
16184 }
16185 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16186 Value *Val1 = UndefValue::get(T: Val0);
16187 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16188 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16189 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
16190 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16191 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16192 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16193 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val4, Val7, Val1});
16194}
16195case ARM::BI__builtin_arm_mve_vhaddq_x_n_s32:
16196case ARM::BI__builtin_arm_mve_vhaddq_x_n_u32:
16197case ARM::BI__builtin_arm_mve_vhsubq_x_n_s32:
16198case ARM::BI__builtin_arm_mve_vhsubq_x_n_u32: {
16199 uint32_t Param0;
16200 Intrinsic::ID Param1;
16201 switch (BuiltinID) {
16202 case ARM::BI__builtin_arm_mve_vhaddq_x_n_s32:
16203 Param0 = static_cast<uint32_t>(0);
16204 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
16205 break;
16206 case ARM::BI__builtin_arm_mve_vhaddq_x_n_u32:
16207 Param0 = static_cast<uint32_t>(1);
16208 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
16209 break;
16210 case ARM::BI__builtin_arm_mve_vhsubq_x_n_s32:
16211 Param0 = static_cast<uint32_t>(0);
16212 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
16213 break;
16214 case ARM::BI__builtin_arm_mve_vhsubq_x_n_u32:
16215 Param0 = static_cast<uint32_t>(1);
16216 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
16217 break;
16218 }
16219 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16220 Value *Val1 = UndefValue::get(T: Val0);
16221 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16222 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16223 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
16224 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16225 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
16226 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
16227 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
16228 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val4, Val5, Val8, Val1});
16229}
16230case ARM::BI__builtin_arm_mve_vabsq_x_s32:
16231case ARM::BI__builtin_arm_mve_vclsq_x_s32:
16232case ARM::BI__builtin_arm_mve_vclzq_x_s32:
16233case ARM::BI__builtin_arm_mve_vclzq_x_u32:
16234case ARM::BI__builtin_arm_mve_vmvnq_x_s32:
16235case ARM::BI__builtin_arm_mve_vmvnq_x_u32:
16236case ARM::BI__builtin_arm_mve_vnegq_x_s32: {
16237 Intrinsic::ID Param0;
16238 switch (BuiltinID) {
16239 case ARM::BI__builtin_arm_mve_vabsq_x_s32:
16240 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
16241 break;
16242 case ARM::BI__builtin_arm_mve_vclsq_x_s32:
16243 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_cls_predicated);
16244 break;
16245 case ARM::BI__builtin_arm_mve_vclzq_x_s32:
16246 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
16247 break;
16248 case ARM::BI__builtin_arm_mve_vclzq_x_u32:
16249 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
16250 break;
16251 case ARM::BI__builtin_arm_mve_vmvnq_x_s32:
16252 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
16253 break;
16254 case ARM::BI__builtin_arm_mve_vmvnq_x_u32:
16255 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
16256 break;
16257 case ARM::BI__builtin_arm_mve_vnegq_x_s32:
16258 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
16259 break;
16260 }
16261 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16262 Value *Val1 = UndefValue::get(T: Val0);
16263 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16264 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16265 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
16266 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
16267 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val5, Val1});
16268}
16269case ARM::BI__builtin_arm_mve_vddupq_x_n_u32:
16270case ARM::BI__builtin_arm_mve_vidupq_x_n_u32: {
16271 Intrinsic::ID Param0;
16272 switch (BuiltinID) {
16273 case ARM::BI__builtin_arm_mve_vddupq_x_n_u32:
16274 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
16275 break;
16276 case ARM::BI__builtin_arm_mve_vidupq_x_n_u32:
16277 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
16278 break;
16279 }
16280 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16281 Value *Val1 = UndefValue::get(T: Val0);
16282 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16283 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16284 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
16285 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16286 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
16287 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1, Val2, Val3, Val6});
16288 return Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
16289}
16290case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s32:
16291case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u32: {
16292 Intrinsic::ID Param0;
16293 switch (BuiltinID) {
16294 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s32:
16295 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
16296 break;
16297 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u32:
16298 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
16299 break;
16300 }
16301 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16302 Value *Val1 = UndefValue::get(T: Val0);
16303 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16304 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16305 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
16306 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16307 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
16308 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1, Val2, Val3, Val6});
16309}
16310case ARM::BI__builtin_arm_mve_vaddq_x_s32:
16311case ARM::BI__builtin_arm_mve_vaddq_x_u32:
16312case ARM::BI__builtin_arm_mve_vmulq_x_s32:
16313case ARM::BI__builtin_arm_mve_vmulq_x_u32:
16314case ARM::BI__builtin_arm_mve_vshlq_x_n_s32:
16315case ARM::BI__builtin_arm_mve_vshlq_x_n_u32:
16316case ARM::BI__builtin_arm_mve_vsubq_x_s32:
16317case ARM::BI__builtin_arm_mve_vsubq_x_u32: {
16318 Intrinsic::ID Param0;
16319 switch (BuiltinID) {
16320 case ARM::BI__builtin_arm_mve_vaddq_x_s32:
16321 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
16322 break;
16323 case ARM::BI__builtin_arm_mve_vaddq_x_u32:
16324 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
16325 break;
16326 case ARM::BI__builtin_arm_mve_vmulq_x_s32:
16327 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
16328 break;
16329 case ARM::BI__builtin_arm_mve_vmulq_x_u32:
16330 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
16331 break;
16332 case ARM::BI__builtin_arm_mve_vshlq_x_n_s32:
16333 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
16334 break;
16335 case ARM::BI__builtin_arm_mve_vshlq_x_n_u32:
16336 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
16337 break;
16338 case ARM::BI__builtin_arm_mve_vsubq_x_s32:
16339 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
16340 break;
16341 case ARM::BI__builtin_arm_mve_vsubq_x_u32:
16342 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
16343 break;
16344 }
16345 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16346 Value *Val1 = UndefValue::get(T: Val0);
16347 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16348 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16349 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
16350 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16351 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
16352 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val6, Val1});
16353}
16354case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u32:
16355case ARM::BI__builtin_arm_mve_viwdupq_x_n_u32: {
16356 Intrinsic::ID Param0;
16357 switch (BuiltinID) {
16358 case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u32:
16359 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
16360 break;
16361 case ARM::BI__builtin_arm_mve_viwdupq_x_n_u32:
16362 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
16363 break;
16364 }
16365 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16366 Value *Val1 = UndefValue::get(T: Val0);
16367 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16368 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16369 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
16370 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
16371 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16372 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16373 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val1, Val2, Val3, Val4, Val7});
16374 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
16375}
16376case ARM::BI__builtin_arm_mve_vrshlq_x_s32:
16377case ARM::BI__builtin_arm_mve_vrshlq_x_u32:
16378case ARM::BI__builtin_arm_mve_vshlq_x_s32:
16379case ARM::BI__builtin_arm_mve_vshlq_x_u32: {
16380 uint32_t Param0;
16381 uint32_t Param1;
16382 switch (BuiltinID) {
16383 case ARM::BI__builtin_arm_mve_vrshlq_x_s32:
16384 Param0 = static_cast<uint32_t>(1);
16385 Param1 = static_cast<uint32_t>(0);
16386 break;
16387 case ARM::BI__builtin_arm_mve_vrshlq_x_u32:
16388 Param0 = static_cast<uint32_t>(1);
16389 Param1 = static_cast<uint32_t>(1);
16390 break;
16391 case ARM::BI__builtin_arm_mve_vshlq_x_s32:
16392 Param0 = static_cast<uint32_t>(0);
16393 Param1 = static_cast<uint32_t>(0);
16394 break;
16395 case ARM::BI__builtin_arm_mve_vshlq_x_u32:
16396 Param0 = static_cast<uint32_t>(0);
16397 Param1 = static_cast<uint32_t>(1);
16398 break;
16399 }
16400 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16401 Value *Val1 = UndefValue::get(T: Val0);
16402 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16403 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16404 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
16405 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16406 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
16407 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 2));
16408 Value *Val8 = Builder.CreateIntCast(V: Val7, DestTy: Int32Ty, isSigned: false);
16409 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val8});
16410 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshl_vector_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
16411}
16412case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p16:
16413case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p16: {
16414 uint32_t Param0;
16415 switch (BuiltinID) {
16416 case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p16:
16417 Param0 = static_cast<uint32_t>(0);
16418 break;
16419 case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p16:
16420 Param0 = static_cast<uint32_t>(1);
16421 break;
16422 }
16423 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16424 Value *Val1 = UndefValue::get(T: Val0);
16425 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16426 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16427 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16428 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16429 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16430 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16431 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_mull_poly_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val4, Val7, Val1});
16432}
16433case ARM::BI__builtin_arm_mve_vabdq_x_s32:
16434case ARM::BI__builtin_arm_mve_vabdq_x_u32:
16435case ARM::BI__builtin_arm_mve_vhaddq_x_s32:
16436case ARM::BI__builtin_arm_mve_vhaddq_x_u32:
16437case ARM::BI__builtin_arm_mve_vhsubq_x_s32:
16438case ARM::BI__builtin_arm_mve_vhsubq_x_u32:
16439case ARM::BI__builtin_arm_mve_vmaxq_x_s32:
16440case ARM::BI__builtin_arm_mve_vmaxq_x_u32:
16441case ARM::BI__builtin_arm_mve_vminq_x_s32:
16442case ARM::BI__builtin_arm_mve_vminq_x_u32:
16443case ARM::BI__builtin_arm_mve_vmulhq_x_s32:
16444case ARM::BI__builtin_arm_mve_vmulhq_x_u32:
16445case ARM::BI__builtin_arm_mve_vrhaddq_x_s32:
16446case ARM::BI__builtin_arm_mve_vrhaddq_x_u32:
16447case ARM::BI__builtin_arm_mve_vrmulhq_x_s32:
16448case ARM::BI__builtin_arm_mve_vrmulhq_x_u32:
16449case ARM::BI__builtin_arm_mve_vrshrq_x_n_s32:
16450case ARM::BI__builtin_arm_mve_vrshrq_x_n_u32:
16451case ARM::BI__builtin_arm_mve_vshrq_x_n_s32:
16452case ARM::BI__builtin_arm_mve_vshrq_x_n_u32: {
16453 uint32_t Param0;
16454 Intrinsic::ID Param1;
16455 switch (BuiltinID) {
16456 case ARM::BI__builtin_arm_mve_vabdq_x_s32:
16457 Param0 = static_cast<uint32_t>(0);
16458 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
16459 break;
16460 case ARM::BI__builtin_arm_mve_vabdq_x_u32:
16461 Param0 = static_cast<uint32_t>(1);
16462 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
16463 break;
16464 case ARM::BI__builtin_arm_mve_vhaddq_x_s32:
16465 Param0 = static_cast<uint32_t>(0);
16466 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
16467 break;
16468 case ARM::BI__builtin_arm_mve_vhaddq_x_u32:
16469 Param0 = static_cast<uint32_t>(1);
16470 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
16471 break;
16472 case ARM::BI__builtin_arm_mve_vhsubq_x_s32:
16473 Param0 = static_cast<uint32_t>(0);
16474 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
16475 break;
16476 case ARM::BI__builtin_arm_mve_vhsubq_x_u32:
16477 Param0 = static_cast<uint32_t>(1);
16478 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
16479 break;
16480 case ARM::BI__builtin_arm_mve_vmaxq_x_s32:
16481 Param0 = static_cast<uint32_t>(0);
16482 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
16483 break;
16484 case ARM::BI__builtin_arm_mve_vmaxq_x_u32:
16485 Param0 = static_cast<uint32_t>(1);
16486 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
16487 break;
16488 case ARM::BI__builtin_arm_mve_vminq_x_s32:
16489 Param0 = static_cast<uint32_t>(0);
16490 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
16491 break;
16492 case ARM::BI__builtin_arm_mve_vminq_x_u32:
16493 Param0 = static_cast<uint32_t>(1);
16494 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
16495 break;
16496 case ARM::BI__builtin_arm_mve_vmulhq_x_s32:
16497 Param0 = static_cast<uint32_t>(0);
16498 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
16499 break;
16500 case ARM::BI__builtin_arm_mve_vmulhq_x_u32:
16501 Param0 = static_cast<uint32_t>(1);
16502 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
16503 break;
16504 case ARM::BI__builtin_arm_mve_vrhaddq_x_s32:
16505 Param0 = static_cast<uint32_t>(0);
16506 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
16507 break;
16508 case ARM::BI__builtin_arm_mve_vrhaddq_x_u32:
16509 Param0 = static_cast<uint32_t>(1);
16510 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
16511 break;
16512 case ARM::BI__builtin_arm_mve_vrmulhq_x_s32:
16513 Param0 = static_cast<uint32_t>(0);
16514 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
16515 break;
16516 case ARM::BI__builtin_arm_mve_vrmulhq_x_u32:
16517 Param0 = static_cast<uint32_t>(1);
16518 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
16519 break;
16520 case ARM::BI__builtin_arm_mve_vrshrq_x_n_s32:
16521 Param0 = static_cast<uint32_t>(0);
16522 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
16523 break;
16524 case ARM::BI__builtin_arm_mve_vrshrq_x_n_u32:
16525 Param0 = static_cast<uint32_t>(1);
16526 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
16527 break;
16528 case ARM::BI__builtin_arm_mve_vshrq_x_n_s32:
16529 Param0 = static_cast<uint32_t>(0);
16530 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
16531 break;
16532 case ARM::BI__builtin_arm_mve_vshrq_x_n_u32:
16533 Param0 = static_cast<uint32_t>(1);
16534 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
16535 break;
16536 }
16537 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16538 Value *Val1 = UndefValue::get(T: Val0);
16539 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16540 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16541 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16542 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16543 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16544 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16545 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val4, Val7, Val1});
16546}
16547case ARM::BI__builtin_arm_mve_vmullbq_int_x_s16:
16548case ARM::BI__builtin_arm_mve_vmullbq_int_x_u16:
16549case ARM::BI__builtin_arm_mve_vmulltq_int_x_s16:
16550case ARM::BI__builtin_arm_mve_vmulltq_int_x_u16:
16551case ARM::BI__builtin_arm_mve_vshllbq_x_n_s16:
16552case ARM::BI__builtin_arm_mve_vshllbq_x_n_u16:
16553case ARM::BI__builtin_arm_mve_vshlltq_x_n_s16:
16554case ARM::BI__builtin_arm_mve_vshlltq_x_n_u16: {
16555 uint32_t Param0;
16556 uint32_t Param1;
16557 Intrinsic::ID Param2;
16558 switch (BuiltinID) {
16559 case ARM::BI__builtin_arm_mve_vmullbq_int_x_s16:
16560 Param0 = static_cast<uint32_t>(0);
16561 Param1 = static_cast<uint32_t>(0);
16562 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
16563 break;
16564 case ARM::BI__builtin_arm_mve_vmullbq_int_x_u16:
16565 Param0 = static_cast<uint32_t>(1);
16566 Param1 = static_cast<uint32_t>(0);
16567 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
16568 break;
16569 case ARM::BI__builtin_arm_mve_vmulltq_int_x_s16:
16570 Param0 = static_cast<uint32_t>(0);
16571 Param1 = static_cast<uint32_t>(1);
16572 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
16573 break;
16574 case ARM::BI__builtin_arm_mve_vmulltq_int_x_u16:
16575 Param0 = static_cast<uint32_t>(1);
16576 Param1 = static_cast<uint32_t>(1);
16577 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mull_int_predicated);
16578 break;
16579 case ARM::BI__builtin_arm_mve_vshllbq_x_n_s16:
16580 Param0 = static_cast<uint32_t>(0);
16581 Param1 = static_cast<uint32_t>(0);
16582 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
16583 break;
16584 case ARM::BI__builtin_arm_mve_vshllbq_x_n_u16:
16585 Param0 = static_cast<uint32_t>(1);
16586 Param1 = static_cast<uint32_t>(0);
16587 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
16588 break;
16589 case ARM::BI__builtin_arm_mve_vshlltq_x_n_s16:
16590 Param0 = static_cast<uint32_t>(0);
16591 Param1 = static_cast<uint32_t>(1);
16592 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
16593 break;
16594 case ARM::BI__builtin_arm_mve_vshlltq_x_n_u16:
16595 Param0 = static_cast<uint32_t>(1);
16596 Param1 = static_cast<uint32_t>(1);
16597 Param2 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vshll_imm_predicated);
16598 break;
16599 }
16600 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16601 Value *Val1 = UndefValue::get(T: Val0);
16602 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16603 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16604 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16605 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
16606 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
16607 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
16608 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
16609 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param2, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val4, Val5, Val8, Val1});
16610}
16611case ARM::BI__builtin_arm_mve_vrev64q_x_s32:
16612case ARM::BI__builtin_arm_mve_vrev64q_x_u32: {
16613 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16614 Value *Val1 = UndefValue::get(T: Val0);
16615 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16616 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: 64);
16617 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16618 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16619 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
16620 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vrev_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val6, Val1});
16621}
16622case ARM::BI__builtin_arm_mve_vcvtq_x_s32_f32:
16623case ARM::BI__builtin_arm_mve_vcvtq_x_u32_f32: {
16624 uint32_t Param0;
16625 switch (BuiltinID) {
16626 case ARM::BI__builtin_arm_mve_vcvtq_x_s32_f32:
16627 Param0 = static_cast<uint32_t>(0);
16628 break;
16629 case ARM::BI__builtin_arm_mve_vcvtq_x_u32_f32:
16630 Param0 = static_cast<uint32_t>(1);
16631 break;
16632 }
16633 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16634 Value *Val1 = UndefValue::get(T: Val0);
16635 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16636 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16637 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16638 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16639 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
16640 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fp_int_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val6, Val1});
16641}
16642case ARM::BI__builtin_arm_mve_vmovlbq_x_s16:
16643case ARM::BI__builtin_arm_mve_vmovlbq_x_u16:
16644case ARM::BI__builtin_arm_mve_vmovltq_x_s16:
16645case ARM::BI__builtin_arm_mve_vmovltq_x_u16: {
16646 uint32_t Param0;
16647 uint32_t Param1;
16648 switch (BuiltinID) {
16649 case ARM::BI__builtin_arm_mve_vmovlbq_x_s16:
16650 Param0 = static_cast<uint32_t>(0);
16651 Param1 = static_cast<uint32_t>(0);
16652 break;
16653 case ARM::BI__builtin_arm_mve_vmovlbq_x_u16:
16654 Param0 = static_cast<uint32_t>(1);
16655 Param1 = static_cast<uint32_t>(0);
16656 break;
16657 case ARM::BI__builtin_arm_mve_vmovltq_x_s16:
16658 Param0 = static_cast<uint32_t>(0);
16659 Param1 = static_cast<uint32_t>(1);
16660 break;
16661 case ARM::BI__builtin_arm_mve_vmovltq_x_u16:
16662 Param0 = static_cast<uint32_t>(1);
16663 Param1 = static_cast<uint32_t>(1);
16664 break;
16665 }
16666 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16667 Value *Val1 = UndefValue::get(T: Val0);
16668 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16669 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16670 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
16671 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
16672 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16673 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16674 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vmovl_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val4, Val7, Val1});
16675}
16676case ARM::BI__builtin_arm_mve_vandq_x_s32:
16677case ARM::BI__builtin_arm_mve_vandq_x_u32:
16678case ARM::BI__builtin_arm_mve_vbicq_x_s32:
16679case ARM::BI__builtin_arm_mve_vbicq_x_u32:
16680case ARM::BI__builtin_arm_mve_veorq_x_s32:
16681case ARM::BI__builtin_arm_mve_veorq_x_u32:
16682case ARM::BI__builtin_arm_mve_vornq_x_s32:
16683case ARM::BI__builtin_arm_mve_vornq_x_u32:
16684case ARM::BI__builtin_arm_mve_vorrq_x_s32:
16685case ARM::BI__builtin_arm_mve_vorrq_x_u32: {
16686 Intrinsic::ID Param0;
16687 switch (BuiltinID) {
16688 case ARM::BI__builtin_arm_mve_vandq_x_s32:
16689 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
16690 break;
16691 case ARM::BI__builtin_arm_mve_vandq_x_u32:
16692 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
16693 break;
16694 case ARM::BI__builtin_arm_mve_vbicq_x_s32:
16695 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
16696 break;
16697 case ARM::BI__builtin_arm_mve_vbicq_x_u32:
16698 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
16699 break;
16700 case ARM::BI__builtin_arm_mve_veorq_x_s32:
16701 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
16702 break;
16703 case ARM::BI__builtin_arm_mve_veorq_x_u32:
16704 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
16705 break;
16706 case ARM::BI__builtin_arm_mve_vornq_x_s32:
16707 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
16708 break;
16709 case ARM::BI__builtin_arm_mve_vornq_x_u32:
16710 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
16711 break;
16712 case ARM::BI__builtin_arm_mve_vorrq_x_s32:
16713 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
16714 break;
16715 case ARM::BI__builtin_arm_mve_vorrq_x_u32:
16716 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
16717 break;
16718 }
16719 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16720 Value *Val1 = UndefValue::get(T: Val0);
16721 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16722 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16723 Value *Val4 = Builder.CreateBitCast(V: Val2, DestTy: Val3);
16724 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
16725 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16726 Value *Val7 = Builder.CreateBitCast(V: Val5, DestTy: Val6);
16727 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 2));
16728 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int32Ty, isSigned: false);
16729 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val9});
16730 llvm::Type *Val11 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16731 Value *Val12 = Builder.CreateBitCast(V: Val1, DestTy: Val11);
16732 Value *Val13 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4, Val7, Val10, Val12});
16733 llvm::Type *Val14 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16734 return Builder.CreateBitCast(V: Val13, DestTy: Val14);
16735}
16736case ARM::BI__builtin_arm_mve_vdupq_x_n_s32:
16737case ARM::BI__builtin_arm_mve_vdupq_x_n_u32: {
16738 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16739 Value *Val1 = UndefValue::get(T: Val0);
16740 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
16741 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
16742 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val3});
16743 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
16744 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
16745 return Builder.CreateSelect(C: Val4, True: Val6, False: Val1);
16746}
16747case ARM::BI__builtin_arm_mve_vmvnq_x_n_s32:
16748case ARM::BI__builtin_arm_mve_vmvnq_x_n_u32: {
16749 bool Param0;
16750 switch (BuiltinID) {
16751 case ARM::BI__builtin_arm_mve_vmvnq_x_n_s32:
16752 Param0 = static_cast<bool>(true);
16753 break;
16754 case ARM::BI__builtin_arm_mve_vmvnq_x_n_u32:
16755 Param0 = static_cast<bool>(false);
16756 break;
16757 }
16758 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16759 Value *Val1 = UndefValue::get(T: Val0);
16760 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
16761 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
16762 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val3});
16763 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
16764 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: Param0);
16765 Value *Val7 = ARMMVEVectorSplat(Builder, V: Val6);
16766 Value *Val8 = Builder.CreateNot(V: Val7);
16767 return Builder.CreateSelect(C: Val4, True: Val8, False: Val1);
16768}
16769case ARM::BI__builtin_arm_mve_vcvtaq_x_s32_f32:
16770case ARM::BI__builtin_arm_mve_vcvtaq_x_u32_f32:
16771case ARM::BI__builtin_arm_mve_vcvtmq_x_s32_f32:
16772case ARM::BI__builtin_arm_mve_vcvtmq_x_u32_f32:
16773case ARM::BI__builtin_arm_mve_vcvtnq_x_s32_f32:
16774case ARM::BI__builtin_arm_mve_vcvtnq_x_u32_f32:
16775case ARM::BI__builtin_arm_mve_vcvtpq_x_s32_f32:
16776case ARM::BI__builtin_arm_mve_vcvtpq_x_u32_f32: {
16777 uint32_t Param0;
16778 Intrinsic::ID Param1;
16779 switch (BuiltinID) {
16780 case ARM::BI__builtin_arm_mve_vcvtaq_x_s32_f32:
16781 Param0 = static_cast<uint32_t>(0);
16782 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
16783 break;
16784 case ARM::BI__builtin_arm_mve_vcvtaq_x_u32_f32:
16785 Param0 = static_cast<uint32_t>(1);
16786 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvta_predicated);
16787 break;
16788 case ARM::BI__builtin_arm_mve_vcvtmq_x_s32_f32:
16789 Param0 = static_cast<uint32_t>(0);
16790 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
16791 break;
16792 case ARM::BI__builtin_arm_mve_vcvtmq_x_u32_f32:
16793 Param0 = static_cast<uint32_t>(1);
16794 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtm_predicated);
16795 break;
16796 case ARM::BI__builtin_arm_mve_vcvtnq_x_s32_f32:
16797 Param0 = static_cast<uint32_t>(0);
16798 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
16799 break;
16800 case ARM::BI__builtin_arm_mve_vcvtnq_x_u32_f32:
16801 Param0 = static_cast<uint32_t>(1);
16802 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtn_predicated);
16803 break;
16804 case ARM::BI__builtin_arm_mve_vcvtpq_x_s32_f32:
16805 Param0 = static_cast<uint32_t>(0);
16806 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
16807 break;
16808 case ARM::BI__builtin_arm_mve_vcvtpq_x_u32_f32:
16809 Param0 = static_cast<uint32_t>(1);
16810 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vcvtp_predicated);
16811 break;
16812 }
16813 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16814 Value *Val1 = UndefValue::get(T: Val0);
16815 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16816 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
16817 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16818 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
16819 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val5});
16820 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val1, Val3, Val6});
16821}
16822case ARM::BI__builtin_arm_mve_vcvtq_x_n_s32_f32:
16823case ARM::BI__builtin_arm_mve_vcvtq_x_n_u32_f32: {
16824 uint32_t Param0;
16825 switch (BuiltinID) {
16826 case ARM::BI__builtin_arm_mve_vcvtq_x_n_s32_f32:
16827 Param0 = static_cast<uint32_t>(0);
16828 break;
16829 case ARM::BI__builtin_arm_mve_vcvtq_x_n_u32_f32:
16830 Param0 = static_cast<uint32_t>(1);
16831 break;
16832 }
16833 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16834 Value *Val1 = UndefValue::get(T: Val0);
16835 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16836 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 0));
16837 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16838 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
16839 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
16840 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val6});
16841 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcvt_fix_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val1, Val3, Val4, Val7});
16842}
16843case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s32:
16844case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u32:
16845case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s32:
16846case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u32:
16847case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s32:
16848case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s32: {
16849 uint32_t Param0;
16850 uint32_t Param1;
16851 switch (BuiltinID) {
16852 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s32:
16853 Param0 = static_cast<uint32_t>(1);
16854 Param1 = static_cast<uint32_t>(1);
16855 break;
16856 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u32:
16857 Param0 = static_cast<uint32_t>(1);
16858 Param1 = static_cast<uint32_t>(1);
16859 break;
16860 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s32:
16861 Param0 = static_cast<uint32_t>(1);
16862 Param1 = static_cast<uint32_t>(0);
16863 break;
16864 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u32:
16865 Param0 = static_cast<uint32_t>(1);
16866 Param1 = static_cast<uint32_t>(0);
16867 break;
16868 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s32:
16869 Param0 = static_cast<uint32_t>(0);
16870 Param1 = static_cast<uint32_t>(1);
16871 break;
16872 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s32:
16873 Param0 = static_cast<uint32_t>(0);
16874 Param1 = static_cast<uint32_t>(0);
16875 break;
16876 }
16877 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16878 Value *Val1 = UndefValue::get(T: Val0);
16879 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16880 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
16881 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
16882 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
16883 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
16884 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
16885 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val7});
16886 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val2, Val3, Val1, Val4, Val5, Val8});
16887}
16888case ARM::BI__builtin_arm_mve_vnegq_s32: {
16889 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16890 Value *Val1 = llvm::Constant::getNullValue(Ty: Val0);
16891 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16892 return Builder.CreateSub(LHS: Val1, RHS: Val2);
16893}
16894case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s32:
16895case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u32:
16896case ARM::BI__builtin_arm_mve_vuninitializedq_s32:
16897case ARM::BI__builtin_arm_mve_vuninitializedq_u32: {
16898 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16899 return UndefValue::get(T: Val0);
16900}
16901case ARM::BI__builtin_arm_mve_vcreateq_f32: {
16902 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16903 Value *Val1 = PoisonValue::get(T: Val0);
16904 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16905 Value *Val3 = Builder.CreateInsertElement(Vec: Val1, NewElt: Val2, Idx: static_cast<uint64_t>(0));
16906 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16907 Value *Val5 = Builder.CreateInsertElement(Vec: Val3, NewElt: Val4, Idx: static_cast<uint64_t>(1));
16908 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: FloatTy, NumElts: 4);
16909 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val5, DestType: Val6);
16910}
16911case ARM::BI__builtin_arm_mve_vcreateq_f16: {
16912 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16913 Value *Val1 = PoisonValue::get(T: Val0);
16914 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16915 Value *Val3 = Builder.CreateInsertElement(Vec: Val1, NewElt: Val2, Idx: static_cast<uint64_t>(0));
16916 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16917 Value *Val5 = Builder.CreateInsertElement(Vec: Val3, NewElt: Val4, Idx: static_cast<uint64_t>(1));
16918 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: HalfTy, NumElts: 8);
16919 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val5, DestType: Val6);
16920}
16921case ARM::BI__builtin_arm_mve_vcreateq_s16:
16922case ARM::BI__builtin_arm_mve_vcreateq_u16: {
16923 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16924 Value *Val1 = PoisonValue::get(T: Val0);
16925 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16926 Value *Val3 = Builder.CreateInsertElement(Vec: Val1, NewElt: Val2, Idx: static_cast<uint64_t>(0));
16927 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16928 Value *Val5 = Builder.CreateInsertElement(Vec: Val3, NewElt: Val4, Idx: static_cast<uint64_t>(1));
16929 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
16930 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val5, DestType: Val6);
16931}
16932case ARM::BI__builtin_arm_mve_vcreateq_s32:
16933case ARM::BI__builtin_arm_mve_vcreateq_u32: {
16934 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16935 Value *Val1 = PoisonValue::get(T: Val0);
16936 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16937 Value *Val3 = Builder.CreateInsertElement(Vec: Val1, NewElt: Val2, Idx: static_cast<uint64_t>(0));
16938 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16939 Value *Val5 = Builder.CreateInsertElement(Vec: Val3, NewElt: Val4, Idx: static_cast<uint64_t>(1));
16940 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
16941 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val5, DestType: Val6);
16942}
16943case ARM::BI__builtin_arm_mve_vcreateq_s64:
16944case ARM::BI__builtin_arm_mve_vcreateq_u64: {
16945 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16946 Value *Val1 = PoisonValue::get(T: Val0);
16947 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16948 Value *Val3 = Builder.CreateInsertElement(Vec: Val1, NewElt: Val2, Idx: static_cast<uint64_t>(0));
16949 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16950 Value *Val5 = Builder.CreateInsertElement(Vec: Val3, NewElt: Val4, Idx: static_cast<uint64_t>(1));
16951 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16952 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val5, DestType: Val6);
16953}
16954case ARM::BI__builtin_arm_mve_vcreateq_s8:
16955case ARM::BI__builtin_arm_mve_vcreateq_u8: {
16956 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16957 Value *Val1 = PoisonValue::get(T: Val0);
16958 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16959 Value *Val3 = Builder.CreateInsertElement(Vec: Val1, NewElt: Val2, Idx: static_cast<uint64_t>(0));
16960 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
16961 Value *Val5 = Builder.CreateInsertElement(Vec: Val3, NewElt: Val4, Idx: static_cast<uint64_t>(1));
16962 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
16963 return ARMMVEVectorReinterpret(Builder, CGF: this, V: Val5, DestType: Val6);
16964}
16965case ARM::BI__builtin_arm_mve_vmullbq_int_x_s32:
16966case ARM::BI__builtin_arm_mve_vmullbq_int_x_u32:
16967case ARM::BI__builtin_arm_mve_vmulltq_int_x_s32:
16968case ARM::BI__builtin_arm_mve_vmulltq_int_x_u32: {
16969 uint32_t Param0;
16970 uint32_t Param1;
16971 switch (BuiltinID) {
16972 case ARM::BI__builtin_arm_mve_vmullbq_int_x_s32:
16973 Param0 = static_cast<uint32_t>(0);
16974 Param1 = static_cast<uint32_t>(0);
16975 break;
16976 case ARM::BI__builtin_arm_mve_vmullbq_int_x_u32:
16977 Param0 = static_cast<uint32_t>(1);
16978 Param1 = static_cast<uint32_t>(0);
16979 break;
16980 case ARM::BI__builtin_arm_mve_vmulltq_int_x_s32:
16981 Param0 = static_cast<uint32_t>(0);
16982 Param1 = static_cast<uint32_t>(1);
16983 break;
16984 case ARM::BI__builtin_arm_mve_vmulltq_int_x_u32:
16985 Param0 = static_cast<uint32_t>(1);
16986 Param1 = static_cast<uint32_t>(1);
16987 break;
16988 }
16989 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
16990 Value *Val1 = UndefValue::get(T: Val0);
16991 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
16992 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
16993 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
16994 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
16995 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
16996 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
16997 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2)}), Args: {Val7});
16998 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_mull_int_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2), llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 2)}), Args: {Val2, Val3, Val4, Val5, Val8, Val1});
16999}
17000case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s64:
17001case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u64:
17002case ARM::BI__builtin_arm_mve_vuninitializedq_s64:
17003case ARM::BI__builtin_arm_mve_vuninitializedq_u64: {
17004 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int64Ty, NumElts: 2);
17005 return UndefValue::get(T: Val0);
17006}
17007case ARM::BI__builtin_arm_mve_vld1q_z_s8:
17008case ARM::BI__builtin_arm_mve_vld1q_z_u8:
17009case ARM::BI__builtin_arm_mve_vldrbq_z_s8:
17010case ARM::BI__builtin_arm_mve_vldrbq_z_u8: {
17011 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17012 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
17013 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
17014 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17015 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
17016 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val4});
17017 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17018 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
17019 return Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(1), Mask: Val5, PassThru: Val7);
17020}
17021case ARM::BI__builtin_arm_mve_vddupq_x_wb_u8:
17022case ARM::BI__builtin_arm_mve_vidupq_x_wb_u8: {
17023 Intrinsic::ID Param0;
17024 switch (BuiltinID) {
17025 case ARM::BI__builtin_arm_mve_vddupq_x_wb_u8:
17026 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
17027 break;
17028 case ARM::BI__builtin_arm_mve_vidupq_x_wb_u8:
17029 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
17030 break;
17031 }
17032 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17033 Value *Val1 = UndefValue::get(T: Val0);
17034 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
17035 Value *Val3 = Builder.CreateLoad(Addr: Val2);
17036 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
17037 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
17038 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
17039 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val6});
17040 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val1, Val3, Val4, Val7});
17041 Value *Val9 = Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(1));
17042 Builder.CreateStore(Val: Val9, Addr: Val2);
17043 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
17044}
17045case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u8:
17046case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u8: {
17047 Intrinsic::ID Param0;
17048 switch (BuiltinID) {
17049 case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u8:
17050 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
17051 break;
17052 case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u8:
17053 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
17054 break;
17055 }
17056 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17057 Value *Val1 = UndefValue::get(T: Val0);
17058 Address Val2 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
17059 Value *Val3 = Builder.CreateLoad(Addr: Val2);
17060 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
17061 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
17062 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 3));
17063 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
17064 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val7});
17065 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val1, Val3, Val4, Val5, Val8});
17066 Value *Val10 = Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(1));
17067 Builder.CreateStore(Val: Val10, Addr: Val2);
17068 return Builder.CreateExtractValue(Agg: Val9, Idxs: static_cast<unsigned>(0));
17069}
17070case ARM::BI__builtin_arm_mve_vaddq_x_n_s8:
17071case ARM::BI__builtin_arm_mve_vaddq_x_n_u8:
17072case ARM::BI__builtin_arm_mve_vmulq_x_n_s8:
17073case ARM::BI__builtin_arm_mve_vmulq_x_n_u8:
17074case ARM::BI__builtin_arm_mve_vsubq_x_n_s8:
17075case ARM::BI__builtin_arm_mve_vsubq_x_n_u8: {
17076 Intrinsic::ID Param0;
17077 switch (BuiltinID) {
17078 case ARM::BI__builtin_arm_mve_vaddq_x_n_s8:
17079 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
17080 break;
17081 case ARM::BI__builtin_arm_mve_vaddq_x_n_u8:
17082 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
17083 break;
17084 case ARM::BI__builtin_arm_mve_vmulq_x_n_s8:
17085 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
17086 break;
17087 case ARM::BI__builtin_arm_mve_vmulq_x_n_u8:
17088 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
17089 break;
17090 case ARM::BI__builtin_arm_mve_vsubq_x_n_s8:
17091 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
17092 break;
17093 case ARM::BI__builtin_arm_mve_vsubq_x_n_u8:
17094 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
17095 break;
17096 }
17097 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17098 Value *Val1 = UndefValue::get(T: Val0);
17099 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17100 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17101 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
17102 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
17103 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
17104 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val6});
17105 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val4, Val7, Val1});
17106}
17107case ARM::BI__builtin_arm_mve_vhaddq_x_n_s8:
17108case ARM::BI__builtin_arm_mve_vhaddq_x_n_u8:
17109case ARM::BI__builtin_arm_mve_vhsubq_x_n_s8:
17110case ARM::BI__builtin_arm_mve_vhsubq_x_n_u8: {
17111 uint32_t Param0;
17112 Intrinsic::ID Param1;
17113 switch (BuiltinID) {
17114 case ARM::BI__builtin_arm_mve_vhaddq_x_n_s8:
17115 Param0 = static_cast<uint32_t>(0);
17116 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
17117 break;
17118 case ARM::BI__builtin_arm_mve_vhaddq_x_n_u8:
17119 Param0 = static_cast<uint32_t>(1);
17120 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
17121 break;
17122 case ARM::BI__builtin_arm_mve_vhsubq_x_n_s8:
17123 Param0 = static_cast<uint32_t>(0);
17124 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
17125 break;
17126 case ARM::BI__builtin_arm_mve_vhsubq_x_n_u8:
17127 Param0 = static_cast<uint32_t>(1);
17128 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
17129 break;
17130 }
17131 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17132 Value *Val1 = UndefValue::get(T: Val0);
17133 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17134 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17135 Value *Val4 = ARMMVEVectorSplat(Builder, V: Val3);
17136 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
17137 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
17138 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
17139 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val7});
17140 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val4, Val5, Val8, Val1});
17141}
17142case ARM::BI__builtin_arm_mve_vabsq_x_s8:
17143case ARM::BI__builtin_arm_mve_vclsq_x_s8:
17144case ARM::BI__builtin_arm_mve_vclzq_x_s8:
17145case ARM::BI__builtin_arm_mve_vclzq_x_u8:
17146case ARM::BI__builtin_arm_mve_vmvnq_x_s8:
17147case ARM::BI__builtin_arm_mve_vmvnq_x_u8:
17148case ARM::BI__builtin_arm_mve_vnegq_x_s8: {
17149 Intrinsic::ID Param0;
17150 switch (BuiltinID) {
17151 case ARM::BI__builtin_arm_mve_vabsq_x_s8:
17152 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abs_predicated);
17153 break;
17154 case ARM::BI__builtin_arm_mve_vclsq_x_s8:
17155 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_cls_predicated);
17156 break;
17157 case ARM::BI__builtin_arm_mve_vclzq_x_s8:
17158 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
17159 break;
17160 case ARM::BI__builtin_arm_mve_vclzq_x_u8:
17161 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_clz_predicated);
17162 break;
17163 case ARM::BI__builtin_arm_mve_vmvnq_x_s8:
17164 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
17165 break;
17166 case ARM::BI__builtin_arm_mve_vmvnq_x_u8:
17167 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mvn_predicated);
17168 break;
17169 case ARM::BI__builtin_arm_mve_vnegq_x_s8:
17170 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_neg_predicated);
17171 break;
17172 }
17173 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17174 Value *Val1 = UndefValue::get(T: Val0);
17175 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17176 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17177 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
17178 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val4});
17179 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val5, Val1});
17180}
17181case ARM::BI__builtin_arm_mve_vddupq_x_n_u8:
17182case ARM::BI__builtin_arm_mve_vidupq_x_n_u8: {
17183 Intrinsic::ID Param0;
17184 switch (BuiltinID) {
17185 case ARM::BI__builtin_arm_mve_vddupq_x_n_u8:
17186 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vddup_predicated);
17187 break;
17188 case ARM::BI__builtin_arm_mve_vidupq_x_n_u8:
17189 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vidup_predicated);
17190 break;
17191 }
17192 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17193 Value *Val1 = UndefValue::get(T: Val0);
17194 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17195 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17196 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
17197 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
17198 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val5});
17199 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val1, Val2, Val3, Val6});
17200 return Builder.CreateExtractValue(Agg: Val7, Idxs: static_cast<unsigned>(0));
17201}
17202case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s8:
17203case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u8: {
17204 Intrinsic::ID Param0;
17205 switch (BuiltinID) {
17206 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s8:
17207 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
17208 break;
17209 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u8:
17210 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vbrsr_predicated);
17211 break;
17212 }
17213 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17214 Value *Val1 = UndefValue::get(T: Val0);
17215 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17216 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17217 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
17218 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
17219 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val5});
17220 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val1, Val2, Val3, Val6});
17221}
17222case ARM::BI__builtin_arm_mve_vaddq_x_s8:
17223case ARM::BI__builtin_arm_mve_vaddq_x_u8:
17224case ARM::BI__builtin_arm_mve_vmulq_x_s8:
17225case ARM::BI__builtin_arm_mve_vmulq_x_u8:
17226case ARM::BI__builtin_arm_mve_vshlq_x_n_s8:
17227case ARM::BI__builtin_arm_mve_vshlq_x_n_u8:
17228case ARM::BI__builtin_arm_mve_vsubq_x_s8:
17229case ARM::BI__builtin_arm_mve_vsubq_x_u8: {
17230 Intrinsic::ID Param0;
17231 switch (BuiltinID) {
17232 case ARM::BI__builtin_arm_mve_vaddq_x_s8:
17233 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
17234 break;
17235 case ARM::BI__builtin_arm_mve_vaddq_x_u8:
17236 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_add_predicated);
17237 break;
17238 case ARM::BI__builtin_arm_mve_vmulq_x_s8:
17239 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
17240 break;
17241 case ARM::BI__builtin_arm_mve_vmulq_x_u8:
17242 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mul_predicated);
17243 break;
17244 case ARM::BI__builtin_arm_mve_vshlq_x_n_s8:
17245 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
17246 break;
17247 case ARM::BI__builtin_arm_mve_vshlq_x_n_u8:
17248 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shl_imm_predicated);
17249 break;
17250 case ARM::BI__builtin_arm_mve_vsubq_x_s8:
17251 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
17252 break;
17253 case ARM::BI__builtin_arm_mve_vsubq_x_u8:
17254 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_sub_predicated);
17255 break;
17256 }
17257 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17258 Value *Val1 = UndefValue::get(T: Val0);
17259 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17260 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17261 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
17262 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
17263 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val5});
17264 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val3, Val6, Val1});
17265}
17266case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u8:
17267case ARM::BI__builtin_arm_mve_viwdupq_x_n_u8: {
17268 Intrinsic::ID Param0;
17269 switch (BuiltinID) {
17270 case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u8:
17271 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vdwdup_predicated);
17272 break;
17273 case ARM::BI__builtin_arm_mve_viwdupq_x_n_u8:
17274 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_viwdup_predicated);
17275 break;
17276 }
17277 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17278 Value *Val1 = UndefValue::get(T: Val0);
17279 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17280 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17281 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 2));
17282 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 3));
17283 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
17284 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val6});
17285 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val1, Val2, Val3, Val4, Val7});
17286 return Builder.CreateExtractValue(Agg: Val8, Idxs: static_cast<unsigned>(0));
17287}
17288case ARM::BI__builtin_arm_mve_vrshlq_x_s8:
17289case ARM::BI__builtin_arm_mve_vrshlq_x_u8:
17290case ARM::BI__builtin_arm_mve_vshlq_x_s8:
17291case ARM::BI__builtin_arm_mve_vshlq_x_u8: {
17292 uint32_t Param0;
17293 uint32_t Param1;
17294 switch (BuiltinID) {
17295 case ARM::BI__builtin_arm_mve_vrshlq_x_s8:
17296 Param0 = static_cast<uint32_t>(1);
17297 Param1 = static_cast<uint32_t>(0);
17298 break;
17299 case ARM::BI__builtin_arm_mve_vrshlq_x_u8:
17300 Param0 = static_cast<uint32_t>(1);
17301 Param1 = static_cast<uint32_t>(1);
17302 break;
17303 case ARM::BI__builtin_arm_mve_vshlq_x_s8:
17304 Param0 = static_cast<uint32_t>(0);
17305 Param1 = static_cast<uint32_t>(0);
17306 break;
17307 case ARM::BI__builtin_arm_mve_vshlq_x_u8:
17308 Param0 = static_cast<uint32_t>(0);
17309 Param1 = static_cast<uint32_t>(1);
17310 break;
17311 }
17312 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17313 Value *Val1 = UndefValue::get(T: Val0);
17314 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17315 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17316 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: 0);
17317 Value *Val5 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
17318 Value *Val6 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
17319 Value *Val7 = EmitScalarExpr(E: E->getArg(Arg: 2));
17320 Value *Val8 = Builder.CreateIntCast(V: Val7, DestTy: Int32Ty, isSigned: false);
17321 Value *Val9 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val8});
17322 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vshl_vector_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
17323}
17324case ARM::BI__builtin_arm_mve_vabdq_x_s8:
17325case ARM::BI__builtin_arm_mve_vabdq_x_u8:
17326case ARM::BI__builtin_arm_mve_vhaddq_x_s8:
17327case ARM::BI__builtin_arm_mve_vhaddq_x_u8:
17328case ARM::BI__builtin_arm_mve_vhsubq_x_s8:
17329case ARM::BI__builtin_arm_mve_vhsubq_x_u8:
17330case ARM::BI__builtin_arm_mve_vmaxq_x_s8:
17331case ARM::BI__builtin_arm_mve_vmaxq_x_u8:
17332case ARM::BI__builtin_arm_mve_vminq_x_s8:
17333case ARM::BI__builtin_arm_mve_vminq_x_u8:
17334case ARM::BI__builtin_arm_mve_vmulhq_x_s8:
17335case ARM::BI__builtin_arm_mve_vmulhq_x_u8:
17336case ARM::BI__builtin_arm_mve_vrhaddq_x_s8:
17337case ARM::BI__builtin_arm_mve_vrhaddq_x_u8:
17338case ARM::BI__builtin_arm_mve_vrmulhq_x_s8:
17339case ARM::BI__builtin_arm_mve_vrmulhq_x_u8:
17340case ARM::BI__builtin_arm_mve_vrshrq_x_n_s8:
17341case ARM::BI__builtin_arm_mve_vrshrq_x_n_u8:
17342case ARM::BI__builtin_arm_mve_vshrq_x_n_s8:
17343case ARM::BI__builtin_arm_mve_vshrq_x_n_u8: {
17344 uint32_t Param0;
17345 Intrinsic::ID Param1;
17346 switch (BuiltinID) {
17347 case ARM::BI__builtin_arm_mve_vabdq_x_s8:
17348 Param0 = static_cast<uint32_t>(0);
17349 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
17350 break;
17351 case ARM::BI__builtin_arm_mve_vabdq_x_u8:
17352 Param0 = static_cast<uint32_t>(1);
17353 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_abd_predicated);
17354 break;
17355 case ARM::BI__builtin_arm_mve_vhaddq_x_s8:
17356 Param0 = static_cast<uint32_t>(0);
17357 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
17358 break;
17359 case ARM::BI__builtin_arm_mve_vhaddq_x_u8:
17360 Param0 = static_cast<uint32_t>(1);
17361 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hadd_predicated);
17362 break;
17363 case ARM::BI__builtin_arm_mve_vhsubq_x_s8:
17364 Param0 = static_cast<uint32_t>(0);
17365 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
17366 break;
17367 case ARM::BI__builtin_arm_mve_vhsubq_x_u8:
17368 Param0 = static_cast<uint32_t>(1);
17369 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_hsub_predicated);
17370 break;
17371 case ARM::BI__builtin_arm_mve_vmaxq_x_s8:
17372 Param0 = static_cast<uint32_t>(0);
17373 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
17374 break;
17375 case ARM::BI__builtin_arm_mve_vmaxq_x_u8:
17376 Param0 = static_cast<uint32_t>(1);
17377 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_max_predicated);
17378 break;
17379 case ARM::BI__builtin_arm_mve_vminq_x_s8:
17380 Param0 = static_cast<uint32_t>(0);
17381 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
17382 break;
17383 case ARM::BI__builtin_arm_mve_vminq_x_u8:
17384 Param0 = static_cast<uint32_t>(1);
17385 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_min_predicated);
17386 break;
17387 case ARM::BI__builtin_arm_mve_vmulhq_x_s8:
17388 Param0 = static_cast<uint32_t>(0);
17389 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
17390 break;
17391 case ARM::BI__builtin_arm_mve_vmulhq_x_u8:
17392 Param0 = static_cast<uint32_t>(1);
17393 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_mulh_predicated);
17394 break;
17395 case ARM::BI__builtin_arm_mve_vrhaddq_x_s8:
17396 Param0 = static_cast<uint32_t>(0);
17397 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
17398 break;
17399 case ARM::BI__builtin_arm_mve_vrhaddq_x_u8:
17400 Param0 = static_cast<uint32_t>(1);
17401 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rhadd_predicated);
17402 break;
17403 case ARM::BI__builtin_arm_mve_vrmulhq_x_s8:
17404 Param0 = static_cast<uint32_t>(0);
17405 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
17406 break;
17407 case ARM::BI__builtin_arm_mve_vrmulhq_x_u8:
17408 Param0 = static_cast<uint32_t>(1);
17409 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_rmulh_predicated);
17410 break;
17411 case ARM::BI__builtin_arm_mve_vrshrq_x_n_s8:
17412 Param0 = static_cast<uint32_t>(0);
17413 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
17414 break;
17415 case ARM::BI__builtin_arm_mve_vrshrq_x_n_u8:
17416 Param0 = static_cast<uint32_t>(1);
17417 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_vrshr_imm_predicated);
17418 break;
17419 case ARM::BI__builtin_arm_mve_vshrq_x_n_s8:
17420 Param0 = static_cast<uint32_t>(0);
17421 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
17422 break;
17423 case ARM::BI__builtin_arm_mve_vshrq_x_n_u8:
17424 Param0 = static_cast<uint32_t>(1);
17425 Param1 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_shr_imm_predicated);
17426 break;
17427 }
17428 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17429 Value *Val1 = UndefValue::get(T: Val0);
17430 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17431 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17432 Value *Val4 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
17433 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 2));
17434 Value *Val6 = Builder.CreateIntCast(V: Val5, DestTy: Int32Ty, isSigned: false);
17435 Value *Val7 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val6});
17436 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param1, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val3, Val4, Val7, Val1});
17437}
17438case ARM::BI__builtin_arm_mve_vrev16q_x_s8:
17439case ARM::BI__builtin_arm_mve_vrev16q_x_u8:
17440case ARM::BI__builtin_arm_mve_vrev32q_x_s8:
17441case ARM::BI__builtin_arm_mve_vrev32q_x_u8:
17442case ARM::BI__builtin_arm_mve_vrev64q_x_s8:
17443case ARM::BI__builtin_arm_mve_vrev64q_x_u8: {
17444 uint32_t Param0;
17445 switch (BuiltinID) {
17446 case ARM::BI__builtin_arm_mve_vrev16q_x_s8:
17447 Param0 = static_cast<uint32_t>(16);
17448 break;
17449 case ARM::BI__builtin_arm_mve_vrev16q_x_u8:
17450 Param0 = static_cast<uint32_t>(16);
17451 break;
17452 case ARM::BI__builtin_arm_mve_vrev32q_x_s8:
17453 Param0 = static_cast<uint32_t>(32);
17454 break;
17455 case ARM::BI__builtin_arm_mve_vrev32q_x_u8:
17456 Param0 = static_cast<uint32_t>(32);
17457 break;
17458 case ARM::BI__builtin_arm_mve_vrev64q_x_s8:
17459 Param0 = static_cast<uint32_t>(64);
17460 break;
17461 case ARM::BI__builtin_arm_mve_vrev64q_x_u8:
17462 Param0 = static_cast<uint32_t>(64);
17463 break;
17464 }
17465 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17466 Value *Val1 = UndefValue::get(T: Val0);
17467 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17468 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
17469 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 1));
17470 Value *Val5 = Builder.CreateIntCast(V: Val4, DestTy: Int32Ty, isSigned: false);
17471 Value *Val6 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val5});
17472 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vrev_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val3, Val6, Val1});
17473}
17474case ARM::BI__builtin_arm_mve_vandq_x_s8:
17475case ARM::BI__builtin_arm_mve_vandq_x_u8:
17476case ARM::BI__builtin_arm_mve_vbicq_x_s8:
17477case ARM::BI__builtin_arm_mve_vbicq_x_u8:
17478case ARM::BI__builtin_arm_mve_veorq_x_s8:
17479case ARM::BI__builtin_arm_mve_veorq_x_u8:
17480case ARM::BI__builtin_arm_mve_vornq_x_s8:
17481case ARM::BI__builtin_arm_mve_vornq_x_u8:
17482case ARM::BI__builtin_arm_mve_vorrq_x_s8:
17483case ARM::BI__builtin_arm_mve_vorrq_x_u8: {
17484 Intrinsic::ID Param0;
17485 switch (BuiltinID) {
17486 case ARM::BI__builtin_arm_mve_vandq_x_s8:
17487 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
17488 break;
17489 case ARM::BI__builtin_arm_mve_vandq_x_u8:
17490 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_and_predicated);
17491 break;
17492 case ARM::BI__builtin_arm_mve_vbicq_x_s8:
17493 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
17494 break;
17495 case ARM::BI__builtin_arm_mve_vbicq_x_u8:
17496 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_bic_predicated);
17497 break;
17498 case ARM::BI__builtin_arm_mve_veorq_x_s8:
17499 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
17500 break;
17501 case ARM::BI__builtin_arm_mve_veorq_x_u8:
17502 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_eor_predicated);
17503 break;
17504 case ARM::BI__builtin_arm_mve_vornq_x_s8:
17505 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
17506 break;
17507 case ARM::BI__builtin_arm_mve_vornq_x_u8:
17508 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orn_predicated);
17509 break;
17510 case ARM::BI__builtin_arm_mve_vorrq_x_s8:
17511 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
17512 break;
17513 case ARM::BI__builtin_arm_mve_vorrq_x_u8:
17514 Param0 = static_cast<Intrinsic::ID>(Intrinsic::arm_mve_orr_predicated);
17515 break;
17516 }
17517 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17518 Value *Val1 = UndefValue::get(T: Val0);
17519 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17520 llvm::Type *Val3 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17521 Value *Val4 = Builder.CreateBitCast(V: Val2, DestTy: Val3);
17522 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
17523 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17524 Value *Val7 = Builder.CreateBitCast(V: Val5, DestTy: Val6);
17525 Value *Val8 = EmitScalarExpr(E: E->getArg(Arg: 2));
17526 Value *Val9 = Builder.CreateIntCast(V: Val8, DestTy: Int32Ty, isSigned: false);
17527 Value *Val10 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val9});
17528 llvm::Type *Val11 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17529 Value *Val12 = Builder.CreateBitCast(V: Val1, DestTy: Val11);
17530 Value *Val13 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Param0, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val4, Val7, Val10, Val12});
17531 llvm::Type *Val14 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17532 return Builder.CreateBitCast(V: Val13, DestTy: Val14);
17533}
17534case ARM::BI__builtin_arm_mve_vdupq_x_n_s8:
17535case ARM::BI__builtin_arm_mve_vdupq_x_n_u8: {
17536 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17537 Value *Val1 = UndefValue::get(T: Val0);
17538 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 1));
17539 Value *Val3 = Builder.CreateIntCast(V: Val2, DestTy: Int32Ty, isSigned: false);
17540 Value *Val4 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val3});
17541 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 0));
17542 Value *Val6 = ARMMVEVectorSplat(Builder, V: Val5);
17543 return Builder.CreateSelect(C: Val4, True: Val6, False: Val1);
17544}
17545case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s8:
17546case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u8:
17547case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s8:
17548case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u8:
17549case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s8:
17550case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s8: {
17551 uint32_t Param0;
17552 uint32_t Param1;
17553 switch (BuiltinID) {
17554 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s8:
17555 Param0 = static_cast<uint32_t>(1);
17556 Param1 = static_cast<uint32_t>(1);
17557 break;
17558 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u8:
17559 Param0 = static_cast<uint32_t>(1);
17560 Param1 = static_cast<uint32_t>(1);
17561 break;
17562 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s8:
17563 Param0 = static_cast<uint32_t>(1);
17564 Param1 = static_cast<uint32_t>(0);
17565 break;
17566 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u8:
17567 Param0 = static_cast<uint32_t>(1);
17568 Param1 = static_cast<uint32_t>(0);
17569 break;
17570 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s8:
17571 Param0 = static_cast<uint32_t>(0);
17572 Param1 = static_cast<uint32_t>(1);
17573 break;
17574 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s8:
17575 Param0 = static_cast<uint32_t>(0);
17576 Param1 = static_cast<uint32_t>(0);
17577 break;
17578 }
17579 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17580 Value *Val1 = UndefValue::get(T: Val0);
17581 Value *Val2 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param0);
17582 Value *Val3 = llvm::ConstantInt::get(Ty: Int32Ty, V: Param1);
17583 Value *Val4 = EmitScalarExpr(E: E->getArg(Arg: 0));
17584 Value *Val5 = EmitScalarExpr(E: E->getArg(Arg: 1));
17585 Value *Val6 = EmitScalarExpr(E: E->getArg(Arg: 2));
17586 Value *Val7 = Builder.CreateIntCast(V: Val6, DestTy: Int32Ty, isSigned: false);
17587 Value *Val8 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val7});
17588 return Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_vcaddq_predicated, Tys: {llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16), llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 16)}), Args: {Val2, Val3, Val1, Val4, Val5, Val8});
17589}
17590case ARM::BI__builtin_arm_mve_vnegq_s8: {
17591 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17592 Value *Val1 = llvm::Constant::getNullValue(Ty: Val0);
17593 Value *Val2 = EmitScalarExpr(E: E->getArg(Arg: 0));
17594 return Builder.CreateSub(LHS: Val1, RHS: Val2);
17595}
17596case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s8:
17597case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u8:
17598case ARM::BI__builtin_arm_mve_vuninitializedq_s8:
17599case ARM::BI__builtin_arm_mve_vuninitializedq_u8: {
17600 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 16);
17601 return UndefValue::get(T: Val0);
17602}
17603case ARM::BI__builtin_arm_mve_vldrbq_z_s32:
17604case ARM::BI__builtin_arm_mve_vldrbq_z_u32: {
17605 bool Param0;
17606 switch (BuiltinID) {
17607 case ARM::BI__builtin_arm_mve_vldrbq_z_s32:
17608 Param0 = static_cast<bool>(0);
17609 break;
17610 case ARM::BI__builtin_arm_mve_vldrbq_z_u32:
17611 Param0 = static_cast<bool>(1);
17612 break;
17613 }
17614 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 4);
17615 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
17616 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
17617 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17618 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
17619 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 4)}), Args: {Val4});
17620 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 4);
17621 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
17622 Value *Val8 = Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(1), Mask: Val5, PassThru: Val7);
17623 llvm::Type *Val9 = llvm::FixedVectorType::get(ElementType: Int32Ty, NumElts: 4);
17624 return SignOrZeroExtend(Builder, V: Val8, T: Val9, Unsigned: static_cast<bool>(Param0));
17625}
17626case ARM::BI__builtin_arm_mve_vldrbq_z_s16:
17627case ARM::BI__builtin_arm_mve_vldrbq_z_u16: {
17628 bool Param0;
17629 switch (BuiltinID) {
17630 case ARM::BI__builtin_arm_mve_vldrbq_z_s16:
17631 Param0 = static_cast<bool>(0);
17632 break;
17633 case ARM::BI__builtin_arm_mve_vldrbq_z_u16:
17634 Param0 = static_cast<bool>(1);
17635 break;
17636 }
17637 llvm::Type *Val0 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 8);
17638 Address Val1 = EmitPointerWithAlignment(Addr: E->getArg(Arg: 0));
17639 Value *Val2 = Builder.CreatePointerCast(V: (Val1.emitRawPointer(CGF&: *this)), DestTy: Builder.getPtrTy());
17640 Value *Val3 = EmitScalarExpr(E: E->getArg(Arg: 1));
17641 Value *Val4 = Builder.CreateIntCast(V: Val3, DestTy: Int32Ty, isSigned: false);
17642 Value *Val5 = Builder.CreateCall(Callee: CGM.getIntrinsic(IID: Intrinsic::arm_mve_pred_i2v, Tys: {llvm::FixedVectorType::get(ElementType: Builder.getInt1Ty(), NumElts: 8)}), Args: {Val4});
17643 llvm::Type *Val6 = llvm::FixedVectorType::get(ElementType: Int8Ty, NumElts: 8);
17644 Value *Val7 = llvm::Constant::getNullValue(Ty: Val6);
17645 Value *Val8 = Builder.CreateMaskedLoad(Ty: Val0, Ptr: Val2, Alignment: static_cast<Align>(1), Mask: Val5, PassThru: Val7);
17646 llvm::Type *Val9 = llvm::FixedVectorType::get(ElementType: Int16Ty, NumElts: 8);
17647 return SignOrZeroExtend(Builder, V: Val8, T: Val9, Unsigned: static_cast<bool>(Param0));
17648}
17649