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 return std::make_unique<HexagonTargetInfo>(Triple, Opts);
131 case llvm::Triple::lanai:
132 return std::make_unique<LanaiTargetInfo>(Triple, Opts);
134 case llvm::Triple::aarch64_32:
135 if (Triple.isOSDarwin())
136 return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
137 else if (Triple.isAppleMachO())
138 return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
141 case llvm::Triple::aarch64:
142 if (Triple.isOSDarwin())
143 return std::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
144 else if (Triple.isAppleMachO())
145 return std::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
148 case llvm::Triple::FreeBSD:
149 return std::make_unique<FreeBSDTargetInfo<AArch64leTargetInfo>>(Triple,
151 case llvm::Triple::Fuchsia:
152 return std::make_unique<FuchsiaTargetInfo<AArch64leTargetInfo>>(Triple,
154 case llvm::Triple::Haiku:
155 return std::make_unique<HaikuTargetInfo<AArch64leTargetInfo>>(Triple,
157 case llvm::Triple::Linux:
158 switch (Triple.getEnvironment()) {
160 return std::make_unique<LinuxTargetInfo<AArch64leTargetInfo>>(Triple,
162 case llvm::Triple::OpenHOS:
163 return std::make_unique<OHOSTargetInfo<AArch64leTargetInfo>>(Triple,
166 case llvm::Triple::Managarm:
167 return std::make_unique<ManagarmTargetInfo<AArch64leTargetInfo>>(Triple,
169 case llvm::Triple::NetBSD:
170 return std::make_unique<NetBSDTargetInfo<AArch64leTargetInfo>>(Triple,
172 case llvm::Triple::OpenBSD:
173 return std::make_unique<OpenBSDTargetInfo<AArch64leTargetInfo>>(Triple,
175 case llvm::Triple::Win32:
176 switch (Triple.getEnvironment()) {
177 case llvm::Triple::GNU:
178 return std::make_unique<MinGWARM64TargetInfo>(Triple, Opts);
179 case llvm::Triple::MSVC:
181 return std::make_unique<MicrosoftARM64TargetInfo>(Triple, Opts);
184 return std::make_unique<AArch64leTargetInfo>(Triple, Opts);
187 case llvm::Triple::aarch64_be:
189 case llvm::Triple::FreeBSD:
190 return std::make_unique<FreeBSDTargetInfo<AArch64beTargetInfo>>(Triple,
192 case llvm::Triple::Fuchsia:
193 return std::make_unique<FuchsiaTargetInfo<AArch64beTargetInfo>>(Triple,
195 case llvm::Triple::Linux:
196 return std::make_unique<LinuxTargetInfo<AArch64beTargetInfo>>(Triple,
198 case llvm::Triple::NetBSD:
199 return std::make_unique<NetBSDTargetInfo<AArch64beTargetInfo>>(Triple,
202 return std::make_unique<AArch64beTargetInfo>(Triple, Opts);
205 case llvm::Triple::arm:
206 case llvm::Triple::thumb:
207 if (Triple.isOSBinFormatMachO())
208 return std::make_unique<DarwinARMTargetInfo>(Triple, Opts);
211 case llvm::Triple::Linux:
212 switch (Triple.getEnvironment()) {
214 return std::make_unique<LinuxTargetInfo<ARMleTargetInfo>>(Triple, Opts);
215 case llvm::Triple::OpenHOS:
216 return std::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
218 case llvm::Triple::LiteOS:
219 return std::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
220 case llvm::Triple::FreeBSD:
221 return std::make_unique<FreeBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
222 case llvm::Triple::NetBSD:
223 return std::make_unique<NetBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
224 case llvm::Triple::OpenBSD:
225 return std::make_unique<OpenBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
226 case llvm::Triple::RTEMS:
227 return std::make_unique<RTEMSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
228 case llvm::Triple::Haiku:
229 return std::make_unique<HaikuTargetInfo<ARMleTargetInfo>>(Triple, Opts);
230 case llvm::Triple::Win32:
231 switch (Triple.getEnvironment()) {
232 case llvm::Triple::Cygnus:
233 return std::make_unique<CygwinARMTargetInfo>(Triple, Opts);
234 case llvm::Triple::GNU:
235 return std::make_unique<MinGWARMTargetInfo>(Triple, Opts);
236 case llvm::Triple::Itanium:
237 return std::make_unique<ItaniumWindowsARMleTargetInfo>(Triple, Opts);
238 case llvm::Triple::MSVC:
240 return std::make_unique<MicrosoftARMleTargetInfo>(Triple, Opts);
243 return std::make_unique<ARMleTargetInfo>(Triple, Opts);
246 case llvm::Triple::armeb:
247 case llvm::Triple::thumbeb:
248 if (Triple.isOSDarwin())
249 return std::make_unique<DarwinARMTargetInfo>(Triple, Opts);
250 else if (Triple.isAppleMachO())
251 return std::make_unique<AppleMachOARMTargetInfo>(Triple, Opts);
254 case llvm::Triple::Linux:
255 return std::make_unique<LinuxTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
256 case llvm::Triple::NetBSD:
257 return std::make_unique<NetBSDTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
258 case llvm::Triple::RTEMS:
259 return std::make_unique<RTEMSTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
261 return std::make_unique<ARMbeTargetInfo>(Triple, Opts);
264 case llvm::Triple::avr:
265 return std::make_unique<AVRTargetInfo>(Triple, Opts);
266 case llvm::Triple::bpfeb:
267 case llvm::Triple::bpfel:
268 return std::make_unique<BPFTargetInfo>(Triple, Opts);
270 case llvm::Triple::msp430:
271 return std::make_unique<MSP430TargetInfo>(Triple, Opts);
273 case llvm::Triple::mips:
275 case llvm::Triple::Linux:
276 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
277 case llvm::Triple::RTEMS:
278 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
279 case llvm::Triple::FreeBSD:
280 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
281 case llvm::Triple::NetBSD:
282 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
284 return std::make_unique<MipsTargetInfo>(Triple, Opts);
287 case llvm::Triple::mipsel:
289 case llvm::Triple::Linux:
290 switch (Triple.getEnvironment()) {
292 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
293 case llvm::Triple::OpenHOS:
294 return std::make_unique<OHOSTargetInfo<MipsTargetInfo>>(Triple, Opts);
296 case llvm::Triple::RTEMS:
297 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
298 case llvm::Triple::FreeBSD:
299 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
300 case llvm::Triple::NetBSD:
301 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
302 case llvm::Triple::Win32:
303 switch (Triple.getEnvironment()) {
304 case llvm::Triple::GNU:
305 return std::make_unique<MinGWMipsTargetInfo>(Triple, Opts);
306 case llvm::Triple::MSVC:
308 return std::make_unique<MicrosoftMipsTargetInfo>(Triple, Opts);
311 return std::make_unique<MipsTargetInfo>(Triple, Opts);
314 case llvm::Triple::mips64:
316 case llvm::Triple::Linux:
317 return std::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
318 case llvm::Triple::RTEMS:
319 return std::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
320 case llvm::Triple::FreeBSD:
321 return std::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
322 case llvm::Triple::NetBSD:
323 return std::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
324 case llvm::Triple::OpenBSD:
325 return std::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
327 return std::make_unique<MipsTargetInfo>(Triple, Opts);
330 case llvm::Triple::mips64el:
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::m68k:
348 case llvm::Triple::Linux:
349 return std::make_unique<LinuxTargetInfo<M68kTargetInfo>>(Triple, Opts);
350 case llvm::Triple::NetBSD:
351 return std::make_unique<NetBSDTargetInfo<M68kTargetInfo>>(Triple, Opts);
353 return std::make_unique<M68kTargetInfo>(Triple, Opts);
356 case llvm::Triple::ppc:
358 case llvm::Triple::Linux:
359 return std::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
360 case llvm::Triple::FreeBSD:
361 return std::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
362 case llvm::Triple::NetBSD:
363 return std::make_unique<NetBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
364 case llvm::Triple::OpenBSD:
365 return std::make_unique<OpenBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
366 case llvm::Triple::RTEMS:
367 return std::make_unique<RTEMSTargetInfo<PPC32TargetInfo>>(Triple, Opts);
368 case llvm::Triple::AIX:
369 return std::make_unique<AIXPPC32TargetInfo>(Triple, Opts);
371 return std::make_unique<PPC32TargetInfo>(Triple, Opts);
374 case llvm::Triple::ppcle:
376 case llvm::Triple::Linux:
377 return std::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
378 case llvm::Triple::FreeBSD:
379 return std::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
381 return std::make_unique<PPC32TargetInfo>(Triple, Opts);
384 case llvm::Triple::ppc64:
386 case llvm::Triple::Linux:
387 return std::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
388 case llvm::Triple::Lv2:
389 return std::make_unique<PS3PPUTargetInfo<PPC64TargetInfo>>(Triple, Opts);
390 case llvm::Triple::FreeBSD:
391 return std::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
392 case llvm::Triple::NetBSD:
393 return std::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
394 case llvm::Triple::OpenBSD:
395 return std::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
396 case llvm::Triple::AIX:
397 return std::make_unique<AIXPPC64TargetInfo>(Triple, Opts);
399 return std::make_unique<PPC64TargetInfo>(Triple, Opts);
402 case llvm::Triple::ppc64le:
404 case llvm::Triple::Linux:
405 return std::make_unique<LinuxTargetInfo<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);
413 return std::make_unique<PPC64TargetInfo>(Triple, Opts);
416 case llvm::Triple::nvptx:
417 return std::make_unique<NVPTXTargetInfo>(Triple, Opts,
419 case llvm::Triple::nvptx64:
420 return std::make_unique<NVPTXTargetInfo>(Triple, Opts,
423 case llvm::Triple::amdgcn:
424 case llvm::Triple::r600:
425 return std::make_unique<AMDGPUTargetInfo>(Triple, Opts);
427 case llvm::Triple::riscv32:
429 case llvm::Triple::NetBSD:
430 return std::make_unique<NetBSDTargetInfo<RISCV32TargetInfo>>(Triple,
432 case llvm::Triple::Linux:
433 return std::make_unique<LinuxTargetInfo<RISCV32TargetInfo>>(Triple, Opts);
435 return std::make_unique<RISCV32TargetInfo>(Triple, Opts);
438 case llvm::Triple::riscv64:
440 case llvm::Triple::FreeBSD:
441 return std::make_unique<FreeBSDTargetInfo<RISCV64TargetInfo>>(Triple,
443 case llvm::Triple::NetBSD:
444 return std::make_unique<NetBSDTargetInfo<RISCV64TargetInfo>>(Triple,
446 case llvm::Triple::OpenBSD:
447 return std::make_unique<OpenBSDTargetInfo<RISCV64TargetInfo>>(Triple,
449 case llvm::Triple::Fuchsia:
450 return std::make_unique<FuchsiaTargetInfo<RISCV64TargetInfo>>(Triple,
452 case llvm::Triple::Haiku:
453 return std::make_unique<HaikuTargetInfo<RISCV64TargetInfo>>(Triple,
455 case llvm::Triple::Linux:
456 switch (Triple.getEnvironment()) {
458 return std::make_unique<LinuxTargetInfo<RISCV64TargetInfo>>(Triple,
460 case llvm::Triple::OpenHOS:
461 return std::make_unique<OHOSTargetInfo<RISCV64TargetInfo>>(Triple,
464 case llvm::Triple::Managarm:
465 return std::make_unique<ManagarmTargetInfo<RISCV64TargetInfo>>(Triple,
468 return std::make_unique<RISCV64TargetInfo>(Triple, Opts);
471 case llvm::Triple::sparc:
473 case llvm::Triple::Linux:
474 return std::make_unique<LinuxTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
475 case llvm::Triple::Solaris:
476 return std::make_unique<SolarisTargetInfo<SparcV8TargetInfo>>(Triple,
478 case llvm::Triple::NetBSD:
479 return std::make_unique<NetBSDTargetInfo<SparcV8TargetInfo>>(Triple,
481 case llvm::Triple::RTEMS:
482 return std::make_unique<RTEMSTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
484 return std::make_unique<SparcV8TargetInfo>(Triple, Opts);
487 case llvm::Triple::sparcel:
489 case llvm::Triple::Linux:
490 return std::make_unique<LinuxTargetInfo<SparcV8elTargetInfo>>(Triple,
492 case llvm::Triple::RTEMS:
493 return std::make_unique<RTEMSTargetInfo<SparcV8elTargetInfo>>(Triple,
496 return std::make_unique<SparcV8elTargetInfo>(Triple, Opts);
499 case llvm::Triple::sparcv9:
501 case llvm::Triple::Linux:
502 return std::make_unique<LinuxTargetInfo<SparcV9TargetInfo>>(Triple, Opts);
503 case llvm::Triple::Solaris:
504 return std::make_unique<SolarisTargetInfo<SparcV9TargetInfo>>(Triple,
506 case llvm::Triple::NetBSD:
507 return std::make_unique<NetBSDTargetInfo<SparcV9TargetInfo>>(Triple,
509 case llvm::Triple::OpenBSD:
510 return std::make_unique<OpenBSDTargetInfo<SparcV9TargetInfo>>(Triple,
512 case llvm::Triple::FreeBSD:
513 return std::make_unique<FreeBSDTargetInfo<SparcV9TargetInfo>>(Triple,
516 return std::make_unique<SparcV9TargetInfo>(Triple, Opts);
519 case llvm::Triple::systemz:
521 case llvm::Triple::Linux:
522 return std::make_unique<LinuxTargetInfo<SystemZTargetInfo>>(Triple, Opts);
523 case llvm::Triple::ZOS:
524 return std::make_unique<ZOSTargetInfo<SystemZTargetInfo>>(Triple, Opts);
526 return std::make_unique<SystemZTargetInfo>(Triple, Opts);
529 case llvm::Triple::tce:
530 return std::make_unique<TCETargetInfo>(Triple, Opts);
532 case llvm::Triple::tcele:
533 return std::make_unique<TCELETargetInfo>(Triple, Opts);
535 case llvm::Triple::x86:
536 if (Triple.isOSDarwin())
537 return std::make_unique<DarwinI386TargetInfo>(Triple, Opts);
538 else if (Triple.isAppleMachO())
539 return std::make_unique<AppleMachOI386TargetInfo>(Triple, Opts);
542 case llvm::Triple::Linux: {
543 switch (Triple.getEnvironment()) {
545 return std::make_unique<LinuxTargetInfo<X86_32TargetInfo>>(Triple,
547 case llvm::Triple::Android:
548 return std::make_unique<AndroidX86_32TargetInfo>(Triple, Opts);
551 case llvm::Triple::DragonFly:
552 return std::make_unique<DragonFlyBSDTargetInfo<X86_32TargetInfo>>(Triple,
554 case llvm::Triple::NetBSD:
555 return std::make_unique<NetBSDI386TargetInfo>(Triple, Opts);
556 case llvm::Triple::OpenBSD:
557 return std::make_unique<OpenBSDI386TargetInfo>(Triple, Opts);
558 case llvm::Triple::FreeBSD:
559 return std::make_unique<FreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
561 case llvm::Triple::Fuchsia:
562 return std::make_unique<FuchsiaTargetInfo<X86_32TargetInfo>>(Triple,
564 case llvm::Triple::KFreeBSD:
565 return std::make_unique<KFreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
567 case llvm::Triple::Solaris:
568 return std::make_unique<SolarisTargetInfo<X86_32TargetInfo>>(Triple,
570 case llvm::Triple::Win32: {
571 switch (Triple.getEnvironment()) {
572 case llvm::Triple::Cygnus:
573 return std::make_unique<CygwinX86_32TargetInfo>(Triple, Opts);
574 case llvm::Triple::GNU:
575 return std::make_unique<MinGWX86_32TargetInfo>(Triple, Opts);
576 case llvm::Triple::Itanium:
577 case llvm::Triple::MSVC:
579 return std::make_unique<MicrosoftX86_32TargetInfo>(Triple, Opts);
582 case llvm::Triple::Haiku:
583 return std::make_unique<HaikuX86_32TargetInfo>(Triple, Opts);
584 case llvm::Triple::RTEMS:
585 return std::make_unique<RTEMSX86_32TargetInfo>(Triple, Opts);
586 case llvm::Triple::ELFIAMCU:
587 return std::make_unique<MCUX86_32TargetInfo>(Triple, Opts);
588 case llvm::Triple::Hurd:
589 return std::make_unique<HurdTargetInfo<X86_32TargetInfo>>(Triple, Opts);
591 return std::make_unique<X86_32TargetInfo>(Triple, Opts);
594 case llvm::Triple::x86_64:
595 if (Triple.isOSDarwin() || Triple.isOSBinFormatMachO())
596 return std::make_unique<DarwinX86_64TargetInfo>(Triple, Opts);
599 case llvm::Triple::Linux: {
600 switch (Triple.getEnvironment()) {
602 return std::make_unique<LinuxTargetInfo<X86_64TargetInfo>>(Triple,
604 case llvm::Triple::Android:
605 return std::make_unique<AndroidX86_64TargetInfo>(Triple, Opts);
606 case llvm::Triple::OpenHOS:
607 return std::make_unique<OHOSX86_64TargetInfo>(Triple, Opts);
610 case llvm::Triple::DragonFly:
611 return std::make_unique<DragonFlyBSDTargetInfo<X86_64TargetInfo>>(Triple,
613 case llvm::Triple::NetBSD:
614 return std::make_unique<NetBSDTargetInfo<X86_64TargetInfo>>(Triple, Opts);
615 case llvm::Triple::OpenBSD:
616 return std::make_unique<OpenBSDX86_64TargetInfo>(Triple, Opts);
617 case llvm::Triple::FreeBSD:
618 return std::make_unique<FreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
620 case llvm::Triple::Fuchsia:
621 return std::make_unique<FuchsiaTargetInfo<X86_64TargetInfo>>(Triple,
623 case llvm::Triple::KFreeBSD:
624 return std::make_unique<KFreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
626 case llvm::Triple::Solaris:
627 return std::make_unique<SolarisTargetInfo<X86_64TargetInfo>>(Triple,
629 case llvm::Triple::UEFI:
630 return std::make_unique<UEFIX86_64TargetInfo>(Triple, Opts);
632 case llvm::Triple::Win32: {
633 switch (Triple.getEnvironment()) {
634 case llvm::Triple::Cygnus:
635 return std::make_unique<CygwinX86_64TargetInfo>(Triple, Opts);
636 case llvm::Triple::GNU:
637 return std::make_unique<MinGWX86_64TargetInfo>(Triple, Opts);
638 case llvm::Triple::MSVC:
640 return std::make_unique<MicrosoftX86_64TargetInfo>(Triple, Opts);
643 case llvm::Triple::Haiku:
644 return std::make_unique<HaikuTargetInfo<X86_64TargetInfo>>(Triple, Opts);
645 case llvm::Triple::PS4:
646 return std::make_unique<PS4OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
647 case llvm::Triple::PS5:
648 return std::make_unique<PS5OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
649 case llvm::Triple::Hurd:
650 return std::make_unique<HurdTargetInfo<X86_64TargetInfo>>(Triple, Opts);
651 case llvm::Triple::Managarm:
652 return std::make_unique<ManagarmTargetInfo<X86_64TargetInfo>>(Triple,
655 return std::make_unique<X86_64TargetInfo>(Triple, Opts);
658 case llvm::Triple::spir: {
659 if (os != llvm::Triple::UnknownOS ||
660 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
662 return std::make_unique<SPIR32TargetInfo>(Triple, Opts);
664 case llvm::Triple::spir64: {
665 if (os != llvm::Triple::UnknownOS ||
666 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
668 return std::make_unique<SPIR64TargetInfo>(Triple, Opts);
670 case llvm::Triple::spirv: {
671 return std::make_unique<SPIRVTargetInfo>(Triple, Opts);
673 case llvm::Triple::spirv32: {
674 if (os != llvm::Triple::UnknownOS ||
675 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
677 return std::make_unique<SPIRV32TargetInfo>(Triple, Opts);
679 case llvm::Triple::spirv64: {
680 if (os != llvm::Triple::UnknownOS ||
681 Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) {
682 if (os == llvm::Triple::OSType::AMDHSA)
683 return std::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts);
686 if (Triple.getVendor() == llvm::Triple::Intel)
687 return std::make_unique<SPIRV64IntelTargetInfo>(Triple, Opts);
688 return std::make_unique<SPIRV64TargetInfo>(Triple, Opts);
690 case llvm::Triple::wasm32:
691 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
692 Triple.getVendor() != llvm::Triple::UnknownVendor ||
693 !Triple.isOSBinFormatWasm())
696 case llvm::Triple::WASI:
697 return std::make_unique<WASITargetInfo<WebAssembly32TargetInfo>>(Triple,
699 case llvm::Triple::Emscripten:
700 return std::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
702 case llvm::Triple::UnknownOS:
703 return std::make_unique<WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>>(
708 case llvm::Triple::wasm64:
709 if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
710 Triple.getVendor() != llvm::Triple::UnknownVendor ||
711 !Triple.isOSBinFormatWasm())
714 case llvm::Triple::WASI:
715 return std::make_unique<WASITargetInfo<WebAssembly64TargetInfo>>(Triple,
717 case llvm::Triple::Emscripten:
718 return std::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
720 case llvm::Triple::UnknownOS:
721 return std::make_unique<WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>>(
727 case llvm::Triple::dxil:
728 return std::make_unique<DirectXTargetInfo>(Triple, Opts);
730 case llvm::Triple::ve:
731 return std::make_unique<LinuxTargetInfo<VETargetInfo>>(Triple, Opts);
733 case llvm::Triple::csky:
735 case llvm::Triple::Linux:
736 return std::make_unique<LinuxTargetInfo<CSKYTargetInfo>>(Triple, Opts);
738 return std::make_unique<CSKYTargetInfo>(Triple, Opts);
740 case llvm::Triple::loongarch32:
742 case llvm::Triple::Linux:
743 return std::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple,
746 return std::make_unique<LoongArch32TargetInfo>(Triple, Opts);
748 case llvm::Triple::loongarch64:
750 case llvm::Triple::Linux:
751 switch (Triple.getEnvironment()) {
753 return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple,
755 case llvm::Triple::OpenHOS:
756 return std::make_unique<OHOSTargetInfo<LoongArch64TargetInfo>>(Triple,
759 case llvm::Triple::FreeBSD:
760 return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
762 case llvm::Triple::OpenBSD:
763 return std::make_unique<OpenBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
766 return std::make_unique<LoongArch64TargetInfo>(Triple, Opts);
769 case llvm::Triple::xtensa:
770 return std::make_unique<XtensaTargetInfo>(Triple, Opts);