;
62assert(MacroName[0] !=
'_'&&
"Identifier should be in the user's namespace");
67Builder.defineMacro(MacroName);
70Builder.defineMacro(
"__"+ MacroName);
73Builder.defineMacro(
"__"+ MacroName +
"__");
77Builder.defineMacro(
"__"+ CPUName);
78Builder.defineMacro(
"__"+ CPUName +
"__");
80Builder.defineMacro(
"__tune_"+ CPUName +
"__");
88 if(Opts.DeclSpecKeyword)
89Builder.defineMacro(
"__declspec",
"__declspec");
91Builder.defineMacro(
"__declspec(a)",
"__attribute__((a))");
93 if(!Opts.MicrosoftExt) {
97 const char*CCs[] = {
"cdecl",
"stdcall",
"fastcall",
"thiscall",
"pascal"};
98 for(
const char*CC : CCs) {
99std::string GCCSpelling =
"__attribute__((__";
101GCCSpelling +=
"__))";
102Builder.defineMacro(Twine(
"_") + CC, GCCSpelling);
103Builder.defineMacro(Twine(
"__") + CC, GCCSpelling);
114llvm::Triple::OSType os = Triple.getOS();
116 switch(Triple.getArch()) {
120 casellvm::Triple::arc:
121 returnstd::make_unique<ARCTargetInfo>(Triple, Opts);
123 casellvm::Triple::xcore:
124 returnstd::make_unique<XCoreTargetInfo>(Triple, Opts);
126 casellvm::Triple::hexagon:
127 if(os == llvm::Triple::Linux &&
128Triple.getEnvironment() == llvm::Triple::Musl)
129 returnstd::make_unique<LinuxTargetInfo<HexagonTargetInfo>>(Triple, Opts);
130 returnstd::make_unique<HexagonTargetInfo>(Triple, Opts);
132 casellvm::Triple::lanai:
133 returnstd::make_unique<LanaiTargetInfo>(Triple, Opts);
135 casellvm::Triple::aarch64_32:
136 if(Triple.isOSDarwin())
137 returnstd::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
138 else if(Triple.isAppleMachO())
139 returnstd::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
142 casellvm::Triple::aarch64:
143 if(Triple.isOSDarwin())
144 returnstd::make_unique<DarwinAArch64TargetInfo>(Triple, Opts);
145 else if(Triple.isAppleMachO())
146 returnstd::make_unique<AppleMachOAArch64TargetInfo>(Triple, Opts);
149 casellvm::Triple::FreeBSD:
150 returnstd::make_unique<FreeBSDTargetInfo<AArch64leTargetInfo>>(Triple,
152 casellvm::Triple::Fuchsia:
153 returnstd::make_unique<FuchsiaTargetInfo<AArch64leTargetInfo>>(Triple,
155 casellvm::Triple::Haiku:
156 returnstd::make_unique<HaikuTargetInfo<AArch64leTargetInfo>>(Triple,
158 casellvm::Triple::Linux:
159 switch(Triple.getEnvironment()) {
161 returnstd::make_unique<LinuxTargetInfo<AArch64leTargetInfo>>(Triple,
163 casellvm::Triple::OpenHOS:
164 returnstd::make_unique<OHOSTargetInfo<AArch64leTargetInfo>>(Triple,
167 casellvm::Triple::NetBSD:
168 returnstd::make_unique<NetBSDTargetInfo<AArch64leTargetInfo>>(Triple,
170 casellvm::Triple::OpenBSD:
171 returnstd::make_unique<OpenBSDTargetInfo<AArch64leTargetInfo>>(Triple,
173 casellvm::Triple::Win32:
174 switch(Triple.getEnvironment()) {
175 casellvm::Triple::GNU:
176 returnstd::make_unique<MinGWARM64TargetInfo>(Triple, Opts);
177 casellvm::Triple::MSVC:
179 returnstd::make_unique<MicrosoftARM64TargetInfo>(Triple, Opts);
182 returnstd::make_unique<AArch64leTargetInfo>(Triple, Opts);
185 casellvm::Triple::aarch64_be:
187 casellvm::Triple::FreeBSD:
188 returnstd::make_unique<FreeBSDTargetInfo<AArch64beTargetInfo>>(Triple,
190 casellvm::Triple::Fuchsia:
191 returnstd::make_unique<FuchsiaTargetInfo<AArch64beTargetInfo>>(Triple,
193 casellvm::Triple::Linux:
194 returnstd::make_unique<LinuxTargetInfo<AArch64beTargetInfo>>(Triple,
196 casellvm::Triple::NetBSD:
197 returnstd::make_unique<NetBSDTargetInfo<AArch64beTargetInfo>>(Triple,
200 returnstd::make_unique<AArch64beTargetInfo>(Triple, Opts);
203 casellvm::Triple::arm:
204 casellvm::Triple::thumb:
205 if(Triple.isOSBinFormatMachO())
206 returnstd::make_unique<DarwinARMTargetInfo>(Triple, Opts);
209 casellvm::Triple::Linux:
210 switch(Triple.getEnvironment()) {
212 returnstd::make_unique<LinuxTargetInfo<ARMleTargetInfo>>(Triple, Opts);
213 casellvm::Triple::OpenHOS:
214 returnstd::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
216 casellvm::Triple::LiteOS:
217 returnstd::make_unique<OHOSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
218 casellvm::Triple::FreeBSD:
219 returnstd::make_unique<FreeBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
220 casellvm::Triple::NetBSD:
221 returnstd::make_unique<NetBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
222 casellvm::Triple::OpenBSD:
223 returnstd::make_unique<OpenBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
224 casellvm::Triple::RTEMS:
225 returnstd::make_unique<RTEMSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
226 casellvm::Triple::Haiku:
227 returnstd::make_unique<HaikuTargetInfo<ARMleTargetInfo>>(Triple, Opts);
228 casellvm::Triple::NaCl:
229 returnstd::make_unique<NaClTargetInfo<ARMleTargetInfo>>(Triple, Opts);
230 casellvm::Triple::Win32:
231 switch(Triple.getEnvironment()) {
232 casellvm::Triple::Cygnus:
233 returnstd::make_unique<CygwinARMTargetInfo>(Triple, Opts);
234 casellvm::Triple::GNU:
235 returnstd::make_unique<MinGWARMTargetInfo>(Triple, Opts);
236 casellvm::Triple::Itanium:
237 returnstd::make_unique<ItaniumWindowsARMleTargetInfo>(Triple, Opts);
238 casellvm::Triple::MSVC:
240 returnstd::make_unique<MicrosoftARMleTargetInfo>(Triple, Opts);
243 returnstd::make_unique<ARMleTargetInfo>(Triple, Opts);
246 casellvm::Triple::armeb:
247 casellvm::Triple::thumbeb:
248 if(Triple.isOSDarwin())
249 returnstd::make_unique<DarwinARMTargetInfo>(Triple, Opts);
250 else if(Triple.isAppleMachO())
251 returnstd::make_unique<AppleMachOARMTargetInfo>(Triple, Opts);
254 casellvm::Triple::Linux:
255 returnstd::make_unique<LinuxTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
256 casellvm::Triple::NetBSD:
257 returnstd::make_unique<NetBSDTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
258 casellvm::Triple::RTEMS:
259 returnstd::make_unique<RTEMSTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
260 casellvm::Triple::NaCl:
261 returnstd::make_unique<NaClTargetInfo<ARMbeTargetInfo>>(Triple, Opts);
263 returnstd::make_unique<ARMbeTargetInfo>(Triple, Opts);
266 casellvm::Triple::avr:
267 returnstd::make_unique<AVRTargetInfo>(Triple, Opts);
268 casellvm::Triple::bpfeb:
269 casellvm::Triple::bpfel:
270 returnstd::make_unique<BPFTargetInfo>(Triple, Opts);
272 casellvm::Triple::msp430:
273 returnstd::make_unique<MSP430TargetInfo>(Triple, Opts);
275 casellvm::Triple::mips:
277 casellvm::Triple::Linux:
278 returnstd::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
279 casellvm::Triple::RTEMS:
280 returnstd::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
281 casellvm::Triple::FreeBSD:
282 returnstd::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
283 casellvm::Triple::NetBSD:
284 returnstd::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
286 returnstd::make_unique<MipsTargetInfo>(Triple, Opts);
289 casellvm::Triple::mipsel:
291 casellvm::Triple::Linux:
292 switch(Triple.getEnvironment()) {
294 returnstd::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
295 casellvm::Triple::OpenHOS:
296 returnstd::make_unique<OHOSTargetInfo<MipsTargetInfo>>(Triple, Opts);
298 casellvm::Triple::RTEMS:
299 returnstd::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
300 casellvm::Triple::FreeBSD:
301 returnstd::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
302 casellvm::Triple::NetBSD:
303 returnstd::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
304 casellvm::Triple::NaCl:
305 returnstd::make_unique<NaClTargetInfo<NaClMips32TargetInfo>>(Triple,
307 casellvm::Triple::Win32:
308 switch(Triple.getEnvironment()) {
309 casellvm::Triple::GNU:
310 returnstd::make_unique<MinGWMipsTargetInfo>(Triple, Opts);
311 casellvm::Triple::MSVC:
313 returnstd::make_unique<MicrosoftMipsTargetInfo>(Triple, Opts);
316 returnstd::make_unique<MipsTargetInfo>(Triple, Opts);
319 casellvm::Triple::mips64:
321 casellvm::Triple::Linux:
322 returnstd::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
323 casellvm::Triple::RTEMS:
324 returnstd::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
325 casellvm::Triple::FreeBSD:
326 returnstd::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
327 casellvm::Triple::NetBSD:
328 returnstd::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
329 casellvm::Triple::OpenBSD:
330 returnstd::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
332 returnstd::make_unique<MipsTargetInfo>(Triple, Opts);
335 casellvm::Triple::mips64el:
337 casellvm::Triple::Linux:
338 returnstd::make_unique<LinuxTargetInfo<MipsTargetInfo>>(Triple, Opts);
339 casellvm::Triple::RTEMS:
340 returnstd::make_unique<RTEMSTargetInfo<MipsTargetInfo>>(Triple, Opts);
341 casellvm::Triple::FreeBSD:
342 returnstd::make_unique<FreeBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
343 casellvm::Triple::NetBSD:
344 returnstd::make_unique<NetBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
345 casellvm::Triple::OpenBSD:
346 returnstd::make_unique<OpenBSDTargetInfo<MipsTargetInfo>>(Triple, Opts);
348 returnstd::make_unique<MipsTargetInfo>(Triple, Opts);
351 casellvm::Triple::m68k:
353 casellvm::Triple::Linux:
354 returnstd::make_unique<LinuxTargetInfo<M68kTargetInfo>>(Triple, Opts);
355 casellvm::Triple::NetBSD:
356 returnstd::make_unique<NetBSDTargetInfo<M68kTargetInfo>>(Triple, Opts);
358 returnstd::make_unique<M68kTargetInfo>(Triple, Opts);
361 casellvm::Triple::ppc:
363 casellvm::Triple::Linux:
364 returnstd::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
365 casellvm::Triple::FreeBSD:
366 returnstd::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
367 casellvm::Triple::NetBSD:
368 returnstd::make_unique<NetBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
369 casellvm::Triple::OpenBSD:
370 returnstd::make_unique<OpenBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
371 casellvm::Triple::RTEMS:
372 returnstd::make_unique<RTEMSTargetInfo<PPC32TargetInfo>>(Triple, Opts);
373 casellvm::Triple::AIX:
374 returnstd::make_unique<AIXPPC32TargetInfo>(Triple, Opts);
376 returnstd::make_unique<PPC32TargetInfo>(Triple, Opts);
379 casellvm::Triple::ppcle:
381 casellvm::Triple::Linux:
382 returnstd::make_unique<LinuxTargetInfo<PPC32TargetInfo>>(Triple, Opts);
383 casellvm::Triple::FreeBSD:
384 returnstd::make_unique<FreeBSDTargetInfo<PPC32TargetInfo>>(Triple, Opts);
386 returnstd::make_unique<PPC32TargetInfo>(Triple, Opts);
389 casellvm::Triple::ppc64:
391 casellvm::Triple::Linux:
392 returnstd::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
393 casellvm::Triple::Lv2:
394 returnstd::make_unique<PS3PPUTargetInfo<PPC64TargetInfo>>(Triple, Opts);
395 casellvm::Triple::FreeBSD:
396 returnstd::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
397 casellvm::Triple::NetBSD:
398 returnstd::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
399 casellvm::Triple::OpenBSD:
400 returnstd::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
401 casellvm::Triple::AIX:
402 returnstd::make_unique<AIXPPC64TargetInfo>(Triple, Opts);
404 returnstd::make_unique<PPC64TargetInfo>(Triple, Opts);
407 casellvm::Triple::ppc64le:
409 casellvm::Triple::Linux:
410 returnstd::make_unique<LinuxTargetInfo<PPC64TargetInfo>>(Triple, Opts);
411 casellvm::Triple::FreeBSD:
412 returnstd::make_unique<FreeBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
413 casellvm::Triple::NetBSD:
414 returnstd::make_unique<NetBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
415 casellvm::Triple::OpenBSD:
416 returnstd::make_unique<OpenBSDTargetInfo<PPC64TargetInfo>>(Triple, Opts);
418 returnstd::make_unique<PPC64TargetInfo>(Triple, Opts);
421 casellvm::Triple::nvptx:
422 returnstd::make_unique<NVPTXTargetInfo>(Triple, Opts,
424 casellvm::Triple::nvptx64:
425 returnstd::make_unique<NVPTXTargetInfo>(Triple, Opts,
428 casellvm::Triple::amdgcn:
429 casellvm::Triple::r600:
430 returnstd::make_unique<AMDGPUTargetInfo>(Triple, Opts);
432 casellvm::Triple::riscv32:
434 casellvm::Triple::NetBSD:
435 returnstd::make_unique<NetBSDTargetInfo<RISCV32TargetInfo>>(Triple,
437 casellvm::Triple::Linux:
438 returnstd::make_unique<LinuxTargetInfo<RISCV32TargetInfo>>(Triple, Opts);
440 returnstd::make_unique<RISCV32TargetInfo>(Triple, Opts);
443 casellvm::Triple::riscv64:
445 casellvm::Triple::FreeBSD:
446 returnstd::make_unique<FreeBSDTargetInfo<RISCV64TargetInfo>>(Triple,
448 casellvm::Triple::NetBSD:
449 returnstd::make_unique<NetBSDTargetInfo<RISCV64TargetInfo>>(Triple,
451 casellvm::Triple::OpenBSD:
452 returnstd::make_unique<OpenBSDTargetInfo<RISCV64TargetInfo>>(Triple,
454 casellvm::Triple::Fuchsia:
455 returnstd::make_unique<FuchsiaTargetInfo<RISCV64TargetInfo>>(Triple,
457 casellvm::Triple::Haiku:
458 returnstd::make_unique<HaikuTargetInfo<RISCV64TargetInfo>>(Triple,
460 casellvm::Triple::Linux:
461 switch(Triple.getEnvironment()) {
463 returnstd::make_unique<LinuxTargetInfo<RISCV64TargetInfo>>(Triple,
465 casellvm::Triple::OpenHOS:
466 returnstd::make_unique<OHOSTargetInfo<RISCV64TargetInfo>>(Triple,
470 returnstd::make_unique<RISCV64TargetInfo>(Triple, Opts);
473 casellvm::Triple::sparc:
475 casellvm::Triple::Linux:
476 returnstd::make_unique<LinuxTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
477 casellvm::Triple::Solaris:
478 returnstd::make_unique<SolarisTargetInfo<SparcV8TargetInfo>>(Triple,
480 casellvm::Triple::NetBSD:
481 returnstd::make_unique<NetBSDTargetInfo<SparcV8TargetInfo>>(Triple,
483 casellvm::Triple::RTEMS:
484 returnstd::make_unique<RTEMSTargetInfo<SparcV8TargetInfo>>(Triple, Opts);
486 returnstd::make_unique<SparcV8TargetInfo>(Triple, Opts);
489 casellvm::Triple::sparcel:
491 casellvm::Triple::Linux:
492 returnstd::make_unique<LinuxTargetInfo<SparcV8elTargetInfo>>(Triple,
494 casellvm::Triple::RTEMS:
495 returnstd::make_unique<RTEMSTargetInfo<SparcV8elTargetInfo>>(Triple,
498 returnstd::make_unique<SparcV8elTargetInfo>(Triple, Opts);
501 casellvm::Triple::sparcv9:
503 casellvm::Triple::Linux:
504 returnstd::make_unique<LinuxTargetInfo<SparcV9TargetInfo>>(Triple, Opts);
505 casellvm::Triple::Solaris:
506 returnstd::make_unique<SolarisTargetInfo<SparcV9TargetInfo>>(Triple,
508 casellvm::Triple::NetBSD:
509 returnstd::make_unique<NetBSDTargetInfo<SparcV9TargetInfo>>(Triple,
511 casellvm::Triple::OpenBSD:
512 returnstd::make_unique<OpenBSDTargetInfo<SparcV9TargetInfo>>(Triple,
514 casellvm::Triple::FreeBSD:
515 returnstd::make_unique<FreeBSDTargetInfo<SparcV9TargetInfo>>(Triple,
518 returnstd::make_unique<SparcV9TargetInfo>(Triple, Opts);
521 casellvm::Triple::systemz:
523 casellvm::Triple::Linux:
524 returnstd::make_unique<LinuxTargetInfo<SystemZTargetInfo>>(Triple, Opts);
525 casellvm::Triple::ZOS:
526 returnstd::make_unique<ZOSTargetInfo<SystemZTargetInfo>>(Triple, Opts);
528 returnstd::make_unique<SystemZTargetInfo>(Triple, Opts);
531 casellvm::Triple::tce:
532 returnstd::make_unique<TCETargetInfo>(Triple, Opts);
534 casellvm::Triple::tcele:
535 returnstd::make_unique<TCELETargetInfo>(Triple, Opts);
537 casellvm::Triple::x86:
538 if(Triple.isOSDarwin())
539 returnstd::make_unique<DarwinI386TargetInfo>(Triple, Opts);
540 else if(Triple.isAppleMachO())
541 returnstd::make_unique<AppleMachOI386TargetInfo>(Triple, Opts);
544 casellvm::Triple::Linux: {
545 switch(Triple.getEnvironment()) {
547 returnstd::make_unique<LinuxTargetInfo<X86_32TargetInfo>>(Triple,
549 casellvm::Triple::Android:
550 returnstd::make_unique<AndroidX86_32TargetInfo>(Triple, Opts);
553 casellvm::Triple::DragonFly:
554 returnstd::make_unique<DragonFlyBSDTargetInfo<X86_32TargetInfo>>(Triple,
556 casellvm::Triple::NetBSD:
557 returnstd::make_unique<NetBSDI386TargetInfo>(Triple, Opts);
558 casellvm::Triple::OpenBSD:
559 returnstd::make_unique<OpenBSDI386TargetInfo>(Triple, Opts);
560 casellvm::Triple::FreeBSD:
561 returnstd::make_unique<FreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
563 casellvm::Triple::Fuchsia:
564 returnstd::make_unique<FuchsiaTargetInfo<X86_32TargetInfo>>(Triple,
566 casellvm::Triple::KFreeBSD:
567 returnstd::make_unique<KFreeBSDTargetInfo<X86_32TargetInfo>>(Triple,
569 casellvm::Triple::Solaris:
570 returnstd::make_unique<SolarisTargetInfo<X86_32TargetInfo>>(Triple,
572 casellvm::Triple::Win32: {
573 switch(Triple.getEnvironment()) {
574 casellvm::Triple::Cygnus:
575 returnstd::make_unique<CygwinX86_32TargetInfo>(Triple, Opts);
576 casellvm::Triple::GNU:
577 returnstd::make_unique<MinGWX86_32TargetInfo>(Triple, Opts);
578 casellvm::Triple::Itanium:
579 casellvm::Triple::MSVC:
581 returnstd::make_unique<MicrosoftX86_32TargetInfo>(Triple, Opts);
584 casellvm::Triple::Haiku:
585 returnstd::make_unique<HaikuX86_32TargetInfo>(Triple, Opts);
586 casellvm::Triple::RTEMS:
587 returnstd::make_unique<RTEMSX86_32TargetInfo>(Triple, Opts);
588 casellvm::Triple::NaCl:
589 returnstd::make_unique<NaClTargetInfo<X86_32TargetInfo>>(Triple, Opts);
590 casellvm::Triple::ELFIAMCU:
591 returnstd::make_unique<MCUX86_32TargetInfo>(Triple, Opts);
592 casellvm::Triple::Hurd:
593 returnstd::make_unique<HurdTargetInfo<X86_32TargetInfo>>(Triple, Opts);
595 returnstd::make_unique<X86_32TargetInfo>(Triple, Opts);
598 casellvm::Triple::x86_64:
599 if(Triple.isOSDarwin() || Triple.isOSBinFormatMachO())
600 returnstd::make_unique<DarwinX86_64TargetInfo>(Triple, Opts);
603 casellvm::Triple::Linux: {
604 switch(Triple.getEnvironment()) {
606 returnstd::make_unique<LinuxTargetInfo<X86_64TargetInfo>>(Triple,
608 casellvm::Triple::Android:
609 returnstd::make_unique<AndroidX86_64TargetInfo>(Triple, Opts);
610 casellvm::Triple::OpenHOS:
611 returnstd::make_unique<OHOSX86_64TargetInfo>(Triple, Opts);
614 casellvm::Triple::DragonFly:
615 returnstd::make_unique<DragonFlyBSDTargetInfo<X86_64TargetInfo>>(Triple,
617 casellvm::Triple::NetBSD:
618 returnstd::make_unique<NetBSDTargetInfo<X86_64TargetInfo>>(Triple, Opts);
619 casellvm::Triple::OpenBSD:
620 returnstd::make_unique<OpenBSDX86_64TargetInfo>(Triple, Opts);
621 casellvm::Triple::FreeBSD:
622 returnstd::make_unique<FreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
624 casellvm::Triple::Fuchsia:
625 returnstd::make_unique<FuchsiaTargetInfo<X86_64TargetInfo>>(Triple,
627 casellvm::Triple::KFreeBSD:
628 returnstd::make_unique<KFreeBSDTargetInfo<X86_64TargetInfo>>(Triple,
630 casellvm::Triple::Solaris:
631 returnstd::make_unique<SolarisTargetInfo<X86_64TargetInfo>>(Triple,
633 casellvm::Triple::UEFI:
634 returnstd::make_unique<UEFIX86_64TargetInfo>(Triple, Opts);
636 casellvm::Triple::Win32: {
637 switch(Triple.getEnvironment()) {
638 casellvm::Triple::Cygnus:
639 returnstd::make_unique<CygwinX86_64TargetInfo>(Triple, Opts);
640 casellvm::Triple::GNU:
641 returnstd::make_unique<MinGWX86_64TargetInfo>(Triple, Opts);
642 casellvm::Triple::MSVC:
644 returnstd::make_unique<MicrosoftX86_64TargetInfo>(Triple, Opts);
647 casellvm::Triple::Haiku:
648 returnstd::make_unique<HaikuTargetInfo<X86_64TargetInfo>>(Triple, Opts);
649 casellvm::Triple::NaCl:
650 returnstd::make_unique<NaClTargetInfo<X86_64TargetInfo>>(Triple, Opts);
651 casellvm::Triple::PS4:
652 returnstd::make_unique<PS4OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
653 casellvm::Triple::PS5:
654 returnstd::make_unique<PS5OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
655 casellvm::Triple::Hurd:
656 returnstd::make_unique<HurdTargetInfo<X86_64TargetInfo>>(Triple, Opts);
658 returnstd::make_unique<X86_64TargetInfo>(Triple, Opts);
661 casellvm::Triple::spir: {
662 if(os != llvm::Triple::UnknownOS ||
663Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
665 returnstd::make_unique<SPIR32TargetInfo>(Triple, Opts);
667 casellvm::Triple::spir64: {
668 if(os != llvm::Triple::UnknownOS ||
669Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
671 returnstd::make_unique<SPIR64TargetInfo>(Triple, Opts);
673 casellvm::Triple::spirv: {
674 returnstd::make_unique<SPIRVTargetInfo>(Triple, Opts);
676 casellvm::Triple::spirv32: {
677 if(os != llvm::Triple::UnknownOS ||
678Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
680 returnstd::make_unique<SPIRV32TargetInfo>(Triple, Opts);
682 casellvm::Triple::spirv64: {
683 if(os != llvm::Triple::UnknownOS ||
684Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) {
685 if(os == llvm::Triple::OSType::AMDHSA)
686 returnstd::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts);
689 returnstd::make_unique<SPIRV64TargetInfo>(Triple, Opts);
691 casellvm::Triple::wasm32:
692 if(Triple.getSubArch() != llvm::Triple::NoSubArch ||
693Triple.getVendor() != llvm::Triple::UnknownVendor ||
694!Triple.isOSBinFormatWasm())
697 casellvm::Triple::WASI:
698 returnstd::make_unique<WASITargetInfo<WebAssembly32TargetInfo>>(Triple,
700 casellvm::Triple::Emscripten:
701 returnstd::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
703 casellvm::Triple::UnknownOS:
704 returnstd::make_unique<WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>>(
709 casellvm::Triple::wasm64:
710 if(Triple.getSubArch() != llvm::Triple::NoSubArch ||
711Triple.getVendor() != llvm::Triple::UnknownVendor ||
712!Triple.isOSBinFormatWasm())
715 casellvm::Triple::WASI:
716 returnstd::make_unique<WASITargetInfo<WebAssembly64TargetInfo>>(Triple,
718 casellvm::Triple::Emscripten:
719 returnstd::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
721 casellvm::Triple::UnknownOS:
722 returnstd::make_unique<WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>>(
728 casellvm::Triple::dxil:
729 returnstd::make_unique<DirectXTargetInfo>(Triple, Opts);
731 casellvm::Triple::ve:
732 returnstd::make_unique<LinuxTargetInfo<VETargetInfo>>(Triple, Opts);
734 casellvm::Triple::csky:
736 casellvm::Triple::Linux:
737 returnstd::make_unique<LinuxTargetInfo<CSKYTargetInfo>>(Triple, Opts);
739 returnstd::make_unique<CSKYTargetInfo>(Triple, Opts);
741 casellvm::Triple::loongarch32:
743 casellvm::Triple::Linux:
744 returnstd::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple,
747 returnstd::make_unique<LoongArch32TargetInfo>(Triple, Opts);
749 casellvm::Triple::loongarch64:
751 casellvm::Triple::Linux:
752 returnstd::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple,
754 casellvm::Triple::FreeBSD:
755 returnstd::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
758 returnstd::make_unique<LoongArch64TargetInfo>(Triple, Opts);
761 casellvm::Triple::xtensa:
762 returnstd::make_unique<XtensaTargetInfo>(Triple, Opts);
773 conststd::shared_ptr<TargetOptions> &Opts) {
774llvm::Triple Triple(llvm::Triple::normalize(Opts->Triple));
779Diags.
Report(diag::err_target_unknown_triple) << Triple.str();
782 Target->TargetOpts = Opts;
785 if(!Opts->CPU.empty() && !
Target->setCPU(Opts->CPU)) {
786Diags.
Report(diag::err_target_unknown_cpu) << Opts->CPU;
788 Target->fillValidCPUList(ValidList);
789 if(!ValidList.empty())
790Diags.
Report(diag::note_valid_options) << llvm::join(ValidList,
", ");
795 if(!Opts->TuneCPU.empty() &&
796!
Target->isValidTuneCPUName(Opts->TuneCPU)) {
797Diags.
Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;
799 Target->fillValidTuneCPUList(ValidList);
800 if(!ValidList.empty())
801Diags.
Report(diag::note_valid_options) << llvm::join(ValidList,
", ");
806 if(!Opts->ABI.empty() && !
Target->setABI(Opts->ABI)) {
807Diags.
Report(diag::err_target_unknown_abi) << Opts->ABI;
812 if(!Opts->FPMath.empty() && !
Target->setFPMath(Opts->FPMath)) {
813Diags.
Report(diag::err_target_unknown_fpmath) << Opts->FPMath;
819llvm::erase_if(Opts->FeaturesAsWritten, [&](StringRef Name) {
820if (Target->isReadOnlyFeature(Name.substr(1))) {
821Diags.Report(diag::warn_fe_backend_readonly_feature_flag) << Name;
826 if(!
Target->initFeatureMap(Opts->FeatureMap, Diags, Opts->CPU,
827Opts->FeaturesAsWritten))
831Opts->Features.clear();
832 for(
const auto&F : Opts->FeatureMap)
833Opts->Features.push_back((F.getValue() ?
"+":
"-") + F.getKey().str());
836llvm::sort(Opts->Features);
838 if(!
Target->handleTargetFeatures(Opts->Features, Diags))
841 Target->setSupportedOpenCLOpts();
842 Target->setCommandLineOpenCLOpts();
843 Target->setMaxAtomicWidth();
845 if(!Opts->DarwinTargetVariantTriple.empty())
846 Target->DarwinTargetVariantTriple =
847llvm::Triple(Opts->DarwinTargetVariantTriple);
849 if(!
Target->validateTarget(Diags))
852 Target->CheckFixedPointBits();
862 autodiagnoseNotSupportedCore = [&](llvm::StringRef Name,
auto... OptArgs) {
865Diags.
Report(diag::warn_opencl_unsupported_core_feature)
866<< Name << Opts.OpenCLCPlusPlus
869#define OPENCL_GENERIC_EXTENSION(Ext, ...) \ 870 diagnoseNotSupportedCore(#Ext, __VA_ARGS__); 871#include "clang/Basic/OpenCLExtensions.def"Defines the Diagnostic-related interfaces.
llvm::MachO::Target Target
Concrete class used by the front-end to report problems and issues.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
VersionTuple getOpenCLVersionTuple() const
Return the OpenCL C or C++ version as a VersionTuple.
unsigned getOpenCLCompatibleVersion() const
Return the OpenCL version that kernel language is compatible with.
static bool diagnoseUnsupportedFeatureDependencies(const TargetInfo &TI, DiagnosticsEngine &Diags)
static bool diagnoseFeatureExtensionDifferences(const TargetInfo &TI, DiagnosticsEngine &Diags)
static bool isOpenCLOptionCoreIn(const LangOptions &LO, Args &&... args)
Exposes information about the current target.
virtual bool hasFeatureEnabled(const llvm::StringMap< bool > &Features, StringRef Name) const
Check if target has a given feature enabled.
static TargetInfo * CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr< TargetOptions > &Opts)
Construct a target for the given options.
virtual bool validateOpenCLTarget(const LangOptions &Opts, DiagnosticsEngine &Diags) const
Check that OpenCL target has valid options setting based on OpenCL version.
llvm::StringMap< bool > & getSupportedOpenCLOpts()
Get supported OpenCL extensions and optional core features.
Options for controlling the target.
LLVM_LIBRARY_VISIBILITY void defineCPUMacros(clang::MacroBuilder &Builder, llvm::StringRef CPUName, bool Tuning=true)
LLVM_LIBRARY_VISIBILITY void addCygMingDefines(const clang::LangOptions &Opts, clang::MacroBuilder &Builder)
LLVM_LIBRARY_VISIBILITY void DefineStd(clang::MacroBuilder &Builder, llvm::StringRef MacroName, const clang::LangOptions &Opts)
Define a macro name and standard variants.
std::unique_ptr< clang::TargetInfo > AllocateTarget(const llvm::Triple &Triple, const clang::TargetOptions &Opts)
The JSON file list parser is used to communicate input to InstallAPI.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4