|
LLVM 23.0.0git
|
#include "Target/AArch64/AArch64RegisterInfo.h"
Definition at line 26 of file AArch64RegisterInfo.h.
Definition at line 43 of file AArch64RegisterInfo.cpp.
References llvm::AArch64_MC::initLLVMToCVRegMapping().
| bool AArch64RegisterInfo::cannotEliminateFrame | ( | const MachineFunction & | MF | ) | const |
Definition at line 793 of file AArch64RegisterInfo.cpp.
References llvm::MachineFrameInfo::adjustsStack(), llvm::TargetOptions::DisableFramePointerElim(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getTarget(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::MachineFrameInfo::isFrameAddressTaken(), and llvm::TargetMachine::Options.
|
override |
Definition at line 978 of file AArch64RegisterInfo.cpp.
References llvm::AArch64FrameOffsetCanUpdate, llvm::AArch64FrameOffsetIsLegal, llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), llvm::MachineOperand::ChangeToImmediate(), createScratchRegisterForInstruction(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::emitFrameOffset(), llvm::StackOffset::getFixed(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getInfo(), llvm::AArch64FrameLowering::getNonLocalFrameIndexReference(), llvm::MachineFrameInfo::getObjectOffset(), llvm::MachineFunction::getRegInfo(), llvm::MachineFrameInfo::getStackSize(), llvm::MachineFunction::getSubtarget(), llvm::AArch64FunctionInfo::getTaggedBasePointerOffset(), llvm::MachineFrameInfo::hasVarSizedObjects(), II, llvm::isAArch64FrameOffsetLegal(), MBB, MI, llvm::AArch64II::MO_TAGGED, llvm::Offset, llvm::AArch64FrameLowering::resolveFrameIndexReference(), llvm::rewriteAArch64FrameIndex(), and TII.
| void AArch64RegisterInfo::emitReservedArgRegCallError | ( | const MachineFunction & | MF | ) | const |
Definition at line 586 of file AArch64RegisterInfo.cpp.
References F, and llvm::MachineFunction::getFunction().
|
override |
Definition at line 392 of file AArch64RegisterInfo.cpp.
References llvm::AArch64InstPrinter::getRegisterName(), llvm::MachineFunction::getSubtarget(), hasBasePointer(), llvm::AArch64Subtarget::isWindowsArm64EC(), and llvm::MCRegisterInfo::regsOverlap().
| MCRegister AArch64RegisterInfo::getBaseRegister | ( | ) | const |
Definition at line 621 of file AArch64RegisterInfo.cpp.
Referenced by getLocalAddressRegister().
|
override |
Code Generation virtual methods...
Definition at line 72 of file AArch64RegisterInfo.cpp.
References llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X1, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2, llvm::CallingConv::AArch64_SVE_VectorCall, llvm::CallingConv::AArch64_VectorCall, llvm::CallingConv::AnyReg, llvm::CallingConv::ARM64EC_Thunk_X64, assert(), llvm::CallingConv::CFGuard_Check, llvm::CallingConv::CXX_FAST_TLS, F, llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getSubtarget(), llvm::CallingConv::GHC, isTargetWindows(), LLVM_FALLTHROUGH, llvm::CallingConv::PreserveAll, llvm::CallingConv::PreserveMost, llvm::CallingConv::PreserveNone, llvm::report_fatal_error(), llvm::CallingConv::SwiftTail, and llvm::CallingConv::Win64.
Referenced by UpdateCustomCalleeSavedRegs().
| const MCPhysReg * AArch64RegisterInfo::getCalleeSavedRegsViaCopy | ( | const MachineFunction * | MF | ) | const |
Definition at line 196 of file AArch64RegisterInfo.cpp.
References assert(), llvm::CallingConv::CXX_FAST_TLS, llvm::Function::getCallingConv(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), and llvm::AArch64FunctionInfo::isSplitCSR().
|
override |
Definition at line 271 of file AArch64RegisterInfo.cpp.
References llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X1, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2, llvm::CallingConv::AArch64_SVE_VectorCall, llvm::CallingConv::AArch64_VectorCall, llvm::CallingConv::AnyReg, llvm::CallingConv::CFGuard_Check, llvm::Function::getAttributes(), getDarwinCallPreservedMask(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), llvm::AArch64Subtarget::getTargetLowering(), llvm::CallingConv::GHC, llvm::Function::hasFnAttribute(), llvm::AArch64Subtarget::isTargetDarwin(), llvm::CallingConv::PreserveAll, llvm::CallingConv::PreserveMost, llvm::CallingConv::PreserveNone, llvm::report_fatal_error(), llvm::AArch64TargetLowering::supportSwiftError(), and llvm::CallingConv::SwiftTail.
|
override |
Definition at line 615 of file AArch64RegisterInfo.cpp.
|
inlineoverride |
Definition at line 56 of file AArch64RegisterInfo.h.
|
inlineoverride |
Definition at line 62 of file AArch64RegisterInfo.h.
|
override |
Definition at line 323 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isTargetLinux().
| const uint32_t * AArch64RegisterInfo::getDarwinCallPreservedMask | ( | const MachineFunction & | MF, |
| CallingConv::ID | CC ) const |
Definition at line 236 of file AArch64RegisterInfo.cpp.
References llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X1, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2, llvm::CallingConv::AArch64_SVE_VectorCall, llvm::CallingConv::AArch64_VectorCall, assert(), llvm::CallingConv::CFGuard_Check, llvm::CallingConv::CXX_FAST_TLS, llvm::Function::getAttributes(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), llvm::AArch64Subtarget::getTargetLowering(), llvm::AArch64Subtarget::isTargetDarwin(), llvm::CallingConv::PreserveAll, llvm::CallingConv::PreserveMost, llvm::report_fatal_error(), llvm::AArch64TargetLowering::supportSwiftError(), and llvm::CallingConv::SwiftTail.
Referenced by getCallPreservedMask().
|
override |
Definition at line 753 of file AArch64RegisterInfo.cpp.
References llvm::TargetFrameLowering::hasFP().
Referenced by getLocalAddressRegister().
| unsigned AArch64RegisterInfo::getLocalAddressRegister | ( | const MachineFunction & | MF | ) | const |
Definition at line 1374 of file AArch64RegisterInfo.cpp.
References getBaseRegister(), llvm::MachineFunction::getFrameInfo(), getFrameRegister(), and llvm::MachineFunction::hasEHFunclets().
Definition at line 367 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 951 of file AArch64RegisterInfo.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::DIExpression::appendOffset(), assert(), getDwarfRegNum(), and llvm::Offset.
|
override |
Definition at line 610 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 1138 of file AArch64RegisterInfo.cpp.
References llvm::all_of(), assert(), llvm::TargetRegisterClass::contains(), llvm::MachineRegisterInfo::def_instructions(), llvm::MachineRegisterInfo::def_operands(), llvm::AArch64::DestructiveBinary, llvm::AArch64::DestructiveBinaryComm, llvm::AArch64::DestructiveBinaryCommWithRev, llvm::AArch64::DestructiveBinaryImm, llvm::AArch64::DestructiveBinaryShImmUnpred, llvm::AArch64::DestructiveInstTypeMask, llvm::AArch64::DestructiveTernaryCommWithRev, llvm::AArch64::DestructiveUnaryPassthru, llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::AArch64::FalseLanesMask, llvm::AArch64::FalseLanesUndef, llvm::find_if(), llvm::TargetRegisterClass::getID(), llvm::MachineOperand::getOperandNo(), llvm::VirtRegMap::getPhys(), llvm::MachineOperand::getReg(), llvm::TargetRegisterInfo::getRegAllocationHints(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::AArch64::getSVEPseudoMap(), llvm::VirtRegMap::hasPhys(), I, llvm_unreachable, llvm::make_range(), Matrix, MI, OpIdx, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::ArrayRef< T >::size(), llvm::SmallVectorTemplateCommon< T, typename >::size(), TII, and llvm::MachineRegisterInfo::use_nodbg_instructions().
|
override |
Definition at line 1071 of file AArch64RegisterInfo.cpp.
References llvm::TargetRegisterClass::getID(), llvm::MachineFunction::getSubtarget(), hasBasePointer(), and llvm::TargetFrameLowering::hasFP().
|
override |
Definition at line 535 of file AArch64RegisterInfo.cpp.
References assert(), llvm::MachineFunction::getProperties(), getStrictlyReservedRegs(), llvm::MachineFunction::getSubtarget(), llvm::AArch64Subtarget::isLRReservedForRA(), llvm::AArch64Subtarget::isXRegisterReservedForRA(), and llvm::Reserved.
Referenced by isReservedReg().
|
inline |
Definition at line 33 of file AArch64RegisterInfo.h.
Definition at line 358 of file AArch64RegisterInfo.cpp.
| BitVector AArch64RegisterInfo::getStrictlyReservedRegs | ( | const MachineFunction & | MF | ) | const |
Definition at line 419 of file AArch64RegisterInfo.cpp.
References assert(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getProperties(), llvm::MachineFunction::getSubtarget(), llvm::CallingConv::GRAAL, hasBasePointer(), llvm::Function::hasFnAttribute(), llvm::AArch64FrameLowering::isFPReserved(), llvm::AArch64Subtarget::isLFI(), llvm::MCSubRegIterator::isValid(), llvm::AArch64Subtarget::isWindowsArm64EC(), llvm::AArch64Subtarget::isXRegisterReserved(), and llvm::Reserved.
Referenced by getReservedRegs(), and isStrictlyReservedReg().
|
override |
Definition at line 223 of file AArch64RegisterInfo.cpp.
| const uint32_t * AArch64RegisterInfo::getThisReturnPreservedMask | ( | const MachineFunction & | MF, |
| CallingConv::ID | CC ) const |
getThisReturnPreservedMask - Returns a call preserved mask specific to the case that 'returned' is on an i64 first argument if the calling convention is one that can (partially) model this attribute with a preserved mask (i.e.
it is a calling convention that uses the same register for the first i64 argument and an i64 return value)
Should return NULL in the case that the calling convention does not have this property
Definition at line 372 of file AArch64RegisterInfo.cpp.
References assert(), llvm::MachineFunction::getSubtarget(), llvm::CallingConv::GHC, and llvm::AArch64Subtarget::isTargetDarwin().
Definition at line 331 of file AArch64RegisterInfo.cpp.
References assert().
| BitVector AArch64RegisterInfo::getUserReservedRegs | ( | const MachineFunction & | MF | ) | const |
Definition at line 523 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getSubtarget(), llvm::AArch64Subtarget::isXRegisterReserved(), and llvm::Reserved.
Referenced by isUserReservedReg().
Stack probing calls preserve different CSRs to the normal CC.
Definition at line 387 of file AArch64RegisterInfo.cpp.
| bool AArch64RegisterInfo::hasBasePointer | ( | const MachineFunction & | MF | ) | const |
Definition at line 623 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getInfo(), llvm::MachineFrameInfo::getLocalFrameSize(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::hasEHFunclets(), and llvm::MachineFrameInfo::hasVarSizedObjects().
Referenced by explainReservedReg(), getRegPressureLimit(), and getStrictlyReservedRegs().
| bool AArch64RegisterInfo::isAnyArgRegReserved | ( | const MachineFunction & | MF | ) | const |
Definition at line 578 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isXRegisterReserved().
|
override |
Definition at line 672 of file AArch64RegisterInfo.cpp.
References llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X0, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X1, llvm::CallingConv::AArch64_SME_ABI_Support_Routines_PreserveMost_From_X2, llvm::CallingConv::AArch64_SVE_VectorCall, llvm::CallingConv::AArch64_VectorCall, llvm::CallingConv::C, llvm::CallingConv::CFGuard_Check, llvm::CallingConv::CXX_FAST_TLS, llvm::CallingConv::Fast, llvm::Function::getCallingConv(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), llvm::CallingConv::GHC, llvm::is_contained(), llvm::AArch64Subtarget::isCallingConvWin64(), llvm::AArch64Subtarget::isTargetDarwin(), llvm::AArch64Subtarget::isTargetILP32(), llvm::AArch64Subtarget::isTargetWindows(), llvm::Function::isVarArg(), llvm::CallingConv::PreserveAll, llvm::CallingConv::PreserveMost, llvm::CallingConv::PreserveNone, llvm::report_fatal_error(), llvm::CallingConv::Swift, llvm::CallingConv::SwiftTail, llvm::CallingConv::Tail, and llvm::CallingConv::Win64.
|
override |
Definition at line 593 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getFunction(), llvm::Function::hasFnAttribute(), isReservedReg(), and llvm::MCRegisterInfo::regsOverlap().
|
override |
Definition at line 868 of file AArch64RegisterInfo.cpp.
References llvm::AArch64FrameOffsetIsLegal, assert(), llvm::StackOffset::getFixed(), llvm::isAArch64FrameOffsetLegal(), MI, and llvm::Offset.
Referenced by needsFrameBaseReg().
|
override |
Definition at line 1445 of file AArch64RegisterInfo.cpp.
| bool AArch64RegisterInfo::isReservedReg | ( | const MachineFunction & | MF, |
| MCRegister | Reg ) const |
Definition at line 563 of file AArch64RegisterInfo.cpp.
References getReservedRegs().
Referenced by isAsmClobberable().
| bool AArch64RegisterInfo::isStrictlyReservedReg | ( | const MachineFunction & | MF, |
| MCRegister | Reg ) const |
Definition at line 573 of file AArch64RegisterInfo.cpp.
References getStrictlyReservedRegs().
| bool AArch64RegisterInfo::isUserReservedReg | ( | const MachineFunction & | MF, |
| MCRegister | Reg ) const |
Definition at line 568 of file AArch64RegisterInfo.cpp.
References getUserReservedRegs().
|
override |
Insert defining instruction(s) for BaseReg to be a pointer to FrameIdx at the beginning of the basic block.
Definition at line 879 of file AArch64RegisterInfo.cpp.
References llvm::MachineInstrBuilder::addFrameIndex(), llvm::MachineInstrBuilder::addImm(), llvm::BuildMI(), llvm::MachineRegisterInfo::constrainRegClass(), llvm::MachineRegisterInfo::createVirtualRegister(), DL, llvm::AArch64_AM::getShifterImm(), llvm::MachineFunction::getSubtarget(), llvm::AArch64_AM::LSL, MBB, llvm::Offset, and TII.
|
override |
needsFrameBaseReg - Returns true if the instruction's frame index reference would be better served by a base register other than FP or SP.
Used by LocalStackFrameAllocation to determine which frame index references it should create new base registers for.
Definition at line 804 of file AArch64RegisterInfo.cpp.
References assert(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFrameInfo::getLocalFrameSize(), llvm::TargetFrameLowering::hasFP(), isFrameOffsetLegal(), MI, and llvm::Offset.
| bool AArch64RegisterInfo::regNeedsCFI | ( | MCRegister | Reg, |
| MCRegister & | RegToUseForCFI ) const |
Return whether the register needs a CFI entry.
Not all unwinders may know about SVE registers, so we assume the lowest common denominator, i.e. the callee-saves required by the base ABI. For the SVE registers z8-z15 only the lower 64-bits (d8-d15) need to be saved. The lower 64-bits subreg is returned in RegToUseForCFI.
Definition at line 53 of file AArch64RegisterInfo.cpp.
References contains(), and I.
|
override |
Definition at line 787 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 758 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 763 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 903 of file AArch64RegisterInfo.cpp.
References assert(), llvm::Done, llvm::StackOffset::getFixed(), llvm::MachineFunction::getSubtarget(), MI, llvm::Offset, llvm::rewriteAArch64FrameIndex(), and TII.
|
override |
Definition at line 1440 of file AArch64RegisterInfo.cpp.
|
override |
SrcRC and DstRC will be morphed into NewRC if this returns true.
Definition at line 1385 of file AArch64RegisterInfo.cpp.
References llvm::any_of(), llvm::MachineRegisterInfo::def_instructions(), llvm::AArch64Subtarget::enableSRLTSubregToRegMitigation(), llvm::TargetRegisterClass::getID(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), MI, llvm::MachineRegisterInfo::subRegLivenessEnabled(), and llvm::MachineRegisterInfo::use_nodbg_instructions().
Definition at line 363 of file AArch64RegisterInfo.cpp.
| void AArch64RegisterInfo::UpdateCustomCalleeSavedRegs | ( | MachineFunction & | MF | ) | const |
Definition at line 205 of file AArch64RegisterInfo.cpp.
References getCalleeSavedRegs(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::AArch64Subtarget::isXRegCustomCalleeSaved(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineRegisterInfo::setCalleeSavedRegs().
| void AArch64RegisterInfo::UpdateCustomCallPreservedMask | ( | MachineFunction & | MF, |
| const uint32_t ** | Mask ) const |
Definition at line 339 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::allocateRegMask(), llvm::MachineOperand::getRegMaskSize(), llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isXRegCustomCalleeSaved().
|
override |
Definition at line 769 of file AArch64RegisterInfo.cpp.
References assert(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getSubtarget(), llvm::AArch64FunctionInfo::hasCalculatedStackSizeSVE(), llvm::TargetFrameLowering::hasFP(), llvm::AArch64FunctionInfo::hasStackHazardSlotIndex(), and llvm::AArch64FunctionInfo::hasSVEStackSize().