10b57cec5SDimitry Andric//===-- ARMPredicates.td - ARM Instruction Predicates ------*- tablegen -*-===// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andricdef HasV4T : Predicate<"Subtarget->hasV4TOps()">, 105ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV4TOps), "armv4t">; 110b57cec5SDimitry Andricdef NoV4T : Predicate<"!Subtarget->hasV4TOps()">; 120b57cec5SDimitry Andricdef HasV5T : Predicate<"Subtarget->hasV5TOps()">, 135ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV5TOps), "armv5t">; 140b57cec5SDimitry Andricdef NoV5T : Predicate<"!Subtarget->hasV5TOps()">; 150b57cec5SDimitry Andricdef HasV5TE : Predicate<"Subtarget->hasV5TEOps()">, 165ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV5TEOps), "armv5te">; 170b57cec5SDimitry Andricdef HasV6 : Predicate<"Subtarget->hasV6Ops()">, 185ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV6Ops), "armv6">; 190b57cec5SDimitry Andricdef NoV6 : Predicate<"!Subtarget->hasV6Ops()">; 200b57cec5SDimitry Andricdef HasV6M : Predicate<"Subtarget->hasV6MOps()">, 215ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV6MOps), 220b57cec5SDimitry Andric "armv6m or armv6t2">; 230b57cec5SDimitry Andricdef HasV8MBaseline : Predicate<"Subtarget->hasV8MBaselineOps()">, 245ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8MBaselineOps), 250b57cec5SDimitry Andric "armv8m.base">; 260b57cec5SDimitry Andricdef HasV8MMainline : Predicate<"Subtarget->hasV8MMainlineOps()">, 275ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8MMainlineOps), 280b57cec5SDimitry Andric "armv8m.main">; 290b57cec5SDimitry Andricdef HasV8_1MMainline : Predicate<"Subtarget->hasV8_1MMainlineOps()">, 305ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_1MMainlineOps), 310b57cec5SDimitry Andric "armv8.1m.main">; 320b57cec5SDimitry Andricdef HasMVEInt : Predicate<"Subtarget->hasMVEIntegerOps()">, 335ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasMVEIntegerOps), 340b57cec5SDimitry Andric "mve">; 350b57cec5SDimitry Andricdef HasMVEFloat : Predicate<"Subtarget->hasMVEFloatOps()">, 365ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasMVEFloatOps), 370b57cec5SDimitry Andric "mve.fp">; 385ffd83dbSDimitry Andricdef HasCDE : Predicate<"Subtarget->hasCDEOps()">, 395ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasCDEOps), 405ffd83dbSDimitry Andric "cde">; 410b57cec5SDimitry Andricdef HasFPRegs : Predicate<"Subtarget->hasFPRegs()">, 425ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFPRegs), 430b57cec5SDimitry Andric "fp registers">; 440b57cec5SDimitry Andricdef HasFPRegs16 : Predicate<"Subtarget->hasFPRegs16()">, 455ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFPRegs16), 465ffd83dbSDimitry Andric "16-bit fp registers">; 475ffd83dbSDimitry Andricdef HasNoFPRegs16 : Predicate<"!Subtarget->hasFPRegs16()">, 485ffd83dbSDimitry Andric AssemblerPredicate<(all_of (not FeatureFPRegs16)), 490b57cec5SDimitry Andric "16-bit fp registers">; 500b57cec5SDimitry Andricdef HasFPRegs64 : Predicate<"Subtarget->hasFPRegs64()">, 515ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFPRegs64), 520b57cec5SDimitry Andric "64-bit fp registers">; 530b57cec5SDimitry Andricdef HasFPRegsV8_1M : Predicate<"Subtarget->hasFPRegs() && Subtarget->hasV8_1MMainlineOps()">, 545ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFPRegs, HasV8_1MMainlineOps), 550b57cec5SDimitry Andric "armv8.1m.main with FP or MVE">; 560b57cec5SDimitry Andricdef HasV6T2 : Predicate<"Subtarget->hasV6T2Ops()">, 575ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV6T2Ops), "armv6t2">; 580b57cec5SDimitry Andricdef NoV6T2 : Predicate<"!Subtarget->hasV6T2Ops()">; 590b57cec5SDimitry Andricdef HasV6K : Predicate<"Subtarget->hasV6KOps()">, 605ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV6KOps), "armv6k">; 610b57cec5SDimitry Andricdef NoV6K : Predicate<"!Subtarget->hasV6KOps()">; 620b57cec5SDimitry Andricdef HasV7 : Predicate<"Subtarget->hasV7Ops()">, 635ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV7Ops), "armv7">; 640b57cec5SDimitry Andricdef HasV8 : Predicate<"Subtarget->hasV8Ops()">, 655ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8Ops), "armv8">; 660b57cec5SDimitry Andricdef PreV8 : Predicate<"!Subtarget->hasV8Ops()">, 675ffd83dbSDimitry Andric AssemblerPredicate<(all_of (not HasV8Ops)), "armv7 or earlier">; 680b57cec5SDimitry Andricdef HasV8_1a : Predicate<"Subtarget->hasV8_1aOps()">, 695ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_1aOps), "armv8.1a">; 700b57cec5SDimitry Andricdef HasV8_2a : Predicate<"Subtarget->hasV8_2aOps()">, 715ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_2aOps), "armv8.2a">; 720b57cec5SDimitry Andricdef HasV8_3a : Predicate<"Subtarget->hasV8_3aOps()">, 735ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_3aOps), "armv8.3a">; 740b57cec5SDimitry Andricdef HasV8_4a : Predicate<"Subtarget->hasV8_4aOps()">, 755ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_4aOps), "armv8.4a">; 760b57cec5SDimitry Andricdef HasV8_5a : Predicate<"Subtarget->hasV8_5aOps()">, 775ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_5aOps), "armv8.5a">; 785ffd83dbSDimitry Andricdef HasV8_6a : Predicate<"Subtarget->hasV8_6aOps()">, 795ffd83dbSDimitry Andric AssemblerPredicate<(all_of HasV8_6aOps), "armv8.6a">; 80e8d8bef9SDimitry Andricdef HasV8_7a : Predicate<"Subtarget->hasV8_7aOps()">, 81e8d8bef9SDimitry Andric AssemblerPredicate<(all_of HasV8_7aOps), "armv8.7a">; 820b57cec5SDimitry Andricdef NoVFP : Predicate<"!Subtarget->hasVFP2Base()">; 830b57cec5SDimitry Andricdef HasVFP2 : Predicate<"Subtarget->hasVFP2Base()">, 845ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureVFP2_SP), "VFP2">; 850b57cec5SDimitry Andricdef HasVFP3 : Predicate<"Subtarget->hasVFP3Base()">, 865ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureVFP3_D16_SP), "VFP3">; 870b57cec5SDimitry Andricdef HasVFP4 : Predicate<"Subtarget->hasVFP4Base()">, 885ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureVFP4_D16_SP), "VFP4">; 890b57cec5SDimitry Andricdef HasDPVFP : Predicate<"Subtarget->hasFP64()">, 905ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFP64), 910b57cec5SDimitry Andric "double precision VFP">; 920b57cec5SDimitry Andricdef HasFPARMv8 : Predicate<"Subtarget->hasFPARMv8Base()">, 935ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFPARMv8_D16_SP), "FPARMv8">; 940b57cec5SDimitry Andricdef HasNEON : Predicate<"Subtarget->hasNEON()">, 955ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureNEON), "NEON">; 960b57cec5SDimitry Andricdef HasSHA2 : Predicate<"Subtarget->hasSHA2()">, 975ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureSHA2), "sha2">; 980b57cec5SDimitry Andricdef HasAES : Predicate<"Subtarget->hasAES()">, 995ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureAES), "aes">; 1000b57cec5SDimitry Andricdef HasCrypto : Predicate<"Subtarget->hasCrypto()">, 1015ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureCrypto), "crypto">; 1020b57cec5SDimitry Andricdef HasDotProd : Predicate<"Subtarget->hasDotProd()">, 1035ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureDotProd), "dotprod">; 1040b57cec5SDimitry Andricdef HasCRC : Predicate<"Subtarget->hasCRC()">, 1055ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureCRC), "crc">; 1060b57cec5SDimitry Andricdef HasRAS : Predicate<"Subtarget->hasRAS()">, 1075ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureRAS), "ras">; 1080b57cec5SDimitry Andricdef HasLOB : Predicate<"Subtarget->hasLOB()">, 1095ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureLOB), "lob">; 1104824e7fdSDimitry Andricdef HasPACBTI : Predicate<"Subtarget->hasPACBTI()">, 1114824e7fdSDimitry Andric AssemblerPredicate<(all_of FeaturePACBTI), "pacbti">; 1120b57cec5SDimitry Andricdef HasFP16 : Predicate<"Subtarget->hasFP16()">, 1135ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFP16),"half-float conversions">; 1140b57cec5SDimitry Andricdef HasFullFP16 : Predicate<"Subtarget->hasFullFP16()">, 1155ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFullFP16),"full half-float">; 1160b57cec5SDimitry Andricdef HasFP16FML : Predicate<"Subtarget->hasFP16FML()">, 1175ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureFP16FML),"full half-float fml">; 1185ffd83dbSDimitry Andricdef HasBF16 : Predicate<"Subtarget->hasBF16()">, 1195ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureBF16),"BFloat16 floating point extension">; 1205ffd83dbSDimitry Andricdef HasMatMulInt8 : Predicate<"Subtarget->hasMatMulInt8()">, 1215ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureMatMulInt8),"8-bit integer matrix multiply">; 1220b57cec5SDimitry Andricdef HasDivideInThumb : Predicate<"Subtarget->hasDivideInThumbMode()">, 1235ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureHWDivThumb), "divide in THUMB">; 1240b57cec5SDimitry Andricdef HasDivideInARM : Predicate<"Subtarget->hasDivideInARMMode()">, 1255ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureHWDivARM), "divide in ARM">; 1260b57cec5SDimitry Andricdef HasDSP : Predicate<"Subtarget->hasDSP()">, 1275ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureDSP), "dsp">; 1280b57cec5SDimitry Andricdef HasDB : Predicate<"Subtarget->hasDataBarrier()">, 1295ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureDB), 1300b57cec5SDimitry Andric "data-barriers">; 1310b57cec5SDimitry Andricdef HasDFB : Predicate<"Subtarget->hasFullDataBarrier()">, 1325ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureDFB), 1330b57cec5SDimitry Andric "full-data-barrier">; 1340b57cec5SDimitry Andricdef HasV7Clrex : Predicate<"Subtarget->hasV7Clrex()">, 1355ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureV7Clrex), 1360b57cec5SDimitry Andric "v7 clrex">; 1370b57cec5SDimitry Andricdef HasAcquireRelease : Predicate<"Subtarget->hasAcquireRelease()">, 1385ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureAcquireRelease), 1390b57cec5SDimitry Andric "acquire/release">; 1400b57cec5SDimitry Andricdef HasMP : Predicate<"Subtarget->hasMPExtension()">, 1415ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureMP), 1420b57cec5SDimitry Andric "mp-extensions">; 1430b57cec5SDimitry Andricdef HasVirtualization: Predicate<"false">, 1445ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureVirtualization), 1450b57cec5SDimitry Andric "virtualization-extensions">; 1460b57cec5SDimitry Andricdef HasTrustZone : Predicate<"Subtarget->hasTrustZone()">, 1475ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureTrustZone), 1480b57cec5SDimitry Andric "TrustZone">; 1490b57cec5SDimitry Andricdef Has8MSecExt : Predicate<"Subtarget->has8MSecExt()">, 1505ffd83dbSDimitry Andric AssemblerPredicate<(all_of Feature8MSecExt), 1510b57cec5SDimitry Andric "ARMv8-M Security Extensions">; 1520b57cec5SDimitry Andricdef HasZCZ : Predicate<"Subtarget->hasZeroCycleZeroing()">; 1530b57cec5SDimitry Andricdef UseNEONForFP : Predicate<"Subtarget->useNEONForSinglePrecisionFP()">; 1540b57cec5SDimitry Andricdef DontUseNEONForFP : Predicate<"!Subtarget->useNEONForSinglePrecisionFP()">; 1550b57cec5SDimitry Andricdef IsThumb : Predicate<"Subtarget->isThumb()">, 1565ffd83dbSDimitry Andric AssemblerPredicate<(all_of ModeThumb), "thumb">; 1570b57cec5SDimitry Andricdef IsThumb1Only : Predicate<"Subtarget->isThumb1Only()">; 1580b57cec5SDimitry Andricdef IsThumb2 : Predicate<"Subtarget->isThumb2()">, 1595ffd83dbSDimitry Andric AssemblerPredicate<(all_of ModeThumb, FeatureThumb2), 1600b57cec5SDimitry Andric "thumb2">; 1610b57cec5SDimitry Andricdef IsMClass : Predicate<"Subtarget->isMClass()">, 1625ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureMClass), "armv*m">; 1630b57cec5SDimitry Andricdef IsNotMClass : Predicate<"!Subtarget->isMClass()">, 1645ffd83dbSDimitry Andric AssemblerPredicate<(all_of (not FeatureMClass)), 1650b57cec5SDimitry Andric "!armv*m">; 1660b57cec5SDimitry Andricdef IsARM : Predicate<"!Subtarget->isThumb()">, 1675ffd83dbSDimitry Andric AssemblerPredicate<(all_of (not ModeThumb)), "arm-mode">; 1680b57cec5SDimitry Andricdef IsMachO : Predicate<"Subtarget->isTargetMachO()">; 1690b57cec5SDimitry Andricdef IsNotMachO : Predicate<"!Subtarget->isTargetMachO()">; 1700b57cec5SDimitry Andricdef IsNaCl : Predicate<"Subtarget->isTargetNaCl()">; 1710b57cec5SDimitry Andricdef IsWindows : Predicate<"Subtarget->isTargetWindows()">; 1720b57cec5SDimitry Andricdef IsNotWindows : Predicate<"!Subtarget->isTargetWindows()">; 17306c3fb27SDimitry Andricdef IsReadTPTPIDRURW : Predicate<"Subtarget->isReadTPTPIDRURW()">; 17406c3fb27SDimitry Andricdef IsReadTPTPIDRURO : Predicate<"Subtarget->isReadTPTPIDRURO()">; 17506c3fb27SDimitry Andricdef IsReadTPTPIDRPRW : Predicate<"Subtarget->isReadTPTPIDRPRW()">; 17606c3fb27SDimitry Andricdef IsReadTPSoft : Predicate<"Subtarget->isReadTPSoft()">; 1770b57cec5SDimitry Andricdef UseNaClTrap : Predicate<"Subtarget->useNaClTrap()">, 1785ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureNaClTrap), "NaCl">; 1790b57cec5SDimitry Andricdef DontUseNaClTrap : Predicate<"!Subtarget->useNaClTrap()">; 1800b57cec5SDimitry Andric 1810b57cec5SDimitry Andricdef UseNegativeImmediates : 1820b57cec5SDimitry Andric Predicate<"false">, 1835ffd83dbSDimitry Andric AssemblerPredicate<(all_of (not FeatureNoNegativeImmediates)), 1840b57cec5SDimitry Andric "NegativeImmediates">; 1850b57cec5SDimitry Andric 1860b57cec5SDimitry Andric// FIXME: Eventually this will be just "hasV6T2Ops". 1870b57cec5SDimitry Andriclet RecomputePerFunction = 1 in { 1880b57cec5SDimitry Andric def UseMovt : Predicate<"Subtarget->useMovt()">; 1890b57cec5SDimitry Andric def DontUseMovt : Predicate<"!Subtarget->useMovt()">; 1900b57cec5SDimitry Andric def UseMovtInPic : Predicate<"Subtarget->useMovt() && Subtarget->allowPositionIndependentMovt()">; 1910b57cec5SDimitry Andric def DontUseMovtInPic : Predicate<"!Subtarget->useMovt() || !Subtarget->allowPositionIndependentMovt()">; 1920b57cec5SDimitry Andric 1930b57cec5SDimitry Andric def UseFPVMLx: Predicate<"((Subtarget->useFPVMLx() &&" 1940b57cec5SDimitry Andric " TM.Options.AllowFPOpFusion != FPOpFusion::Fast) ||" 1950b57cec5SDimitry Andric "Subtarget->hasMinSize())">; 196e8d8bef9SDimitry Andric def SLSBLRMitigation : Predicate<[{ MF->getSubtarget<ARMSubtarget>().hardenSlsBlr() }]>; 197e8d8bef9SDimitry Andric def NoSLSBLRMitigation : Predicate<[{ !MF->getSubtarget<ARMSubtarget>().hardenSlsBlr() }]>; 198e8d8bef9SDimitry Andric 1990b57cec5SDimitry Andric} 2000b57cec5SDimitry Andricdef UseMulOps : Predicate<"Subtarget->useMulOps()">; 2010b57cec5SDimitry Andric 2020b57cec5SDimitry Andric// Prefer fused MAC for fp mul + add over fp VMLA / VMLS if they are available. 2030b57cec5SDimitry Andric// But only select them if more precision in FP computation is allowed, and when 2040b57cec5SDimitry Andric// they are not slower than a mul + add sequence. 2050b57cec5SDimitry Andric// Do not use them for Darwin platforms. 206480093f4SDimitry Andricdef UseFusedMAC : Predicate<"TM.Options.AllowFPOpFusion ==" 2070b57cec5SDimitry Andric " FPOpFusion::Fast && " 208480093f4SDimitry Andric "Subtarget->useFPVFMx()">; 2090b57cec5SDimitry Andric 2100b57cec5SDimitry Andricdef HasFastVGETLNi32 : Predicate<"!Subtarget->hasSlowVGETLNi32()">; 2110b57cec5SDimitry Andricdef HasSlowVGETLNi32 : Predicate<"Subtarget->hasSlowVGETLNi32()">; 2120b57cec5SDimitry Andric 2130b57cec5SDimitry Andricdef HasFastVDUP32 : Predicate<"!Subtarget->hasSlowVDUP32()">; 2140b57cec5SDimitry Andricdef HasSlowVDUP32 : Predicate<"Subtarget->hasSlowVDUP32()">; 2150b57cec5SDimitry Andric 2160b57cec5SDimitry Andricdef UseVMOVSR : Predicate<"Subtarget->preferVMOVSR() ||" 2170b57cec5SDimitry Andric "!Subtarget->useNEONForSinglePrecisionFP()">; 2180b57cec5SDimitry Andricdef DontUseVMOVSR : Predicate<"!Subtarget->preferVMOVSR() &&" 2190b57cec5SDimitry Andric "Subtarget->useNEONForSinglePrecisionFP()">; 2200b57cec5SDimitry Andric 2210b57cec5SDimitry Andriclet RecomputePerFunction = 1 in { 2220b57cec5SDimitry Andric def IsLE : Predicate<"MF->getDataLayout().isLittleEndian()">; 2230b57cec5SDimitry Andric def IsBE : Predicate<"MF->getDataLayout().isBigEndian()">; 2240b57cec5SDimitry Andric} 2250b57cec5SDimitry Andric 2260b57cec5SDimitry Andricdef GenExecuteOnly : Predicate<"Subtarget->genExecuteOnly()">; 22706c3fb27SDimitry Andricdef DontGenExecuteOnly : Predicate<"!Subtarget->genExecuteOnly()">; 22806c3fb27SDimitry Andricdef GenT1ExecuteOnly : Predicate<"Subtarget->genExecuteOnly() && " 22906c3fb27SDimitry Andric "Subtarget->isThumb1Only() && " 23006c3fb27SDimitry Andric "!Subtarget->hasV8MBaselineOps()">; 231*0fca6ea1SDimitry Andriclet RecomputePerFunction = 1 in { 232*0fca6ea1SDimitry Andric def SignRetAddr : Predicate<[{ MF->getInfo<ARMFunctionInfo>()->shouldSignReturnAddress(true) }]>; 233*0fca6ea1SDimitry Andric def NoSignRetAddr : Predicate<[{ !MF->getInfo<ARMFunctionInfo>()->shouldSignReturnAddress(true) }]>; 234*0fca6ea1SDimitry Andric} 2350b57cec5SDimitry Andric 2360b57cec5SDimitry Andric// Armv8.5-A extensions 2370b57cec5SDimitry Andricdef HasSB : Predicate<"Subtarget->hasSB()">, 2385ffd83dbSDimitry Andric AssemblerPredicate<(all_of FeatureSB), "sb">; 239bdd1243dSDimitry Andric 240bdd1243dSDimitry Andric// Armv8.9-A/9.4-A 2022 Architecture extensions 241bdd1243dSDimitry Andricdef HasCLRBHB : Predicate<"Subtarget->hasCLRBHB()">, 242bdd1243dSDimitry Andric AssemblerPredicate<(all_of FeatureCLRBHB), "clrbhb">; 243