@@ -499,9 +499,16 @@ void ARMTargetLowering::addMVEVectorTypes(bool HasMVEFP) {
499499 setOperationAction(ISD::TRUNCATE, MVT::v16i16, Custom);
500500}
501501
502- ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
502+ const ARMBaseTargetMachine &ARMTargetLowering::getTM() const {
503+ return static_cast<const ARMBaseTargetMachine &>(getTargetMachine());
504+ }
505+
506+ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
503507 const ARMSubtarget &STI)
504- : TargetLowering(TM), Subtarget(&STI) {
508+ : TargetLowering(TM_), Subtarget(&STI) {
509+
510+ const auto &TM = static_cast<const ARMBaseTargetMachine &>(TM_);
511+
505512 RegInfo = Subtarget->getRegisterInfo();
506513 Itins = Subtarget->getInstrItineraryData();
507514
@@ -591,7 +598,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
591598 }
592599
593600 // RTLIB
594- if (Subtarget-> isAAPCS_ABI() &&
601+ if (TM. isAAPCS_ABI() &&
595602 (Subtarget->isTargetAEABI() || Subtarget->isTargetGNUAEABI() ||
596603 Subtarget->isTargetMuslAEABI() || Subtarget->isTargetAndroid())) {
597604 // clang-format off
@@ -716,7 +723,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
716723 // non-watchos platforms, but are needed for some targets which use a
717724 // hard-float calling convention by default.
718725 if (!Subtarget->isTargetWatchABI()) {
719- if (Subtarget-> isAAPCS_ABI()) {
726+ if (TM. isAAPCS_ABI()) {
720727 setLibcallCallingConv(RTLIB::FPROUND_F32_F16, CallingConv::ARM_AAPCS);
721728 setLibcallCallingConv(RTLIB::FPROUND_F64_F16, CallingConv::ARM_AAPCS);
722729 setLibcallCallingConv(RTLIB::FPEXT_F16_F32, CallingConv::ARM_AAPCS);
@@ -2070,7 +2077,7 @@ ARMTargetLowering::getEffectiveCallingConv(CallingConv::ID CC,
20702077 return isVarArg ? CallingConv::ARM_AAPCS : CallingConv::ARM_AAPCS_VFP;
20712078 case CallingConv::C:
20722079 case CallingConv::Tail:
2073- if (!Subtarget-> isAAPCS_ABI())
2080+ if (!getTM(). isAAPCS_ABI())
20742081 return CallingConv::ARM_APCS;
20752082 else if (Subtarget->hasFPRegs() && !Subtarget->isThumb1Only() &&
20762083 getTargetMachine().Options.FloatABIType == FloatABI::Hard &&
@@ -2080,12 +2087,12 @@ ARMTargetLowering::getEffectiveCallingConv(CallingConv::ID CC,
20802087 return CallingConv::ARM_AAPCS;
20812088 case CallingConv::Fast:
20822089 case CallingConv::CXX_FAST_TLS:
2083- if (!Subtarget-> isAAPCS_ABI()) {
2090+ if (!getTM(). isAAPCS_ABI()) {
20842091 if (Subtarget->hasVFP2Base() && !Subtarget->isThumb1Only() && !isVarArg)
20852092 return CallingConv::Fast;
20862093 return CallingConv::ARM_APCS;
2087- } else if (Subtarget->hasVFP2Base() &&
2088- !Subtarget->isThumb1Only() && ! isVarArg)
2094+ } else if (Subtarget->hasVFP2Base() && !Subtarget->isThumb1Only() &&
2095+ !isVarArg)
20892096 return CallingConv::ARM_AAPCS_VFP;
20902097 else
20912098 return CallingConv::ARM_AAPCS;
@@ -3273,7 +3280,7 @@ ARMTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
32733280 SDValue Arg = OutVals[realRVLocIdx];
32743281 bool ReturnF16 = false;
32753282
3276- if (Subtarget->hasFullFP16() && Subtarget-> isTargetHardFloat()) {
3283+ if (Subtarget->hasFullFP16() && getTM(). isTargetHardFloat()) {
32773284 // Half-precision return values can be returned like this:
32783285 //
32793286 // t11 f16 = fadd ...
@@ -9937,7 +9944,7 @@ SDValue ARMTargetLowering::LowerFSINCOS(SDValue Op, SelectionDAG &DAG) const {
99379944 auto &DL = DAG.getDataLayout();
99389945
99399946 ArgListTy Args;
9940- bool ShouldUseSRet = Subtarget-> isAPCS_ABI();
9947+ bool ShouldUseSRet = getTM(). isAPCS_ABI();
99419948 SDValue SRet;
99429949 if (ShouldUseSRet) {
99439950 // Create stack object for sret.
0 commit comments