reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/Target/ARM/ARMISelLowering.cpp
  405   RegInfo = Subtarget->getRegisterInfo();
  406   Itins = Subtarget->getInstrItineraryData();
  411   if (!Subtarget->isTargetDarwin() && !Subtarget->isTargetIOS() &&
  411   if (!Subtarget->isTargetDarwin() && !Subtarget->isTargetIOS() &&
  412       !Subtarget->isTargetWatchOS()) {
  420   if (Subtarget->isTargetMachO()) {
  422     if (Subtarget->isThumb() && Subtarget->hasVFP2Base() &&
  422     if (Subtarget->isThumb() && Subtarget->hasVFP2Base() &&
  423         Subtarget->hasARMOps() && !Subtarget->useSoftFloat()) {
  423         Subtarget->hasARMOps() && !Subtarget->useSoftFloat()) {
  498   if (Subtarget->isAAPCS_ABI() &&
  499       (Subtarget->isTargetAEABI() || Subtarget->isTargetGNUAEABI() ||
  499       (Subtarget->isTargetAEABI() || Subtarget->isTargetGNUAEABI() ||
  500        Subtarget->isTargetMuslAEABI() || Subtarget->isTargetAndroid())) {
  500        Subtarget->isTargetMuslAEABI() || Subtarget->isTargetAndroid())) {
  622   if (Subtarget->isTargetWindows()) {
  645   if (Subtarget->isTargetMachO() &&
  646       !(Subtarget->isTargetIOS() &&
  647         Subtarget->getTargetTriple().isOSVersionLT(5, 0))) {
  655   if (!Subtarget->isTargetWatchABI()) {
  656     if (Subtarget->isAAPCS_ABI()) {
  669   if (Subtarget->isTargetAEABI()) {
  686   if (Subtarget->isThumb1Only())
  691   if (!Subtarget->useSoftFloat() && !Subtarget->isThumb1Only() &&
  691   if (!Subtarget->useSoftFloat() && !Subtarget->isThumb1Only() &&
  692       Subtarget->hasFPRegs()) {
  695     if (!Subtarget->hasVFP2Base())
  697     if (!Subtarget->hasFP64())
  701   if (Subtarget->hasFullFP16()) {
  731   if (Subtarget->hasMVEIntegerOps())
  732     addMVEVectorTypes(Subtarget->hasMVEFloatOps());
  735   if (Subtarget->hasLOB()) {
  740   if (Subtarget->hasNEON()) {
  754     if (Subtarget->hasFullFP16()) {
  760   if (Subtarget->hasMVEIntegerOps() || Subtarget->hasNEON()) {
  760   if (Subtarget->hasMVEIntegerOps() || Subtarget->hasNEON()) {
  798   if (Subtarget->hasNEON()) {
  894     if (!Subtarget->hasVFP4Base()) {
  921   if (Subtarget->hasNEON() || Subtarget->hasMVEIntegerOps()) {
  921   if (Subtarget->hasNEON() || Subtarget->hasMVEIntegerOps()) {
  931   if (!Subtarget->hasFP64()) {
  969   if (!Subtarget->hasFP64() || !Subtarget->hasFPARMv8Base()) {
  969   if (!Subtarget->hasFP64() || !Subtarget->hasFPARMv8Base()) {
  971     if (Subtarget->hasFullFP16())
  975   if (!Subtarget->hasFP16())
  978   if (!Subtarget->hasFP64())
  981   computeRegisterProperties(Subtarget->getRegisterInfo());
  999   if (!Subtarget->isThumb1Only()) {
 1024   if (Subtarget->hasDSP()) {
 1030   if (Subtarget->hasBaseDSP()) {
 1038   if (Subtarget->isThumb1Only()) {
 1042   if (Subtarget->isThumb1Only() || !Subtarget->hasV6Ops()
 1042   if (Subtarget->isThumb1Only() || !Subtarget->hasV6Ops()
 1043       || (Subtarget->isThumb2() && !Subtarget->hasDSP()))
 1043       || (Subtarget->isThumb2() && !Subtarget->hasDSP()))
 1056   if (Subtarget->hasMVEIntegerOps())
 1060   if (Subtarget->isThumb1Only()) {
 1066   if (!Subtarget->isThumb1Only() && Subtarget->hasV6T2Ops())
 1066   if (!Subtarget->isThumb1Only() && Subtarget->hasV6T2Ops())
 1077   if (!Subtarget->hasV5TOps() || Subtarget->isThumb1Only()) {
 1077   if (!Subtarget->hasV5TOps() || Subtarget->isThumb1Only()) {
 1086   if (Subtarget->hasPerfMon())
 1090   if (!Subtarget->hasV6Ops())
 1093   bool hasDivide = Subtarget->isThumb() ? Subtarget->hasDivideInThumbMode()
 1093   bool hasDivide = Subtarget->isThumb() ? Subtarget->hasDivideInThumbMode()
 1094                                         : Subtarget->hasDivideInARMMode();
 1101   if (Subtarget->isTargetWindows() && !Subtarget->hasDivideInThumbMode()) {
 1101   if (Subtarget->isTargetWindows() && !Subtarget->hasDivideInThumbMode()) {
 1113   if (Subtarget->isTargetAEABI() || Subtarget->isTargetAndroid() ||
 1113   if (Subtarget->isTargetAEABI() || Subtarget->isTargetAndroid() ||
 1114       Subtarget->isTargetGNUAEABI() || Subtarget->isTargetMuslAEABI() ||
 1114       Subtarget->isTargetGNUAEABI() || Subtarget->isTargetMuslAEABI() ||
 1115       Subtarget->isTargetWindows()) {
 1120     if (Subtarget->isTargetWindows()) {
 1173   if (Subtarget->isTargetWindows() && Subtarget->getTargetTriple().isOSMSVCRT())
 1173   if (Subtarget->isTargetWindows() && Subtarget->getTargetTriple().isOSMSVCRT())
 1193   if (Subtarget->isTargetWindows())
 1201   if (Subtarget->hasAnyDataBarrier() &&
 1202       (!Subtarget->isThumb() || Subtarget->hasV8MBaselineOps())) {
 1202       (!Subtarget->isThumb() || Subtarget->hasV8MBaselineOps())) {
 1206     if (!Subtarget->isThumb() || !Subtarget->isMClass())
 1206     if (!Subtarget->isThumb() || !Subtarget->isMClass())
 1211     if (!Subtarget->hasAcquireRelease() ||
 1220     if (Subtarget->hasDataBarrier())
 1224                        Subtarget->hasAnyDataBarrier() ? Custom : Expand);
 1250   if (!Subtarget->hasV6Ops()) {
 1256   if (!Subtarget->useSoftFloat() && Subtarget->hasFPRegs() &&
 1256   if (!Subtarget->useSoftFloat() && Subtarget->hasFPRegs() &&
 1257       !Subtarget->isThumb1Only()) {
 1269   if (Subtarget->useSjLjEH())
 1281   if (Subtarget->hasFullFP16()) {
 1291   if (Subtarget->hasFullFP16())
 1306   if (!Subtarget->useSoftFloat() && Subtarget->hasVFP2Base() &&
 1306   if (!Subtarget->useSoftFloat() && Subtarget->hasVFP2Base() &&
 1307       !Subtarget->isThumb1Only()) {
 1314   if (!Subtarget->hasVFP4Base()) {
 1320   if (!Subtarget->useSoftFloat() && !Subtarget->isThumb1Only()) {
 1320   if (!Subtarget->useSoftFloat() && !Subtarget->isThumb1Only()) {
 1322     if (!Subtarget->hasFPARMv8Base() || !Subtarget->hasFP64()) {
 1322     if (!Subtarget->hasFPARMv8Base() || !Subtarget->hasFP64()) {
 1328     if (!Subtarget->hasFP16()) {
 1342   if (Subtarget->hasFPARMv8Base()) {
 1351     if (Subtarget->hasNEON()) {
 1358     if (Subtarget->hasFP64()) {
 1371   if (Subtarget->hasFullFP16()) {
 1388   if (Subtarget->hasNEON()) {
 1400     if (Subtarget->hasFullFP16()) {
 1422   if (Subtarget->hasV6Ops())
 1424   if (Subtarget->isThumb1Only())
 1429   if (Subtarget->useSoftFloat() || Subtarget->isThumb1Only() ||
 1429   if (Subtarget->useSoftFloat() || Subtarget->isThumb1Only() ||
 1430       !Subtarget->hasVFP2Base() || Subtarget->hasMinSize())
 1430       !Subtarget->hasVFP2Base() || Subtarget->hasMinSize())
 1448   PredictableSelectIsExpensive = Subtarget->getSchedModel().isOutOfOrder();
 1450   setPrefLoopAlignment(Align(1ULL << Subtarget->getPrefLoopLogAlignment()));
 1452   setMinFunctionAlignment(Subtarget->isThumb() ? Align(2) : Align(4));
 1454   if (Subtarget->isThumb() || Subtarget->isThumb2())
 1454   if (Subtarget->isThumb() || Subtarget->isThumb2())
 1459   return Subtarget->useSoftFloat();
 1490     if (Subtarget->useNEONForSinglePrecisionFP())
 1683   if (Subtarget->hasMVEIntegerOps() &&
 1698   if (Subtarget->hasNEON() || Subtarget->hasMVEIntegerOps()) {
 1698   if (Subtarget->hasNEON() || Subtarget->hasMVEIntegerOps()) {
 1717   PrefAlign = (Subtarget->hasV6Ops() && !Subtarget->isMClass() ? 8 : 4);
 1717   PrefAlign = (Subtarget->hasV6Ops() && !Subtarget->isMClass() ? 8 : 4);
 1746   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
 1866     if (!Subtarget->isAAPCS_ABI())
 1868     else if (Subtarget->hasVFP2Base() && !Subtarget->isThumb1Only() &&
 1868     else if (Subtarget->hasVFP2Base() && !Subtarget->isThumb1Only() &&
 1876     if (!Subtarget->isAAPCS_ABI()) {
 1877       if (Subtarget->hasVFP2Base() && !Subtarget->isThumb1Only() && !isVarArg)
 1877       if (Subtarget->hasVFP2Base() && !Subtarget->isThumb1Only() && !isVarArg)
 1880     } else if (Subtarget->hasVFP2Base() &&
 1881                !Subtarget->isThumb1Only() && !isVarArg)
 1961       if (!Subtarget->isLittle())
 1978         if (!Subtarget->isLittle())
 2029   unsigned id = Subtarget->isLittle() ? 0 : 1;
 2072   if (!Subtarget->supportsTailCall() || Attr.getValueAsString() == "true")
 2082       PreferIndirect = Subtarget->isThumb() && Subtarget->hasMinSize() &&
 2082       PreferIndirect = Subtarget->isThumb() && Subtarget->hasMinSize() &&
 2276       !TM.shouldAssumeDSOLocal(*Mod, GV) && Subtarget->isTargetMachO();
 2278   bool isARMFunc = !Subtarget->isThumb() || (isStub && !Subtarget->isMClass());
 2278   bool isARMFunc = !Subtarget->isThumb() || (isStub && !Subtarget->isMClass());
 2283   if (Subtarget->genLongCalls()) {
 2284     assert((!isPositionIndependent() || Subtarget->isTargetWindows()) &&
 2322       isLocalARMFunc = !Subtarget->isThumb() && (isDef || !ARMInterworking);
 2324       if (isStub && Subtarget->isThumb1Only() && !Subtarget->hasV5TOps()) {
 2324       if (isStub && Subtarget->isThumb1Only() && !Subtarget->hasV5TOps()) {
 2325         assert(Subtarget->isTargetMachO() && "WrapperPIC use on non-MachO?");
 2334       } else if (Subtarget->isTargetCOFF()) {
 2335         assert(Subtarget->isTargetWindows() &&
 2355     if (isARMFunc && Subtarget->isThumb1Only() && !Subtarget->hasV5TOps()) {
 2355     if (isARMFunc && Subtarget->isThumb1Only() && !Subtarget->hasV5TOps()) {
 2374   if (Subtarget->isThumb()) {
 2375     if ((!isDirect || isARMFunc) && !Subtarget->hasV5TOps())
 2380     if (!isDirect && !Subtarget->hasV5TOps())
 2382     else if (doesNotRet && isDirect && Subtarget->hasRetAddrStack() &&
 2384              !Subtarget->hasMinSize())
 2404     const ARMBaseRegisterInfo *ARI = Subtarget->getRegisterInfo();
 2562   assert(Subtarget->supportsTailCall());
 2567   if (Subtarget->isThumb1Only() && Outs.size() >= 4 &&
 2607   const ARMBaseRegisterInfo *TRI = Subtarget->getRegisterInfo();
 2635       const TargetInstrInfo *TII = Subtarget->getInstrInfo();
 2738   bool isLittleEndian = Subtarget->isLittle();
 2754     if (Subtarget->hasFullFP16() && Subtarget->isTargetHardFloat()) {
 2754     if (Subtarget->hasFullFP16() && Subtarget->isTargetHardFloat()) {
 2833   const ARMBaseRegisterInfo *TRI = Subtarget->getRegisterInfo();
 2859       !Subtarget->isMClass()) {
 2860     if (Subtarget->isThumb1Only())
 2944   if (!Subtarget->supportsTailCall())
 2991   if (Subtarget->genExecuteOnly()) {
 3030   bool IsPositionIndependent = isPositionIndependent() || Subtarget->isROPI();
 3034     unsigned PCAdj = Subtarget->isThumb() ? 4 : 8;
 3078   assert(Subtarget->isTargetDarwin() &&
 3123   assert(Subtarget->isTargetWindows() && "Windows specific TLS lowering");
 3181   unsigned char PCAdj = Subtarget->isThumb() ? 4 : 8;
 3234     unsigned char PCAdj = Subtarget->isThumb() ? 4 : 8;
 3275   if (Subtarget->isTargetDarwin())
 3278   if (Subtarget->isTargetWindows())
 3282   assert(Subtarget->isTargetELF() && "Only ELF implemented here");
 3425   switch (Subtarget->getTargetTriple().getObjectFormat()) {
 3445   if (TM.shouldAssumeDSOLocal(*GV->getParent(), GV) && !Subtarget->genExecuteOnly())
 3459   } else if (Subtarget->isROPI() && IsRO) {
 3464   } else if (Subtarget->isRWPI() && !IsRO) {
 3467     if (Subtarget->useMovt()) {
 3487   if (Subtarget->useMovt()) {
 3504   assert(!Subtarget->isROPI() && !Subtarget->isRWPI() &&
 3504   assert(!Subtarget->isROPI() && !Subtarget->isRWPI() &&
 3510   if (Subtarget->useMovt())
 3521   if (Subtarget->isGVIndirectSymbol(GV))
 3529   assert(Subtarget->isTargetWindows() && "non-Windows COFF is not supported");
 3530   assert(Subtarget->useMovt() &&
 3532   assert(!Subtarget->isROPI() && !Subtarget->isRWPI() &&
 3532   assert(!Subtarget->isROPI() && !Subtarget->isRWPI() &&
 3864   if (!Subtarget->isLittle())
 4249   if (Subtarget->isThumb1Only() && LHS->getOpcode() == ISD::AND &&
 4272   if (Subtarget->isThumb1Only() && LHS->getOpcode() == ISD::SHL &&
 4324   assert(Subtarget->hasFP64() || RHS.getValueType() != MVT::f64);
 4663   if (!Subtarget->hasFP64() && VT == MVT::f64) {
 4871     return !Subtarget->hasVFP2Base();
 4873     return !Subtarget->hasFP64();
 4875     return !Subtarget->hasFullFP16();
 4887   if (((!Subtarget->isThumb() && Subtarget->hasV6Ops()) || Subtarget->isThumb2()) &&
 4887   if (((!Subtarget->isThumb() && Subtarget->hasV6Ops()) || Subtarget->isThumb2()) &&
 4887   if (((!Subtarget->isThumb() && Subtarget->hasV6Ops()) || Subtarget->isThumb2()) &&
 4924   if (Subtarget->hasV8_1MMainlineOps() && CFVal && CTVal &&
 4947           HasLowerConstantMaterializationCost(FVal, TVal, Subtarget)) {
 4997     if (Subtarget->hasFPARMv8Base() && (TrueVal.getValueType() == MVT::f16 ||
 5024   if (Subtarget->hasFPARMv8Base() &&
 5131   bool LHSOk = canChangeToInt(LHS, LHSSeenZero, Subtarget);
 5133   bool RHSOk = canChangeToInt(RHS, RHSSeenZero, Subtarget);
 5182                       !Subtarget->isThumb1Only();
 5233                       !Subtarget->isThumb1Only();
 5304   if (Subtarget->isThumb2() || (Subtarget->hasV8MBaselineOps() && Subtarget->isThumb())) {
 5304   if (Subtarget->isThumb2() || (Subtarget->hasV8MBaselineOps() && Subtarget->isThumb())) {
 5304   if (Subtarget->isThumb2() || (Subtarget->hasV8MBaselineOps() && Subtarget->isThumb())) {
 5312   if (isPositionIndependent() || Subtarget->isROPI()) {
 5453   bool UseNEON = !InGPR && Subtarget->hasNEON();
 6547   if (IsDouble && !Subtarget->hasFP64())
 7582     if (Cost <= 4 && (Subtarget->hasNEON() || isLegalMVEShuffleOp(PFEntry)))
 7597   else if (Subtarget->hasNEON() &&
 7602   else if (Subtarget->hasNEON() && (VT == MVT::v8i16 || VT == MVT::v16i8) &&
 7605   else if (Subtarget->hasMVEIntegerOps() &&
 8026   if (Subtarget->hasMVEIntegerOps() &&
 8028     return LowerINSERT_VECTOR_ELT_i1(Op, DAG, Subtarget);
 8726   assert(Subtarget->isTargetDarwin());
 8744   bool ShouldUseSRet = Subtarget->isAPCS_ABI();
 9163   case ISD::ATOMIC_FENCE:  return LowerATOMIC_FENCE(Op, DAG, Subtarget);
 9164   case ISD::PREFETCH:      return LowerPREFETCH(Op, DAG, Subtarget);
 9175   case ISD::INTRINSIC_VOID: return LowerINTRINSIC_VOID(Op, DAG, Subtarget);
 9177                                                                Subtarget);
 9178   case ISD::BITCAST:       return ExpandBITCAST(Op.getNode(), DAG, Subtarget);
 9181   case ISD::SRA:           return LowerShift(Op.getNode(), DAG, Subtarget);
 9188   case ISD::CTTZ_ZERO_UNDEF: return LowerCTTZ(Op.getNode(), DAG, Subtarget);
 9189   case ISD::CTPOP:         return LowerCTPOP(Op.getNode(), DAG, Subtarget);
 9190   case ISD::SETCC:         return LowerVSETCC(Op, DAG, Subtarget);
 9192   case ISD::ConstantFP:    return LowerConstantFP(Op, DAG, Subtarget);
 9193   case ISD::BUILD_VECTOR:  return LowerBUILD_VECTOR(Op, DAG, Subtarget);
 9194   case ISD::VECTOR_SHUFFLE: return LowerVECTOR_SHUFFLE(Op, DAG, Subtarget);
 9195   case ISD::EXTRACT_SUBVECTOR: return LowerEXTRACT_SUBVECTOR(Op, DAG, Subtarget);
 9197   case ISD::EXTRACT_VECTOR_ELT: return LowerEXTRACT_VECTOR_ELT(Op, DAG, Subtarget);
 9198   case ISD::CONCAT_VECTORS: return LowerCONCAT_VECTORS(Op, DAG, Subtarget);
 9202     if (Subtarget->isTargetWindows() && !Op.getValueType().isVector())
 9204     return LowerSDIV(Op, DAG, Subtarget);
 9206     if (Subtarget->isTargetWindows() && !Op.getValueType().isVector())
 9208     return LowerUDIV(Op, DAG, Subtarget);
 9219     return LowerSADDSUBSAT(Op, DAG, Subtarget);
 9232     if (Subtarget->isTargetWindows())
 9237   case ISD::FPOWI: return LowerFPOWI(Op, *Subtarget, DAG);
 9286     Res = ExpandBITCAST(N, DAG, Subtarget);
 9291     Res = Expand64BitShift(N, DAG, Subtarget);
 9306     Res = LowerSADDSUBSAT(SDValue(N, 0), DAG, Subtarget);
 9309     ReplaceREADCYCLECOUNTER(N, Results, DAG, Subtarget);
 9313     assert(Subtarget->isTargetWindows() && "can only expand DIV on Windows");
 9340   assert(!Subtarget->isROPI() && !Subtarget->isRWPI() &&
 9340   assert(!Subtarget->isROPI() && !Subtarget->isRWPI() &&
 9342   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
 9350   bool isThumb = Subtarget->isThumb();
 9351   bool isThumb2 = Subtarget->isThumb2();
 9466   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
 9473   const TargetRegisterClass *TRC = Subtarget->isThumb() ? &ARM::tGPRRegClass
 9533   if (Subtarget->isThumb())
 9536     trap_opcode = Subtarget->useNaClTrap() ? ARM::TRAPNaCl : ARM::TRAP;
 9571   if (Subtarget->isThumb2()) {
 9627   } else if (Subtarget->isThumb()) {
 9722     } else if (Subtarget->hasV6T2Ops() && isUInt<16>(NumLPads)) {
 9851         if (Subtarget->isThumb2() &&
 9855         if (Subtarget->isThumb1Only() && !ARM::tGPRRegClass.contains(Reg))
 9857         if (!Subtarget->isThumb() && !ARM::GPRRegClass.contains(Reg))
10013   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
10029   bool IsThumb1 = Subtarget->isThumb1Only();
10030   bool IsThumb2 = Subtarget->isThumb2();
10031   bool IsThumb = Subtarget->isThumb();
10040         Subtarget->hasNEON()) {
10062   if (SizeVal <= Subtarget->getMaxInlineSizeThreshold()) {
10130   if (Subtarget->useMovt()) {
10258   const TargetInstrInfo &TII = *Subtarget->getInstrInfo();
10261   assert(Subtarget->isTargetWindows() &&
10263   assert(Subtarget->isThumb2() && "Windows on ARM requires Thumb-2 mode");
10334   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
10400   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
10402   bool isThumb2 = Subtarget->isThumb2();
10498     const TargetRegisterInfo *TRI = Subtarget->getRegisterInfo();
10625     bool isThumb2 = Subtarget->isThumb2();
10718     attachMEMCPYScratchRegs(Subtarget, MI, Node);
10734     const ARMBaseInstrInfo *TII = Subtarget->getInstrInfo();
10748     if (Subtarget->isThumb1Only()) {
10802     if (!Subtarget->isThumb1Only())
11591   if (Subtarget->isThumb1Only()) {
11620   if (!Subtarget->isThumb1Only())
11630   if (!Subtarget->hasNEON()) {
11631     if (Subtarget->isThumb1Only())
13997   unsigned Heuristic = Subtarget->isThumb() ? 3 : 2;
14257   if (!Subtarget->isThumb1Only() && Subtarget->hasV6T2Ops()) {
14257   if (!Subtarget->isThumb1Only() && Subtarget->hasV6T2Ops()) {
14312       if (!Subtarget->isThumb1Only() && Subtarget->hasV5TOps()) {
14312       if (!Subtarget->isThumb1Only() && Subtarget->hasV5TOps()) {
14340                (!Subtarget->isThumb1Only() || isPowerOf2Constant(TrueVal))) {
14353         (!Subtarget->isThumb1Only() || isPowerOf2Constant(FalseVal))) {
14382   if (Subtarget->isThumb1Only() && CC == ARMCC::NE &&
14420   case ISD::ABS:        return PerformABSCombine(N, DCI, Subtarget);
14421   case ARMISD::ADDE:    return PerformADDECombine(N, DCI, Subtarget);
14422   case ARMISD::UMLAL:   return PerformUMLALCombine(N, DCI.DAG, Subtarget);
14423   case ISD::ADD:        return PerformADDCombine(N, DCI, Subtarget);
14425   case ISD::MUL:        return PerformMULCombine(N, DCI, Subtarget);
14426   case ISD::OR:         return PerformORCombine(N, DCI, Subtarget);
14427   case ISD::XOR:        return PerformXORCombine(N, DCI, Subtarget);
14428   case ISD::AND:        return PerformANDCombine(N, DCI, Subtarget);
14430   case ISD::BR_CC:      return PerformHWLoopCombine(N, DCI, Subtarget);
14432   case ARMISD::SUBC:    return PerformAddcSubcCombine(N, DCI, Subtarget);
14433   case ARMISD::SUBE:    return PerformAddeSubeCombine(N, DCI, Subtarget);
14435   case ARMISD::VMOVRRD: return PerformVMOVRRDCombine(N, DCI, Subtarget);
14437   case ISD::STORE:      return PerformSTORECombine(N, DCI, Subtarget);
14438   case ISD::BUILD_VECTOR: return PerformBUILD_VECTORCombine(N, DCI, Subtarget);
14442   case ARMISD::VDUP: return PerformVDUPCombine(N, DCI, Subtarget);
14445     return PerformVCVTCombine(N, DCI.DAG, Subtarget);
14447     return PerformVDIVCombine(N, DCI.DAG, Subtarget);
14452     return PerformShiftCombine(N, DCI, Subtarget);
14455   case ISD::ANY_EXTEND: return PerformExtendCombine(N, DCI.DAG, Subtarget);
14577   bool AllowsUnaligned = Subtarget->allowsUnalignedMem();
14584         *Fast = Subtarget->hasV7Ops();
14593     if (Subtarget->hasNEON() && (AllowsUnaligned || Subtarget->isLittle())) {
14593     if (Subtarget->hasNEON() && (AllowsUnaligned || Subtarget->isLittle())) {
14600   if (!Subtarget->hasMVEIntegerOps())
14650   if ((!IsMemset || ZeroMemset) && Subtarget->hasNEON() &&
14725     return Subtarget->hasFullFP16();
14756   if (Subtarget->hasNEON()) {
14771   if (!Subtarget->hasMVEIntegerOps())
14854     if (Subtarget->hasFPAO())
15034   if (!isLegalAddressImmediate(AM.BaseOffs, VT, Subtarget))
15052     if (Subtarget->isThumb1Only())
15055     if (Subtarget->isThumb2())
15098   if (!Subtarget->isThumb())
15101   if (Subtarget->isThumb2())
15115   if (!Subtarget->isThumb())
15117   if (Subtarget->isThumb2())
15261   if (Subtarget->isThumb1Only())
15283     isLegal = Subtarget->hasMVEIntegerOps() &&
15285                                         Subtarget->isLittle(), Base, Offset,
15288     if (Subtarget->isThumb2())
15328   if (Subtarget->isThumb1Only()) {
15347     isLegal = Subtarget->hasMVEIntegerOps() &&
15349                                         Subtarget->isLittle(), Base, Offset,
15352     if (Subtarget->isThumb2())
15366         !Subtarget->isThumb2())
15561   if (!Subtarget->hasV6Ops())
15598   if (!Subtarget->hasVFP2Base())
15602   if (ConstraintVT.isVector() && Subtarget->hasNEON() &&
15659       if (Subtarget->isThumb())
15682       if (Subtarget->isThumb())
15686       if (Subtarget->isThumb())
15690       if (Subtarget->isThumb1Only())
15781         if (Subtarget->hasV6T2Ops() || (Subtarget->hasV8MBaselineOps()))
15781         if (Subtarget->hasV6T2Ops() || (Subtarget->hasV8MBaselineOps()))
15786         if (Subtarget->isThumb1Only()) {
15791         } else if (Subtarget->isThumb2()) {
15805         if (Subtarget->isThumb1Only()) {
15822         if (Subtarget->isThumb1Only()) {
15829         } else if (Subtarget->isThumb2()) {
15849         if (Subtarget->isThumb1Only()) {
15854         } else if (Subtarget->isThumb2()) {
15874         if (Subtarget->isThumb1Only()) {
15889         if (Subtarget->isThumb1Only()) {
15897         if (Subtarget->isThumb1Only()) {
15958   assert((Subtarget->isTargetAEABI() || Subtarget->isTargetAndroid() ||
15958   assert((Subtarget->isTargetAEABI() || Subtarget->isTargetAndroid() ||
15959           Subtarget->isTargetGNUAEABI() || Subtarget->isTargetMuslAEABI() ||
15959           Subtarget->isTargetGNUAEABI() || Subtarget->isTargetMuslAEABI() ||
15960           Subtarget->isTargetWindows()) &&
15975   bool hasDivide = Subtarget->isThumb() ? Subtarget->hasDivideInThumbMode()
15975   bool hasDivide = Subtarget->isThumb() ? Subtarget->hasDivideInThumbMode()
15976                                         : Subtarget->hasDivideInARMMode();
15996                                                     Subtarget);
16003   if (Subtarget->isTargetWindows())
16039                                                     Subtarget);
16044   if (Subtarget->isTargetWindows())
16062   assert(Subtarget->isTargetWindows() && "unsupported target platform");
16107   assert((!Subtarget->hasFP64() || !Subtarget->hasFPARMv8Base()) &&
16107   assert((!Subtarget->hasFP64() || !Subtarget->hasFPARMv8Base()) &&
16110   assert(!(DstSz == 32 && Subtarget->hasFP16()) &&
16123     if (Subtarget->hasFP16())
16138   if (Subtarget->hasFP64()) // Instruction from 32 -> 64
16157   assert((!Subtarget->hasFP64() || !Subtarget->hasFPARMv8Base()) &&
16157   assert((!Subtarget->hasFP64() || !Subtarget->hasFPARMv8Base()) &&
16163   if (SrcSz == 32 && Subtarget->hasFP16())
16226   if (!Subtarget->hasVFP3Base())
16228   if (VT == MVT::f16 && Subtarget->hasFullFP16())
16232   if (VT == MVT::f64 && Subtarget->hasFP64())
16406   if (!Subtarget->hasDataBarrier()) {
16410     if (Subtarget->hasV6Ops() && !Subtarget->isThumb()) {
16410     if (Subtarget->hasV6Ops() && !Subtarget->isThumb()) {
16424     Domain = Subtarget->isMClass() ? ARM_MB::SY : Domain;
16447     if (Subtarget->preferISHSTBarriers())
16480   return (Size == 64) && !Subtarget->isMClass();
16493   return ((Size == 64) && !Subtarget->isMClass()) ? AtomicExpansionKind::LLOnly
16505   bool hasAtomicRMW = !Subtarget->isThumb() || Subtarget->hasV8MBaselineOps();
16505   bool hasAtomicRMW = !Subtarget->isThumb() || Subtarget->hasV8MBaselineOps();
16506   return (Size <= (Subtarget->isMClass() ? 32U : 64U) && hasAtomicRMW)
16519       !Subtarget->isThumb() || Subtarget->hasV8MBaselineOps();
16519       !Subtarget->isThumb() || Subtarget->hasV8MBaselineOps();
16532   return Subtarget->isTargetMachO();
16536   if (!Subtarget->getTargetTriple().isWindowsMSVCEnvironment())
16553   if (Subtarget->getTargetTriple().isWindowsMSVCEnvironment())
16560   if (Subtarget->getTargetTriple().isWindowsMSVCEnvironment())
16568   if (!Subtarget->hasNEON())
16595   return Subtarget->hasV6T2Ops();
16599   return Subtarget->hasV6T2Ops();
16603   return !Subtarget->hasMinSize();
16625     if (!Subtarget->isLittle())
16644   if (!Subtarget->hasV7Ops())
16667     if (!Subtarget->isLittle())
16685   return Subtarget->isMClass();
16722   if (Subtarget->hasNEON())
16755   if (!Subtarget->hasNEON() || !isLegalInterleavedAccessType(VecTy, DL))
16891   if (!Subtarget->hasNEON() || !isLegalInterleavedAccessType(SubVecTy, DL))
17079   return Subtarget->useSjLjEH() ? ARM::NoRegister : ARM::R0;
17086   return Subtarget->useSjLjEH() ? ARM::NoRegister : ARM::R1;
17098   const ARMBaseRegisterInfo *TRI = Subtarget->getRegisterInfo();
17103   const TargetInstrInfo *TII = Subtarget->getInstrInfo();
lib/Target/ARM/ARMISelLowering.h
  474       return Subtarget;