|
LLVM 24.0.0git
|
#include "Target/AArch64/AArch64RegisterInfo.h"
Definition at line 27 of file AArch64RegisterInfo.h.
Definition at line 42 of file AArch64RegisterInfo.cpp.
References llvm::AArch64_MC::initLLVMToCVRegMapping().
| bool AArch64RegisterInfo::cannotEliminateFrame | ( | const MachineFunction & | MF | ) | const |
|
override |
Definition at line 977 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 585 of file AArch64RegisterInfo.cpp.
References F, and llvm::MachineFunction::getFunction().
|
override |
Definition at line 391 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 620 of file AArch64RegisterInfo.cpp.
Referenced by getLocalAddressRegister().
|
override |
Code Generation virtual methods...
Definition at line 71 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 195 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 270 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 614 of file AArch64RegisterInfo.cpp.
|
inlineoverride |
Definition at line 57 of file AArch64RegisterInfo.h.
|
inlineoverride |
Definition at line 63 of file AArch64RegisterInfo.h.
|
override |
Definition at line 322 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 235 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 752 of file AArch64RegisterInfo.cpp.
References llvm::TargetFrameLowering::hasFP().
Referenced by getLocalAddressRegister().
| unsigned AArch64RegisterInfo::getLocalAddressRegister | ( | const MachineFunction & | MF | ) | const |
Definition at line 1447 of file AArch64RegisterInfo.cpp.
References getBaseRegister(), llvm::MachineFunction::getFrameInfo(), getFrameRegister(), and llvm::MachineFunction::hasEHFunclets().
Definition at line 366 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 950 of file AArch64RegisterInfo.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::DIExpression::appendOffset(), assert(), getDwarfRegNum(), and llvm::Offset.
|
override |
Definition at line 609 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 1190 of file AArch64RegisterInfo.cpp.
References llvm::all_of(), llvm::MCRegisterClass::contains(), Copies, llvm::MachineRegisterInfo::def_instructions(), llvm::MachineRegisterInfo::def_operands(), llvm::AArch64::DestructiveBinary, llvm::AArch64::DestructiveBinaryComm, llvm::AArch64::DestructiveBinaryCommWithRev, llvm::AArch64::DestructiveBinaryImm, llvm::AArch64::DestructiveBinaryImmUnpred, 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::MCRegisterClass::getID(), llvm::MachineInstr::getOperand(), llvm::VirtRegMap::getPhys(), llvm::MachineOperand::getReg(), llvm::TargetRegisterInfo::getRegAllocationHints(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), llvm::MachineOperand::getSubReg(), llvm::MachineFunction::getSubtarget(), llvm::AArch64::getSVEPseudoMap(), HandleDestructivePredicateHint(), llvm::VirtRegMap::hasPhys(), I, llvm_unreachable, Matrix, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::seq(), llvm::SmallVectorTemplateCommon< T, typename >::size(), TII, and llvm::MachineRegisterInfo::use_nodbg_instructions().
|
override |
Definition at line 1070 of file AArch64RegisterInfo.cpp.
References llvm::MCRegisterClass::getID(), llvm::MachineFunction::getSubtarget(), hasBasePointer(), and llvm::TargetFrameLowering::hasFP().
|
override |
Definition at line 534 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 34 of file AArch64RegisterInfo.h.
Definition at line 357 of file AArch64RegisterInfo.cpp.
| BitVector AArch64RegisterInfo::getStrictlyReservedRegs | ( | const MachineFunction & | MF | ) | const |
Definition at line 418 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 222 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 371 of file AArch64RegisterInfo.cpp.
References assert(), llvm::MachineFunction::getSubtarget(), llvm::CallingConv::GHC, and llvm::AArch64Subtarget::isTargetDarwin().
Definition at line 330 of file AArch64RegisterInfo.cpp.
References assert().
| BitVector AArch64RegisterInfo::getUserReservedRegs | ( | const MachineFunction & | MF | ) | const |
Definition at line 522 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 386 of file AArch64RegisterInfo.cpp.
| bool AArch64RegisterInfo::hasBasePointer | ( | const MachineFunction & | MF | ) | const |
Definition at line 622 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 577 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isXRegisterReserved().
|
override |
Definition at line 671 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 592 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::getFunction(), llvm::Function::hasFnAttribute(), isReservedReg(), and llvm::MCRegisterInfo::regsOverlap().
|
override |
Definition at line 867 of file AArch64RegisterInfo.cpp.
References llvm::AArch64FrameOffsetIsLegal, assert(), llvm::StackOffset::getFixed(), llvm::isAArch64FrameOffsetLegal(), MI, and llvm::Offset.
Referenced by needsFrameBaseReg().
|
override |
Definition at line 1518 of file AArch64RegisterInfo.cpp.
| bool AArch64RegisterInfo::isReservedReg | ( | const MachineFunction & | MF, |
| MCRegister | Reg ) const |
Definition at line 562 of file AArch64RegisterInfo.cpp.
References getReservedRegs().
Referenced by isAsmClobberable().
| bool AArch64RegisterInfo::isStrictlyReservedReg | ( | const MachineFunction & | MF, |
| MCRegister | Reg ) const |
Definition at line 572 of file AArch64RegisterInfo.cpp.
References getStrictlyReservedRegs().
| bool AArch64RegisterInfo::isUserReservedReg | ( | const MachineFunction & | MF, |
| MCRegister | Reg ) const |
Definition at line 567 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 878 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 803 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 52 of file AArch64RegisterInfo.cpp.
References contains(), and I.
|
override |
Definition at line 786 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 757 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 762 of file AArch64RegisterInfo.cpp.
|
override |
Definition at line 902 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 1513 of file AArch64RegisterInfo.cpp.
|
override |
SrcRC and DstRC will be morphed into NewRC if this returns true.
Definition at line 1458 of file AArch64RegisterInfo.cpp.
References llvm::any_of(), llvm::MachineRegisterInfo::def_instructions(), llvm::AArch64Subtarget::enableSRLTSubregToRegMitigation(), llvm::MCRegisterClass::getID(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), MI, llvm::MachineRegisterInfo::subRegLivenessEnabled(), and llvm::MachineRegisterInfo::use_nodbg_instructions().
Definition at line 362 of file AArch64RegisterInfo.cpp.
| void AArch64RegisterInfo::UpdateCustomCalleeSavedRegs | ( | MachineFunction & | MF | ) | const |
Definition at line 204 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 338 of file AArch64RegisterInfo.cpp.
References llvm::MachineFunction::allocateRegMask(), llvm::MachineOperand::getRegMaskSize(), llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isXRegCustomCalleeSaved().
|
override |
Definition at line 768 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().