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);
132 return std::make_unique<H2TargetInfo<HexagonTargetInfo>>(Triple, Opts);
133 return std::make_unique<HexagonTargetInfo>(Triple, Opts);
135 case llvm::Triple::lanai:
136 return std::make_unique<LanaiTargetInfo>(Triple, Opts);
138 case llvm::Triple::aarch64_32:
139 if (Triple.isOSDarwin())
140 return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
141 else if (Triple.isAppleMachO())
142 return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
145 case llvm::Triple::aarch64:
146 if (Triple.isOSDarwin())
147 return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
148 else if (Triple.isAppleMachO())
149 return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
152 case llvm::Triple::FreeBSD:
153 return std::make_unique<FreeBSDTargetInfo<AArch64leTargetInfo>>(Triple,
155 case llvm::Triple::Fuchsia:
156 return std::make_unique<FuchsiaTargetInfo<AArch64leTargetInfo>>(Triple,
158 case llvm::Triple::Haiku:
159 return std::make_unique<HaikuTargetInfo<AArch64leTargetInfo>>(Triple,
161 case llvm::Triple::Linux:
162 switch (Triple.getEnvironment()) {
164 return std::make_unique<LinuxTargetInfo<AArch64leTargetInfo>>(Triple,
166 case llvm::Triple::OpenHOS:
167 return std::make_unique<OHOSTargetInfo<AArch64leTargetInfo>>(Triple,
170 case llvm::Triple::Managarm:
171 return std::make_unique<ManagarmTargetInfo<AArch64leTargetInfo>>(Triple,
173 case llvm::Triple::NetBSD:
174 return std::make_unique<NetBSDTargetInfo<AArch64leTargetInfo>>(Triple,
176 case llvm::Triple::OpenBSD:
177 return std::make_unique<OpenBSDTargetInfo<AArch64leTargetInfo>>(Triple,
179 case llvm::Triple::Hurd:
180 return std::make_unique<HurdTargetInfo<AArch64leTargetInfo>>(Triple,
182 case llvm::Triple::Serenity:
183 return std::make_unique<SerenityTargetInfo<AArch64leTargetInfo>>(Triple,
185 case llvm::Triple::UEFI:
186 return std::make_unique<UEFIAArch64TargetInfo>(Triple, Opts);
187 case llvm::Triple::Win32:
188 switch (Triple.getEnvironment()) {
189 case llvm::Triple::GNU:
190 return std::make_unique<MinGWARM64TargetInfo>(Triple, Opts);
191 case llvm::Triple::MSVC:
193 return std::make_unique<MicrosoftARM64TargetInfo>(Triple, Opts);
196 return std::make_unique<AArch64leTargetInfo>(Triple, Opts);
199 case llvm::Triple::aarch64_be:
201 case llvm::Triple::FreeBSD:
202 return std::make_unique<FreeBSDTargetInfo<AArch64beTargetInfo>>(Triple,
204 case llvm::Triple::Fuchsia:
205 return std::make_unique<FuchsiaTargetInfo<AArch64beTargetInfo>>(Triple,
207 case llvm::Triple::Linux:
208 return std::make_unique<LinuxTargetInfo<AArch64beTargetInfo>>(Triple,
210 case llvm::Triple::NetBSD:
211 return std::make_unique<NetBSDTargetInfo<AArch64beTargetInfo>>(Triple,
214 return std::make_unique<AArch64beTargetInfo>(Triple, Opts);
217 case llvm::Triple::arm:
218 case llvm::Triple::thumb:
219 if (Triple.isOSBinFormatMachO())
220 return std::make_unique<DarwinARMTargetInfo>(Triple, Opts);
223 case llvm::Triple::Linux:
224 switch (Triple.getEnvironment()) {
226 return std::make_unique<LinuxTargetInfo<ARMleTargetInfo>>(Triple, Opts);
227 case llvm::Triple::OpenHOS:
228 return std::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
230 case llvm::Triple::LiteOS:
231 return std::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
232 case llvm::Triple::FreeBSD:
233 return std::make_unique<FreeBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
234 case llvm::Triple::Fuchsia:
235 return std::make_unique<FuchsiaTargetInfo<ARMleTargetInfo>>(Triple, Opts);
236 case llvm::Triple::NetBSD:
237 return std::make_unique<NetBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
238 case llvm::Triple::OpenBSD:
239 return std::make_unique<OpenBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
240 case llvm::Triple::RTEMS:
241 return std::make_unique<RTEMSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
242 case llvm::Triple::Haiku:
243 return std::make_unique<HaikuTargetInfo<ARMleTargetInfo>>(Triple, Opts);
244 case llvm::Triple::Win32:
245 switch (Triple.getEnvironment()) {
246 case llvm::Triple::Cygnus:
247 return std::make_unique<CygwinARMTargetInfo>(Triple, Opts);
248 case llvm::Triple::GNU:
249 return std::make_unique<MinGWARMTargetInfo>(Triple, Opts);
250 case llvm::Triple::Itanium:
251 return std::make_unique<ItaniumWindowsARMleTargetInfo>(Triple, Opts);
252 case llvm::Triple::MSVC:
254 return std::make_unique<MicrosoftARMleTargetInfo>(Triple, Opts);
257 return std::make_unique<ARMleTargetInfo>(Triple, Opts);
260 case llvm::Triple::armeb:
261 case llvm::Triple::thumbeb:
262 if (Triple.isOSDarwin())
263 return std::make_unique<DarwinARMTargetInfo>(Triple, Opts);
264 else if (Triple.isAppleMachO())
265 return std::make_unique<AppleMachOARMTargetInfo>(Triple, Opts);
268 case llvm::Triple::Fuchsia:
269 return std::make_unique<FuchsiaTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
270 case llvm::Triple::Linux:
271 return std::make_unique<LinuxTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
272 case llvm::Triple::NetBSD:
273 return std::make_unique<NetBSDTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
274 case llvm::Triple::RTEMS:
275 return std::make_unique<RTEMSTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
277 return std::make_unique<ARMbeTargetInfo>(Triple, Opts);
280 case llvm::Triple::avr:
281 return std::make_unique<AVRTargetInfo>(Triple, Opts);
282 case llvm::Triple::bpfeb:
283 case llvm::Triple::bpfel:
284 return std::make_unique<BPFTargetInfo>(Triple, Opts);
286 case llvm::Triple::msp430:
287 return std::make_unique<MSP430TargetInfo>(Triple, Opts);
289 case llvm::Triple::mips:
291 case llvm::Triple::Linux:
292 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
293 case llvm::Triple::RTEMS:
294 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
295 case llvm::Triple::FreeBSD:
296 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
297 case llvm::Triple::NetBSD:
298 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
300 return std::make_unique<MipsTargetInfo>(Triple, Opts);
303 case llvm::Triple::mipsel:
305 case llvm::Triple::Linux:
306 switch (Triple.getEnvironment()) {
308 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
309 case llvm::Triple::OpenHOS:
310 return std::make_unique<OHOSTargetInfo<MipsTargetInfo>>(Triple, Opts);
312 case llvm::Triple::RTEMS:
313 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
314 case llvm::Triple::FreeBSD:
315 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
316 case llvm::Triple::NetBSD:
317 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
318 case llvm::Triple::Win32:
319 switch (Triple.getEnvironment()) {
320 case llvm::Triple::GNU:
321 return std::make_unique<MinGWMipsTargetInfo>(Triple, Opts);
322 case llvm::Triple::MSVC:
324 return std::make_unique<MicrosoftMipsTargetInfo>(Triple, Opts);
327 return std::make_unique<MipsTargetInfo>(Triple, Opts);
330 case llvm::Triple::mips64:
332 case llvm::Triple::Linux:
333 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
334 case llvm::Triple::RTEMS:
335 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
336 case llvm::Triple::FreeBSD:
337 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
338 case llvm::Triple::NetBSD:
339 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
340 case llvm::Triple::OpenBSD:
341 return std::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
343 return std::make_unique<MipsTargetInfo>(Triple, Opts);
346 case llvm::Triple::mips64el:
348 case llvm::Triple::Linux:
349 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
350 case llvm::Triple::RTEMS:
351 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
352 case llvm::Triple::FreeBSD:
353 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
354 case llvm::Triple::NetBSD:
355 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
356 case llvm::Triple::OpenBSD:
357 return std::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
359 return std::make_unique<MipsTargetInfo>(Triple, Opts);
362 case llvm::Triple::m68k:
364 case llvm::Triple::Linux:
365 return std::make_unique<LinuxTargetInfo<M68kTargetInfo>>(Triple, Opts);
366 case llvm::Triple::NetBSD:
367 return std::make_unique<NetBSDTargetInfo<M68kTargetInfo>>(Triple, Opts);
369 return std::make_unique<M68kTargetInfo>(Triple, Opts);
372 case llvm::Triple::ppc:
374 case llvm::Triple::Linux:
375 return std::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
376 case llvm::Triple::FreeBSD:
377 return std::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
378 case llvm::Triple::NetBSD:
379 return std::make_unique<NetBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
380 case llvm::Triple::OpenBSD:
381 return std::make_unique<OpenBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
382 case llvm::Triple::RTEMS:
383 return std::make_unique<RTEMSTargetInfo<PPC32TargetInfo>>(Triple, Opts);
384 case llvm::Triple::AIX:
385 return std::make_unique<AIXPPC32TargetInfo>(Triple, Opts);
387 return std::make_unique<PPC32TargetInfo>(Triple, Opts);
390 case llvm::Triple::ppcle:
392 case llvm::Triple::Linux:
393 return std::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
394 case llvm::Triple::FreeBSD:
395 return std::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
397 return std::make_unique<PPC32TargetInfo>(Triple, Opts);
400 case llvm::Triple::ppc64:
402 case llvm::Triple::Linux:
403 return std::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
404 case llvm::Triple::Lv2:
405 return std::make_unique<PS3PPUTargetInfo<PPC64TargetInfo>>(Triple, Opts);
406 case llvm::Triple::FreeBSD:
407 return std::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
408 case llvm::Triple::NetBSD:
409 return std::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
410 case llvm::Triple::OpenBSD:
411 return std::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
412 case llvm::Triple::AIX:
413 return std::make_unique<AIXPPC64TargetInfo>(Triple, Opts);
415 return std::make_unique<PPC64TargetInfo>(Triple, Opts);
418 case llvm::Triple::ppc64le:
420 case llvm::Triple::Linux:
421 return std::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
422 case llvm::Triple::FreeBSD:
423 return std::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
424 case llvm::Triple::NetBSD:
425 return std::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
426 case llvm::Triple::OpenBSD:
427 return std::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
429 return std::make_unique<PPC64TargetInfo>(Triple, Opts);
432 case llvm::Triple::nvptx:
433 return std::make_unique<NVPTXTargetInfo>(Triple, Opts,
435 case llvm::Triple::nvptx64:
436 return std::make_unique<NVPTXTargetInfo>(Triple, Opts,
439 case llvm::Triple::amdgpu:
440 case llvm::Triple::r600:
441 return std::make_unique<AMDGPUTargetInfo>(Triple, Opts);
443 case llvm::Triple::riscv32:
445 case llvm::Triple::NetBSD:
446 return std::make_unique<NetBSDTargetInfo<RISCV32TargetInfo>>(Triple,
448 case llvm::Triple::Linux:
449 return std::make_unique<LinuxTargetInfo<RISCV32TargetInfo>>(Triple, Opts);
451 return std::make_unique<RISCV32TargetInfo>(Triple, Opts);
454 case llvm::Triple::riscv32be:
456 case llvm::Triple::Linux:
457 return std::make_unique<LinuxTargetInfo<RISCV32TargetInfo>>(Triple, Opts);
459 return std::make_unique<RISCV32TargetInfo>(Triple, Opts);
462 case llvm::Triple::riscv64:
464 case llvm::Triple::FreeBSD:
465 return std::make_unique<FreeBSDTargetInfo<RISCV64TargetInfo>>(Triple,
467 case llvm::Triple::NetBSD:
468 return std::make_unique<NetBSDTargetInfo<RISCV64TargetInfo>>(Triple,
470 case llvm::Triple::OpenBSD:
471 return std::make_unique<OpenBSDTargetInfo<RISCV64TargetInfo>>(Triple,
473 case llvm::Triple::Fuchsia:
474 return std::make_unique<FuchsiaTargetInfo<RISCV64TargetInfo>>(Triple,
476 case llvm::Triple::Haiku:
477 return std::make_unique<HaikuTargetInfo<RISCV64TargetInfo>>(Triple,
479 case llvm::Triple::Linux:
480 switch (Triple.getEnvironment()) {
482 return std::make_unique<LinuxTargetInfo<RISCV64TargetInfo>>(Triple,
484 case llvm::Triple::OpenHOS:
485 return std::make_unique<OHOSTargetInfo<RISCV64TargetInfo>>(Triple,
488 case llvm::Triple::Managarm:
489 return std::make_unique<ManagarmTargetInfo<RISCV64TargetInfo>>(Triple,
491 case llvm::Triple::Hurd:
492 return std::make_unique<HurdTargetInfo<RISCV64TargetInfo>>(Triple, Opts);
494 case llvm::Triple::Serenity:
495 return std::make_unique<SerenityTargetInfo<RISCV64TargetInfo>>(Triple,
498 return std::make_unique<RISCV64TargetInfo>(Triple, Opts);
501 case llvm::Triple::riscv64be:
503 case llvm::Triple::Linux:
504 return std::make_unique<LinuxTargetInfo<RISCV64TargetInfo>>(Triple, Opts);
506 return std::make_unique<RISCV64TargetInfo>(Triple, Opts);
509 case llvm::Triple::sparc:
511 case llvm::Triple::Linux:
512 return std::make_unique<LinuxTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
513 case llvm::Triple::Solaris:
514 return std::make_unique<SolarisTargetInfo<SparcV8TargetInfo>>(Triple,
516 case llvm::Triple::NetBSD:
517 return std::make_unique<NetBSDTargetInfo<SparcV8TargetInfo>>(Triple,
519 case llvm::Triple::RTEMS:
520 return std::make_unique<RTEMSTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
522 return std::make_unique<SparcV8TargetInfo>(Triple, Opts);
525 case llvm::Triple::sparcel:
527 case llvm::Triple::Linux:
528 return std::make_unique<LinuxTargetInfo<SparcV8elTargetInfo>>(Triple,
530 case llvm::Triple::RTEMS:
531 return std::make_unique<RTEMSTargetInfo<SparcV8elTargetInfo>>(Triple,
534 return std::make_unique<SparcV8elTargetInfo>(Triple, Opts);
537 case llvm::Triple::sparcv9:
539 case llvm::Triple::Linux:
540 return std::make_unique<LinuxTargetInfo<SparcV9TargetInfo>>(Triple, Opts);
541 case llvm::Triple::Solaris:
542 return std::make_unique<SolarisTargetInfo<SparcV9TargetInfo>>(Triple,
544 case llvm::Triple::NetBSD:
545 return std::make_unique<NetBSDTargetInfo<SparcV9TargetInfo>>(Triple,
547 case llvm::Triple::OpenBSD:
548 return std::make_unique<OpenBSDTargetInfo<SparcV9TargetInfo>>(Triple,
550 case llvm::Triple::FreeBSD:
551 return std::make_unique<FreeBSDTargetInfo<SparcV9TargetInfo>>(Triple,
554 return std::make_unique<SparcV9TargetInfo>(Triple, Opts);
557 case llvm::Triple::systemz:
559 case llvm::Triple::Linux:
560 return std::make_unique<LinuxTargetInfo<SystemZTargetInfo>>(Triple, Opts);
561 case llvm::Triple::ZOS:
562 return std::make_unique<ZOSTargetInfo<SystemZTargetInfo>>(Triple, Opts);
564 return std::make_unique<SystemZTargetInfo>(Triple, Opts);
567 case llvm::Triple::tce:
568 return std::make_unique<TCETargetInfo>(Triple, Opts);
570 case llvm::Triple::tcele:
571 return std::make_unique<TCELETargetInfo>(Triple, Opts);
573 case llvm::Triple::tcele64:
574 return std::make_unique<TCELE64TargetInfo>(Triple, Opts);
576 case llvm::Triple::x86:
577 if (Triple.isOSDarwin())
578 return std::make_unique<DarwinI386TargetInfo>(Triple, Opts);
579 else if (Triple.isAppleMachO())
580 return std::make_unique<AppleMachOI386TargetInfo>(Triple, Opts);
583 case llvm::Triple::Linux: {
584 switch (Triple.getEnvironment()) {
586 return std::make_unique<LinuxTargetInfo<X86_32TargetInfo>>(Triple,
588 case llvm::Triple::Android:
589 return std::make_unique<AndroidX86_32TargetInfo>(Triple, Opts);
592 case llvm::Triple::DragonFly:
593 return std::make_unique<DragonFlyBSDTargetInfo<X86_32TargetInfo>>(Triple,
595 case llvm::Triple::NetBSD:
596 return std::make_unique<NetBSDI386TargetInfo>(Triple, Opts);
597 case llvm::Triple::OpenBSD:
598 return std::make_unique<OpenBSDI386TargetInfo>(Triple, Opts);
599 case llvm::Triple::FreeBSD:
600 return std::make_unique<FreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
602 case llvm::Triple::Fuchsia:
603 return std::make_unique<FuchsiaTargetInfo<X86_32TargetInfo>>(Triple,
605 case llvm::Triple::KFreeBSD:
606 return std::make_unique<KFreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
608 case llvm::Triple::Solaris:
609 return std::make_unique<SolarisTargetInfo<X86_32TargetInfo>>(Triple,
611 case llvm::Triple::Win32: {
612 switch (Triple.getEnvironment()) {
613 case llvm::Triple::Cygnus:
614 return std::make_unique<CygwinX86_32TargetInfo>(Triple, Opts);
615 case llvm::Triple::GNU:
616 return std::make_unique<MinGWX86_32TargetInfo>(Triple, Opts);
617 case llvm::Triple::Itanium:
618 case llvm::Triple::MSVC:
620 return std::make_unique<MicrosoftX86_32TargetInfo>(Triple, Opts);
623 case llvm::Triple::Haiku:
624 return std::make_unique<HaikuX86_32TargetInfo>(Triple, Opts);
625 case llvm::Triple::RTEMS:
626 return std::make_unique<RTEMSX86_32TargetInfo>(Triple, Opts);
627 case llvm::Triple::ELFIAMCU:
628 return std::make_unique<MCUX86_32TargetInfo>(Triple, Opts);
629 case llvm::Triple::Hurd:
630 return std::make_unique<HurdTargetInfo<X86_32TargetInfo>>(Triple, Opts);
632 return std::make_unique<X86_32TargetInfo>(Triple, Opts);
635 case llvm::Triple::x86_64:
636 if (Triple.isOSDarwin() || Triple.isOSBinFormatMachO())
637 return std::make_unique<DarwinX86_64TargetInfo>(Triple, Opts);
640 case llvm::Triple::Linux: {
641 switch (Triple.getEnvironment()) {
643 return std::make_unique<LinuxTargetInfo<X86_64TargetInfo>>(Triple,
645 case llvm::Triple::Android:
646 return std::make_unique<AndroidX86_64TargetInfo>(Triple, Opts);
647 case llvm::Triple::OpenHOS:
648 return std::make_unique<OHOSX86_64TargetInfo>(Triple, Opts);
651 case llvm::Triple::DragonFly:
652 return std::make_unique<DragonFlyBSDTargetInfo<X86_64TargetInfo>>(Triple,
654 case llvm::Triple::NetBSD:
655 return std::make_unique<NetBSDTargetInfo<X86_64TargetInfo>>(Triple, Opts);
656 case llvm::Triple::OpenBSD:
657 return std::make_unique<OpenBSDX86_64TargetInfo>(Triple, Opts);
658 case llvm::Triple::FreeBSD:
659 return std::make_unique<FreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
661 case llvm::Triple::Fuchsia:
662 return std::make_unique<FuchsiaTargetInfo<X86_64TargetInfo>>(Triple,
664 case llvm::Triple::KFreeBSD:
665 return std::make_unique<KFreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
667 case llvm::Triple::Solaris:
668 return std::make_unique<SolarisTargetInfo<X86_64TargetInfo>>(Triple,
670 case llvm::Triple::UEFI:
671 return std::make_unique<UEFIX86_64TargetInfo>(Triple, Opts);
673 case llvm::Triple::Win32: {
674 switch (Triple.getEnvironment()) {
675 case llvm::Triple::Cygnus:
676 return std::make_unique<CygwinX86_64TargetInfo>(Triple, Opts);
677 case llvm::Triple::GNU:
678 return std::make_unique<MinGWX86_64TargetInfo>(Triple, Opts);
679 case llvm::Triple::MSVC:
681 return std::make_unique<MicrosoftX86_64TargetInfo>(Triple, Opts);
684 case llvm::Triple::Haiku:
685 return std::make_unique<HaikuTargetInfo<X86_64TargetInfo>>(Triple, Opts);
686 case llvm::Triple::PS4:
687 return std::make_unique<PS4OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
688 case llvm::Triple::PS5:
689 return std::make_unique<PS5OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
690 case llvm::Triple::Hurd:
691 return std::make_unique<HurdTargetInfo<X86_64TargetInfo>>(Triple, Opts);
692 case llvm::Triple::Managarm:
693 return std::make_unique<ManagarmTargetInfo<X86_64TargetInfo>>(Triple,
695 case llvm::Triple::Serenity:
696 return std::make_unique<SerenityTargetInfo<X86_64TargetInfo>>(Triple,
699 return std::make_unique<X86_64TargetInfo>(Triple, Opts);
702 case llvm::Triple::spir: {
703 if (os != llvm::Triple::UnknownOS ||
704 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
706 return std::make_unique<SPIR32TargetInfo>(Triple, Opts);
708 case llvm::Triple::spir64: {
709 if (os != llvm::Triple::UnknownOS ||
710 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
712 return std::make_unique<SPIR64TargetInfo>(Triple, Opts);
714 case llvm::Triple::spirv: {
715 return std::make_unique<SPIRVTargetInfo>(Triple, Opts);
717 case llvm::Triple::spirv32: {
718 if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar &&
719 os != llvm::Triple::Vulkan) ||
720 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
722 return std::make_unique<SPIRV32TargetInfo>(Triple, Opts);
724 case llvm::Triple::spirv64: {
725 if (os == llvm::Triple::OSType::AMDHSA)
726 return std::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts);
727 if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar &&
728 os != llvm::Triple::Vulkan) ||
729 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
731 if (Triple.getVendor() == llvm::Triple::Intel)
732 return std::make_unique<SPIRV64IntelTargetInfo>(Triple, Opts);
733 return std::make_unique<SPIRV64TargetInfo>(Triple, Opts);
735 case llvm::Triple::wasm32:
736 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
737 Triple.getVendor() != llvm::Triple::UnknownVendor ||
738 !Triple.isOSBinFormatWasm())
741 case llvm::Triple::WASI:
742 case llvm::Triple::WASIp1:
743 return std::make_unique<WASIP1TargetInfo<WebAssembly32TargetInfo>>(Triple,
745 case llvm::Triple::WASIp2:
746 return std::make_unique<WASIP2TargetInfo<WebAssembly32TargetInfo>>(Triple,
748 case llvm::Triple::WASIp3:
749 return std::make_unique<WASIP3TargetInfo<WebAssembly32TargetInfo>>(Triple,
751 case llvm::Triple::Emscripten:
752 return std::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
755 case llvm::Triple::Linux:
756 return std::make_unique<WALITargetInfo<WebAssembly32TargetInfo>>(Triple,
758 case llvm::Triple::UnknownOS:
759 return std::make_unique<WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>>(
764 case llvm::Triple::wasm64:
765 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
766 Triple.getVendor() != llvm::Triple::UnknownVendor ||
767 !Triple.isOSBinFormatWasm())
770 case llvm::Triple::WASI:
771 case llvm::Triple::WASIp1:
772 return std::make_unique<WASIP1TargetInfo<WebAssembly64TargetInfo>>(Triple,
774 case llvm::Triple::WASIp2:
775 return std::make_unique<WASIP2TargetInfo<WebAssembly64TargetInfo>>(Triple,
777 case llvm::Triple::WASIp3:
778 return std::make_unique<WASIP3TargetInfo<WebAssembly64TargetInfo>>(Triple,
780 case llvm::Triple::Emscripten:
781 return std::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
783 case llvm::Triple::UnknownOS:
784 return std::make_unique<WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>>(
790 case llvm::Triple::dxil:
791 return std::make_unique<DirectXTargetInfo>(Triple, Opts);
793 case llvm::Triple::ve:
794 return std::make_unique<LinuxTargetInfo<VETargetInfo>>(Triple, Opts);
796 case llvm::Triple::csky:
798 case llvm::Triple::Linux:
799 return std::make_unique<LinuxTargetInfo<CSKYTargetInfo>>(Triple, Opts);
801 return std::make_unique<CSKYTargetInfo>(Triple, Opts);
803 case llvm::Triple::loongarch32:
805 case llvm::Triple::Linux:
806 return std::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple,
809 return std::make_unique<LoongArch32TargetInfo>(Triple, Opts);
811 case llvm::Triple::loongarch64:
813 case llvm::Triple::Linux:
814 switch (Triple.getEnvironment()) {
816 return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple,
818 case llvm::Triple::OpenHOS:
819 return std::make_unique<OHOSTargetInfo<LoongArch64TargetInfo>>(Triple,
822 case llvm::Triple::FreeBSD:
823 return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
825 case llvm::Triple::OpenBSD:
826 return std::make_unique<OpenBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
829 return std::make_unique<LoongArch64TargetInfo>(Triple, Opts);
832 case llvm::Triple::xtensa:
833 return std::make_unique<XtensaTargetInfo>(Triple, Opts);