Lines Matching refs:Name

119 static bool shouldUpgradeX86Intrinsic(Function *F, StringRef Name) {
125 if (Name.consume_front("avx."))
126 return (Name.starts_with("blend.p") || // Added in 3.7
127 Name == "cvt.ps2.pd.256" || // Added in 3.9
128 Name == "cvtdq2.pd.256" || // Added in 3.9
129 Name == "cvtdq2.ps.256" || // Added in 7.0
130 Name.starts_with("movnt.") || // Added in 3.2
131 Name.starts_with("sqrt.p") || // Added in 7.0
132 Name.starts_with("storeu.") || // Added in 3.9
133 Name.starts_with("vbroadcast.s") || // Added in 3.5
134 Name.starts_with("vbroadcastf128") || // Added in 4.0
135 Name.starts_with("vextractf128.") || // Added in 3.7
136 Name.starts_with("vinsertf128.") || // Added in 3.7
137 Name.starts_with("vperm2f128.") || // Added in 6.0
138 Name.starts_with("vpermil.")); // Added in 3.1
140 if (Name.consume_front("avx2."))
141 return (Name == "movntdqa" || // Added in 5.0
142 Name.starts_with("pabs.") || // Added in 6.0
143 Name.starts_with("padds.") || // Added in 8.0
144 Name.starts_with("paddus.") || // Added in 8.0
145 Name.starts_with("pblendd.") || // Added in 3.7
146 Name == "pblendw" || // Added in 3.7
147 Name.starts_with("pbroadcast") || // Added in 3.8
148 Name.starts_with("pcmpeq.") || // Added in 3.1
149 Name.starts_with("pcmpgt.") || // Added in 3.1
150 Name.starts_with("pmax") || // Added in 3.9
151 Name.starts_with("pmin") || // Added in 3.9
152 Name.starts_with("pmovsx") || // Added in 3.9
153 Name.starts_with("pmovzx") || // Added in 3.9
154 Name == "pmul.dq" || // Added in 7.0
155 Name == "pmulu.dq" || // Added in 7.0
156 Name.starts_with("psll.dq") || // Added in 3.7
157 Name.starts_with("psrl.dq") || // Added in 3.7
158 Name.starts_with("psubs.") || // Added in 8.0
159 Name.starts_with("psubus.") || // Added in 8.0
160 Name.starts_with("vbroadcast") || // Added in 3.8
161 Name == "vbroadcasti128" || // Added in 3.7
162 Name == "vextracti128" || // Added in 3.7
163 Name == "vinserti128" || // Added in 3.7
164 Name == "vperm2i128"); // Added in 6.0
166 if (Name.consume_front("avx512.")) {
167 if (Name.consume_front("mask."))
169 return (Name.starts_with("add.p") || // Added in 7.0. 128/256 in 4.0
170 Name.starts_with("and.") || // Added in 3.9
171 Name.starts_with("andn.") || // Added in 3.9
172 Name.starts_with("broadcast.s") || // Added in 3.9
173 Name.starts_with("broadcastf32x4.") || // Added in 6.0
174 Name.starts_with("broadcastf32x8.") || // Added in 6.0
175 Name.starts_with("broadcastf64x2.") || // Added in 6.0
176 Name.starts_with("broadcastf64x4.") || // Added in 6.0
177 Name.starts_with("broadcasti32x4.") || // Added in 6.0
178 Name.starts_with("broadcasti32x8.") || // Added in 6.0
179 Name.starts_with("broadcasti64x2.") || // Added in 6.0
180 Name.starts_with("broadcasti64x4.") || // Added in 6.0
181 Name.starts_with("cmp.b") || // Added in 5.0
182 Name.starts_with("cmp.d") || // Added in 5.0
183 Name.starts_with("cmp.q") || // Added in 5.0
184 Name.starts_with("cmp.w") || // Added in 5.0
185 Name.starts_with("compress.b") || // Added in 9.0
186 Name.starts_with("compress.d") || // Added in 9.0
187 Name.starts_with("compress.p") || // Added in 9.0
188 Name.starts_with("compress.q") || // Added in 9.0
189 Name.starts_with("compress.store.") || // Added in 7.0
190 Name.starts_with("compress.w") || // Added in 9.0
191 Name.starts_with("conflict.") || // Added in 9.0
192 Name.starts_with("cvtdq2pd.") || // Added in 4.0
193 Name.starts_with("cvtdq2ps.") || // Added in 7.0 updated 9.0
194 Name == "cvtpd2dq.256" || // Added in 7.0
195 Name == "cvtpd2ps.256" || // Added in 7.0
196 Name == "cvtps2pd.128" || // Added in 7.0
197 Name == "cvtps2pd.256" || // Added in 7.0
198 Name.starts_with("cvtqq2pd.") || // Added in 7.0 updated 9.0
199 Name == "cvtqq2ps.256" || // Added in 9.0
200 Name == "cvtqq2ps.512" || // Added in 9.0
201 Name == "cvttpd2dq.256" || // Added in 7.0
202 Name == "cvttps2dq.128" || // Added in 7.0
203 Name == "cvttps2dq.256" || // Added in 7.0
204 Name.starts_with("cvtudq2pd.") || // Added in 4.0
205 Name.starts_with("cvtudq2ps.") || // Added in 7.0 updated 9.0
206 Name.starts_with("cvtuqq2pd.") || // Added in 7.0 updated 9.0
207 Name == "cvtuqq2ps.256" || // Added in 9.0
208 Name == "cvtuqq2ps.512" || // Added in 9.0
209 Name.starts_with("dbpsadbw.") || // Added in 7.0
210 Name.starts_with("div.p") || // Added in 7.0. 128/256 in 4.0
211 Name.starts_with("expand.b") || // Added in 9.0
212 Name.starts_with("expand.d") || // Added in 9.0
213 Name.starts_with("expand.load.") || // Added in 7.0
214 Name.starts_with("expand.p") || // Added in 9.0
215 Name.starts_with("expand.q") || // Added in 9.0
216 Name.starts_with("expand.w") || // Added in 9.0
217 Name.starts_with("fpclass.p") || // Added in 7.0
218 Name.starts_with("insert") || // Added in 4.0
219 Name.starts_with("load.") || // Added in 3.9
220 Name.starts_with("loadu.") || // Added in 3.9
221 Name.starts_with("lzcnt.") || // Added in 5.0
222 Name.starts_with("max.p") || // Added in 7.0. 128/256 in 5.0
223 Name.starts_with("min.p") || // Added in 7.0. 128/256 in 5.0
224 Name.starts_with("movddup") || // Added in 3.9
225 Name.starts_with("move.s") || // Added in 4.0
226 Name.starts_with("movshdup") || // Added in 3.9
227 Name.starts_with("movsldup") || // Added in 3.9
228 Name.starts_with("mul.p") || // Added in 7.0. 128/256 in 4.0
229 Name.starts_with("or.") || // Added in 3.9
230 Name.starts_with("pabs.") || // Added in 6.0
231 Name.starts_with("packssdw.") || // Added in 5.0
232 Name.starts_with("packsswb.") || // Added in 5.0
233 Name.starts_with("packusdw.") || // Added in 5.0
234 Name.starts_with("packuswb.") || // Added in 5.0
235 Name.starts_with("padd.") || // Added in 4.0
236 Name.starts_with("padds.") || // Added in 8.0
237 Name.starts_with("paddus.") || // Added in 8.0
238 Name.starts_with("palignr.") || // Added in 3.9
239 Name.starts_with("pand.") || // Added in 3.9
240 Name.starts_with("pandn.") || // Added in 3.9
241 Name.starts_with("pavg") || // Added in 6.0
242 Name.starts_with("pbroadcast") || // Added in 6.0
243 Name.starts_with("pcmpeq.") || // Added in 3.9
244 Name.starts_with("pcmpgt.") || // Added in 3.9
245 Name.starts_with("perm.df.") || // Added in 3.9
246 Name.starts_with("perm.di.") || // Added in 3.9
247 Name.starts_with("permvar.") || // Added in 7.0
248 Name.starts_with("pmaddubs.w.") || // Added in 7.0
249 Name.starts_with("pmaddw.d.") || // Added in 7.0
250 Name.starts_with("pmax") || // Added in 4.0
251 Name.starts_with("pmin") || // Added in 4.0
252 Name == "pmov.qd.256" || // Added in 9.0
253 Name == "pmov.qd.512" || // Added in 9.0
254 Name == "pmov.wb.256" || // Added in 9.0
255 Name == "pmov.wb.512" || // Added in 9.0
256 Name.starts_with("pmovsx") || // Added in 4.0
257 Name.starts_with("pmovzx") || // Added in 4.0
258 Name.starts_with("pmul.dq.") || // Added in 4.0
259 Name.starts_with("pmul.hr.sw.") || // Added in 7.0
260 Name.starts_with("pmulh.w.") || // Added in 7.0
261 Name.starts_with("pmulhu.w.") || // Added in 7.0
262 Name.starts_with("pmull.") || // Added in 4.0
263 Name.starts_with("pmultishift.qb.") || // Added in 8.0
264 Name.starts_with("pmulu.dq.") || // Added in 4.0
265 Name.starts_with("por.") || // Added in 3.9
266 Name.starts_with("prol.") || // Added in 8.0
267 Name.starts_with("prolv.") || // Added in 8.0
268 Name.starts_with("pror.") || // Added in 8.0
269 Name.starts_with("prorv.") || // Added in 8.0
270 Name.starts_with("pshuf.b.") || // Added in 4.0
271 Name.starts_with("pshuf.d.") || // Added in 3.9
272 Name.starts_with("pshufh.w.") || // Added in 3.9
273 Name.starts_with("pshufl.w.") || // Added in 3.9
274 Name.starts_with("psll.d") || // Added in 4.0
275 Name.starts_with("psll.q") || // Added in 4.0
276 Name.starts_with("psll.w") || // Added in 4.0
277 Name.starts_with("pslli") || // Added in 4.0
278 Name.starts_with("psllv") || // Added in 4.0
279 Name.starts_with("psra.d") || // Added in 4.0
280 Name.starts_with("psra.q") || // Added in 4.0
281 Name.starts_with("psra.w") || // Added in 4.0
282 Name.starts_with("psrai") || // Added in 4.0
283 Name.starts_with("psrav") || // Added in 4.0
284 Name.starts_with("psrl.d") || // Added in 4.0
285 Name.starts_with("psrl.q") || // Added in 4.0
286 Name.starts_with("psrl.w") || // Added in 4.0
287 Name.starts_with("psrli") || // Added in 4.0
288 Name.starts_with("psrlv") || // Added in 4.0
289 Name.starts_with("psub.") || // Added in 4.0
290 Name.starts_with("psubs.") || // Added in 8.0
291 Name.starts_with("psubus.") || // Added in 8.0
292 Name.starts_with("pternlog.") || // Added in 7.0
293 Name.starts_with("punpckh") || // Added in 3.9
294 Name.starts_with("punpckl") || // Added in 3.9
295 Name.starts_with("pxor.") || // Added in 3.9
296 Name.starts_with("shuf.f") || // Added in 6.0
297 Name.starts_with("shuf.i") || // Added in 6.0
298 Name.starts_with("shuf.p") || // Added in 4.0
299 Name.starts_with("sqrt.p") || // Added in 7.0
300 Name.starts_with("store.b.") || // Added in 3.9
301 Name.starts_with("store.d.") || // Added in 3.9
302 Name.starts_with("store.p") || // Added in 3.9
303 Name.starts_with("store.q.") || // Added in 3.9
304 Name.starts_with("store.w.") || // Added in 3.9
305 Name == "store.ss" || // Added in 7.0
306 Name.starts_with("storeu.") || // Added in 3.9
307 Name.starts_with("sub.p") || // Added in 7.0. 128/256 in 4.0
308 Name.starts_with("ucmp.") || // Added in 5.0
309 Name.starts_with("unpckh.") || // Added in 3.9
310 Name.starts_with("unpckl.") || // Added in 3.9
311 Name.starts_with("valign.") || // Added in 4.0
312 Name == "vcvtph2ps.128" || // Added in 11.0
313 Name == "vcvtph2ps.256" || // Added in 11.0
314 Name.starts_with("vextract") || // Added in 4.0
315 Name.starts_with("vfmadd.") || // Added in 7.0
316 Name.starts_with("vfmaddsub.") || // Added in 7.0
317 Name.starts_with("vfnmadd.") || // Added in 7.0
318 Name.starts_with("vfnmsub.") || // Added in 7.0
319 Name.starts_with("vpdpbusd.") || // Added in 7.0
320 Name.starts_with("vpdpbusds.") || // Added in 7.0
321 Name.starts_with("vpdpwssd.") || // Added in 7.0
322 Name.starts_with("vpdpwssds.") || // Added in 7.0
323 Name.starts_with("vpermi2var.") || // Added in 7.0
324 Name.starts_with("vpermil.p") || // Added in 3.9
325 Name.starts_with("vpermilvar.") || // Added in 4.0
326 Name.starts_with("vpermt2var.") || // Added in 7.0
327 Name.starts_with("vpmadd52") || // Added in 7.0
328 Name.starts_with("vpshld.") || // Added in 7.0
329 Name.starts_with("vpshldv.") || // Added in 8.0
330 Name.starts_with("vpshrd.") || // Added in 7.0
331 Name.starts_with("vpshrdv.") || // Added in 8.0
332 Name.starts_with("vpshufbitqmb.") || // Added in 8.0
333 Name.starts_with("xor.")); // Added in 3.9
335 if (Name.consume_front("mask3."))
337 return (Name.starts_with("vfmadd.") || // Added in 7.0
338 Name.starts_with("vfmaddsub.") || // Added in 7.0
339 Name.starts_with("vfmsub.") || // Added in 7.0
340 Name.starts_with("vfmsubadd.") || // Added in 7.0
341 Name.starts_with("vfnmsub.")); // Added in 7.0
343 if (Name.consume_front("maskz."))
345 return (Name.starts_with("pternlog.") || // Added in 7.0
346 Name.starts_with("vfmadd.") || // Added in 7.0
347 Name.starts_with("vfmaddsub.") || // Added in 7.0
348 Name.starts_with("vpdpbusd.") || // Added in 7.0
349 Name.starts_with("vpdpbusds.") || // Added in 7.0
350 Name.starts_with("vpdpwssd.") || // Added in 7.0
351 Name.starts_with("vpdpwssds.") || // Added in 7.0
352 Name.starts_with("vpermt2var.") || // Added in 7.0
353 Name.starts_with("vpmadd52") || // Added in 7.0
354 Name.starts_with("vpshldv.") || // Added in 8.0
355 Name.starts_with("vpshrdv.")); // Added in 8.0
358 return (Name == "movntdqa" || // Added in 5.0
359 Name == "pmul.dq.512" || // Added in 7.0
360 Name == "pmulu.dq.512" || // Added in 7.0
361 Name.starts_with("broadcastm") || // Added in 6.0
362 Name.starts_with("cmp.p") || // Added in 12.0
363 Name.starts_with("cvtb2mask.") || // Added in 7.0
364 Name.starts_with("cvtd2mask.") || // Added in 7.0
365 Name.starts_with("cvtmask2") || // Added in 5.0
366 Name.starts_with("cvtq2mask.") || // Added in 7.0
367 Name == "cvtusi2sd" || // Added in 7.0
368 Name.starts_with("cvtw2mask.") || // Added in 7.0
369 Name == "kand.w" || // Added in 7.0
370 Name == "kandn.w" || // Added in 7.0
371 Name == "knot.w" || // Added in 7.0
372 Name == "kor.w" || // Added in 7.0
373 Name == "kortestc.w" || // Added in 7.0
374 Name == "kortestz.w" || // Added in 7.0
375 Name.starts_with("kunpck") || // added in 6.0
376 Name == "kxnor.w" || // Added in 7.0
377 Name == "kxor.w" || // Added in 7.0
378 Name.starts_with("padds.") || // Added in 8.0
379 Name.starts_with("pbroadcast") || // Added in 3.9
380 Name.starts_with("prol") || // Added in 8.0
381 Name.starts_with("pror") || // Added in 8.0
382 Name.starts_with("psll.dq") || // Added in 3.9
383 Name.starts_with("psrl.dq") || // Added in 3.9
384 Name.starts_with("psubs.") || // Added in 8.0
385 Name.starts_with("ptestm") || // Added in 6.0
386 Name.starts_with("ptestnm") || // Added in 6.0
387 Name.starts_with("storent.") || // Added in 3.9
388 Name.starts_with("vbroadcast.s") || // Added in 7.0
389 Name.starts_with("vpshld.") || // Added in 8.0
390 Name.starts_with("vpshrd.")); // Added in 8.0
393 if (Name.consume_front("fma."))
394 return (Name.starts_with("vfmadd.") || // Added in 7.0
395 Name.starts_with("vfmsub.") || // Added in 7.0
396 Name.starts_with("vfmsubadd.") || // Added in 7.0
397 Name.starts_with("vfnmadd.") || // Added in 7.0
398 Name.starts_with("vfnmsub.")); // Added in 7.0
400 if (Name.consume_front("fma4."))
401 return Name.starts_with("vfmadd.s"); // Added in 7.0
403 if (Name.consume_front("sse."))
404 return (Name == "add.ss" || // Added in 4.0
405 Name == "cvtsi2ss" || // Added in 7.0
406 Name == "cvtsi642ss" || // Added in 7.0
407 Name == "div.ss" || // Added in 4.0
408 Name == "mul.ss" || // Added in 4.0
409 Name.starts_with("sqrt.p") || // Added in 7.0
410 Name == "sqrt.ss" || // Added in 7.0
411 Name.starts_with("storeu.") || // Added in 3.9
412 Name == "sub.ss"); // Added in 4.0
414 if (Name.consume_front("sse2."))
415 return (Name == "add.sd" || // Added in 4.0
416 Name == "cvtdq2pd" || // Added in 3.9
417 Name == "cvtdq2ps" || // Added in 7.0
418 Name == "cvtps2pd" || // Added in 3.9
419 Name == "cvtsi2sd" || // Added in 7.0
420 Name == "cvtsi642sd" || // Added in 7.0
421 Name == "cvtss2sd" || // Added in 7.0
422 Name == "div.sd" || // Added in 4.0
423 Name == "mul.sd" || // Added in 4.0
424 Name.starts_with("padds.") || // Added in 8.0
425 Name.starts_with("paddus.") || // Added in 8.0
426 Name.starts_with("pcmpeq.") || // Added in 3.1
427 Name.starts_with("pcmpgt.") || // Added in 3.1
428 Name == "pmaxs.w" || // Added in 3.9
429 Name == "pmaxu.b" || // Added in 3.9
430 Name == "pmins.w" || // Added in 3.9
431 Name == "pminu.b" || // Added in 3.9
432 Name == "pmulu.dq" || // Added in 7.0
433 Name.starts_with("pshuf") || // Added in 3.9
434 Name.starts_with("psll.dq") || // Added in 3.7
435 Name.starts_with("psrl.dq") || // Added in 3.7
436 Name.starts_with("psubs.") || // Added in 8.0
437 Name.starts_with("psubus.") || // Added in 8.0
438 Name.starts_with("sqrt.p") || // Added in 7.0
439 Name == "sqrt.sd" || // Added in 7.0
440 Name == "storel.dq" || // Added in 3.9
441 Name.starts_with("storeu.") || // Added in 3.9
442 Name == "sub.sd"); // Added in 4.0
444 if (Name.consume_front("sse41."))
445 return (Name.starts_with("blendp") || // Added in 3.7
446 Name == "movntdqa" || // Added in 5.0
447 Name == "pblendw" || // Added in 3.7
448 Name == "pmaxsb" || // Added in 3.9
449 Name == "pmaxsd" || // Added in 3.9
450 Name == "pmaxud" || // Added in 3.9
451 Name == "pmaxuw" || // Added in 3.9
452 Name == "pminsb" || // Added in 3.9
453 Name == "pminsd" || // Added in 3.9
454 Name == "pminud" || // Added in 3.9
455 Name == "pminuw" || // Added in 3.9
456 Name.starts_with("pmovsx") || // Added in 3.8
457 Name.starts_with("pmovzx") || // Added in 3.9
458 Name == "pmuldq"); // Added in 7.0
460 if (Name.consume_front("sse42."))
461 return Name == "crc32.64.8"; // Added in 3.4
463 if (Name.consume_front("sse4a."))
464 return Name.starts_with("movnt."); // Added in 3.9
466 if (Name.consume_front("ssse3."))
467 return (Name == "pabs.b.128" || // Added in 6.0
468 Name == "pabs.d.128" || // Added in 6.0
469 Name == "pabs.w.128"); // Added in 6.0
471 if (Name.consume_front("xop."))
472 return (Name == "vpcmov" || // Added in 3.8
473 Name == "vpcmov.256" || // Added in 5.0
474 Name.starts_with("vpcom") || // Added in 3.2, Updated in 9.0
475 Name.starts_with("vprot")); // Added in 8.0
477 return (Name == "addcarry.u32" || // Added in 8.0
478 Name == "addcarry.u64" || // Added in 8.0
479 Name == "addcarryx.u32" || // Added in 8.0
480 Name == "addcarryx.u64" || // Added in 8.0
481 Name == "subborrow.u32" || // Added in 8.0
482 Name == "subborrow.u64" || // Added in 8.0
483 Name.starts_with("vcvtph2ps.")); // Added in 11.0
486 static bool upgradeX86IntrinsicFunction(Function *F, StringRef Name,
489 if (!Name.consume_front("x86."))
492 if (shouldUpgradeX86Intrinsic(F, Name)) {
497 if (Name == "rdtscp") { // Added in 8.0
511 if (Name.consume_front("sse41.ptest")) { // Added in 3.2
512 ID = StringSwitch<Intrinsic::ID>(Name)
527 ID = StringSwitch<Intrinsic::ID>(Name)
538 if (Name.consume_front("avx512.mask.cmp.")) {
540 ID = StringSwitch<Intrinsic::ID>(Name)
553 if (Name.consume_front("avx512bf16.")) {
555 ID = StringSwitch<Intrinsic::ID>(Name)
573 ID = StringSwitch<Intrinsic::ID>(Name)
583 if (Name.consume_front("xop.")) {
585 if (Name.starts_with("vpermil2")) { // Added in 3.9
603 ID = StringSwitch<Intrinsic::ID>(Name)
616 if (Name == "seh.recoverfp") {
627 StringRef Name,
629 if (Name.starts_with("rbit")) {
636 if (Name == "thread.pointer") {
643 bool Neon = Name.consume_front("neon.");
648 if (Name.consume_front("bfdot.")) {
651 StringSwitch<Intrinsic::ID>(Name)
672 if (Name.consume_front("bfm")) {
674 if (Name.consume_back(".v4f32.v16i8")) {
677 StringSwitch<Intrinsic::ID>(Name)
704 Intrinsic::ID ID = StringSwitch<Intrinsic::ID>(Name)
718 if (Name.consume_front("vst")) {
722 if (vstRegex.match(Name, &Groups)) {
747 if (Name.consume_front("mve.")) {
749 if (Name == "vctp64") {
760 if (Name.consume_back(".v4i1")) {
762 if (Name.consume_back(".predicated.v2i64.v4i32"))
764 return Name == "mull.int" || Name == "vqdmull";
766 if (Name.consume_back(".v2i64")) {
768 bool IsGather = Name.consume_front("vldr.gather.");
769 if (IsGather || Name.consume_front("vstr.scatter.")) {
770 if (Name.consume_front("base.")) {
772 Name.consume_front("wb.");
775 return Name == "predicated.v2i64";
778 if (Name.consume_front("offset.predicated."))
779 return Name == (IsGather ? "v2i64.p0i64" : "p0i64.v2i64") ||
780 Name == (IsGather ? "v2i64.p0" : "p0.v2i64");
793 if (Name.consume_front("cde.vcx")) {
795 if (Name.consume_back(".predicated.v2i64.v4i1"))
797 return Name == "1q" || Name == "1qa" || Name == "2q" || Name == "2qa" ||
798 Name == "3q" || Name == "3qa";
806 Intrinsic::ID ID = StringSwitch<Intrinsic::ID>(Name)
816 if (Name.starts_with("addp")) {
829 if (Name.consume_front("sve.")) {
831 if (Name.consume_front("bf")) {
832 if (Name.consume_back(".lane")) {
835 StringSwitch<Intrinsic::ID>(Name)
849 if (Name.consume_front("addqv")) {
861 if (Name.consume_front("ld")) {
864 if (LdRegex.match(Name)) {
876 LoadIDs[Name[0] - '2'], Ty);
882 if (Name.consume_front("tuple.")) {
884 if (Name.starts_with("get")) {
892 if (Name.starts_with("set")) {
902 if (CreateTupleRegex.match(Name)) {
918 static Intrinsic::ID shouldUpgradeNVPTXBF16Intrinsic(StringRef Name) {
919 if (Name.consume_front("abs."))
920 return StringSwitch<Intrinsic::ID>(Name)
925 if (Name.consume_front("fma.rn."))
926 return StringSwitch<Intrinsic::ID>(Name)
941 if (Name.consume_front("fmax."))
942 return StringSwitch<Intrinsic::ID>(Name)
965 if (Name.consume_front("fmin."))
966 return StringSwitch<Intrinsic::ID>(Name)
989 if (Name.consume_front("neg."))
990 return StringSwitch<Intrinsic::ID>(Name)
1002 StringRef Name = F->getName();
1005 if (!Name.consume_front("llvm.") || Name.empty())
1008 switch (Name[0]) {
1011 bool IsArm = Name.consume_front("arm.");
1012 if (IsArm || Name.consume_front("aarch64.")) {
1013 if (upgradeArmOrAarch64IntrinsicFunction(IsArm, F, Name, NewFn))
1018 if (Name.consume_front("amdgcn.")) {
1019 if (Name == "alignbit") {
1026 if (Name.consume_front("atomic.")) {
1027 if (Name.starts_with("inc") || Name.starts_with("dec")) {
1036 if (Name.starts_with("ds.fadd") || Name.starts_with("ds.fmin") ||
1037 Name.starts_with("ds.fmax")) {
1044 if (Name.starts_with("ldexp.")) {
1058 Intrinsic::ID ID = StringSwitch<Intrinsic::ID>(Name)
1070 if (F->arg_size() == 2 && Name == "coro.end") {
1079 if (Name.consume_front("dbg.")) {
1083 if (Name == "addr" || Name == "value" || Name == "assign" ||
1084 Name == "declare" || Name == "label") {
1093 if (Name == "addr" || (Name == "value" && F->arg_size() == 4)) {
1102 if (Name.consume_front("experimental.vector.")) {
1104 StringSwitch<Intrinsic::ID>(Name)
1129 if (Name.consume_front("reduce.")) {
1132 if (R.match(Name, &Groups))
1152 if (R2.match(Name, &Groups))
1171 if (Name.starts_with("flt.rounds")) {
1178 if (Name.starts_with("invariant.group.barrier")) {
1192 if (unsigned ID = StringSwitch<unsigned>(Name)
1205 if (Name.starts_with("memset.") && F->arg_size() == 5) {
1220 if (Name.consume_front("nvvm.")) {
1224 StringSwitch<Intrinsic::ID>(Name)
1238 Intrinsic::ID IID = shouldUpgradeNVPTXBF16Intrinsic(Name);
1250 if (Name.consume_front("abs."))
1252 Expand = Name == "i" || Name == "ll";
1253 else if (Name == "clz.ll" || Name == "popc.ll" || Name == "h2f")
1255 else if (Name.consume_front("max.") || Name.consume_front("min."))
1257 Expand = Name == "s" || Name == "i" || Name == "ll" || Name == "us" ||
1258 Name == "ui" || Name == "ull";
1259 else if (Name.consume_front("atomic.load.add."))
1261 Expand = Name.starts_with("f32.p") || Name.starts_with("f64.p");
1276 if (Name.starts_with("objectsize.")) {
1290 if (Name.starts_with("ptr.annotation.") && F->arg_size() == 4) {
1300 if (Name.consume_front("riscv.")) {
1302 ID = StringSwitch<Intrinsic::ID>(Name)
1317 ID = StringSwitch<Intrinsic::ID>(Name)
1331 ID = StringSwitch<Intrinsic::ID>(Name)
1352 if (Name == "stackprotectorcheck") {
1359 if (Name == "var.annotation" && F->arg_size() == 4) {
1370 if (Name.consume_front("wasm.")) {
1372 StringSwitch<Intrinsic::ID>(Name)
1384 if (Name.consume_front("dot.i8x16.i7x16.")) {
1385 ID = StringSwitch<Intrinsic::ID>(Name)
1402 if (upgradeX86IntrinsicFunction(F, Name, NewFn))
1419 std::string Name = F->getName().str();
1422 Name, F->getParent());
1999 static bool upgradeAVX512MaskToSelect(StringRef Name, IRBuilder<> &Builder,
2001 Name = Name.substr(12); // Remove avx512.mask.
2006 if (Name.starts_with("max.p")) {
2017 } else if (Name.starts_with("min.p")) {
2028 } else if (Name.starts_with("pshuf.b.")) {
2037 } else if (Name.starts_with("pmul.hr.sw.")) {
2046 } else if (Name.starts_with("pmulh.w.")) {
2055 } else if (Name.starts_with("pmulhu.w.")) {
2064 } else if (Name.starts_with("pmaddw.d.")) {
2073 } else if (Name.starts_with("pmaddubs.w.")) {
2082 } else if (Name.starts_with("packsswb.")) {
2091 } else if (Name.starts_with("packssdw.")) {
2100 } else if (Name.starts_with("packuswb.")) {
2109 } else if (Name.starts_with("packusdw.")) {
2118 } else if (Name.starts_with("vpermilvar.")) {
2133 } else if (Name == "cvtpd2dq.256") {
2135 } else if (Name == "cvtpd2ps.256") {
2137 } else if (Name == "cvttpd2dq.256") {
2139 } else if (Name == "cvttps2dq.128") {
2141 } else if (Name == "cvttps2dq.256") {
2143 } else if (Name.starts_with("permvar.")) {
2175 } else if (Name.starts_with("dbpsadbw.")) {
2184 } else if (Name.starts_with("pmultishift.qb.")) {
2193 } else if (Name.starts_with("conflict.")) {
2194 if (Name[9] == 'd' && VecWidth == 128)
2196 else if (Name[9] == 'd' && VecWidth == 256)
2198 else if (Name[9] == 'd' && VecWidth == 512)
2200 else if (Name[9] == 'q' && VecWidth == 128)
2202 else if (Name[9] == 'q' && VecWidth == 256)
2204 else if (Name[9] == 'q' && VecWidth == 512)
2208 } else if (Name.starts_with("pavg.")) {
2209 if (Name[5] == 'b' && VecWidth == 128)
2211 else if (Name[5] == 'b' && VecWidth == 256)
2213 else if (Name[5] == 'b' && VecWidth == 512)
2215 else if (Name[5] == 'w' && VecWidth == 128)
2217 else if (Name[5] == 'w' && VecWidth == 256)
2219 else if (Name[5] == 'w' && VecWidth == 512)
2248 static Value *upgradeX86IntrinsicCall(StringRef Name, CallBase *CI, Function *F,
2253 if (Name.starts_with("sse4a.movnt.")) {
2272 } else if (Name.starts_with("avx.movnt.") ||
2273 Name.starts_with("avx512.storent.")) {
2289 } else if (Name == "sse2.storel.dq") {
2299 } else if (Name.starts_with("sse.storeu.") ||
2300 Name.starts_with("sse2.storeu.") ||
2301 Name.starts_with("avx.storeu.")) {
2308 } else if (Name == "avx512.mask.store.ss") {
2312 } else if (Name.starts_with("avx512.mask.store")) {
2314 bool Aligned = Name[17] != 'u'; // "avx512.mask.storeu".
2317 } else if (Name.starts_with("sse2.pcmp") || Name.starts_with("avx2.pcmp")) {
2320 bool CmpEq = Name[9] == 'e';
2324 } else if (Name.starts_with("avx512.broadcastm")) {
2332 } else if (Name == "sse.sqrt.ss" || Name == "sse2.sqrt.sd") {
2339 } else if (Name.starts_with("avx.sqrt.p") ||
2340 Name.starts_with("sse2.sqrt.p") ||
2341 Name.starts_with("sse.sqrt.p")) {
2346 } else if (Name.starts_with("avx512.mask.sqrt.p")) {
2350 Intrinsic::ID IID = Name[18] == 's' ? Intrinsic::x86_avx512_sqrt_ps_512
2364 } else if (Name.starts_with("avx512.ptestm") ||
2365 Name.starts_with("avx512.ptestnm")) {
2372 ICmpInst::Predicate Pred = Name.starts_with("avx512.ptestm")
2377 } else if (Name.starts_with("avx512.mask.pbroadcast")) {
2383 } else if (Name.starts_with("avx512.kunpck")) {
2399 } else if (Name == "avx512.kand.w") {
2404 } else if (Name == "avx512.kandn.w") {
2410 } else if (Name == "avx512.kor.w") {
2415 } else if (Name == "avx512.kxor.w") {
2420 } else if (Name == "avx512.kxnor.w") {
2426 } else if (Name == "avx512.knot.w") {
2430 } else if (Name == "avx512.kortestz.w" || Name == "avx512.kortestc.w") {
2436 if (Name[14] == 'c')
2442 } else if (Name == "sse.add.ss" || Name == "sse2.add.sd" ||
2443 Name == "sse.sub.ss" || Name == "sse2.sub.sd" ||
2444 Name == "sse.mul.ss" || Name == "sse2.mul.sd" ||
2445 Name == "sse.div.ss" || Name == "sse2.div.sd") {
2452 if (Name.contains(".add."))
2454 else if (Name.contains(".sub."))
2456 else if (Name.contains(".mul."))
2462 } else if (Name.starts_with("avx512.mask.pcmp")) {
2464 bool CmpEq = Name[16] == 'e';
2466 } else if (Name.starts_with("avx512.mask.vpshufbitqmb.")) {
2487 } else if (Name.starts_with("avx512.mask.fpclass.p")) {
2510 } else if (Name.starts_with("avx512.cmp.p")) {
2538 } else if (Name.starts_with("avx512.mask.cmp.")) {
2542 } else if (Name.starts_with("avx512.mask.ucmp.")) {
2545 } else if (Name.starts_with("avx512.cvtb2mask.") ||
2546 Name.starts_with("avx512.cvtw2mask.") ||
2547 Name.starts_with("avx512.cvtd2mask.") ||
2548 Name.starts_with("avx512.cvtq2mask.")) {
2553 } else if (Name == "ssse3.pabs.b.128" || Name == "ssse3.pabs.w.128" ||
2554 Name == "ssse3.pabs.d.128" || Name.starts_with("avx2.pabs") ||
2555 Name.starts_with("avx512.mask.pabs")) {
2557 } else if (Name == "sse41.pmaxsb" || Name == "sse2.pmaxs.w" ||
2558 Name == "sse41.pmaxsd" || Name.starts_with("avx2.pmaxs") ||
2559 Name.starts_with("avx512.mask.pmaxs")) {
2561 } else if (Name == "sse2.pmaxu.b" || Name == "sse41.pmaxuw" ||
2562 Name == "sse41.pmaxud" || Name.starts_with("avx2.pmaxu") ||
2563 Name.starts_with("avx512.mask.pmaxu")) {
2565 } else if (Name == "sse41.pminsb" || Name == "sse2.pmins.w" ||
2566 Name == "sse41.pminsd" || Name.starts_with("avx2.pmins") ||
2567 Name.starts_with("avx512.mask.pmins")) {
2569 } else if (Name == "sse2.pminu.b" || Name == "sse41.pminuw" ||
2570 Name == "sse41.pminud" || Name.starts_with("avx2.pminu") ||
2571 Name.starts_with("avx512.mask.pminu")) {
2573 } else if (Name == "sse2.pmulu.dq" || Name == "avx2.pmulu.dq" ||
2574 Name == "avx512.pmulu.dq.512" ||
2575 Name.starts_with("avx512.mask.pmulu.dq.")) {
2577 } else if (Name == "sse41.pmuldq" || Name == "avx2.pmul.dq" ||
2578 Name == "avx512.pmul.dq.512" ||
2579 Name.starts_with("avx512.mask.pmul.dq.")) {
2581 } else if (Name == "sse.cvtsi2ss" || Name == "sse2.cvtsi2sd" ||
2582 Name == "sse.cvtsi642ss" || Name == "sse2.cvtsi642sd") {
2587 } else if (Name == "avx512.cvtusi2sd") {
2592 } else if (Name == "sse2.cvtss2sd") {
2597 } else if (Name == "sse2.cvtdq2pd" || Name == "sse2.cvtdq2ps" ||
2598 Name == "avx.cvtdq2.pd.256" || Name == "avx.cvtdq2.ps.256" ||
2599 Name.starts_with("avx512.mask.cvtdq2pd.") ||
2600 Name.starts_with("avx512.mask.cvtudq2pd.") ||
2601 Name.starts_with("avx512.mask.cvtdq2ps.") ||
2602 Name.starts_with("avx512.mask.cvtudq2ps.") ||
2603 Name.starts_with("avx512.mask.cvtqq2pd.") ||
2604 Name.starts_with("avx512.mask.cvtuqq2pd.") ||
2605 Name == "avx512.mask.cvtqq2ps.256" ||
2606 Name == "avx512.mask.cvtqq2ps.512" ||
2607 Name == "avx512.mask.cvtuqq2ps.256" ||
2608 Name == "avx512.mask.cvtuqq2ps.512" || Name == "sse2.cvtps2pd" ||
2609 Name == "avx.cvt.ps2.pd.256" ||
2610 Name == "avx512.mask.cvtps2pd.128" ||
2611 Name == "avx512.mask.cvtps2pd.256") {
2623 bool IsUnsigned = Name.contains("cvtu");
2642 } else if (Name.starts_with("avx512.mask.vcvtph2ps.") ||
2643 Name.starts_with("vcvtph2ps.")) {
2658 } else if (Name.starts_with("avx512.mask.load")) {
2660 bool Aligned = Name[16] != 'u'; // "avx512.mask.loadu".
2663 } else if (Name.starts_with("avx512.mask.expand.load.")) {
2677 } else if (Name.starts_with("avx512.mask.compress.store.")) {
2692 } else if (Name.starts_with("avx512.mask.compress.") ||
2693 Name.starts_with("avx512.mask.expand.")) {
2699 bool IsCompress = Name[12] == 'c';
2705 } else if (Name.starts_with("xop.vpcom")) {
2707 if (Name.ends_with("ub") || Name.ends_with("uw") || Name.ends_with("ud") ||
2708 Name.ends_with("uq"))
2710 else if (Name.ends_with("b") || Name.ends_with("w") ||
2711 Name.ends_with("d") || Name.ends_with("q"))
2720 Name = Name.substr(9); // strip off "xop.vpcom"
2721 if (Name.starts_with("lt"))
2723 else if (Name.starts_with("le"))
2725 else if (Name.starts_with("gt"))
2727 else if (Name.starts_with("ge"))
2729 else if (Name.starts_with("eq"))
2731 else if (Name.starts_with("ne"))
2733 else if (Name.starts_with("false"))
2735 else if (Name.starts_with("true"))
2742 } else if (Name.starts_with("xop.vpcmov")) {
2748 } else if (Name.starts_with("xop.vprot") || Name.starts_with("avx512.prol") ||
2749 Name.starts_with("avx512.mask.prol")) {
2751 } else if (Name.starts_with("avx512.pror") ||
2752 Name.starts_with("avx512.mask.pror")) {
2754 } else if (Name.starts_with("avx512.vpshld.") ||
2755 Name.starts_with("avx512.mask.vpshld") ||
2756 Name.starts_with("avx512.maskz.vpshld")) {
2757 bool ZeroMask = Name[11] == 'z';
2759 } else if (Name.starts_with("avx512.vpshrd.") ||
2760 Name.starts_with("avx512.mask.vpshrd") ||
2761 Name.starts_with("avx512.maskz.vpshrd")) {
2762 bool ZeroMask = Name[11] == 'z';
2764 } else if (Name == "sse42.crc32.64.8") {
2771 } else if (Name.starts_with("avx.vbroadcast.s") ||
2772 Name.starts_with("avx512.vbroadcast.s")) {
2782 } else if (Name.starts_with("sse41.pmovsx") ||
2783 Name.starts_with("sse41.pmovzx") ||
2784 Name.starts_with("avx2.pmovsx") ||
2785 Name.starts_with("avx2.pmovzx") ||
2786 Name.starts_with("avx512.mask.pmovsx") ||
2787 Name.starts_with("avx512.mask.pmovzx")) {
2798 bool DoSext = Name.contains("pmovsx");
2805 } else if (Name == "avx512.mask.pmov.qd.256" ||
2806 Name == "avx512.mask.pmov.qd.512" ||
2807 Name == "avx512.mask.pmov.wb.256" ||
2808 Name == "avx512.mask.pmov.wb.512") {
2813 } else if (Name.starts_with("avx.vbroadcastf128") ||
2814 Name == "avx2.vbroadcasti128") {
2827 } else if (Name.starts_with("avx512.mask.shuf.i") ||
2828 Name.starts_with("avx512.mask.shuf.f")) {
2849 } else if (Name.starts_with("avx512.mask.broadcastf") ||
2850 Name.starts_with("avx512.mask.broadcasti")) {
2864 } else if (Name.starts_with("avx2.pbroadcast") ||
2865 Name.starts_with("avx2.vbroadcast") ||
2866 Name.starts_with("avx512.pbroadcast") ||
2867 Name.starts_with("avx512.mask.broadcast.s")) {
2879 } else if (Name.starts_with("sse2.padds.") ||
2880 Name.starts_with("avx2.padds.") ||
2881 Name.starts_with("avx512.padds.") ||
2882 Name.starts_with("avx512.mask.padds.")) {
2884 } else if (Name.starts_with("sse2.psubs.") ||
2885 Name.starts_with("avx2.psubs.") ||
2886 Name.starts_with("avx512.psubs.") ||
2887 Name.starts_with("avx512.mask.psubs.")) {
2889 } else if (Name.starts_with("sse2.paddus.") ||
2890 Name.starts_with("avx2.paddus.") ||
2891 Name.starts_with("avx512.mask.paddus.")) {
2893 } else if (Name.starts_with("sse2.psubus.") ||
2894 Name.starts_with("avx2.psubus.") ||
2895 Name.starts_with("avx512.mask.psubus.")) {
2897 } else if (Name.starts_with("avx512.mask.palignr.")) {
2902 } else if (Name.starts_with("avx512.mask.valign.")) {
2906 } else if (Name == "sse2.psll.dq" || Name == "avx2.psll.dq") {
2911 } else if (Name == "sse2.psrl.dq" || Name == "avx2.psrl.dq") {
2916 } else if (Name == "sse2.psll.dq.bs" || Name == "avx2.psll.dq.bs" ||
2917 Name == "avx512.psll.dq.512") {
2921 } else if (Name == "sse2.psrl.dq.bs" || Name == "avx2.psrl.dq.bs" ||
2922 Name == "avx512.psrl.dq.512") {
2926 } else if (Name == "sse41.pblendw" || Name.starts_with("sse41.blendp") ||
2927 Name.starts_with("avx.blend.p") || Name == "avx2.pblendw" ||
2928 Name.starts_with("avx2.pblendd.")) {
2940 } else if (Name.starts_with("avx.vinsertf128.") ||
2941 Name == "avx2.vinserti128" ||
2942 Name.starts_with("avx512.mask.insert")) {
2986 } else if (Name.starts_with("avx.vextractf128.") ||
2987 Name == "avx2.vextracti128" ||
2988 Name.starts_with("avx512.mask.vextract")) {
3011 } else if (Name.starts_with("avx512.mask.perm.df.") ||
3012 Name.starts_with("avx512.mask.perm.di.")) {
3027 } else if (Name.starts_with("avx.vperm2f128.") || Name == "avx2.vperm2i128") {
3062 } else if (Name.starts_with("avx.vpermil.") || Name == "sse2.pshuf.d" ||
3063 Name.starts_with("avx512.mask.vpermil.p") ||
3064 Name.starts_with("avx512.mask.pshuf.d.")) {
3085 } else if (Name == "sse2.pshufl.w" ||
3086 Name.starts_with("avx512.mask.pshufl.w.")) {
3104 } else if (Name == "sse2.pshufh.w" ||
3105 Name.starts_with("avx512.mask.pshufh.w.")) {
3123 } else if (Name.starts_with("avx512.mask.shuf.p")) {
3148 } else if (Name.starts_with("avx512.mask.movddup") ||
3149 Name.starts_with("avx512.mask.movshdup") ||
3150 Name.starts_with("avx512.mask.movsldup")) {
3156 if (Name.starts_with("avx512.mask.movshdup."))
3170 } else if (Name.starts_with("avx512.mask.punpckl") ||
3171 Name.starts_with("avx512.mask.unpckl.")) {
3186 } else if (Name.starts_with("avx512.mask.punpckh") ||
3187 Name.starts_with("avx512.mask.unpckh.")) {
3202 } else if (Name.starts_with("avx512.mask.and.") ||
3203 Name.starts_with("avx512.mask.pand.")) {
3211 } else if (Name.starts_with("avx512.mask.andn.") ||
3212 Name.starts_with("avx512.mask.pandn.")) {
3221 } else if (Name.starts_with("avx512.mask.or.") ||
3222 Name.starts_with("avx512.mask.por.")) {
3230 } else if (Name.starts_with("avx512.mask.xor.") ||
3231 Name.starts_with("avx512.mask.pxor.")) {
3239 } else if (Name.starts_with("avx512.mask.padd.")) {
3243 } else if (Name.starts_with("avx512.mask.psub.")) {
3247 } else if (Name.starts_with("avx512.mask.pmull.")) {
3251 } else if (Name.starts_with("avx512.mask.add.p")) {
3252 if (Name.ends_with(".512")) {
3254 if (Name[17] == 's')
3267 } else if (Name.starts_with("avx512.mask.div.p")) {
3268 if (Name.ends_with(".512")) {
3270 if (Name[17] == 's')
3283 } else if (Name.starts_with("avx512.mask.mul.p")) {
3284 if (Name.ends_with(".512")) {
3286 if (Name[17] == 's')
3299 } else if (Name.starts_with("avx512.mask.sub.p")) {
3300 if (Name.ends_with(".512")) {
3302 if (Name[17] == 's')
3315 } else if ((Name.starts_with("avx512.mask.max.p") ||
3316 Name.starts_with("avx512.mask.min.p")) &&
3317 Name.drop_front(18) == ".512") {
3318 bool IsDouble = Name[17] == 'd';
3319 bool IsMin = Name[13] == 'i';
3330 } else if (Name.starts_with("avx512.mask.lzcnt.")) {
3337 } else if (Name.starts_with("avx512.mask.psll")) {
3338 bool IsImmediate = Name[16] == 'i' || (Name.size() > 18 && Name[18] == 'i');
3339 bool IsVariable = Name[16] == 'v';
3340 char Size = Name[16] == '.' ? Name[17]
3341 : Name[17] == '.' ? Name[18]
3342 : Name[18] == '.' ? Name[19]
3343 : Name[20];
3346 if (IsVariable && Name[17] != '.') {
3347 if (Size == 'd' && Name[17] == '2') // avx512.mask.psllv2.di
3349 else if (Size == 'd' && Name[17] == '4') // avx512.mask.psllv4.di
3351 else if (Size == 's' && Name[17] == '4') // avx512.mask.psllv4.si
3353 else if (Size == 's' && Name[17] == '8') // avx512.mask.psllv8.si
3355 else if (Size == 'h' && Name[17] == '8') // avx512.mask.psllv8.hi
3357 else if (Size == 'h' && Name[17] == '1') // avx512.mask.psllv16.hi
3359 else if (Name[17] == '3' && Name[18] == '2') // avx512.mask.psllv32hi
3363 } else if (Name.ends_with(".128")) {
3375 } else if (Name.ends_with(".256")) {
3404 } else if (Name.starts_with("avx512.mask.psrl")) {
3405 bool IsImmediate = Name[16] == 'i' || (Name.size() > 18 && Name[18] == 'i');
3406 bool IsVariable = Name[16] == 'v';
3407 char Size = Name[16] == '.' ? Name[17]
3408 : Name[17] == '.' ? Name[18]
3409 : Name[18] == '.' ? Name[19]
3410 : Name[20];
3413 if (IsVariable && Name[17] != '.') {
3414 if (Size == 'd' && Name[17] == '2') // avx512.mask.psrlv2.di
3416 else if (Size == 'd' && Name[17] == '4') // avx512.mask.psrlv4.di
3418 else if (Size == 's' && Name[17] == '4') // avx512.mask.psrlv4.si
3420 else if (Size == 's' && Name[17] == '8') // avx512.mask.psrlv8.si
3422 else if (Size == 'h' && Name[17] == '8') // avx512.mask.psrlv8.hi
3424 else if (Size == 'h' && Name[17] == '1') // avx512.mask.psrlv16.hi
3426 else if (Name[17] == '3' && Name[18] == '2') // avx512.mask.psrlv32hi
3430 } else if (Name.ends_with(".128")) {
3442 } else if (Name.ends_with(".256")) {
3471 } else if (Name.starts_with("avx512.mask.psra")) {
3472 bool IsImmediate = Name[16] == 'i' || (Name.size() > 18 && Name[18] == 'i');
3473 bool IsVariable = Name[16] == 'v';
3474 char Size = Name[16] == '.' ? Name[17]
3475 : Name[17] == '.' ? Name[18]
3476 : Name[18] == '.' ? Name[19]
3477 : Name[20];
3480 if (IsVariable && Name[17] != '.') {
3481 if (Size == 's' && Name[17] == '4') // avx512.mask.psrav4.si
3483 else if (Size == 's' && Name[17] == '8') // avx512.mask.psrav8.si
3485 else if (Size == 'h' && Name[17] == '8') // avx512.mask.psrav8.hi
3487 else if (Size == 'h' && Name[17] == '1') // avx512.mask.psrav16.hi
3489 else if (Name[17] == '3' && Name[18] == '2') // avx512.mask.psrav32hi
3493 } else if (Name.ends_with(".128")) {
3506 } else if (Name.ends_with(".256")) {
3536 } else if (Name.starts_with("avx512.mask.move.s")) {
3538 } else if (Name.starts_with("avx512.cvtmask2")) {
3540 } else if (Name.ends_with(".movntdqa")) {
3554 } else if (Name.starts_with("fma.vfmadd.") ||
3555 Name.starts_with("fma.vfmsub.") ||
3556 Name.starts_with("fma.vfnmadd.") ||
3557 Name.starts_with("fma.vfnmsub.")) {
3558 bool NegMul = Name[6] == 'n';
3559 bool NegAcc = NegMul ? Name[8] == 's' : Name[7] == 's';
3560 bool IsScalar = NegMul ? Name[12] == 's' : Name[11] == 's';
3585 } else if (Name.starts_with("fma4.vfmadd.s")) {
3600 } else if (Name.starts_with("avx512.mask.vfmadd.s") ||
3601 Name.starts_with("avx512.maskz.vfmadd.s") ||
3602 Name.starts_with("avx512.mask3.vfmadd.s") ||
3603 Name.starts_with("avx512.mask3.vfmsub.s") ||
3604 Name.starts_with("avx512.mask3.vfnmsub.s")) {
3605 bool IsMask3 = Name[11] == '3';
3606 bool IsMaskZ = Name[11] == 'z';
3608 Name = Name.drop_front(IsMask3 || IsMaskZ ? 13 : 12);
3609 bool NegMul = Name[2] == 'n';
3610 bool NegAcc = NegMul ? Name[4] == 's' : Name[3] == 's';
3632 if (Name.back() == 'd')
3657 } else if (Name.starts_with("avx512.mask.vfmadd.p") ||
3658 Name.starts_with("avx512.mask.vfnmadd.p") ||
3659 Name.starts_with("avx512.mask.vfnmsub.p") ||
3660 Name.starts_with("avx512.mask3.vfmadd.p") ||
3661 Name.starts_with("avx512.mask3.vfmsub.p") ||
3662 Name.starts_with("avx512.mask3.vfnmsub.p") ||
3663 Name.starts_with("avx512.maskz.vfmadd.p")) {
3664 bool IsMask3 = Name[11] == '3';
3665 bool IsMaskZ = Name[11] == 'z';
3667 Name = Name.drop_front(IsMask3 || IsMaskZ ? 13 : 12);
3668 bool NegMul = Name[2] == 'n';
3669 bool NegAcc = NegMul ? Name[4] == 's' : Name[3] == 's';
3687 if (Name[Name.size() - 5] == 's')
3705 } else if (Name.starts_with("fma.vfmsubadd.p")) {
3725 } else if (Name.starts_with("avx512.mask.vfmaddsub.p") ||
3726 Name.starts_with("avx512.mask3.vfmaddsub.p") ||
3727 Name.starts_with("avx512.maskz.vfmaddsub.p") ||
3728 Name.starts_with("avx512.mask3.vfmsubadd.p")) {
3729 bool IsMask3 = Name[11] == '3';
3730 bool IsMaskZ = Name[11] == 'z';
3732 Name = Name.drop_front(IsMask3 || IsMaskZ ? 13 : 12);
3733 bool IsSubAdd = Name[3] == 's';
3737 if (Name[Name.size() - 5] == 's')
3776 } else if (Name.starts_with("avx512.mask.pternlog.") ||
3777 Name.starts_with("avx512.maskz.pternlog.")) {
3778 bool ZeroMask = Name[11] == 'z';
3804 } else if (Name.starts_with("avx512.mask.vpmadd52") ||
3805 Name.starts_with("avx512.maskz.vpmadd52")) {
3806 bool ZeroMask = Name[11] == 'z';
3807 bool High = Name[20] == 'h' || Name[21] == 'h';
3832 } else if (Name.starts_with("avx512.mask.vpermi2var.") ||
3833 Name.starts_with("avx512.mask.vpermt2var.") ||
3834 Name.starts_with("avx512.maskz.vpermt2var.")) {
3835 bool ZeroMask = Name[11] == 'z';
3836 bool IndexForm = Name[17] == 'i';
3838 } else if (Name.starts_with("avx512.mask.vpdpbusd.") ||
3839 Name.starts_with("avx512.maskz.vpdpbusd.") ||
3840 Name.starts_with("avx512.mask.vpdpbusds.") ||
3841 Name.starts_with("avx512.maskz.vpdpbusds.")) {
3842 bool ZeroMask = Name[11] == 'z';
3843 bool IsSaturating = Name[ZeroMask ? 21 : 20] == 's';
3868 } else if (Name.starts_with("avx512.mask.vpdpwssd.") ||
3869 Name.starts_with("avx512.maskz.vpdpwssd.") ||
3870 Name.starts_with("avx512.mask.vpdpwssds.") ||
3871 Name.starts_with("avx512.maskz.vpdpwssds.")) {
3872 bool ZeroMask = Name[11] == 'z';
3873 bool IsSaturating = Name[ZeroMask ? 21 : 20] == 's';
3898 } else if (Name == "addcarryx.u32" || Name == "addcarryx.u64" ||
3899 Name == "addcarry.u32" || Name == "addcarry.u64" ||
3900 Name == "subborrow.u32" || Name == "subborrow.u64") {
3902 if (Name[0] == 'a' && Name.back() == '2')
3904 else if (Name[0] == 'a' && Name.back() == '4')
3906 else if (Name[0] == 's' && Name.back() == '2')
3908 else if (Name[0] == 's' && Name.back() == '4')
3930 } else if (Name.starts_with("avx512.mask.") &&
3931 upgradeAVX512MaskToSelect(Name, Builder, *CI, Rep)) {
3938 static Value *upgradeARMIntrinsicCall(StringRef Name, CallBase *CI, Function *F,
3940 if (Name == "mve.vctp64.old") {
3956 } else if (Name == "mve.mull.int.predicated.v2i64.v4i32.v4i1" ||
3957 Name == "mve.vqdmull.predicated.v2i64.v4i32.v4i1" ||
3958 Name == "mve.vldr.gather.base.predicated.v2i64.v2i64.v4i1" ||
3959 Name == "mve.vldr.gather.base.wb.predicated.v2i64.v2i64.v4i1" ||
3960 Name ==
3962 Name == "mve.vldr.gather.offset.predicated.v2i64.p0.v2i64.v4i1" ||
3963 Name == "mve.vstr.scatter.base.predicated.v2i64.v2i64.v4i1" ||
3964 Name == "mve.vstr.scatter.base.wb.predicated.v2i64.v2i64.v4i1" ||
3965 Name ==
3967 Name == "mve.vstr.scatter.offset.predicated.p0.v2i64.v2i64.v4i1" ||
3968 Name == "cde.vcx1q.predicated.v2i64.v4i1" ||
3969 Name == "cde.vcx1qa.predicated.v2i64.v4i1" ||
3970 Name == "cde.vcx2q.predicated.v2i64.v4i1" ||
3971 Name == "cde.vcx2qa.predicated.v2i64.v4i1" ||
3972 Name == "cde.vcx3q.predicated.v2i64.v4i1" ||
3973 Name == "cde.vcx3qa.predicated.v2i64.v4i1") {
4037 static Value *upgradeAMDGCNIntrinsicCall(StringRef Name, CallBase *CI,
4040 StringSwitch<AtomicRMWInst::BinOp>(Name)
4119 /// \p Name - Final part of the intrinsic name, e.g. 'value' in llvm.dbg.value.
4121 static void upgradeDbgIntrinsicToDbgRecord(StringRef Name, CallBase *CI) {
4123 if (Name == "label") {
4125 } else if (Name == "assign") {
4131 } else if (Name == "declare") {
4136 } else if (Name == "addr") {
4143 } else if (Name == "value") {
4180 StringRef Name = F->getName();
4182 assert(Name.starts_with("llvm.") && "Intrinsic doesn't start with 'llvm.'");
4183 Name = Name.substr(5);
4185 bool IsX86 = Name.consume_front("x86.");
4186 bool IsNVVM = Name.consume_front("nvvm.");
4187 bool IsARM = Name.consume_front("arm.");
4188 bool IsAMDGCN = Name.consume_front("amdgcn.");
4189 bool IsDbg = Name.consume_front("dbg.");
4192 if (!IsX86 && Name == "stackprotectorcheck") {
4194 } else if (IsNVVM && (Name == "abs.i" || Name == "abs.ll")) {
4200 } else if (IsNVVM && (Name.starts_with("atomic.load.add.f32.p") ||
4201 Name.starts_with("atomic.load.add.f64.p"))) {
4206 } else if (IsNVVM && Name.consume_front("max.") &&
4207 (Name == "s" || Name == "i" || Name == "ll" || Name == "us" ||
4208 Name == "ui" || Name == "ull")) {
4211 Value *Cmp = Name.starts_with("u")
4215 } else if (IsNVVM && Name.consume_front("min.") &&
4216 (Name == "s" || Name == "i" || Name == "ll" || Name == "us" ||
4217 Name == "ui" || Name == "ull")) {
4220 Value *Cmp = Name.starts_with("u")
4224 } else if (IsNVVM && Name == "clz.ll") {
4232 } else if (IsNVVM && Name == "popc.ll") {
4242 if (Name == "h2f") {
4249 Intrinsic::ID IID = shouldUpgradeNVPTXBF16Intrinsic(Name);
4270 Rep = upgradeX86IntrinsicCall(Name, CI, F, Builder);
4272 Rep = upgradeARMIntrinsicCall(Name, CI, F, Builder);
4274 Rep = upgradeAMDGCNIntrinsicCall(Name, CI, F, Builder);
4287 upgradeDbgIntrinsicToDbgRecord(Name, CI);
4367 StringRef Name = F->getName();
4368 Name = Name.substr(5);
4369 unsigned N = StringSwitch<unsigned>(Name)
4396 StringRef Name = F->getName();
4397 Name = Name.substr(5); // Strip llvm
4398 if (!Name.starts_with("aarch64.sve.tuple.get")) {
4411 StringRef Name = F->getName();
4412 Name = Name.substr(5);
4413 if (!Name.starts_with("aarch64.sve.tuple")) {
4417 if (Name.starts_with("aarch64.sve.tuple.set")) {
4426 if (Name.starts_with("aarch64.sve.tuple.create")) {
4427 unsigned N = StringSwitch<unsigned>(Name)
4501 StringRef Name = F->getName();
4502 Name = Name.substr(5); // Strip llvm.
4504 if (Name.starts_with("dbg.addr")) {