15f757f3fSDimitry Andric//===---X86InstrPredicates.td - X86 Predicate Definitions --*- tablegen -*-===// 25f757f3fSDimitry Andric// 35f757f3fSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45f757f3fSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 55f757f3fSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65f757f3fSDimitry Andric// 75f757f3fSDimitry Andric//===----------------------------------------------------------------------===// 85f757f3fSDimitry Andric 95f757f3fSDimitry Andricdef TruePredicate : Predicate<"true">; 105f757f3fSDimitry Andric 111db9f3b2SDimitry Andric// Intel x86 instructions have three separate encoding spaces: legacy, VEX, and 121db9f3b2SDimitry Andric// EVEX. Not all X86 instructions are extended for EGPR. The following is an 131db9f3b2SDimitry Andric// overview of which instructions are extended and how we implement them. 141db9f3b2SDimitry Andric// 151db9f3b2SDimitry Andric// * Legacy space 161db9f3b2SDimitry Andric// All instructions in legacy maps 0 and 1 that have explicit GPR or memory 171db9f3b2SDimitry Andric// operands can use the REX2 prefix to access the EGPR, except XSAVE*/XRSTOR. 181db9f3b2SDimitry Andric// 191db9f3b2SDimitry Andric// * EVEX space 201db9f3b2SDimitry Andric// All instructions in the EVEX space can access the EGPR in their 211db9f3b2SDimitry Andric// register/memory operands. 221db9f3b2SDimitry Andric// 231db9f3b2SDimitry Andric// For the above intructions, the only difference in encoding is reflected in 241db9f3b2SDimitry Andric// the REX2/EVEX prefix when EGPR is used, i.e. the opcode and opcode name are 251db9f3b2SDimitry Andric// unchanged. We don’t add new entries in TD, and instead we extend GPR with 261db9f3b2SDimitry Andric// R16-R31 and make them allocatable only when the feature EGPR is available. 271db9f3b2SDimitry Andric// 281db9f3b2SDimitry Andric// Besides, some instructions in legacy space with map 2/3 and VEX space are 291db9f3b2SDimitry Andric// promoted into EVEX space. Encoding space changes after the promotion, opcode 301db9f3b2SDimitry Andric// and opcode map may change too sometimes. For these instructions, we add new 311db9f3b2SDimitry Andric// entries in TD to avoid overcomplicating the assembler and disassembler. 321db9f3b2SDimitry Andric// 331db9f3b2SDimitry Andric// HasEGPR is for the new entries and NoEGPR is for the entries before 341db9f3b2SDimitry Andric// promotion, so that the promoted variant can be selected first to benefit RA. 355f757f3fSDimitry Andricdef HasEGPR : Predicate<"Subtarget->hasEGPR()">; 365f757f3fSDimitry Andricdef NoEGPR : Predicate<"!Subtarget->hasEGPR()">; 371db9f3b2SDimitry Andric 381db9f3b2SDimitry Andric// APX extends some instructions with a new form that has an extra register 391db9f3b2SDimitry Andric// operand called a new data destination (NDD). In such forms, NDD is the new 401db9f3b2SDimitry Andric// destination register receiving the result of the computation and all other 411db9f3b2SDimitry Andric// operands (including the original destination operand) become read-only source 421db9f3b2SDimitry Andric// operands. 431db9f3b2SDimitry Andric// 441db9f3b2SDimitry Andric// HasNDD is for the new NDD entries and NoNDD is for the legacy 2-address 451db9f3b2SDimitry Andric// entries, so that the NDD variant can be selected first to benefit RA. 46647cbc5dSDimitry Andricdef HasNDD : Predicate<"Subtarget->hasNDD()">; 47647cbc5dSDimitry Andricdef NoNDD : Predicate<"!Subtarget->hasNDD()">; 48*0fca6ea1SDimitry Andricdef HasCF : Predicate<"Subtarget->hasCF()">; 495f757f3fSDimitry Andricdef HasCMOV : Predicate<"Subtarget->canUseCMOV()">; 505f757f3fSDimitry Andricdef NoCMOV : Predicate<"!Subtarget->canUseCMOV()">; 515f757f3fSDimitry Andricdef HasNOPL : Predicate<"Subtarget->hasNOPL()">; 525f757f3fSDimitry Andricdef HasMMX : Predicate<"Subtarget->hasMMX()">; 535f757f3fSDimitry Andricdef HasSSE1 : Predicate<"Subtarget->hasSSE1()">; 545f757f3fSDimitry Andricdef UseSSE1 : Predicate<"Subtarget->hasSSE1() && !Subtarget->hasAVX()">; 555f757f3fSDimitry Andricdef HasSSE2 : Predicate<"Subtarget->hasSSE2()">; 565f757f3fSDimitry Andricdef UseSSE2 : Predicate<"Subtarget->hasSSE2() && !Subtarget->hasAVX()">; 575f757f3fSDimitry Andricdef HasSSE3 : Predicate<"Subtarget->hasSSE3()">; 585f757f3fSDimitry Andricdef UseSSE3 : Predicate<"Subtarget->hasSSE3() && !Subtarget->hasAVX()">; 595f757f3fSDimitry Andricdef HasSSSE3 : Predicate<"Subtarget->hasSSSE3()">; 605f757f3fSDimitry Andricdef UseSSSE3 : Predicate<"Subtarget->hasSSSE3() && !Subtarget->hasAVX()">; 615f757f3fSDimitry Andricdef HasSSE41 : Predicate<"Subtarget->hasSSE41()">; 625f757f3fSDimitry Andricdef NoSSE41 : Predicate<"!Subtarget->hasSSE41()">; 635f757f3fSDimitry Andricdef UseSSE41 : Predicate<"Subtarget->hasSSE41() && !Subtarget->hasAVX()">; 645f757f3fSDimitry Andricdef HasSSE42 : Predicate<"Subtarget->hasSSE42()">; 655f757f3fSDimitry Andricdef UseSSE42 : Predicate<"Subtarget->hasSSE42() && !Subtarget->hasAVX()">; 665f757f3fSDimitry Andricdef HasSSE4A : Predicate<"Subtarget->hasSSE4A()">; 675f757f3fSDimitry Andricdef NoAVX : Predicate<"!Subtarget->hasAVX()">; 685f757f3fSDimitry Andricdef HasAVX : Predicate<"Subtarget->hasAVX()">; 695f757f3fSDimitry Andricdef HasAVX2 : Predicate<"Subtarget->hasAVX2()">; 705f757f3fSDimitry Andricdef HasAVX1Only : Predicate<"Subtarget->hasAVX() && !Subtarget->hasAVX2()">; 715f757f3fSDimitry Andricdef HasEVEX512 : Predicate<"Subtarget->hasEVEX512()">; 725f757f3fSDimitry Andricdef HasAVX10_1 : Predicate<"Subtarget->hasAVX10_1()">; 735f757f3fSDimitry Andricdef HasAVX10_1_512 : Predicate<"Subtarget->hasAVX10_1_512()">; 745f757f3fSDimitry Andricdef HasAVX512 : Predicate<"Subtarget->hasAVX512()">; 755f757f3fSDimitry Andricdef UseAVX : Predicate<"Subtarget->hasAVX() && !Subtarget->hasAVX512()">; 765f757f3fSDimitry Andricdef UseAVX2 : Predicate<"Subtarget->hasAVX2() && !Subtarget->hasAVX512()">; 775f757f3fSDimitry Andricdef NoAVX512 : Predicate<"!Subtarget->hasAVX512()">; 785f757f3fSDimitry Andricdef HasCDI : Predicate<"Subtarget->hasCDI()">; 795f757f3fSDimitry Andricdef HasVPOPCNTDQ : Predicate<"Subtarget->hasVPOPCNTDQ()">; 805f757f3fSDimitry Andricdef HasDQI : Predicate<"Subtarget->hasDQI()">; 815f757f3fSDimitry Andricdef NoDQI : Predicate<"!Subtarget->hasDQI()">; 825f757f3fSDimitry Andricdef HasBWI : Predicate<"Subtarget->hasBWI()">; 835f757f3fSDimitry Andricdef NoBWI : Predicate<"!Subtarget->hasBWI()">; 845f757f3fSDimitry Andricdef HasVLX : Predicate<"Subtarget->hasVLX()">; 855f757f3fSDimitry Andricdef NoVLX : Predicate<"!Subtarget->hasVLX()">; 865f757f3fSDimitry Andricdef NoVLX_Or_NoBWI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasBWI()">; 875f757f3fSDimitry Andricdef NoVLX_Or_NoDQI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasDQI()">; 885f757f3fSDimitry Andricdef HasPKU : Predicate<"Subtarget->hasPKU()">; 895f757f3fSDimitry Andricdef HasVNNI : Predicate<"Subtarget->hasVNNI()">; 905f757f3fSDimitry Andricdef HasVP2INTERSECT : Predicate<"Subtarget->hasVP2INTERSECT()">; 915f757f3fSDimitry Andricdef HasBF16 : Predicate<"Subtarget->hasBF16()">; 925f757f3fSDimitry Andricdef HasFP16 : Predicate<"Subtarget->hasFP16()">; 935f757f3fSDimitry Andricdef HasAVXVNNIINT16 : Predicate<"Subtarget->hasAVXVNNIINT16()">; 945f757f3fSDimitry Andricdef HasAVXVNNIINT8 : Predicate<"Subtarget->hasAVXVNNIINT8()">; 955f757f3fSDimitry Andricdef HasAVXVNNI : Predicate <"Subtarget->hasAVXVNNI()">; 965f757f3fSDimitry Andricdef NoVLX_Or_NoVNNI : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVNNI()">; 975f757f3fSDimitry Andric 985f757f3fSDimitry Andricdef HasBITALG : Predicate<"Subtarget->hasBITALG()">; 995f757f3fSDimitry Andricdef HasPOPCNT : Predicate<"Subtarget->hasPOPCNT()">; 1005f757f3fSDimitry Andricdef HasAES : Predicate<"Subtarget->hasAES()">; 1015f757f3fSDimitry Andricdef HasVAES : Predicate<"Subtarget->hasVAES()">; 1025f757f3fSDimitry Andricdef NoVLX_Or_NoVAES : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVAES()">; 1035f757f3fSDimitry Andricdef HasFXSR : Predicate<"Subtarget->hasFXSR()">; 1045f757f3fSDimitry Andricdef HasX87 : Predicate<"Subtarget->hasX87()">; 1055f757f3fSDimitry Andricdef HasXSAVE : Predicate<"Subtarget->hasXSAVE()">; 1065f757f3fSDimitry Andricdef HasXSAVEOPT : Predicate<"Subtarget->hasXSAVEOPT()">; 1075f757f3fSDimitry Andricdef HasXSAVEC : Predicate<"Subtarget->hasXSAVEC()">; 1085f757f3fSDimitry Andricdef HasXSAVES : Predicate<"Subtarget->hasXSAVES()">; 1095f757f3fSDimitry Andricdef HasPCLMUL : Predicate<"Subtarget->hasPCLMUL()">; 1105f757f3fSDimitry Andricdef NoVLX_Or_NoVPCLMULQDQ : 1115f757f3fSDimitry Andric Predicate<"!Subtarget->hasVLX() || !Subtarget->hasVPCLMULQDQ()">; 1125f757f3fSDimitry Andricdef HasVPCLMULQDQ : Predicate<"Subtarget->hasVPCLMULQDQ()">; 1135f757f3fSDimitry Andricdef HasGFNI : Predicate<"Subtarget->hasGFNI()">; 1145f757f3fSDimitry Andricdef HasFMA : Predicate<"Subtarget->hasFMA()">; 1155f757f3fSDimitry Andricdef HasFMA4 : Predicate<"Subtarget->hasFMA4()">; 1165f757f3fSDimitry Andricdef NoFMA4 : Predicate<"!Subtarget->hasFMA4()">; 1175f757f3fSDimitry Andricdef HasXOP : Predicate<"Subtarget->hasXOP()">; 1185f757f3fSDimitry Andricdef HasTBM : Predicate<"Subtarget->hasTBM()">; 1195f757f3fSDimitry Andricdef NoTBM : Predicate<"!Subtarget->hasTBM()">; 1205f757f3fSDimitry Andricdef HasLWP : Predicate<"Subtarget->hasLWP()">; 1215f757f3fSDimitry Andricdef HasMOVBE : Predicate<"Subtarget->hasMOVBE()">; 122*0fca6ea1SDimitry Andricdef NoNDD_Or_NoMOVBE : Predicate<"!Subtarget->hasNDD() || !Subtarget->hasMOVBE()">; 1235f757f3fSDimitry Andricdef HasRDRAND : Predicate<"Subtarget->hasRDRAND()">; 1245f757f3fSDimitry Andricdef HasF16C : Predicate<"Subtarget->hasF16C()">; 1255f757f3fSDimitry Andricdef HasFSGSBase : Predicate<"Subtarget->hasFSGSBase()">; 1265f757f3fSDimitry Andricdef HasLZCNT : Predicate<"Subtarget->hasLZCNT()">; 1275f757f3fSDimitry Andricdef HasBMI : Predicate<"Subtarget->hasBMI()">; 1285f757f3fSDimitry Andricdef HasBMI2 : Predicate<"Subtarget->hasBMI2()">; 1295f757f3fSDimitry Andricdef NoBMI2 : Predicate<"!Subtarget->hasBMI2()">; 1305f757f3fSDimitry Andricdef HasVBMI : Predicate<"Subtarget->hasVBMI()">; 1315f757f3fSDimitry Andricdef HasVBMI2 : Predicate<"Subtarget->hasVBMI2()">; 1325f757f3fSDimitry Andricdef HasIFMA : Predicate<"Subtarget->hasIFMA()">; 1335f757f3fSDimitry Andricdef HasAVXIFMA : Predicate<"Subtarget->hasAVXIFMA()">; 1345f757f3fSDimitry Andricdef NoVLX_Or_NoIFMA : Predicate<"!Subtarget->hasVLX() || !Subtarget->hasIFMA()">; 1355f757f3fSDimitry Andricdef HasRTM : Predicate<"Subtarget->hasRTM()">; 1365f757f3fSDimitry Andricdef HasSHA : Predicate<"Subtarget->hasSHA()">; 1375f757f3fSDimitry Andricdef HasSHA512 : Predicate<"Subtarget->hasSHA512()">; 1385f757f3fSDimitry Andricdef HasSGX : Predicate<"Subtarget->hasSGX()">; 1395f757f3fSDimitry Andricdef HasSM3 : Predicate<"Subtarget->hasSM3()">; 1405f757f3fSDimitry Andricdef HasRDSEED : Predicate<"Subtarget->hasRDSEED()">; 1415f757f3fSDimitry Andricdef HasSSEPrefetch : Predicate<"Subtarget->hasSSEPrefetch()">; 1425f757f3fSDimitry Andricdef HasPRFCHW : Predicate<"Subtarget->hasPRFCHW()">; 1435f757f3fSDimitry Andricdef HasPREFETCHI : Predicate<"Subtarget->hasPREFETCHI()">; 1445f757f3fSDimitry Andricdef HasPrefetchW : Predicate<"Subtarget->hasPrefetchW()">; 1455f757f3fSDimitry Andricdef HasLAHFSAHF : Predicate<"Subtarget->hasLAHFSAHF()">; 1465f757f3fSDimitry Andricdef HasLAHFSAHF64 : Predicate<"Subtarget->hasLAHFSAHF64()">; 1475f757f3fSDimitry Andricdef HasMWAITX : Predicate<"Subtarget->hasMWAITX()">; 1485f757f3fSDimitry Andricdef HasCLZERO : Predicate<"Subtarget->hasCLZERO()">; 1495f757f3fSDimitry Andricdef HasCLDEMOTE : Predicate<"Subtarget->hasCLDEMOTE()">; 1505f757f3fSDimitry Andricdef HasMOVDIRI : Predicate<"Subtarget->hasMOVDIRI()">; 1515f757f3fSDimitry Andricdef HasMOVDIR64B : Predicate<"Subtarget->hasMOVDIR64B()">; 1525f757f3fSDimitry Andricdef HasPTWRITE : Predicate<"Subtarget->hasPTWRITE()">; 1535f757f3fSDimitry Andricdef FPStackf32 : Predicate<"!Subtarget->hasSSE1()">; 1545f757f3fSDimitry Andricdef FPStackf64 : Predicate<"!Subtarget->hasSSE2()">; 1555f757f3fSDimitry Andricdef HasSHSTK : Predicate<"Subtarget->hasSHSTK()">; 1565f757f3fSDimitry Andricdef HasSM4 : Predicate<"Subtarget->hasSM4()">; 1575f757f3fSDimitry Andricdef HasCLFLUSH : Predicate<"Subtarget->hasCLFLUSH()">; 1585f757f3fSDimitry Andricdef HasCLFLUSHOPT : Predicate<"Subtarget->hasCLFLUSHOPT()">; 1595f757f3fSDimitry Andricdef HasCLWB : Predicate<"Subtarget->hasCLWB()">; 1605f757f3fSDimitry Andricdef HasWBNOINVD : Predicate<"Subtarget->hasWBNOINVD()">; 1615f757f3fSDimitry Andricdef HasRDPID : Predicate<"Subtarget->hasRDPID()">; 1625f757f3fSDimitry Andricdef HasRDPRU : Predicate<"Subtarget->hasRDPRU()">; 1635f757f3fSDimitry Andricdef HasWAITPKG : Predicate<"Subtarget->hasWAITPKG()">; 1645f757f3fSDimitry Andricdef HasINVPCID : Predicate<"Subtarget->hasINVPCID()">; 1655f757f3fSDimitry Andricdef HasCX8 : Predicate<"Subtarget->hasCX8()">; 1665f757f3fSDimitry Andricdef HasCX16 : Predicate<"Subtarget->hasCX16()">; 1675f757f3fSDimitry Andricdef HasPCONFIG : Predicate<"Subtarget->hasPCONFIG()">; 1685f757f3fSDimitry Andricdef HasENQCMD : Predicate<"Subtarget->hasENQCMD()">; 1695f757f3fSDimitry Andricdef HasAMXFP16 : Predicate<"Subtarget->hasAMXFP16()">; 1705f757f3fSDimitry Andricdef HasCMPCCXADD : Predicate<"Subtarget->hasCMPCCXADD()">; 1715f757f3fSDimitry Andricdef HasAVXNECONVERT : Predicate<"Subtarget->hasAVXNECONVERT()">; 1725f757f3fSDimitry Andricdef HasKL : Predicate<"Subtarget->hasKL()">; 1735f757f3fSDimitry Andricdef HasRAOINT : Predicate<"Subtarget->hasRAOINT()">; 1745f757f3fSDimitry Andricdef HasWIDEKL : Predicate<"Subtarget->hasWIDEKL()">; 1755f757f3fSDimitry Andricdef HasHRESET : Predicate<"Subtarget->hasHRESET()">; 1765f757f3fSDimitry Andricdef HasSERIALIZE : Predicate<"Subtarget->hasSERIALIZE()">; 1775f757f3fSDimitry Andricdef HasTSXLDTRK : Predicate<"Subtarget->hasTSXLDTRK()">; 1785f757f3fSDimitry Andricdef HasAMXTILE : Predicate<"Subtarget->hasAMXTILE()">; 1795f757f3fSDimitry Andricdef HasAMXBF16 : Predicate<"Subtarget->hasAMXBF16()">; 1805f757f3fSDimitry Andricdef HasAMXINT8 : Predicate<"Subtarget->hasAMXINT8()">; 1815f757f3fSDimitry Andricdef HasAMXCOMPLEX : Predicate<"Subtarget->hasAMXCOMPLEX()">; 1825f757f3fSDimitry Andricdef HasUINTR : Predicate<"Subtarget->hasUINTR()">; 1835f757f3fSDimitry Andricdef HasUSERMSR : Predicate<"Subtarget->hasUSERMSR()">; 1845f757f3fSDimitry Andricdef HasCRC32 : Predicate<"Subtarget->hasCRC32()">; 1855f757f3fSDimitry Andric 1865f757f3fSDimitry Andricdef HasX86_64 : Predicate<"Subtarget->hasX86_64()">; 1875f757f3fSDimitry Andricdef Not64BitMode : Predicate<"!Subtarget->is64Bit()">, 1885f757f3fSDimitry Andric AssemblerPredicate<(all_of (not Is64Bit)), "Not 64-bit mode">; 1895f757f3fSDimitry Andricdef In64BitMode : Predicate<"Subtarget->is64Bit()">, 1905f757f3fSDimitry Andric AssemblerPredicate<(all_of Is64Bit), "64-bit mode">; 1915f757f3fSDimitry Andricdef IsLP64 : Predicate<"Subtarget->isTarget64BitLP64()">; 1925f757f3fSDimitry Andricdef NotLP64 : Predicate<"!Subtarget->isTarget64BitLP64()">; 1935f757f3fSDimitry Andricdef In16BitMode : Predicate<"Subtarget->is16Bit()">, 1945f757f3fSDimitry Andric AssemblerPredicate<(all_of Is16Bit), "16-bit mode">; 1955f757f3fSDimitry Andricdef Not16BitMode : Predicate<"!Subtarget->is16Bit()">, 1965f757f3fSDimitry Andric AssemblerPredicate<(all_of (not Is16Bit)), "Not 16-bit mode">; 1975f757f3fSDimitry Andricdef In32BitMode : Predicate<"Subtarget->is32Bit()">, 1985f757f3fSDimitry Andric AssemblerPredicate<(all_of Is32Bit), "32-bit mode">; 1995f757f3fSDimitry Andricdef IsWin64 : Predicate<"Subtarget->isTargetWin64()">; 2005f757f3fSDimitry Andricdef NotWin64 : Predicate<"!Subtarget->isTargetWin64()">; 2015f757f3fSDimitry Andricdef NotWin64WithoutFP : Predicate<"!Subtarget->isTargetWin64() ||" 2025f757f3fSDimitry Andric "Subtarget->getFrameLowering()->hasFP(*MF)"> { 2035f757f3fSDimitry Andric let RecomputePerFunction = 1; 2045f757f3fSDimitry Andric} 2055f757f3fSDimitry Andricdef IsPS : Predicate<"Subtarget->isTargetPS()">; 2065f757f3fSDimitry Andricdef NotPS : Predicate<"!Subtarget->isTargetPS()">; 2075f757f3fSDimitry Andricdef IsNaCl : Predicate<"Subtarget->isTargetNaCl()">; 2085f757f3fSDimitry Andricdef NotNaCl : Predicate<"!Subtarget->isTargetNaCl()">; 2095f757f3fSDimitry Andricdef SmallCode : Predicate<"TM.getCodeModel() == CodeModel::Small">; 2105f757f3fSDimitry Andricdef KernelCode : Predicate<"TM.getCodeModel() == CodeModel::Kernel">; 2115f757f3fSDimitry Andricdef NearData : Predicate<"TM.getCodeModel() == CodeModel::Small ||" 2125f757f3fSDimitry Andric "TM.getCodeModel() == CodeModel::Kernel">; 2135f757f3fSDimitry Andricdef IsNotPIC : Predicate<"!TM.isPositionIndependent()">; 2145f757f3fSDimitry Andric 2155f757f3fSDimitry Andric// We could compute these on a per-module basis but doing so requires accessing 2165f757f3fSDimitry Andric// the Function object through the <Target>Subtarget and objections were raised 2175f757f3fSDimitry Andric// to that (see post-commit review comments for r301750). 2185f757f3fSDimitry Andriclet RecomputePerFunction = 1 in { 2195f757f3fSDimitry Andric def OptForSize : Predicate<"shouldOptForSize(MF)">; 2205f757f3fSDimitry Andric def OptForMinSize : Predicate<"MF->getFunction().hasMinSize()">; 2215f757f3fSDimitry Andric def OptForSpeed : Predicate<"!shouldOptForSize(MF)">; 2225f757f3fSDimitry Andric def UseIncDec : Predicate<"!Subtarget->slowIncDec() || " 2235f757f3fSDimitry Andric "shouldOptForSize(MF)">; 2245f757f3fSDimitry Andric def NoSSE41_Or_OptForSize : Predicate<"shouldOptForSize(MF) || " 2255f757f3fSDimitry Andric "!Subtarget->hasSSE41()">; 2265f757f3fSDimitry Andric} 2275f757f3fSDimitry Andric 2285f757f3fSDimitry Andricdef CallImmAddr : Predicate<"Subtarget->isLegalToCallImmediateAddr()">; 2295f757f3fSDimitry Andricdef FavorMemIndirectCall : Predicate<"!Subtarget->slowTwoMemOps()">; 2305f757f3fSDimitry Andricdef HasFastMem32 : Predicate<"!Subtarget->isUnalignedMem32Slow()">; 2315f757f3fSDimitry Andricdef HasFastLZCNT : Predicate<"Subtarget->hasFastLZCNT()">; 2325f757f3fSDimitry Andricdef HasFastSHLDRotate : Predicate<"Subtarget->hasFastSHLDRotate()">; 2335f757f3fSDimitry Andricdef HasERMSB : Predicate<"Subtarget->hasERMSB()">; 2345f757f3fSDimitry Andricdef HasFSRM : Predicate<"Subtarget->hasFSRM()">; 2355f757f3fSDimitry Andricdef HasMFence : Predicate<"Subtarget->hasMFence()">; 236*0fca6ea1SDimitry Andricdef HasFastDPWSSD: Predicate<"Subtarget->hasFastDPWSSD()">; 2375f757f3fSDimitry Andricdef UseIndirectThunkCalls : Predicate<"Subtarget->useIndirectThunkCalls()">; 2385f757f3fSDimitry Andricdef NotUseIndirectThunkCalls : Predicate<"!Subtarget->useIndirectThunkCalls()">; 239