1689db42cSShengchen Kan//===---X86InstrPredicates.td - X86 Predicate Definitions --*- tablegen -*-===// 2689db42cSShengchen Kan// 3689db42cSShengchen Kan// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4689db42cSShengchen Kan// See https://llvm.org/LICENSE.txt for license information. 5689db42cSShengchen Kan// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6689db42cSShengchen Kan// 7689db42cSShengchen Kan//===----------------------------------------------------------------------===// 8689db42cSShengchen Kan 9689db42cSShengchen Kandef TruePredicate : Predicate<"true">; 10689db42cSShengchen Kan 114daea501SShengchen Kan// Intel x86 instructions have three separate encoding spaces: legacy, VEX, and 124daea501SShengchen Kan// EVEX. Not all X86 instructions are extended for EGPR. The following is an 134daea501SShengchen Kan// overview of which instructions are extended and how we implement them. 144daea501SShengchen Kan// 154daea501SShengchen Kan// * Legacy space 164daea501SShengchen Kan// All instructions in legacy maps 0 and 1 that have explicit GPR or memory 174daea501SShengchen Kan// operands can use the REX2 prefix to access the EGPR, except XSAVE*/XRSTOR. 184daea501SShengchen Kan// 194daea501SShengchen Kan// * EVEX space 204daea501SShengchen Kan// All instructions in the EVEX space can access the EGPR in their 214daea501SShengchen Kan// register/memory operands. 224daea501SShengchen Kan// 234daea501SShengchen Kan// For the above intructions, the only difference in encoding is reflected in 244daea501SShengchen Kan// the REX2/EVEX prefix when EGPR is used, i.e. the opcode and opcode name are 254daea501SShengchen Kan// unchanged. We don’t add new entries in TD, and instead we extend GPR with 264daea501SShengchen Kan// R16-R31 and make them allocatable only when the feature EGPR is available. 274daea501SShengchen Kan// 284daea501SShengchen Kan// Besides, some instructions in legacy space with map 2/3 and VEX space are 294daea501SShengchen Kan// promoted into EVEX space. Encoding space changes after the promotion, opcode 304daea501SShengchen Kan// and opcode map may change too sometimes. For these instructions, we add new 314daea501SShengchen Kan// entries in TD to avoid overcomplicating the assembler and disassembler. 324daea501SShengchen Kan// 334daea501SShengchen Kan// HasEGPR is for the new entries and NoEGPR is for the entries before 344daea501SShengchen Kan// promotion, so that the promoted variant can be selected first to benefit RA. 35689db42cSShengchen Kandef HasEGPR : Predicate<"Subtarget->hasEGPR()">; 36689db42cSShengchen Kandef NoEGPR : Predicate<"!Subtarget->hasEGPR()">; 374daea501SShengchen Kan 384daea501SShengchen Kan// APX extends some instructions with a new form that has an extra register 394daea501SShengchen Kan// operand called a new data destination (NDD). In such forms, NDD is the new 404daea501SShengchen Kan// destination register receiving the result of the computation and all other 414daea501SShengchen Kan// operands (including the original destination operand) become read-only source 424daea501SShengchen Kan// operands. 434daea501SShengchen Kan// 444daea501SShengchen Kan// HasNDD is for the new NDD entries and NoNDD is for the legacy 2-address 454daea501SShengchen Kan// entries, so that the NDD variant can be selected first to benefit RA. 46d79ccee8SShengchen Kandef HasNDD : Predicate<"Subtarget->hasNDD()">; 47d79ccee8SShengchen Kandef NoNDD : Predicate<"!Subtarget->hasNDD()">; 48*c1a3960aSDaniel Zabawadef HasZU : Predicate<"Subtarget->hasZU()">; 497b766a6fSXinWang10def HasCF : Predicate<"Subtarget->hasCF()">; 50689db42cSShengchen Kandef HasCMOV : Predicate<"Subtarget->canUseCMOV()">; 51689db42cSShengchen Kandef NoCMOV : Predicate<"!Subtarget->canUseCMOV()">; 52689db42cSShengchen Kandef HasNOPL : Predicate<"Subtarget->hasNOPL()">; 53689db42cSShengchen Kandef HasMMX : Predicate<"Subtarget->hasMMX()">; 54689db42cSShengchen Kandef HasSSE1 : Predicate<"Subtarget->hasSSE1()">; 55689db42cSShengchen Kandef UseSSE1 : Predicate<"Subtarget->hasSSE1() && !Subtarget->hasAVX()">; 56689db42cSShengchen Kandef HasSSE2 : Predicate<"Subtarget->hasSSE2()">; 57689db42cSShengchen Kandef UseSSE2 : Predicate<"Subtarget->hasSSE2() && !Subtarget->hasAVX()">; 58689db42cSShengchen Kandef HasSSE3 : Predicate<"Subtarget->hasSSE3()">; 59689db42cSShengchen Kandef UseSSE3 : Predicate<"Subtarget->hasSSE3() && !Subtarget->hasAVX()">; 60689db42cSShengchen Kandef HasSSSE3 : Predicate<"Subtarget->hasSSSE3()">; 61689db42cSShengchen Kandef UseSSSE3 : Predicate<"Subtarget->hasSSSE3() && !Subtarget->hasAVX()">; 62689db42cSShengchen Kandef HasSSE41 : Predicate<"Subtarget->hasSSE41()">; 63689db42cSShengchen Kandef NoSSE41 : Predicate<"!Subtarget->hasSSE41()">; 64689db42cSShengchen Kandef UseSSE41 : Predicate<"Subtarget->hasSSE41() && !Subtarget->hasAVX()">; 65689db42cSShengchen Kandef HasSSE42 : Predicate<"Subtarget->hasSSE42()">; 66689db42cSShengchen Kandef UseSSE42 : Predicate<"Subtarget->hasSSE42() && !Subtarget->hasAVX()">; 67689db42cSShengchen Kandef HasSSE4A : Predicate<"Subtarget->hasSSE4A()">; 68689db42cSShengchen Kandef NoAVX : Predicate<"!Subtarget->hasAVX()">; 69689db42cSShengchen Kandef HasAVX : Predicate<"Subtarget->hasAVX()">; 70689db42cSShengchen Kandef HasAVX2 : Predicate<"Subtarget->hasAVX2()">; 71689db42cSShengchen Kandef HasAVX1Only : Predicate<"Subtarget->hasAVX() && !Subtarget->hasAVX2()">; 72689db42cSShengchen Kandef HasEVEX512 : Predicate<"Subtarget->hasEVEX512()">; 73689db42cSShengchen Kandef HasAVX10_1 : Predicate<"Subtarget->hasAVX10_1()">; 74689db42cSShengchen Kandef HasAVX10_1_512 : Predicate<"Subtarget->hasAVX10_1_512()">; 75259ca9eeSPhoebe Wangdef HasAVX10_2 : Predicate<"Subtarget->hasAVX10_2()">; 76259ca9eeSPhoebe Wangdef HasAVX10_2_512 : Predicate<"Subtarget->hasAVX10_2_512()">; 77259ca9eeSPhoebe Wangdef NoAVX10_2 : Predicate<"!Subtarget->hasAVX10_2()">; 78689db42cSShengchen Kandef HasAVX512 : Predicate<"Subtarget->hasAVX512()">; 79689db42cSShengchen Kandef UseAVX : Predicate<"Subtarget->hasAVX() && !Subtarget->hasAVX512()">; 80689db42cSShengchen Kandef UseAVX2 : Predicate<"Subtarget->hasAVX2() && !Subtarget->hasAVX512()">; 81689db42cSShengchen Kandef NoAVX512 : Predicate<"!Subtarget->hasAVX512()">; 82689db42cSShengchen Kandef HasCDI : Predicate<"Subtarget->hasCDI()">; 83689db42cSShengchen Kandef HasVPOPCNTDQ : Predicate<"Subtarget->hasVPOPCNTDQ()">; 84689db42cSShengchen Kandef HasDQI : Predicate<"Subtarget->hasDQI()">; 85689db42cSShengchen Kandef NoDQI : Predicate<"!Subtarget->hasDQI()">; 86689db42cSShengchen Kandef HasBWI : Predicate<"Subtarget->hasBWI()">; 87689db42cSShengchen Kandef NoBWI : Predicate<"!Subtarget->hasBWI()">; 88689db42cSShengchen Kandef HasVLX : Predicate<"Subtarget->hasVLX()">; 89689db42cSShengchen Kandef NoVLX : Predicate<"!Subtarget->hasVLX()">; 90689db42cSShengchen Kandef NoVLX_Or_NoBWI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasBWI()">; 91689db42cSShengchen Kandef NoVLX_Or_NoDQI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasDQI()">; 92689db42cSShengchen Kandef HasPKU : Predicate<"Subtarget->hasPKU()">; 93689db42cSShengchen Kandef HasVNNI : Predicate<"Subtarget->hasVNNI()">; 94689db42cSShengchen Kandef HasVP2INTERSECT : Predicate<"Subtarget->hasVP2INTERSECT()">; 95689db42cSShengchen Kandef HasBF16 : Predicate<"Subtarget->hasBF16()">; 96689db42cSShengchen Kandef HasFP16 : Predicate<"Subtarget->hasFP16()">; 97689db42cSShengchen Kandef HasAVXVNNIINT16 : Predicate<"Subtarget->hasAVXVNNIINT16()">; 98689db42cSShengchen Kandef HasAVXVNNIINT8 : Predicate<"Subtarget->hasAVXVNNIINT8()">; 99689db42cSShengchen Kandef HasAVXVNNI : Predicate <"Subtarget->hasAVXVNNI()">; 100689db42cSShengchen Kandef NoVLX_Or_NoVNNI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVNNI()">; 101689db42cSShengchen Kan 102689db42cSShengchen Kandef HasBITALG : Predicate<"Subtarget->hasBITALG()">; 103689db42cSShengchen Kandef HasPOPCNT : Predicate<"Subtarget->hasPOPCNT()">; 104689db42cSShengchen Kandef HasAES : Predicate<"Subtarget->hasAES()">; 105689db42cSShengchen Kandef HasVAES : Predicate<"Subtarget->hasVAES()">; 106689db42cSShengchen Kandef NoVLX_Or_NoVAES : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVAES()">; 107689db42cSShengchen Kandef HasFXSR : Predicate<"Subtarget->hasFXSR()">; 108689db42cSShengchen Kandef HasX87 : Predicate<"Subtarget->hasX87()">; 109689db42cSShengchen Kandef HasXSAVE : Predicate<"Subtarget->hasXSAVE()">; 110689db42cSShengchen Kandef HasXSAVEOPT : Predicate<"Subtarget->hasXSAVEOPT()">; 111689db42cSShengchen Kandef HasXSAVEC : Predicate<"Subtarget->hasXSAVEC()">; 112689db42cSShengchen Kandef HasXSAVES : Predicate<"Subtarget->hasXSAVES()">; 113689db42cSShengchen Kandef HasPCLMUL : Predicate<"Subtarget->hasPCLMUL()">; 114689db42cSShengchen Kandef NoVLX_Or_NoVPCLMULQDQ : 115689db42cSShengchen Kan Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVPCLMULQDQ()">; 116689db42cSShengchen Kandef HasVPCLMULQDQ : Predicate<"Subtarget->hasVPCLMULQDQ()">; 117689db42cSShengchen Kandef HasGFNI : Predicate<"Subtarget->hasGFNI()">; 118689db42cSShengchen Kandef HasFMA : Predicate<"Subtarget->hasFMA()">; 119689db42cSShengchen Kandef HasFMA4 : Predicate<"Subtarget->hasFMA4()">; 120689db42cSShengchen Kandef NoFMA4 : Predicate<"!Subtarget->hasFMA4()">; 121689db42cSShengchen Kandef HasXOP : Predicate<"Subtarget->hasXOP()">; 122689db42cSShengchen Kandef HasTBM : Predicate<"Subtarget->hasTBM()">; 123689db42cSShengchen Kandef NoTBM : Predicate<"!Subtarget->hasTBM()">; 124689db42cSShengchen Kandef HasLWP : Predicate<"Subtarget->hasLWP()">; 125689db42cSShengchen Kandef HasMOVBE : Predicate<"Subtarget->hasMOVBE()">; 12602d56801SXinWang10def NoNDD_Or_NoMOVBE : Predicate<"!Subtarget->hasNDD() || !Subtarget->hasMOVBE()">; 127689db42cSShengchen Kandef HasRDRAND : Predicate<"Subtarget->hasRDRAND()">; 128689db42cSShengchen Kandef HasF16C : Predicate<"Subtarget->hasF16C()">; 129689db42cSShengchen Kandef HasFSGSBase : Predicate<"Subtarget->hasFSGSBase()">; 130689db42cSShengchen Kandef HasLZCNT : Predicate<"Subtarget->hasLZCNT()">; 131689db42cSShengchen Kandef HasBMI : Predicate<"Subtarget->hasBMI()">; 132689db42cSShengchen Kandef HasBMI2 : Predicate<"Subtarget->hasBMI2()">; 133689db42cSShengchen Kandef NoBMI2 : Predicate<"!Subtarget->hasBMI2()">; 134689db42cSShengchen Kandef HasVBMI : Predicate<"Subtarget->hasVBMI()">; 135689db42cSShengchen Kandef HasVBMI2 : Predicate<"Subtarget->hasVBMI2()">; 136689db42cSShengchen Kandef HasIFMA : Predicate<"Subtarget->hasIFMA()">; 137689db42cSShengchen Kandef HasAVXIFMA : Predicate<"Subtarget->hasAVXIFMA()">; 138689db42cSShengchen Kandef NoVLX_Or_NoIFMA : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasIFMA()">; 139689db42cSShengchen Kandef HasRTM : Predicate<"Subtarget->hasRTM()">; 140689db42cSShengchen Kandef HasSHA : Predicate<"Subtarget->hasSHA()">; 141689db42cSShengchen Kandef HasSHA512 : Predicate<"Subtarget->hasSHA512()">; 142689db42cSShengchen Kandef HasSGX : Predicate<"Subtarget->hasSGX()">; 143689db42cSShengchen Kandef HasSM3 : Predicate<"Subtarget->hasSM3()">; 144689db42cSShengchen Kandef HasRDSEED : Predicate<"Subtarget->hasRDSEED()">; 145689db42cSShengchen Kandef HasSSEPrefetch : Predicate<"Subtarget->hasSSEPrefetch()">; 146689db42cSShengchen Kandef HasPRFCHW : Predicate<"Subtarget->hasPRFCHW()">; 147689db42cSShengchen Kandef HasPREFETCHI : Predicate<"Subtarget->hasPREFETCHI()">; 148689db42cSShengchen Kandef HasPrefetchW : Predicate<"Subtarget->hasPrefetchW()">; 149689db42cSShengchen Kandef HasLAHFSAHF : Predicate<"Subtarget->hasLAHFSAHF()">; 150689db42cSShengchen Kandef HasLAHFSAHF64 : Predicate<"Subtarget->hasLAHFSAHF64()">; 151689db42cSShengchen Kandef HasMWAITX : Predicate<"Subtarget->hasMWAITX()">; 152689db42cSShengchen Kandef HasCLZERO : Predicate<"Subtarget->hasCLZERO()">; 153689db42cSShengchen Kandef HasCLDEMOTE : Predicate<"Subtarget->hasCLDEMOTE()">; 154689db42cSShengchen Kandef HasMOVDIRI : Predicate<"Subtarget->hasMOVDIRI()">; 155689db42cSShengchen Kandef HasMOVDIR64B : Predicate<"Subtarget->hasMOVDIR64B()">; 156c4248fa3SFreddy Yedef HasMOVRS : Predicate<"Subtarget->hasMOVRS()">; 157689db42cSShengchen Kandef HasPTWRITE : Predicate<"Subtarget->hasPTWRITE()">; 158689db42cSShengchen Kandef FPStackf32 : Predicate<"!Subtarget->hasSSE1()">; 159689db42cSShengchen Kandef FPStackf64 : Predicate<"!Subtarget->hasSSE2()">; 160689db42cSShengchen Kandef HasSHSTK : Predicate<"Subtarget->hasSHSTK()">; 161689db42cSShengchen Kandef HasSM4 : Predicate<"Subtarget->hasSM4()">; 162689db42cSShengchen Kandef HasCLFLUSH : Predicate<"Subtarget->hasCLFLUSH()">; 163689db42cSShengchen Kandef HasCLFLUSHOPT : Predicate<"Subtarget->hasCLFLUSHOPT()">; 164689db42cSShengchen Kandef HasCLWB : Predicate<"Subtarget->hasCLWB()">; 165689db42cSShengchen Kandef HasWBNOINVD : Predicate<"Subtarget->hasWBNOINVD()">; 166689db42cSShengchen Kandef HasRDPID : Predicate<"Subtarget->hasRDPID()">; 167689db42cSShengchen Kandef HasRDPRU : Predicate<"Subtarget->hasRDPRU()">; 168689db42cSShengchen Kandef HasWAITPKG : Predicate<"Subtarget->hasWAITPKG()">; 169689db42cSShengchen Kandef HasINVPCID : Predicate<"Subtarget->hasINVPCID()">; 170689db42cSShengchen Kandef HasCX8 : Predicate<"Subtarget->hasCX8()">; 171689db42cSShengchen Kandef HasCX16 : Predicate<"Subtarget->hasCX16()">; 172689db42cSShengchen Kandef HasPCONFIG : Predicate<"Subtarget->hasPCONFIG()">; 173689db42cSShengchen Kandef HasENQCMD : Predicate<"Subtarget->hasENQCMD()">; 174689db42cSShengchen Kandef HasAMXFP16 : Predicate<"Subtarget->hasAMXFP16()">; 175689db42cSShengchen Kandef HasCMPCCXADD : Predicate<"Subtarget->hasCMPCCXADD()">; 176689db42cSShengchen Kandef HasAVXNECONVERT : Predicate<"Subtarget->hasAVXNECONVERT()">; 177689db42cSShengchen Kandef HasKL : Predicate<"Subtarget->hasKL()">; 178689db42cSShengchen Kandef HasRAOINT : Predicate<"Subtarget->hasRAOINT()">; 179689db42cSShengchen Kandef HasWIDEKL : Predicate<"Subtarget->hasWIDEKL()">; 180689db42cSShengchen Kandef HasHRESET : Predicate<"Subtarget->hasHRESET()">; 181689db42cSShengchen Kandef HasSERIALIZE : Predicate<"Subtarget->hasSERIALIZE()">; 182689db42cSShengchen Kandef HasTSXLDTRK : Predicate<"Subtarget->hasTSXLDTRK()">; 183689db42cSShengchen Kandef HasAMXTILE : Predicate<"Subtarget->hasAMXTILE()">; 184689db42cSShengchen Kandef HasAMXBF16 : Predicate<"Subtarget->hasAMXBF16()">; 185689db42cSShengchen Kandef HasAMXINT8 : Predicate<"Subtarget->hasAMXINT8()">; 186689db42cSShengchen Kandef HasAMXCOMPLEX : Predicate<"Subtarget->hasAMXCOMPLEX()">; 18781271624SFeng Zoudef HasAMXFP8 : Predicate<"Subtarget->hasAMXFP8()">; 188f77101eaSMalay Sanghidef HasAMXMOVRS : Predicate<"Subtarget->hasAMXMOVRS()">; 189c72a751dSPhoebe Wangdef HasAMXTRANSPOSE : Predicate<"Subtarget->hasAMXTRANSPOSE()">; 1908f440137SPhoebe Wangdef HasAMXAVX512 : Predicate<"Subtarget->hasAMXAVX512()">; 191eddb79d5SFeng Zoudef HasAMXTF32 : Predicate<"Subtarget->hasAMXTF32()">; 192689db42cSShengchen Kandef HasUINTR : Predicate<"Subtarget->hasUINTR()">; 193689db42cSShengchen Kandef HasUSERMSR : Predicate<"Subtarget->hasUSERMSR()">; 194689db42cSShengchen Kandef HasCRC32 : Predicate<"Subtarget->hasCRC32()">; 195689db42cSShengchen Kan 196689db42cSShengchen Kandef HasX86_64 : Predicate<"Subtarget->hasX86_64()">; 197689db42cSShengchen Kandef Not64BitMode : Predicate<"!Subtarget->is64Bit()">, 198689db42cSShengchen Kan AssemblerPredicate<(all_of (not Is64Bit)), "Not 64-bit mode">; 199689db42cSShengchen Kandef In64BitMode : Predicate<"Subtarget->is64Bit()">, 200689db42cSShengchen Kan AssemblerPredicate<(all_of Is64Bit), "64-bit mode">; 201689db42cSShengchen Kandef IsLP64 : Predicate<"Subtarget->isTarget64BitLP64()">; 202689db42cSShengchen Kandef NotLP64 : Predicate<"!Subtarget->isTarget64BitLP64()">; 203689db42cSShengchen Kandef In16BitMode : Predicate<"Subtarget->is16Bit()">, 204689db42cSShengchen Kan AssemblerPredicate<(all_of Is16Bit), "16-bit mode">; 205689db42cSShengchen Kandef Not16BitMode : Predicate<"!Subtarget->is16Bit()">, 206689db42cSShengchen Kan AssemblerPredicate<(all_of (not Is16Bit)), "Not 16-bit mode">; 207689db42cSShengchen Kandef In32BitMode : Predicate<"Subtarget->is32Bit()">, 208689db42cSShengchen Kan AssemblerPredicate<(all_of Is32Bit), "32-bit mode">; 209689db42cSShengchen Kandef IsWin64 : Predicate<"Subtarget->isTargetWin64()">; 210689db42cSShengchen Kandef NotWin64 : Predicate<"!Subtarget->isTargetWin64()">; 211689db42cSShengchen Kandef NotWin64WithoutFP : Predicate<"!Subtarget->isTargetWin64() ||" 212689db42cSShengchen Kan "Subtarget->getFrameLowering()->hasFP(*MF)"> { 213689db42cSShengchen Kan let RecomputePerFunction = 1; 214689db42cSShengchen Kan} 215689db42cSShengchen Kandef IsPS : Predicate<"Subtarget->isTargetPS()">; 216689db42cSShengchen Kandef NotPS : Predicate<"!Subtarget->isTargetPS()">; 217689db42cSShengchen Kandef IsNaCl : Predicate<"Subtarget->isTargetNaCl()">; 218689db42cSShengchen Kandef NotNaCl : Predicate<"!Subtarget->isTargetNaCl()">; 219689db42cSShengchen Kandef SmallCode : Predicate<"TM.getCodeModel() == CodeModel::Small">; 220689db42cSShengchen Kandef KernelCode : Predicate<"TM.getCodeModel() == CodeModel::Kernel">; 221689db42cSShengchen Kandef NearData : Predicate<"TM.getCodeModel() == CodeModel::Small ||" 222689db42cSShengchen Kan "TM.getCodeModel() == CodeModel::Kernel">; 223689db42cSShengchen Kandef IsNotPIC : Predicate<"!TM.isPositionIndependent()">; 224689db42cSShengchen Kan 225689db42cSShengchen Kan// We could compute these on a per-module basis but doing so requires accessing 226689db42cSShengchen Kan// the Function object through the <Target>Subtarget and objections were raised 227689db42cSShengchen Kan// to that (see post-commit review comments for r301750). 228689db42cSShengchen Kanlet RecomputePerFunction = 1 in { 229689db42cSShengchen Kan def OptForSize : Predicate<"shouldOptForSize(MF)">; 230689db42cSShengchen Kan def OptForMinSize : Predicate<"MF->getFunction().hasMinSize()">; 231689db42cSShengchen Kan def OptForSpeed : Predicate<"!shouldOptForSize(MF)">; 232689db42cSShengchen Kan def UseIncDec : Predicate<"!Subtarget->slowIncDec() || " 233689db42cSShengchen Kan "shouldOptForSize(MF)">; 234689db42cSShengchen Kan def NoSSE41_Or_OptForSize : Predicate<"shouldOptForSize(MF) || " 235689db42cSShengchen Kan "!Subtarget->hasSSE41()">; 236689db42cSShengchen Kan} 237689db42cSShengchen Kan 238689db42cSShengchen Kandef CallImmAddr : Predicate<"Subtarget->isLegalToCallImmediateAddr()">; 239689db42cSShengchen Kandef FavorMemIndirectCall : Predicate<"!Subtarget->slowTwoMemOps()">; 240689db42cSShengchen Kandef HasFastMem32 : Predicate<"!Subtarget->isUnalignedMem32Slow()">; 241689db42cSShengchen Kandef HasFastLZCNT : Predicate<"Subtarget->hasFastLZCNT()">; 242689db42cSShengchen Kandef HasFastSHLDRotate : Predicate<"Subtarget->hasFastSHLDRotate()">; 243689db42cSShengchen Kandef HasERMSB : Predicate<"Subtarget->hasERMSB()">; 244689db42cSShengchen Kandef HasFSRM : Predicate<"Subtarget->hasFSRM()">; 245689db42cSShengchen Kandef HasMFence : Predicate<"Subtarget->hasMFence()">; 24661fadd0bSGaneshdef HasFastDPWSSD: Predicate<"Subtarget->hasFastDPWSSD()">; 247689db42cSShengchen Kandef UseIndirectThunkCalls : Predicate<"Subtarget->useIndirectThunkCalls()">; 248689db42cSShengchen Kandef NotUseIndirectThunkCalls : Predicate<"!Subtarget->useIndirectThunkCalls()">; 249