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" 
   75  enum XOPEnum { NoXOP, SSE4A, FMA4, XOP } XOPLevel = NoXOP;
 
   76  enum AddrSpace { ptr32_sptr = 270, ptr32_uptr = 271, ptr64 = 272 };
 
   80  bool HasPCLMUL = 
false;
 
   81  bool HasVPCLMULQDQ = 
false;
 
   83  bool HasLZCNT = 
false;
 
   84  bool HasRDRND = 
false;
 
   85  bool HasFSGSBASE = 
false;
 
   88  bool HasPOPCNT = 
false;
 
   90  bool HasPRFCHW = 
false;
 
   91  bool HasRDSEED = 
false;
 
   97  bool HasAVX10_1 = 
false;
 
   98  bool HasAVX10_2 = 
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;
 
  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)
 
 
  278    if (
CPU == llvm::X86::CK_None || 
CPU >= llvm::X86::CK_PentiumPro)
 
 
  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;
 
  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;
 
 
  431    if (TargetAddrSpace == ptr32_sptr || TargetAddrSpace == ptr32_uptr)
 
  433    if (TargetAddrSpace == ptr64)
 
 
  444    IsOpenCL = Opts.OpenCL;
 
 
  448  bool IsOpenCL = 
false;
 
 
  461                        ? 
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:" 
  462                          "128-f64:32:64-f80:32-n8:16:32-S128" 
  463                        : 
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:" 
  464                          "128-f64:32:64-f80:32-n8:16:32-S128",
 
  465                    Triple.isOSBinFormatMachO() ? 
"_" : 
"");
 
 
  494                           StringRef Constraint, 
