113 llvm::Triple::OSType os = Triple.getOS();
115 switch (Triple.getArch()) {
119 case llvm::Triple::arc:
120 return std::make_unique<ARCTargetInfo>(Triple, Opts);
122 case llvm::Triple::xcore:
123 return std::make_unique<XCoreTargetInfo>(Triple, Opts);
125 case llvm::Triple::hexagon:
126 if (os == llvm::Triple::Linux &&
127 Triple.getEnvironment() == llvm::Triple::Musl)
128 return std::make_unique<LinuxTargetInfo<HexagonTargetInfo>>(Triple, Opts);
129 if (Triple.isOSQurt())
130 return std::make_unique<QURTTargetInfo<HexagonTargetInfo>>(Triple, Opts);
131 return std::make_unique<HexagonTargetInfo>(Triple, Opts);
133 case llvm::Triple::lanai:
134 return std::make_unique<LanaiTargetInfo>(Triple, Opts);
136 case llvm::Triple::aarch64_32:
137 if (Triple.isOSDarwin())
138 return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
139 else if (Triple.isAppleMachO())
140 return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
143 case llvm::Triple::aarch64:
144 if (Triple.isOSDarwin())
145 return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
146 else if (Triple.isAppleMachO())
147 return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
150 case llvm::Triple::FreeBSD:
151 return std::make_unique<FreeBSDTargetInfo<AArch64leTargetInfo>>(Triple,
153 case llvm::Triple::Fuchsia:
154 return std::make_unique<FuchsiaTargetInfo<AArch64leTargetInfo>>(Triple,
156 case llvm::Triple::Haiku:
157 return std::make_unique<HaikuTargetInfo<AArch64leTargetInfo>>(Triple,
159 case llvm::Triple::Linux:
160 switch (Triple.getEnvironment()) {
162 return std::make_unique<LinuxTargetInfo<AArch64leTargetInfo>>(Triple,
164 case llvm::Triple::OpenHOS:
165 return std::make_unique<OHOSTargetInfo<AArch64leTargetInfo>>(Triple,
168 case llvm::Triple::Managarm:
169 return std::make_unique<ManagarmTargetInfo<AArch64leTargetInfo>>(Triple,
171 case llvm::Triple::NetBSD:
172 return std::make_unique<NetBSDTargetInfo<AArch64leTargetInfo>>(Triple,
174 case llvm::Triple::OpenBSD:
175 return std::make_unique<OpenBSDTargetInfo<AArch64leTargetInfo>>(Triple,
177 case llvm::Triple::Hurd:
178 return std::make_unique<HurdTargetInfo<AArch64leTargetInfo>>(Triple,
180 case llvm::Triple::Win32:
181 switch (Triple.getEnvironment()) {
182 case llvm::Triple::GNU:
183 return std::make_unique<MinGWARM64TargetInfo>(Triple, Opts);
184 case llvm::Triple::MSVC:
186 return std::make_unique<MicrosoftARM64TargetInfo>(Triple, Opts);
189 return std::make_unique<AArch64leTargetInfo>(Triple, Opts);
192 case llvm::Triple::aarch64_be:
194 case llvm::Triple::FreeBSD:
195 return std::make_unique<FreeBSDTargetInfo<AArch64beTargetInfo>>(Triple,
197 case llvm::Triple::Fuchsia:
198 return std::make_unique<FuchsiaTargetInfo<AArch64beTargetInfo>>(Triple,
200 case llvm::Triple::Linux:
201 return std::make_unique<LinuxTargetInfo<AArch64beTargetInfo>>(Triple,
203 case llvm::Triple::NetBSD:
204 return std::make_unique<NetBSDTargetInfo<AArch64beTargetInfo>>(Triple,
207 return std::make_unique<AArch64beTargetInfo>(Triple, Opts);
210 case llvm::Triple::arm:
211 case llvm::Triple::thumb:
212 if (Triple.isOSBinFormatMachO())
213 return std::make_unique<DarwinARMTargetInfo>(Triple, Opts);
216 case llvm::Triple::Linux:
217 switch (Triple.getEnvironment()) {
219 return std::make_unique<LinuxTargetInfo<ARMleTargetInfo>>(Triple, Opts);
220 case llvm::Triple::OpenHOS:
221 return std::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
223 case llvm::Triple::LiteOS:
224 return std::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
225 case llvm::Triple::FreeBSD:
226 return std::make_unique<FreeBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
227 case llvm::Triple::Fuchsia:
228 return std::make_unique<FuchsiaTargetInfo<ARMleTargetInfo>>(Triple, Opts);
229 case llvm::Triple::NetBSD:
230 return std::make_unique<NetBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
231 case llvm::Triple::OpenBSD:
232 return std::make_unique<OpenBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
233 case llvm::Triple::RTEMS:
234 return std::make_unique<RTEMSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
235 case llvm::Triple::Haiku:
236 return std::make_unique<HaikuTargetInfo<ARMleTargetInfo>>(Triple, Opts);
237 case llvm::Triple::Win32:
238 switch (Triple.getEnvironment()) {
239 case llvm::Triple::Cygnus:
240 return std::make_unique<CygwinARMTargetInfo>(Triple, Opts);
241 case llvm::Triple::GNU:
242 return std::make_unique<MinGWARMTargetInfo>(Triple, Opts);
243 case llvm::Triple::Itanium:
244 return std::make_unique<ItaniumWindowsARMleTargetInfo>(Triple, Opts);
245 case llvm::Triple::MSVC:
247 return std::make_unique<MicrosoftARMleTargetInfo>(Triple, Opts);
250 return std::make_unique<ARMleTargetInfo>(Triple, Opts);
253 case llvm::Triple::armeb:
254 case llvm::Triple::thumbeb:
255 if (Triple.isOSDarwin())
256 return std::make_unique<DarwinARMTargetInfo>(Triple, Opts);
257 else if (Triple.isAppleMachO())
258 return std::make_unique<AppleMachOARMTargetInfo>(Triple, Opts);
261 case llvm::Triple::Fuchsia:
262 return std::make_unique<FuchsiaTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
263 case llvm::Triple::Linux:
264 return std::make_unique<LinuxTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
265 case llvm::Triple::NetBSD:
266 return std::make_unique<NetBSDTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
267 case llvm::Triple::RTEMS:
268 return std::make_unique<RTEMSTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
270 return std::make_unique<ARMbeTargetInfo>(Triple, Opts);
273 case llvm::Triple::avr:
274 return std::make_unique<AVRTargetInfo>(Triple, Opts);
275 case llvm::Triple::bpfeb:
276 case llvm::Triple::bpfel:
277 return std::make_unique<BPFTargetInfo>(Triple, Opts);
279 case llvm::Triple::msp430:
280 return std::make_unique<MSP430TargetInfo>(Triple, Opts);
282 case llvm::Triple::mips:
284 case llvm::Triple::Linux:
285 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
286 case llvm::Triple::RTEMS:
287 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
288 case llvm::Triple::FreeBSD:
289 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
290 case llvm::Triple::NetBSD:
291 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
293 return std::make_unique<MipsTargetInfo>(Triple, Opts);
296 case llvm::Triple::mipsel:
298 case llvm::Triple::Linux:
299 switch (Triple.getEnvironment()) {
301 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
302 case llvm::Triple::OpenHOS:
303 return std::make_unique<OHOSTargetInfo<MipsTargetInfo>>(Triple, Opts);
305 case llvm::Triple::RTEMS:
306 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
307 case llvm::Triple::FreeBSD:
308 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
309 case llvm::Triple::NetBSD:
310 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
311 case llvm::Triple::Win32:
312 switch (Triple.getEnvironment()) {
313 case llvm::Triple::GNU:
314 return std::make_unique<MinGWMipsTargetInfo>(Triple, Opts);
315 case llvm::Triple::MSVC:
317 return std::make_unique<MicrosoftMipsTargetInfo>(Triple, Opts);
320 return std::make_unique<MipsTargetInfo>(Triple, Opts);
323 case llvm::Triple::mips64:
325 case llvm::Triple::Linux:
326 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
327 case llvm::Triple::RTEMS:
328 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
329 case llvm::Triple::FreeBSD:
330 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
331 case llvm::Triple::NetBSD:
332 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
333 case llvm::Triple::OpenBSD:
334 return std::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
336 return std::make_unique<MipsTargetInfo>(Triple, Opts);
339 case llvm::Triple::mips64el:
341 case llvm::Triple::Linux:
342 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
343 case llvm::Triple::RTEMS:
344 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
345 case llvm::Triple::FreeBSD:
346 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
347 case llvm::Triple::NetBSD:
348 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
349 case llvm::Triple::OpenBSD:
350 return std::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
352 return std::make_unique<MipsTargetInfo>(Triple, Opts);
355 case llvm::Triple::m68k:
357 case llvm::Triple::Linux:
358 return std::make_unique<LinuxTargetInfo<M68kTargetInfo>>(Triple, Opts);
359 case llvm::Triple::NetBSD:
360 return std::make_unique<NetBSDTargetInfo<M68kTargetInfo>>(Triple, Opts);
362 return std::make_unique<M68kTargetInfo>(Triple, Opts);
365 case llvm::Triple::ppc:
367 case llvm::Triple::Linux:
368 return std::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
369 case llvm::Triple::FreeBSD:
370 return std::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
371 case llvm::Triple::NetBSD:
372 return std::make_unique<NetBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
373 case llvm::Triple::OpenBSD:
374 return std::make_unique<OpenBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
375 case llvm::Triple::RTEMS:
376 return std::make_unique<RTEMSTargetInfo<PPC32TargetInfo>>(Triple, Opts);
377 case llvm::Triple::AIX:
378 return std::make_unique<AIXPPC32TargetInfo>(Triple, Opts);
380 return std::make_unique<PPC32TargetInfo>(Triple, Opts);
383 case llvm::Triple::ppcle:
385 case llvm::Triple::Linux:
386 return std::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
387 case llvm::Triple::FreeBSD:
388 return std::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
390 return std::make_unique<PPC32TargetInfo>(Triple, Opts);
393 case llvm::Triple::ppc64:
395 case llvm::Triple::Linux:
396 return std::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
397 case llvm::Triple::Lv2:
398 return std::make_unique<PS3PPUTargetInfo<PPC64TargetInfo>>(Triple, Opts);
399 case llvm::Triple::FreeBSD:
400 return std::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
401 case llvm::Triple::NetBSD:
402 return std::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
403 case llvm::Triple::OpenBSD:
404 return std::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
405 case llvm::Triple::AIX:
406 return std::make_unique<AIXPPC64TargetInfo>(Triple, Opts);
408 return std::make_unique<PPC64TargetInfo>(Triple, Opts);
411 case llvm::Triple::ppc64le:
413 case llvm::Triple::Linux:
414 return std::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
415 case llvm::Triple::FreeBSD:
416 return std::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
417 case llvm::Triple::NetBSD:
418 return std::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
419 case llvm::Triple::OpenBSD:
420 return std::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
422 return std::make_unique<PPC64TargetInfo>(Triple, Opts);
425 case llvm::Triple::nvptx:
426 return std::make_unique<NVPTXTargetInfo>(Triple, Opts,
428 case llvm::Triple::nvptx64:
429 return std::make_unique<NVPTXTargetInfo>(Triple, Opts,
432 case llvm::Triple::amdgcn:
433 case llvm::Triple::r600:
434 return std::make_unique<AMDGPUTargetInfo>(Triple, Opts);
436 case llvm::Triple::riscv32:
437 case llvm::Triple::riscv32be:
439 case llvm::Triple::NetBSD:
440 return std::make_unique<NetBSDTargetInfo<RISCV32TargetInfo>>(Triple,
442 case llvm::Triple::Linux:
443 return std::make_unique<LinuxTargetInfo<RISCV32TargetInfo>>(Triple, Opts);
445 return std::make_unique<RISCV32TargetInfo>(Triple, Opts);
448 case llvm::Triple::riscv64:
449 case llvm::Triple::riscv64be:
451 case llvm::Triple::FreeBSD:
452 return std::make_unique<FreeBSDTargetInfo<RISCV64TargetInfo>>(Triple,
454 case llvm::Triple::NetBSD:
455 return std::make_unique<NetBSDTargetInfo<RISCV64TargetInfo>>(Triple,
457 case llvm::Triple::OpenBSD:
458 return std::make_unique<OpenBSDTargetInfo<RISCV64TargetInfo>>(Triple,
460 case llvm::Triple::Fuchsia:
461 return std::make_unique<FuchsiaTargetInfo<RISCV64TargetInfo>>(Triple,
463 case llvm::Triple::Haiku:
464 return std::make_unique<HaikuTargetInfo<RISCV64TargetInfo>>(Triple,
466 case llvm::Triple::Linux:
467 switch (Triple.getEnvironment()) {
469 return std::make_unique<LinuxTargetInfo<RISCV64TargetInfo>>(Triple,
471 case llvm::Triple::OpenHOS:
472 return std::make_unique<OHOSTargetInfo<RISCV64TargetInfo>>(Triple,
475 case llvm::Triple::Managarm:
476 return std::make_unique<ManagarmTargetInfo<RISCV64TargetInfo>>(Triple,
478 case llvm::Triple::Hurd:
479 return std::make_unique<HurdTargetInfo<RISCV64TargetInfo>>(Triple, Opts);
481 return std::make_unique<RISCV64TargetInfo>(Triple, Opts);
484 case llvm::Triple::sparc:
486 case llvm::Triple::Linux:
487 return std::make_unique<LinuxTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
488 case llvm::Triple::Solaris:
489 return std::make_unique<SolarisTargetInfo<SparcV8TargetInfo>>(Triple,
491 case llvm::Triple::NetBSD:
492 return std::make_unique<NetBSDTargetInfo<SparcV8TargetInfo>>(Triple,
494 case llvm::Triple::RTEMS:
495 return std::make_unique<RTEMSTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
497 return std::make_unique<SparcV8TargetInfo>(Triple, Opts);
500 case llvm::Triple::sparcel:
502 case llvm::Triple::Linux:
503 return std::make_unique<LinuxTargetInfo<SparcV8elTargetInfo>>(Triple,
505 case llvm::Triple::RTEMS:
506 return std::make_unique<RTEMSTargetInfo<SparcV8elTargetInfo>>(Triple,
509 return std::make_unique<SparcV8elTargetInfo>(Triple, Opts);
512 case llvm::Triple::sparcv9:
514 case llvm::Triple::Linux:
515 return std::make_unique<LinuxTargetInfo<SparcV9TargetInfo>>(Triple, Opts);
516 case llvm::Triple::Solaris:
517 return std::make_unique<SolarisTargetInfo<SparcV9TargetInfo>>(Triple,
519 case llvm::Triple::NetBSD:
520 return std::make_unique<NetBSDTargetInfo<SparcV9TargetInfo>>(Triple,
522 case llvm::Triple::OpenBSD:
523 return std::make_unique<OpenBSDTargetInfo<SparcV9TargetInfo>>(Triple,
525 case llvm::Triple::FreeBSD:
526 return std::make_unique<FreeBSDTargetInfo<SparcV9TargetInfo>>(Triple,
529 return std::make_unique<SparcV9TargetInfo>(Triple, Opts);
532 case llvm::Triple::systemz:
534 case llvm::Triple::Linux:
535 return std::make_unique<LinuxTargetInfo<SystemZTargetInfo>>(Triple, Opts);
536 case llvm::Triple::ZOS:
537 return std::make_unique<ZOSTargetInfo<SystemZTargetInfo>>(Triple, Opts);
539 return std::make_unique<SystemZTargetInfo>(Triple, Opts);
542 case llvm::Triple::tce:
543 return std::make_unique<TCETargetInfo>(Triple, Opts);
545 case llvm::Triple::tcele:
546 return std::make_unique<TCELETargetInfo>(Triple, Opts);
548 case llvm::Triple::x86:
549 if (Triple.isOSDarwin())
550 return std::make_unique<DarwinI386TargetInfo>(Triple, Opts);
551 else if (Triple.isAppleMachO())
552 return std::make_unique<AppleMachOI386TargetInfo>(Triple, Opts);
555 case llvm::Triple::Linux: {
556 switch (Triple.getEnvironment()) {
558 return std::make_unique<LinuxTargetInfo<X86_32TargetInfo>>(Triple,
560 case llvm::Triple::Android:
561 return std::make_unique<AndroidX86_32TargetInfo>(Triple, Opts);
564 case llvm::Triple::DragonFly:
565 return std::make_unique<DragonFlyBSDTargetInfo<X86_32TargetInfo>>(Triple,
567 case llvm::Triple::NetBSD:
568 return std::make_unique<NetBSDI386TargetInfo>(Triple, Opts);
569 case llvm::Triple::OpenBSD:
570 return std::make_unique<OpenBSDI386TargetInfo>(Triple, Opts);
571 case llvm::Triple::FreeBSD:
572 return std::make_unique<FreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
574 case llvm::Triple::Fuchsia:
575 return std::make_unique<FuchsiaTargetInfo<X86_32TargetInfo>>(Triple,
577 case llvm::Triple::KFreeBSD:
578 return std::make_unique<KFreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
580 case llvm::Triple::Solaris:
581 return std::make_unique<SolarisTargetInfo<X86_32TargetInfo>>(Triple,
583 case llvm::Triple::Win32: {
584 switch (Triple.getEnvironment()) {
585 case llvm::Triple::Cygnus:
586 return std::make_unique<CygwinX86_32TargetInfo>(Triple, Opts);
587 case llvm::Triple::GNU:
588 return std::make_unique<MinGWX86_32TargetInfo>(Triple, Opts);
589 case llvm::Triple::Itanium:
590 case llvm::Triple::MSVC:
592 return std::make_unique<MicrosoftX86_32TargetInfo>(Triple, Opts);
595 case llvm::Triple::Haiku:
596 return std::make_unique<HaikuX86_32TargetInfo>(Triple, Opts);
597 case llvm::Triple::RTEMS:
598 return std::make_unique<RTEMSX86_32TargetInfo>(Triple, Opts);
599 case llvm::Triple::ELFIAMCU:
600 return std::make_unique<MCUX86_32TargetInfo>(Triple, Opts);
601 case llvm::Triple::Hurd:
602 return std::make_unique<HurdTargetInfo<X86_32TargetInfo>>(Triple, Opts);
604 return std::make_unique<X86_32TargetInfo>(Triple, Opts);
607 case llvm::Triple::x86_64:
608 if (Triple.isOSDarwin() || Triple.isOSBinFormatMachO())
609 return std::make_unique<DarwinX86_64TargetInfo>(Triple, Opts);
612 case llvm::Triple::Linux: {
613 switch (Triple.getEnvironment()) {
615 return std::make_unique<LinuxTargetInfo<X86_64TargetInfo>>(Triple,
617 case llvm::Triple::Android:
618 return std::make_unique<AndroidX86_64TargetInfo>(Triple, Opts);
619 case llvm::Triple::OpenHOS:
620 return std::make_unique<OHOSX86_64TargetInfo>(Triple, Opts);
623 case llvm::Triple::DragonFly:
624 return std::make_unique<DragonFlyBSDTargetInfo<X86_64TargetInfo>>(Triple,
626 case llvm::Triple::NetBSD:
627 return std::make_unique<NetBSDTargetInfo<X86_64TargetInfo>>(Triple, Opts);
628 case llvm::Triple::OpenBSD:
629 return std::make_unique<OpenBSDX86_64TargetInfo>(Triple, Opts);
630 case llvm::Triple::FreeBSD:
631 return std::make_unique<FreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
633 case llvm::Triple::Fuchsia:
634 return std::make_unique<FuchsiaTargetInfo<X86_64TargetInfo>>(Triple,
636 case llvm::Triple::KFreeBSD:
637 return std::make_unique<KFreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
639 case llvm::Triple::Solaris:
640 return std::make_unique<SolarisTargetInfo<X86_64TargetInfo>>(Triple,
642 case llvm::Triple::UEFI:
643 return std::make_unique<UEFIX86_64TargetInfo>(Triple, Opts);
645 case llvm::Triple::Win32: {
646 switch (Triple.getEnvironment()) {
647 case llvm::Triple::Cygnus:
648 return std::make_unique<CygwinX86_64TargetInfo>(Triple, Opts);
649 case llvm::Triple::GNU:
650 return std::make_unique<MinGWX86_64TargetInfo>(Triple, Opts);
651 case llvm::Triple::MSVC:
653 return std::make_unique<MicrosoftX86_64TargetInfo>(Triple, Opts);
656 case llvm::Triple::Haiku:
657 return std::make_unique<HaikuTargetInfo<X86_64TargetInfo>>(Triple, Opts);
658 case llvm::Triple::PS4:
659 return std::make_unique<PS4OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
660 case llvm::Triple::PS5:
661 return std::make_unique<PS5OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
662 case llvm::Triple::Hurd:
663 return std::make_unique<HurdTargetInfo<X86_64TargetInfo>>(Triple, Opts);
664 case llvm::Triple::Managarm:
665 return std::make_unique<ManagarmTargetInfo<X86_64TargetInfo>>(Triple,
668 return std::make_unique<X86_64TargetInfo>(Triple, Opts);
671 case llvm::Triple::spir: {
672 if (os != llvm::Triple::UnknownOS ||
673 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
675 return std::make_unique<SPIR32TargetInfo>(Triple, Opts);
677 case llvm::Triple::spir64: {
678 if (os != llvm::Triple::UnknownOS ||
679 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
681 return std::make_unique<SPIR64TargetInfo>(Triple, Opts);
683 case llvm::Triple::spirv: {
684 return std::make_unique<SPIRVTargetInfo>(Triple, Opts);
686 case llvm::Triple::spirv32: {
687 if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar) ||
688 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
690 return std::make_unique<SPIRV32TargetInfo>(Triple, Opts);
692 case llvm::Triple::spirv64: {
693 if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar) ||
694 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) {
695 if (os == llvm::Triple::OSType::AMDHSA)
696 return std::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts);
699 if (Triple.getVendor() == llvm::Triple::Intel)
700 return std::make_unique<SPIRV64IntelTargetInfo>(Triple, Opts);
701 return std::make_unique<SPIRV64TargetInfo>(Triple, Opts);
703 case llvm::Triple::wasm32:
704 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
705 Triple.getVendor() != llvm::Triple::UnknownVendor ||
706 !Triple.isOSBinFormatWasm())
709 case llvm::Triple::WASI:
710 case llvm::Triple::WASIp1:
711 return std::make_unique<WASIP1TargetInfo<WebAssembly32TargetInfo>>(Triple,
713 case llvm::Triple::WASIp2:
714 return std::make_unique<WASIP2TargetInfo<WebAssembly32TargetInfo>>(Triple,
716 case llvm::Triple::WASIp3:
717 return std::make_unique<WASIP3TargetInfo<WebAssembly32TargetInfo>>(Triple,
719 case llvm::Triple::Emscripten:
720 return std::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
723 case llvm::Triple::Linux:
724 return std::make_unique<WALITargetInfo<WebAssembly32TargetInfo>>(Triple,
726 case llvm::Triple::UnknownOS:
727 return std::make_unique<WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>>(
732 case llvm::Triple::wasm64:
733 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
734 Triple.getVendor() != llvm::Triple::UnknownVendor ||
735 !Triple.isOSBinFormatWasm())
738 case llvm::Triple::WASI:
739 case llvm::Triple::WASIp1:
740 return std::make_unique<WASIP1TargetInfo<WebAssembly64TargetInfo>>(Triple,
742 case llvm::Triple::WASIp2:
743 return std::make_unique<WASIP2TargetInfo<WebAssembly64TargetInfo>>(Triple,
745 case llvm::Triple::WASIp3:
746 return std::make_unique<WASIP3TargetInfo<WebAssembly64TargetInfo>>(Triple,
748 case llvm::Triple::Emscripten:
749 return std::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
751 case llvm::Triple::UnknownOS:
752 return std::make_unique<WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>>(
758 case llvm::Triple::dxil:
759 return std::make_unique<DirectXTargetInfo>(Triple, Opts);
761 case llvm::Triple::ve:
762 return std::make_unique<LinuxTargetInfo<VETargetInfo>>(Triple, Opts);
764 case llvm::Triple::csky:
766 case llvm::Triple::Linux:
767 return std::make_unique<LinuxTargetInfo<CSKYTargetInfo>>(Triple, Opts);
769 return std::make_unique<CSKYTargetInfo>(Triple, Opts);
771 case llvm::Triple::loongarch32:
773 case llvm::Triple::Linux:
774 return std::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple,
777 return std::make_unique<LoongArch32TargetInfo>(Triple, Opts);
779 case llvm::Triple::loongarch64:
781 case llvm::Triple::Linux:
782 switch (Triple.getEnvironment()) {
784 return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple,
786 case llvm::Triple::OpenHOS:
787 return std::make_unique<OHOSTargetInfo<LoongArch64TargetInfo>>(Triple,
790 case llvm::Triple::FreeBSD:
791 return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
793 case llvm::Triple::OpenBSD:
794 return std::make_unique<OpenBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
797 return std::make_unique<LoongArch64TargetInfo>(Triple, Opts);
800 case llvm::Triple::xtensa:
801 return std::make_unique<XtensaTargetInfo>(Triple, Opts);