13#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_X86_H
14#define LLVM_CLANG_LIB_BASIC_TARGETS_X86_H
20#include "llvm/Support/Compiler.h"
21#include "llvm/TargetParser/Triple.h"
22#include "llvm/TargetParser/X86TargetParser.h"
72 enum XOPEnum { NoXOP, SSE4A, FMA4, XOP } XOPLevel = NoXOP;
77 bool HasPCLMUL =
false;
78 bool HasVPCLMULQDQ =
false;
80 bool HasLZCNT =
false;
81 bool HasRDRND =
false;
82 bool HasFSGSBASE =
false;
85 bool HasPOPCNT =
false;
87 bool HasPRFCHW =
false;
88 bool HasRDSEED =
false;
94 bool HasAVX10_1 =
false;
95 bool HasAVX10_1_512 =
false;
96 bool HasAVX10_2 =
false;
97 bool HasAVX10_2_512 =
false;
98 bool HasEVEX512 =
false;
99 bool HasAVX512CD =
false;
100 bool HasAVX512VPOPCNTDQ =
false;
101 bool HasAVX512VNNI =
false;
102 bool HasAVX512FP16 =
false;
103 bool HasAVX512BF16 =
false;
104 bool HasAVX512DQ =
false;
105 bool HasAVX512BITALG =
false;
106 bool HasAVX512BW =
false;
107 bool HasAVX512VL =
false;
108 bool HasAVX512VBMI =
false;
109 bool HasAVX512VBMI2 =
false;
110 bool HasAVXIFMA =
false;
111 bool HasAVX512IFMA =
false;
112 bool HasAVX512VP2INTERSECT =
false;
114 bool HasSHA512 =
false;
115 bool HasSHSTK =
false;
120 bool HasCX16 =
false;
121 bool HasFXSR =
false;
122 bool HasXSAVE =
false;
123 bool HasXSAVEOPT =
false;
124 bool HasXSAVEC =
false;
125 bool HasXSAVES =
false;
126 bool HasMWAITX =
false;
127 bool HasCLZERO =
false;
128 bool HasCLDEMOTE =
false;
129 bool HasPCONFIG =
false;
131 bool HasCLFLUSHOPT =
false;
132 bool HasCLWB =
false;
133 bool HasMOVBE =
false;
134 bool HasMOVRS =
false;
135 bool HasPREFETCHI =
false;
136 bool HasRDPID =
false;
137 bool HasRDPRU =
false;
138 bool HasRetpolineExternalThunk =
false;
139 bool HasLAHFSAHF =
false;
140 bool HasWBNOINVD =
false;
141 bool HasWAITPKG =
false;
142 bool HasMOVDIRI =
false;
143 bool HasMOVDIR64B =
false;
144 bool HasPTWRITE =
false;
145 bool HasINVPCID =
false;
146 bool HasENQCMD =
false;
147 bool HasAVXVNNIINT16 =
false;
148 bool HasAMXFP16 =
false;
149 bool HasCMPCCXADD =
false;
150 bool HasRAOINT =
false;
151 bool HasAVXVNNIINT8 =
false;
152 bool HasAVXNECONVERT =
false;
154 bool HasWIDEKL =
false;
155 bool HasHRESET =
false;
156 bool HasAVXVNNI =
false;
157 bool HasAMXTILE =
false;
158 bool HasAMXINT8 =
false;
159 bool HasAMXBF16 =
false;
160 bool HasAMXCOMPLEX =
false;
161 bool HasAMXFP8 =
false;
162 bool HasAMXMOVRS =
false;
163 bool HasAMXTRANSPOSE =
false;
164 bool HasAMXAVX512 =
false;
165 bool HasAMXTF32 =
false;
166 bool HasSERIALIZE =
false;
167 bool HasTSXLDTRK =
false;
168 bool HasUSERMSR =
false;
169 bool HasUINTR =
false;
170 bool HasCRC32 =
false;
172 bool HasEGPR =
false;
173 bool HasPush2Pop2 =
false;
176 bool HasCCMP =
false;
180 bool HasInlineAsmUseGPR32 =
false;
181 bool HasBranchHint =
false;
184 llvm::X86::CPUKind CPU = llvm::X86::CK_None;
186 enum FPMathKind { FP_Default, FP_SSE, FP_387 } FPMath = FP_Default;
191 BFloat16Width = BFloat16Align = 16;
192 BFloat16Format = &llvm::APFloat::BFloat();
193 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
196 HasUnalignedAccess =
true;
199 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
205 return LongDoubleFormat == &llvm::APFloat::IEEEquad() ?
"g" :
"e";
210 return SSELevel == NoSSE ? LangOptions::FPEvalMethodKind::FEM_Extended
211 : LangOptions::FPEvalMethodKind::FEM_Source;
226 return RegName ==
"esp" || RegName ==
"rsp";
233 bool validateCpuSupports(StringRef FeatureStr)
const override;
235 bool validateCpuIs(StringRef FeatureStr)
const override;
237 bool validateCPUSpecificCPUDispatch(StringRef Name)
const override;
239 char CPUSpecificManglingCharacter(StringRef Name)
const override;
241 void getCPUSpecificCPUDispatchFeatures(
245 std::optional<unsigned> getCPUCacheLineSize()
const override;
247 bool validateAsmConstraint(
const char *&Name,
251 bool &HasSizeMismatch)
const override {
254 if (RegName ==
"esp" || RegName ==
"ebp") {
256 HasSizeMismatch = RegSize != 32;
263 bool validateOutputSize(
const llvm::StringMap<bool> &FeatureMap,
264 StringRef Constraint,
unsigned Size)
const override;
266 bool validateInputSize(
const llvm::StringMap<bool> &FeatureMap,
267 StringRef Constraint,
unsigned Size)
const override;
271 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
273 return TargetInfo::checkCFProtectionReturnSupported(Diags);
278 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
280 return TargetInfo::checkCFProtectionBranchSupported(Diags);
283 virtual bool validateOperandSize(
const llvm::StringMap<bool> &FeatureMap,
284 StringRef Constraint,
unsigned Size)
const;
286 std::string convertConstraint(
const char *&Constraint)
const override;
288 return "~{dirflag},~{fpsr},~{flags}";
293 StringRef::iterator I,
E;
294 for (I = Constraint.begin(),
E = Constraint.end(); I !=
E; ++I) {
295 if (isalpha(*I) || *I ==
'@')
319 if ((++I !=
E) && ((*I ==
'0') || (*I ==
'z')))
335 void setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name,
336 bool Enabled)
const final;
341 const std::vector<std::string> &FeaturesVec)
const override;
343 bool isValidFeatureName(StringRef Name)
const override;
345 bool hasFeature(StringRef Feature)
const final;
347 bool handleTargetFeatures(std::vector<std::string> &Features,
351 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX512F)
353 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX)
355 if (getTriple().getArch() == llvm::Triple::x86 && !HasMMX)
365 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
366 return llvm::X86::parseArchX86(Name, Only64Bit) != llvm::X86::CK_None;
370 if (Name ==
"generic")
376 return llvm::X86::parseTuneCPU(Name) != llvm::X86::CK_None;
382 bool setCPU(
const std::string &Name)
override {
383 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
384 CPU = llvm::X86::parseArchX86(Name, Only64Bit);
385 return CPU != llvm::X86::CK_None;
390 bool setFPMath(StringRef Name)
override;
393 return getTriple().getArch() != llvm::Triple::x86;
429 unsigned TargetAddrSpace = getTargetAddressSpace(AS);
432 if (TargetAddrSpace ==
ptr64)
438 return getPointerWidthV(AddrSpace);
448 DoubleAlign = LongLongAlign = 32;
449 LongDoubleWidth = 96;
450 LongDoubleAlign = 32;
452 resetDataLayout(Triple.isOSBinFormatMachO()
453 ?
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
454 "128-f64:32:64-f80:32-n8:16:32-S128"
455 :
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
456 "128-f64:32:64-f80:32-n8:16:32-S128",
457 Triple.isOSBinFormatMachO() ?
"_" :
"");
458 SizeType = UnsignedInt;
459 PtrDiffType = SignedInt;
460 IntPtrType = SignedInt;
464 RealTypeUsesObjCFPRetMask =
465 (
unsigned)(FloatModeKind::Float | FloatModeKind::Double |
466 FloatModeKind::LongDouble);
469 MaxAtomicPromoteWidth = 64;
470 MaxAtomicInlineWidth = 32;
474 return TargetInfo::CharPtrBuiltinVaList;
486 StringRef Constraint,
unsigned Size)
const override {
487 switch (Constraint[0]) {
504 return X86TargetInfo::validateOperandSize(FeatureMap, Constraint, Size);
509 MaxAtomicInlineWidth = 64;
516 return llvm::IntegerType::MAX_INT_BITS;
532 SizeType = UnsignedLong;
533 IntPtrType = SignedLong;
534 PtrDiffType = SignedLong;
551 LongDoubleWidth = 128;
552 LongDoubleAlign = 128;
554 MaxVectorAlign = 256;
556 llvm::Triple
T = llvm::Triple(Triple);
558 UseSignedCharForObjCBool =
false;
559 SizeType = UnsignedLong;
560 IntPtrType = SignedLong;
561 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-"
562 "f64:32:64-f80:128-n8:16:32-S128",
564 HasAlignMac68kSupport =
true;
585 DoubleAlign = LongLongAlign = 64;
587 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
588 bool IsMSVC = getTriple().isWindowsMSVCEnvironment();
589 std::string Layout = IsWinCOFF ?
"e-m:x" :
"e-m:e";
590 Layout +=
"-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-";
591 Layout += IsMSVC ?
"f80:128" :
"f80:32";
592 Layout +=
"-n8:16:32-a:0:32-S32";
593 resetDataLayout(Layout, IsWinCOFF ?
"_" :
"");
604 LongDoubleWidth = LongDoubleAlign = 64;
605 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
610 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
614 Builder.defineMacro(
"_M_IX86",
"600");
629 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
630 Builder.defineMacro(
"_X86_");
639 this->WCharType = TargetInfo::UnsignedShort;
640 DoubleAlign = LongLongAlign = 64;
641 resetDataLayout(
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-"
642 "i128:128-f80:32-n8:16:32-a:0:32-S32",
648 X86_32TargetInfo::getTargetDefines(Opts, Builder);
649 Builder.defineMacro(
"_X86_");
650 Builder.defineMacro(
"__CYGWIN__");
651 Builder.defineMacro(
"__CYGWIN32__");
655 Builder.defineMacro(
"_GNU_SOURCE");
669 Builder.defineMacro(
"__INTEL__");
678 LongDoubleWidth = 64;
679 DefaultAlignForAttributeAligned = 32;
680 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
681 resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-"
682 "f64:32-f128:32-n8:16:32-a:0:32-S32");
683 WIntType = UnsignedInt;
688 return CC ==
CC_C ? CCCR_OK : CCCR_Warning;
693 X86_32TargetInfo::getTargetDefines(Opts, Builder);
694 Builder.defineMacro(
"__iamcu");
695 Builder.defineMacro(
"__iamcu__");
706 SizeType = UnsignedLong;
707 IntPtrType = SignedLong;
708 PtrDiffType = SignedLong;
713 X86_32TargetInfo::getTargetDefines(Opts, Builder);
714 Builder.defineMacro(
"__INTEL__");
715 Builder.defineMacro(
"__rtems__");
724 const bool IsX32 = getTriple().isX32();
726 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
727 LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
728 LongDoubleWidth = 128;
729 LongDoubleAlign = 128;
730 LargeArrayMinWidth = 128;
731 LargeArrayAlign = 128;
733 SizeType = IsX32 ? UnsignedInt : UnsignedLong;
734 PtrDiffType = IsX32 ? SignedInt : SignedLong;
735 IntPtrType = IsX32 ? SignedInt : SignedLong;
736 IntMaxType = IsX32 ? SignedLongLong : SignedLong;
737 Int64Type = IsX32 ? SignedLongLong : SignedLong;
741 resetDataLayout(IsX32 ?
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
742 "i64:64-i128:128-f80:128-n8:16:32:64-S128"
743 : IsWinCOFF ?
"e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:"
744 "64-i128:128-f80:128-n8:16:32:64-S128"
745 :
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:"
746 "64-i128:128-f80:128-n8:16:32:64-S128");
749 RealTypeUsesObjCFPRetMask = (
unsigned)FloatModeKind::LongDouble;
752 ComplexLongDoubleUsesFP2Ret =
true;
755 HasBuiltinMSVaList =
true;
758 MaxAtomicPromoteWidth = 128;
759 MaxAtomicInlineWidth = 64;
763 return TargetInfo::X86_64ABIBuiltinVaList;
805 bool &HasSizeMismatch)
const override {
808 if (RegName ==
"rsp" || RegName ==
"rbp") {
810 HasSizeMismatch = RegSize != 64;
815 return X86TargetInfo::validateGlobalRegisterVariable(RegName, RegSize,
821 MaxAtomicInlineWidth = 128;
828 return llvm::IntegerType::MAX_INT_BITS;
838 this->TheCXXABI.set(TargetCXXABI::Microsoft);
840 this->resetDataLayout(
"e-m:w-p270:32:32-p271:32:32-p272:64:64-"
841 "i64:64-i128:128-f80:128-n8:16:32:64-S128");
845 return TargetInfo::CharPtrBuiltinVaList;
860 return CCK_MicrosoftWin64;
870 LongWidth = LongAlign = 32;
871 DoubleAlign = LongLongAlign = 64;
872 IntMaxType = SignedLongLong;
873 Int64Type = SignedLongLong;
874 SizeType = UnsignedLongLong;
875 PtrDiffType = SignedLongLong;
876 IntPtrType = SignedLongLong;
880 return TargetInfo::CharPtrBuiltinVaList;
914 LongDoubleWidth = LongDoubleAlign = 64;
915 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
920 WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
921 Builder.defineMacro(
"_M_X64",
"100");
922 Builder.defineMacro(
"_M_AMD64",
"100");
927 return CCK_MicrosoftWin64;
939 LongDoubleWidth = LongDoubleAlign = 128;
940 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
950 this->WCharType = TargetInfo::UnsignedShort;
951 TLSSupported =
false;
956 X86_64TargetInfo::getTargetDefines(Opts, Builder);
957 Builder.defineMacro(
"__x86_64__");
958 Builder.defineMacro(
"__CYGWIN__");
959 Builder.defineMacro(
"__CYGWIN64__");
963 Builder.defineMacro(
"_GNU_SOURCE");
972 Int64Type = SignedLongLong;
974 llvm::Triple
T = llvm::Triple(Triple);
976 UseSignedCharForObjCBool =
false;
977 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-"
978 "f80:128-n8:16:32:64-S128",
999 IntMaxType = SignedLongLong;
1000 Int64Type = SignedLongLong;
1011 LongDoubleWidth = 64;
1012 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
1022 LongDoubleFormat = &llvm::APFloat::IEEEquad();
1033 LongDoubleWidth = 64;
1034 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
1044 LongDoubleFormat = &llvm::APFloat::IEEEquad();
Provides LLVM's BitmaskEnum facility to enumeration types declared in namespace clang.
static uint64_t getFMVPriority(const TargetInfo &TI, const CodeGenFunction::FMVResolverOption &RO)
static unsigned getCharWidth(tok::TokenKind kind, const TargetInfo &Target)
static bool hasFeature(StringRef Feature, const LangOptions &LangOpts, const TargetInfo &Target)
Determine whether a translation unit built using the current language options has the given feature.
Defines the clang::TargetOptions class.
Concrete class used by the front-end to report problems and issues.
FPEvalMethodKind
Possible float expression evaluation method choices.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Exposes information about the current target.
BuiltinVaListKind
The different kinds of __builtin_va_list types defined by the target implementation.
Options for controlling the target.
AndroidX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
AndroidX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
AppleMachOI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
CygwinX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
CygwinX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
DarwinI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
DarwinX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
HaikuX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MCUX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool allowsLargerPreferedTypeAlignment() const override
Whether target allows to overalign ABI-specified preferred alignment.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MicrosoftX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
TargetInfo::CallingConvKind getCallingConvKind(bool ClangABICompat4) const override
MicrosoftX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MinGWX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
MinGWX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
NetBSDI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OHOSX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OHOSX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OpenBSDI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OpenBSDX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
RTEMSX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
UEFIX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
BuiltinVaListKind getBuiltinVaListKind() const override
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
TargetInfo::CallingConvKind getCallingConvKind(bool ClangABICompat4) const override
WindowsX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
WindowsX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
BuiltinVaListKind getBuiltinVaListKind() const override
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
bool isSPRegName(StringRef RegName) const override
bool isValidTuneCPUName(StringRef Name) const override
Determine whether this TargetInfo supports the given CPU name for tuning.
bool supportsCpuSupports() const override
bool isValidCPUName(StringRef Name) const override
Determine whether this TargetInfo supports the given CPU name.
bool setCPU(const std::string &Name) override
Target the specified CPU.
X86TargetInfo(const llvm::Triple &Triple, const TargetOptions &)
bool supportsExtendIntArgs() const override
Whether the option -fextend-arguments={32,64} is supported on the target.
CallingConv getDefaultCallingConv() const override
Gets the default calling convention for the given target and declaration context.
bool useFP16ConversionIntrinsics() const override
Check whether llvm intrinsics such as llvm.convert.to.fp16 should be used to convert to and from __fp...
bool hasSjLjLowering() const override
Controls if __builtin_longjmp / __builtin_setjmp can be lowered to llvm.eh.sjlj.longjmp / llvm....
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
bool supportsCpuIs() const override
bool supportsCpuInit() const override
bool checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const override
Check if the target supports CFProtection branch.
StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override
Extracts a register from the passed constraint (if it is a single-register constraint) and the asm la...
std::string_view getClobbers() const override
Returns a string of target-specific clobbers, in LLVM format.
bool supportSourceEvalMethod() const override
bool checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const override
Check if the target supports CFProtection return.
LangOptions::FPEvalMethodKind getFPEvalMethod() const override
Return the value for the C99 FLT_EVAL_METHOD macro.
uint64_t getPointerWidthV(LangAS AS) const override
void setSupportedOpenCLOpts() override
Set supported OpenCL extensions and optional core features.
bool supportsTargetAttributeTune() const override
Determine whether this TargetInfo supports tune in target attribute.
const char * getLongDoubleMangling() const override
Return the mangled code of long double.
bool checkArithmeticFenceSupported() const override
Controls if __arithmetic_fence is supported in the targeted backend.
bool validateGlobalRegisterVariable(StringRef RegName, unsigned RegSize, bool &HasSizeMismatch) const override
Validate register name used for global register variables.
StringRef getABI() const override
Get the ABI currently in use.
ArrayRef< TargetInfo::GCCRegAlias > getGCCRegAliases() const override
uint64_t getPointerAlignV(LangAS AddrSpace) const override
X86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
size_t getMaxBitIntWidth() const override
void setMaxAtomicWidth() override
Set the maximum inline or promote width lock-free atomic operation for the given target.
int getEHDataRegisterNumber(unsigned RegNo) const override
Return the register number that __builtin_eh_return_regno would return with the specified argument.
bool hasBitIntType() const override
Determine whether the _BitInt type is supported on this target.
bool validateOperandSize(const llvm::StringMap< bool > &FeatureMap, StringRef Constraint, unsigned Size) const override
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
bool validateGlobalRegisterVariable(StringRef RegName, unsigned RegSize, bool &HasSizeMismatch) const override
Validate register name used for global register variables.
bool hasInt128Type() const override
Determine whether the __int128 type is supported on this target.
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
CallingConv getDefaultCallingConv() const override
Gets the default calling convention for the given target and declaration context.
bool hasBitIntType() const override
Determine whether the _BitInt type is supported on this target.
int getEHDataRegisterNumber(unsigned RegNo) const override
Return the register number that __builtin_eh_return_regno would return with the specified argument.
void setMaxAtomicWidth() override
Set the maximum inline or promote width lock-free atomic operation for the given target.
size_t getMaxBitIntWidth() const override
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
X86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
unsigned getUnwindWordWidth() const override
unsigned getRegisterWidth() const override
Return the "preferred" register width on this target.
Defines the clang::TargetInfo interface.
static const unsigned X86AddrSpaceMap[]
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.
The JSON file list parser is used to communicate input to InstallAPI.
LangAS
Defines the address space values used by the address space qualifier of QualType.
const FunctionProtoType * T
CallingConv
CallingConv - Specifies the calling convention that a function uses.