unsigned Size)
 const override {
 
  495    switch (Constraint[0]) {
 
 
  524    return llvm::IntegerType::MAX_INT_BITS;
 
 
 
  564    llvm::Triple 
T = llvm::Triple(Triple);
 
  569    resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-" 
  570                    "f64:32:64-f80:128-n8:16:32-S128",
 
 
 
  596    bool IsMSVC = 
getTriple().isWindowsMSVCEnvironment();
 
  597    std::string Layout = IsWinCOFF ? 
"e-m:x" : 
"e-m:e";
 
  598    Layout += 
"-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-";
 
  599    Layout += IsMSVC ? 
"f80:128" : 
"f80:32";
 
  600    Layout += 
"-n8:16:32-a:0:32-S32";
 
 
 
  622    Builder.defineMacro(
"_M_IX86", 
"600");
 
 
 
  638    Builder.defineMacro(
"_X86_");
 
 
 
  651    resetDataLayout(
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-" 
  652                    "i128:128-f80:32-n8:16:32-a:0:32-S32",
 
 
  659    Builder.defineMacro(
"_X86_");
 
  660    Builder.defineMacro(
"__CYGWIN__");
 
  661    Builder.defineMacro(
"__CYGWIN32__");
 
  665      Builder.defineMacro(
"_GNU_SOURCE");
 
 
 
  679    Builder.defineMacro(
"__INTEL__");
 
 
 
  691    resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-" 
  692                    "f64:32-f128:32-n8:16:32-a:0:32-S32");
 
 
  704    Builder.defineMacro(
"__iamcu");
 
  705    Builder.defineMacro(
"__iamcu__");
 
 
 
  724    Builder.defineMacro(
"__INTEL__");
 
  725    Builder.defineMacro(
"__rtems__");
 
 
 
  751    resetDataLayout(IsX32 ? 
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-" 
  752                            "i64:64-i128:128-f80:128-n8:16:32:64-S128" 
  753                    : IsWinCOFF ? 
"e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:" 
  754                                  "64-i128:128-f80:128-n8:16:32:64-S128" 
  755                                : 
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:" 
  756                                  "64-i128:128-f80:128-n8:16:32:64-S128");
 
 
  816                                      bool &HasSizeMismatch)
 const override {
 
  819    if (RegName == 
"rsp" || RegName == 
"rbp") {
 
  821      HasSizeMismatch = RegSize != 64;
 
 
  838    return llvm::IntegerType::MAX_INT_BITS;
 
 
  844    IsOpenCL = Opts.OpenCL;
 
 
  848  bool IsOpenCL = 
false;
 
 
  862    this->
TheCXXABI.set(TargetCXXABI::Microsoft);
 
  875                          "i64:64-i128:128-f80:128-n8:16:32:64-S128");
 
 
 
  956    Builder.defineMacro(
"_M_X64", 
"100");
 
  957    Builder.defineMacro(
"_M_AMD64", 
"100");
 
 
 
  993    Builder.defineMacro(
"__x86_64__");
 
  994    Builder.defineMacro(
"__CYGWIN__");
 
  995    Builder.defineMacro(
"__CYGWIN64__");
 
  999      Builder.defineMacro(
"_GNU_SOURCE");
 
 
 
 1037    llvm::Triple 
T = llvm::Triple(Triple);
 
 1040    resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-" 
 1041                    "f80:128-n8:16:32:64-S128",
 
 
 
Provides LLVM's BitmaskEnum facility to enumeration types declared in namespace clang.
static llvm::APInt 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.
@ FEM_Extended
Use extended type for fp arithmetic.
@ FEM_Source
Use the declared type for fp arithmetic.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
TargetInfo(const llvm::Triple &T)
virtual bool checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const
Check if the target supports CFProtection return.
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
const LangASMap * AddrSpaceMap
void resetDataLayout(StringRef DL, const char *UserLabelPrefix="")
BuiltinVaListKind
The different kinds of __builtin_va_list types defined by the target implementation.
@ CharPtrBuiltinVaList
typedef char* __builtin_va_list;
@ X86_64ABIBuiltinVaList
__builtin_va_list as defined by the x86-64 ABI: http://refspecs.linuxbase.org/elf/x86_64-abi-0....
bool UseMicrosoftManglingForC
virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const =0
===-— Other target property query methods -----------------------—===//
unsigned HasUnalignedAccess
virtual void adjust(DiagnosticsEngine &Diags, LangOptions &Opts, const TargetInfo *Aux)
Set forced language options.
unsigned char MaxAtomicPromoteWidth
unsigned RealTypeUsesObjCFPRetMask
virtual void supportAllOpenCLOpts(bool V=true)
unsigned ComplexLongDoubleUsesFP2Ret
unsigned getTargetAddressSpace(LangAS AS) const
unsigned HasAlignMac68kSupport
virtual bool checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const
Check if the target supports CFProtection branch.
unsigned char MaxAtomicInlineWidth
unsigned HasBuiltinMSVaList
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)
AppleMachOTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
CygwinX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
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
Perform initialization based on the user configured set of features (e.g., +sse4).
DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
DarwinX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
Perform initialization based on the user configured set of features (e.g., +sse4).
HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
HaikuX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
LinuxTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
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
===-— Other target property query methods -----------------------—===//
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
===-— Other target property query methods -----------------------—===//
MicrosoftX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
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
===-— Other target property query methods -----------------------—===//
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)
NetBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OHOSTargetInfo(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)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
OpenBSDI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OpenBSDTargetInfo(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
===-— Other target property query methods -----------------------—===//
UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
UEFIX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
TargetInfo::CallingConvKind getCallingConvKind(bool ClangABICompat4) const override
WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
WindowsX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
WindowsX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
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.
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.
virtual bool validateOperandSize(const llvm::StringMap< bool > &FeatureMap, StringRef Constraint, unsigned Size) const
bool checkArithmeticFenceSupported() const override
Controls if __arithmetic_fence is supported in the targeted backend.
void adjust(DiagnosticsEngine &Diags, LangOptions &Opts, const TargetInfo *Aux) override
Set forced language options.
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.
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
void adjust(DiagnosticsEngine &Diags, LangOptions &Opts, const TargetInfo *Aux) override
Set forced language options.
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.
const FunctionProtoType * T
LangAS
Defines the address space values used by the address space qualifier of QualType.
CallingConv
CallingConv - Specifies the calling convention that a function uses.
unsigned short SuitableAlign
unsigned char PointerWidth
const llvm::fltSemantics * LongDoubleFormat
unsigned char LargeArrayAlign
unsigned char LongLongAlign
unsigned char LargeArrayMinWidth
unsigned char PointerAlign
unsigned char BFloat16Width
unsigned char LongDoubleAlign
unsigned char LongDoubleWidth
unsigned char BFloat16Align
unsigned char DoubleAlign
unsigned UseSignedCharForObjCBool
Whether Objective-C's built-in boolean type should be signed char.
const llvm::fltSemantics * BFloat16Format
unsigned char DefaultAlignForAttributeAligned