LLVM API Documentation

Classes | Public Types | Public Member Functions | Static Public Member Functions | Friends
llvm::MachineRegisterInfo Class Reference

#include <MachineRegisterInfo.h>

List of all members.

Classes

class  defusechain_instr_iterator
class  defusechain_iterator
class  Delegate

Public Types

typedef defusechain_iterator
< true, true, false, true,
false, false
reg_iterator
typedef
defusechain_instr_iterator
< true, true, false, false,
true, false
reg_instr_iterator
typedef
defusechain_instr_iterator
< true, true, false, false,
false, true
reg_bundle_iterator
typedef defusechain_iterator
< true, true, true, true,
false, false
reg_nodbg_iterator
typedef
defusechain_instr_iterator
< true, true, true, false,
true, false
reg_instr_nodbg_iterator
typedef
defusechain_instr_iterator
< true, true, true, false,
false, true
reg_bundle_nodbg_iterator
typedef defusechain_iterator
< false, true, false, true,
false, false
def_iterator
 def_iterator/def_begin/def_end - Walk all defs of the specified register.
typedef
defusechain_instr_iterator
< false, true, false, false,
true, false
def_instr_iterator
typedef
defusechain_instr_iterator
< false, true, false, false,
false, true
def_bundle_iterator
typedef defusechain_iterator
< true, false, false, true,
false, false
use_iterator
 use_iterator/use_begin/use_end - Walk all uses of the specified register.
typedef
defusechain_instr_iterator
< true, false, false, false,
true, false
use_instr_iterator
typedef
defusechain_instr_iterator
< true, false, false, false,
false, true
use_bundle_iterator
typedef defusechain_iterator
< true, false, true, true,
false, false
use_nodbg_iterator
typedef
defusechain_instr_iterator
< true, false, true, false,
true, false
use_instr_nodbg_iterator
typedef
defusechain_instr_iterator
< true, false, true, false,
false, true
use_bundle_nodbg_iterator
typedef std::vector< std::pair
< unsigned, unsigned >
>::const_iterator 
livein_iterator

Public Member Functions

 MachineRegisterInfo (const MachineFunction *MF)
const TargetRegisterInfogetTargetRegisterInfo () const
void resetDelegate (Delegate *delegate)
void setDelegate (Delegate *delegate)
bool isSSA () const
void leaveSSA ()
bool tracksLiveness () const
void invalidateLiveness ()
void addRegOperandToUseList (MachineOperand *MO)
 Add MO to the linked list of operands for its register.
void removeRegOperandFromUseList (MachineOperand *MO)
 Remove MO from its use-def list.
void moveOperands (MachineOperand *Dst, MachineOperand *Src, unsigned NumOps)
void verifyUseList (unsigned Reg) const
 Verify the sanity of the use list for Reg.
void verifyUseLists () const
 Verify the use list of all registers.
reg_iterator reg_begin (unsigned RegNo) const
iterator_range< reg_iteratorreg_operands (unsigned Reg) const
reg_instr_iterator reg_instr_begin (unsigned RegNo) const
iterator_range
< reg_instr_iterator
reg_instructions (unsigned Reg) const
reg_bundle_iterator reg_bundle_begin (unsigned RegNo) const
iterator_range
< reg_bundle_iterator
reg_bundles (unsigned Reg) const
bool reg_empty (unsigned RegNo) const
reg_nodbg_iterator reg_nodbg_begin (unsigned RegNo) const
iterator_range
< reg_nodbg_iterator
reg_nodbg_operands (unsigned Reg) const
reg_instr_nodbg_iterator reg_instr_nodbg_begin (unsigned RegNo) const
iterator_range
< reg_instr_nodbg_iterator
reg_nodbg_instructions (unsigned Reg) const
reg_bundle_nodbg_iterator reg_bundle_nodbg_begin (unsigned RegNo) const
iterator_range
< reg_bundle_nodbg_iterator
reg_nodbg_bundles (unsigned Reg) const
bool reg_nodbg_empty (unsigned RegNo) const
def_iterator def_begin (unsigned RegNo) const
iterator_range< def_iteratordef_operands (unsigned Reg) const
def_instr_iterator def_instr_begin (unsigned RegNo) const
iterator_range
< def_instr_iterator
def_instructions (unsigned Reg) const
def_bundle_iterator def_bundle_begin (unsigned RegNo) const
iterator_range
< def_bundle_iterator
def_bundles (unsigned Reg) const
bool def_empty (unsigned RegNo) const
bool hasOneDef (unsigned RegNo) const
use_iterator use_begin (unsigned RegNo) const
iterator_range< use_iteratoruse_operands (unsigned Reg) const
use_instr_iterator use_instr_begin (unsigned RegNo) const
iterator_range
< use_instr_iterator
use_instructions (unsigned Reg) const
use_bundle_iterator use_bundle_begin (unsigned RegNo) const
iterator_range
< use_bundle_iterator
use_bundles (unsigned Reg) const
bool use_empty (unsigned RegNo) const
bool hasOneUse (unsigned RegNo) const
use_nodbg_iterator use_nodbg_begin (unsigned RegNo) const
iterator_range
< use_nodbg_iterator
use_nodbg_operands (unsigned Reg) const
use_instr_nodbg_iterator use_instr_nodbg_begin (unsigned RegNo) const
iterator_range
< use_instr_nodbg_iterator
use_nodbg_instructions (unsigned Reg) const
use_bundle_nodbg_iterator use_bundle_nodbg_begin (unsigned RegNo) const
iterator_range
< use_bundle_nodbg_iterator
use_nodbg_bundles (unsigned Reg) const
bool use_nodbg_empty (unsigned RegNo) const
bool hasOneNonDBGUse (unsigned RegNo) const
void replaceRegWith (unsigned FromReg, unsigned ToReg)
MachineInstrgetVRegDef (unsigned Reg) const
MachineInstrgetUniqueVRegDef (unsigned Reg) const
void clearKillFlags (unsigned Reg) const
void dumpUses (unsigned RegNo) const
bool isConstantPhysReg (unsigned PhysReg, const MachineFunction &MF) const
PSetIterator getPressureSets (unsigned RegUnit) const
const TargetRegisterClassgetRegClass (unsigned Reg) const
void setRegClass (unsigned Reg, const TargetRegisterClass *RC)
const TargetRegisterClassconstrainRegClass (unsigned Reg, const TargetRegisterClass *RC, unsigned MinNumRegs=0)
bool recomputeRegClass (unsigned Reg, const TargetMachine &)
unsigned createVirtualRegister (const TargetRegisterClass *RegClass)
unsigned getNumVirtRegs () const
void clearVirtRegs ()
 clearVirtRegs - Remove all virtual registers (after physreg assignment).
void setRegAllocationHint (unsigned Reg, unsigned Type, unsigned PrefReg)
std::pair< unsigned, unsignedgetRegAllocationHint (unsigned Reg) const
unsigned getSimpleHint (unsigned Reg) const
void markUsesInDebugValueAsUndef (unsigned Reg) const
bool isPhysRegUsed (unsigned Reg) const
void setRegUnitUsed (unsigned RegUnit)
void setPhysRegUsed (unsigned Reg)
void addPhysRegsUsedFromRegMask (const uint32_t *RegMask)
void setPhysRegUnused (unsigned Reg)
void freezeReservedRegs (const MachineFunction &)
bool reservedRegsFrozen () const
bool canReserveReg (unsigned PhysReg) const
const BitVectorgetReservedRegs () const
bool isReserved (unsigned PhysReg) const
bool isAllocatable (unsigned PhysReg) const
void addLiveIn (unsigned Reg, unsigned vreg=0)
livein_iterator livein_begin () const
livein_iterator livein_end () const
bool livein_empty () const
bool isLiveIn (unsigned Reg) const
unsigned getLiveInPhysReg (unsigned VReg) const
unsigned getLiveInVirtReg (unsigned PReg) const
void EmitLiveInCopies (MachineBasicBlock *EntryMBB, const TargetRegisterInfo &TRI, const TargetInstrInfo &TII)

Static Public Member Functions

static reg_iterator reg_end ()
static reg_instr_iterator reg_instr_end ()
static reg_bundle_iterator reg_bundle_end ()
static reg_nodbg_iterator reg_nodbg_end ()
static reg_instr_nodbg_iterator reg_instr_nodbg_end ()
static reg_bundle_nodbg_iterator reg_bundle_nodbg_end ()
static def_iterator def_end ()
static def_instr_iterator def_instr_end ()
static def_bundle_iterator def_bundle_end ()
static use_iterator use_end ()
static use_instr_iterator use_instr_end ()
static use_bundle_iterator use_bundle_end ()
static use_nodbg_iterator use_nodbg_end ()
static use_instr_nodbg_iterator use_instr_nodbg_end ()
static use_bundle_nodbg_iterator use_bundle_nodbg_end ()

Friends

class defusechain_iterator
class defusechain_instr_iterator

Detailed Description

MachineRegisterInfo - Keep track of information for virtual and physical registers, including vreg register classes, use/def chains for registers, etc.

Definition at line 32 of file MachineRegisterInfo.h.


Member Typedef Documentation

def_bundle_iterator/def_bundle_begin/def_bundle_end - Walk all defs of the specified register, stepping by bundle.

Definition at line 360 of file MachineRegisterInfo.h.

def_instr_iterator/def_instr_begin/def_instr_end - Walk all defs of the specified register, stepping by MachineInst.

Definition at line 343 of file MachineRegisterInfo.h.

def_iterator/def_begin/def_end - Walk all defs of the specified register.

Definition at line 330 of file MachineRegisterInfo.h.

typedef std::vector<std::pair<unsigned,unsigned> >::const_iterator llvm::MachineRegisterInfo::livein_iterator

Definition at line 750 of file MachineRegisterInfo.h.

reg_bundle_iterator/reg_bundle_begin/reg_bundle_end - Walk all defs and uses of the specified register, stepping by bundle.

Definition at line 252 of file MachineRegisterInfo.h.

reg_bundle_nodbg_iterator/reg_bundle_nodbg_begin/reg_bundle_nodbg_end - Walk all defs and uses of the specified register, stepping by bundle, skipping those marked as Debug.

Definition at line 308 of file MachineRegisterInfo.h.

reg_instr_iterator/reg_instr_begin/reg_instr_end - Walk all defs and uses of the specified register, stepping by MachineInstr.

Definition at line 235 of file MachineRegisterInfo.h.

reg_instr_nodbg_iterator/reg_instr_nodbg_begin/reg_instr_nodbg_end - Walk all defs and uses of the specified register, stepping by MachineInstr, skipping those marked as Debug.

Definition at line 290 of file MachineRegisterInfo.h.

reg_iterator/reg_begin/reg_end - Walk all defs and uses of the specified register.

Definition at line 222 of file MachineRegisterInfo.h.

reg_nodbg_iterator/reg_nodbg_begin/reg_nodbg_end - Walk all defs and uses of the specified register, skipping those marked as Debug.

Definition at line 272 of file MachineRegisterInfo.h.

use_bundle_iterator/use_bundle_begin/use_bundle_end - Walk all uses of the specified register, stepping by bundle.

Definition at line 418 of file MachineRegisterInfo.h.

use_bundle_nodbg_iterator/use_bundle_nodbg_begin/use_bundle_nodbg_end - Walk all uses of the specified register, stepping by bundle, skipping those marked as Debug.

Definition at line 483 of file MachineRegisterInfo.h.

use_instr_iterator/use_instr_begin/use_instr_end - Walk all uses of the specified register, stepping by MachineInstr.

Definition at line 401 of file MachineRegisterInfo.h.

use_instr_nodbg_iterator/use_instr_nodbg_begin/use_instr_nodbg_end - Walk all uses of the specified register, stepping by MachineInstr, skipping those marked as Debug.

Definition at line 465 of file MachineRegisterInfo.h.

use_iterator/use_begin/use_end - Walk all uses of the specified register.

Definition at line 388 of file MachineRegisterInfo.h.

use_nodbg_iterator/use_nodbg_begin/use_nodbg_end - Walk all uses of the specified register, skipping those marked as Debug.

Definition at line 447 of file MachineRegisterInfo.h.


Constructor & Destructor Documentation

MachineRegisterInfo::MachineRegisterInfo ( const MachineFunction MF) [explicit]

Member Function Documentation

void llvm::MachineRegisterInfo::addLiveIn ( unsigned  Reg,
unsigned  vreg = 0 
) [inline]
void llvm::MachineRegisterInfo::addPhysRegsUsedFromRegMask ( const uint32_t *  RegMask) [inline]

addPhysRegsUsedFromRegMask - Mark any registers not in RegMask as used. This corresponds to the bit mask attached to register mask operands.

Definition at line 664 of file MachineRegisterInfo.h.

References llvm::BitVector::setBitsNotInMask().

canReserveReg - Returns true if PhysReg can be used as a reserved register. Any register can be reserved before freezeReservedRegs() is called.

Definition at line 703 of file MachineRegisterInfo.h.

References reservedRegsFrozen(), and llvm::BitVector::test().

Referenced by llvm::ARMBaseRegisterInfo::canRealignStack().

clearKillFlags - Iterate over all the uses of the given register and clear the kill flag from the MachineOperand. This function is used by optimization passes which extend register lifetimes and need only preserve conservative kill flag information.

Definition at line 332 of file MachineRegisterInfo.cpp.

References use_operands().

Referenced by llvm::AArch64InstrInfo::insertSelect(), and llvm::HexagonInstrInfo::PredicateInstruction().

clearVirtRegs - Remove all virtual registers (after physreg assignment).

Definition at line 107 of file MachineRegisterInfo.cpp.

References llvm::IndexedMap< T, ToIndexT >::clear(), getNumVirtRegs(), llvm::TargetRegisterInfo::index2VirtReg(), llvm_unreachable, and verifyUseList().

Referenced by llvm::PEI::runOnMachineFunction().

createVirtualRegister - Create and return a new virtual register in the function with the specified register class.

Definition at line 91 of file MachineRegisterInfo.cpp.

References getNumVirtRegs(), llvm::IndexedMap< T, ToIndexT >::grow(), llvm::TargetRegisterInfo::index2VirtReg(), llvm::TargetRegisterClass::isAllocatable(), and llvm::MachineRegisterInfo::Delegate::MRI_NoteNewVirtualRegister().

Referenced by llvm::MachineFunction::addLiveIn(), llvm::MachineBasicBlock::addLiveIn(), addLiveIn(), llvm::LiveRangeEdit::createEmptyIntervalFrom(), llvm::LiveRangeEdit::createFrom(), llvm::AMDGPUTargetLowering::CreateLiveInRegister(), llvm::FunctionLoweringInfo::CreateReg(), llvm::FastISel::createResultReg(), llvm::HexagonInstrInfo::createVR(), llvm::SystemZRegisterInfo::eliminateFrameIndex(), llvm::Thumb1RegisterInfo::eliminateFrameIndex(), llvm::AArch64RegisterInfo::eliminateFrameIndex(), llvm::PPCRegisterInfo::eliminateFrameIndex(), llvm::ARMBaseRegisterInfo::eliminateFrameIndex(), llvm::PPCTargetLowering::EmitAtomicBinary(), llvm::PPCTargetLowering::emitEHSjLjLongJmp(), llvm::PPCTargetLowering::emitEHSjLjSetJmp(), llvm::R600TargetLowering::EmitInstrWithCustomInserter(), llvm::SITargetLowering::EmitInstrWithCustomInserter(), llvm::ARMTargetLowering::EmitInstrWithCustomInserter(), llvm::PPCTargetLowering::EmitInstrWithCustomInserter(), llvm::PPCTargetLowering::EmitPartwordAtomicBinary(), llvm::NVPTXFrameLowering::emitPrologue(), llvm::MSP430TargetLowering::EmitShiftInstr(), emitThumbRegPlusImmInReg(), llvm::SparcTargetLowering::expandAtomicRMW(), llvm::ARMBaseInstrInfo::FoldImmediate(), forceReg(), llvm::AArch64InstrInfo::genAlternativeCodeSequence(), llvm::MipsFunctionInfo::getGlobalBaseReg(), llvm::SparcInstrInfo::getGlobalBaseReg(), llvm::MipsFunctionInfo::getMips16SPAliasReg(), GetRegistersForValue(), InsertNewDef(), llvm::SIInstrInfo::legalizeOperands(), llvm::SIInstrInfo::legalizeOpWithMove(), llvm::MipsSEInstrInfo::loadImmediate(), llvm::PPCRegisterInfo::lowerCRBitRestore(), llvm::PPCRegisterInfo::lowerCRBitSpilling(), llvm::PPCRegisterInfo::lowerCRRestore(), llvm::PPCRegisterInfo::lowerCRSpilling(), llvm::PPCRegisterInfo::lowerDynamicAlloc(), llvm::HexagonTargetLowering::LowerFormalArguments(), llvm::SystemZTargetLowering::LowerFormalArguments(), llvm::SparcTargetLowering::LowerFormalArguments_32(), llvm::PPCRegisterInfo::lowerVRSAVERestore(), llvm::PPCRegisterInfo::lowerVRSAVESpilling(), llvm::SIInstrInfo::moveSMRDToVALU(), llvm::SIInstrInfo::moveToVALU(), and llvm::SIInstrInfo::splitSMRD().

Definition at line 331 of file MachineRegisterInfo.h.

Referenced by def_empty(), def_operands(), hasOneDef(), isKilled(), and MustSaveLR().

Definition at line 361 of file MachineRegisterInfo.h.

Referenced by def_bundles().

Definition at line 364 of file MachineRegisterInfo.h.

Referenced by def_bundles().

Definition at line 368 of file MachineRegisterInfo.h.

References def_bundle_begin(), and def_bundle_end().

def_empty - Return true if there are no instructions defining the specified register (it may be live-in).

Definition at line 375 of file MachineRegisterInfo.h.

References def_begin(), and def_end().

Referenced by llvm::PBQPBuilder::build(), getUniqueVRegDef(), and isConstantPhysReg().

static def_iterator llvm::MachineRegisterInfo::def_end ( ) [inline, static]

Definition at line 334 of file MachineRegisterInfo.h.

Referenced by def_empty(), def_operands(), hasOneDef(), isKilled(), and MustSaveLR().

Definition at line 352 of file MachineRegisterInfo.h.

References def_instr_begin(), and def_instr_end().

Referenced by isImplicitlyDefined().

Definition at line 336 of file MachineRegisterInfo.h.

References def_begin(), and def_end().

Referenced by llvm::LiveRangeCalc::createDeadDefs().

void MachineRegisterInfo::dumpUses ( unsigned  RegNo) const

Definition at line 395 of file MachineRegisterInfo.cpp.

References I, and use_instructions().

EmitLiveInCopies - Emit copies to initialize livein virtual registers into the given entry block.

Definition at line 365 of file MachineRegisterInfo.cpp.

References llvm::MachineBasicBlock::addLiveIn(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::TargetOpcode::COPY, llvm::MCInstrInfo::get(), and use_empty().

Referenced by llvm::SelectionDAGISel::runOnMachineFunction().

freezeReservedRegs - Called by the register allocator to freeze the set of reserved registers before allocation begins.

Definition at line 401 of file MachineRegisterInfo.cpp.

References llvm::MCRegisterInfo::getNumRegs(), llvm::TargetRegisterInfo::getReservedRegs(), getTargetRegisterInfo(), and llvm::BitVector::size().

Referenced by llvm::RegAllocBase::init(), and llvm::SelectionDAGISel::runOnMachineFunction().

getLiveInPhysReg - If VReg is a live-in virtual register, return the corresponding live-in physical register.

Definition at line 346 of file MachineRegisterInfo.cpp.

References I, livein_begin(), and livein_end().

getLiveInVirtReg - If PReg is a live-in physical register, return the corresponding live-in physical register.

Definition at line 355 of file MachineRegisterInfo.cpp.

References I, livein_begin(), and livein_end().

Referenced by llvm::MachineFunction::addLiveIn(), and llvm::AMDGPUTargetLowering::CreateLiveInRegister().

Get an iterator over the pressure sets affected by the given physical or virtual register. If RegUnit is physical, it must be a register unit (from MCRegUnitIterator).

Definition at line 1010 of file MachineRegisterInfo.h.

Referenced by llvm::PressureDiff::addPressureChange(), llvm::RegPressureTracker::decreaseRegPressure(), llvm::RegPressureTracker::discoverLiveIn(), llvm::RegPressureTracker::discoverLiveOut(), llvm::RegPressureTracker::increaseRegPressure(), and llvm::RegPressureTracker::initLiveThru().

getRegClass - Return the register class of the specified virtual register.

Definition at line 560 of file MachineRegisterInfo.h.

Referenced by llvm::MachineFunction::addLiveIn(), llvm::RegAllocBase::allocatePhysRegs(), llvm::AllocationOrder::AllocationOrder(), llvm::VirtRegMap::assignVirt2StackSlot(), llvm::PBQPBuilder::build(), llvm::LiveRangeEdit::calculateRegClassAndHint(), canFoldCopy(), canFoldIntoCSel(), llvm::PPCInstrInfo::canInsertSelect(), llvm::AArch64InstrInfo::canInsertSelect(), constrainRegClass(), llvm::SystemZInstrInfo::convertToThreeAddress(), copyHint(), llvm::NVPTXInstrInfo::copyPhysReg(), llvm::LiveRangeEdit::createEmptyIntervalFrom(), llvm::LiveRangeEdit::createFrom(), llvm::PPCTargetLowering::emitEHSjLjSetJmp(), llvm::SparcTargetLowering::expandAtomicRMW(), llvm::FastISel::fastEmitInst_extractsubreg(), llvm::ARMBaseInstrInfo::FoldImmediate(), llvm::SystemZInstrInfo::foldMemoryOperandImpl(), foldPatchpoint(), GetCostForDef(), llvm::PPCInstrInfo::getOperandLatency(), llvm::SIInstrInfo::getOpRegClass(), getRegTy(), hasVGPROperands(), llvm::MachineSSAUpdater::Initialize(), isFPR64(), isGPR64(), llvm::SIInstrInfo::isOperandLegal(), isPartialRegisterLoad(), isVGPR(), llvm::SIInstrInfo::legalizeOperands(), llvm::SIInstrInfo::moveToVALU(), llvm::ARMBaseInstrInfo::optimizeSelect(), llvm::VirtRegMap::print(), llvm::MachineInstr::print(), llvm::PSetIterator::PSetIterator(), recomputeRegClass(), llvm::SelectionDAGISel::runOnMachineFunction(), llvm::CoalescerPair::setRegisters(), and UpdateOperandRegClass().

getReservedRegs - Returns a reference to the frozen set of reserved registers. This method should always be preferred to calling TRI::getReservedRegs() when possible.

Definition at line 710 of file MachineRegisterInfo.h.

References reservedRegsFrozen().

Referenced by isReserved(), and llvm::RegisterClassInfo::runOnMachineFunction().

getSimpleHint - Return the preferred register allocation hint, or 0 if a standard simple hint (Type == 0) is not set.

Definition at line 617 of file MachineRegisterInfo.h.

References getRegAllocationHint(), and Hint().

Referenced by llvm::VirtRegMap::hasPreferredPhys().

getUniqueVRegDef - Return the unique machine instr that defines the specified virtual register or null if none is found. If there are multiple definitions or no definition, return null.

Definition at line 313 of file MachineRegisterInfo.cpp.

References def_empty(), def_instr_begin(), def_instr_end(), and I.

Referenced by canCombineWithMUL(), foldImmediates(), genMadd(), genMaddR(), getDef(), llvm::AArch64InstrInfo::optimizeCompareInstr(), llvm::PPCInstrInfo::optimizeCompareInstr(), and llvm::ARMBaseInstrInfo::optimizeCompareInstr().

hasOneDef - Return true if there is exactly one instruction defining the specified register.

Definition at line 379 of file MachineRegisterInfo.h.

References def_begin(), and def_end().

Referenced by llvm::ScheduleDAGInstrs::addVRegDefDeps().

hasOneNonDBGUse - Return true if there is exactly one non-Debug instruction using the specified register.

Definition at line 321 of file MachineRegisterInfo.cpp.

References use_nodbg_begin(), and use_nodbg_end().

Referenced by canCombineWithMUL(), canFoldIntoMOVCC(), findOnlyInterestingUse(), llvm::PPCInstrInfo::FoldImmediate(), llvm::ARMBaseInstrInfo::FoldImmediate(), and isOperandKill().

hasOneUse - Return true if there is exactly one instruction using the specified register.

Definition at line 437 of file MachineRegisterInfo.h.

References use_begin(), and use_end().

Referenced by isKilled(), and llvm::FastISel::tryToFoldLoad().

invalidateLiveness - Indicates that register liveness is no longer being tracked accurately.

This should be called by late passes that invalidate the liveness information.

Definition at line 180 of file MachineRegisterInfo.h.

Referenced by llvm::BranchFolder::OptimizeFunction().

isAllocatable - Returns true when PhysReg belongs to an allocatable register class and it hasn't been reserved.

Allocatable registers may show up in the allocation order of some virtual register, so a register allocator needs to track its liveness and availability.

Definition at line 732 of file MachineRegisterInfo.h.

References getTargetRegisterInfo(), llvm::TargetRegisterInfo::isInAllocatableClass(), and isReserved().

Referenced by llvm::CriticalAntiDepBreaker::BreakAntiDependencies(), llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(), llvm::VirtRegAuxInfo::calculateSpillWeightAndHint(), and isConstantPhysReg().

isConstantPhysReg - Returns true if PhysReg is unallocatable and constant throughout the function. It is safe to move instructions that read such a physreg.

Definition at line 407 of file MachineRegisterInfo.cpp.

References def_empty(), getTargetRegisterInfo(), isAllocatable(), llvm::TargetRegisterInfo::isPhysicalRegister(), and llvm::MCRegAliasIterator::isValid().

isPhysRegUsed - Return true if the specified register is used in this function. Also check for clobbered aliases and registers clobbered by function calls with register mask operands.

This only works after register allocation. It is primarily used by PrologEpilogInserter to determine which callee-saved registers need spilling.

Definition at line 638 of file MachineRegisterInfo.h.

References getTargetRegisterInfo(), llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::BitVector::test().

Referenced by checkNumAlignedDPRCS2Regs(), llvm::Thumb1FrameLowering::emitEpilogue(), llvm::ARMFrameLowering::emitEpilogue(), findUnusedVGPR(), HandleVRSaveUpdate(), llvm::SystemZFrameLowering::processFunctionBeforeCalleeSavedScan(), llvm::PPCFrameLowering::processFunctionBeforeCalleeSavedScan(), llvm::XCoreFrameLowering::processFunctionBeforeCalleeSavedScan(), llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan(), and verifyLeafProcRegUse().

isReserved - Returns true when PhysReg is a reserved register.

Reserved registers may belong to an allocatable register class, but the target has explicitly requested that they are not used.

Definition at line 722 of file MachineRegisterInfo.h.

References getReservedRegs(), and llvm::BitVector::test().

Referenced by llvm::PBQPBuilder::build(), llvm::ScheduleDAGInstrs::fixupKills(), llvm::ARMBaseRegisterInfo::getRegAllocationHints(), llvm::TargetRegisterInfo::getRegAllocationHints(), isAllocatable(), and llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan().

Definition at line 163 of file MachineRegisterInfo.h.

markUsesInDebugValueAsUndef - Mark every DBG_VALUE referencing the specified register as undefined which causes the DBG_VALUE to be deleted during LiveDebugVariables analysis.

Definition at line 423 of file MachineRegisterInfo.cpp.

References llvm::MachineInstr::getOperand(), I, llvm::MachineInstr::isDebugValue(), llvm::MachineOperand::setReg(), use_instr_begin(), and use_instr_end().

Referenced by llvm::MachineInstr::eraseFromParentAndMarkDBGValuesForRemoval().

Move NumOps operands from Src to Dst, updating use-def lists as needed.

The Dst range is assumed to be uninitialized memory. (Or it may contain operands that won't be destroyed, which is OK because the MO destructor is trivial anyway).

The Src and Dst ranges may overlap.

Definition at line 235 of file MachineRegisterInfo.cpp.

References llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), and llvm::MachineOperand::Reg.

recomputeRegClass - Try to find a legal super-class of Reg's register class that still satisfies the constraints from the instructions using Reg. Returns true if Reg was upgraded.

This method can be used after constraints have been removed from a virtual register, for example after removing instructions or splitting the live range.

Definition at line 63 of file MachineRegisterInfo.cpp.

References llvm::TargetSubtargetInfo::getInstrInfo(), llvm::TargetRegisterInfo::getLargestLegalSuperClass(), llvm::MachineInstr::getOperand(), getRegClass(), llvm::MachineInstr::getRegClassConstraintEffect(), llvm::TargetMachine::getSubtargetImpl(), getTargetRegisterInfo(), llvm::AArch64CC::MI, reg_nodbg_operands(), setRegClass(), and TII.

Referenced by llvm::LiveRangeEdit::calculateRegClassAndHint().

Definition at line 253 of file MachineRegisterInfo.h.

Referenced by reg_bundles().

Definition at line 256 of file MachineRegisterInfo.h.

Referenced by reg_bundles().

Definition at line 309 of file MachineRegisterInfo.h.

Referenced by reg_nodbg_bundles().

Definition at line 312 of file MachineRegisterInfo.h.

Referenced by reg_nodbg_bundles().

Definition at line 260 of file MachineRegisterInfo.h.

References reg_bundle_begin(), and reg_bundle_end().

reg_empty - Return true if there are no instructions using or defining the specified register (it may be live-in).

Definition at line 267 of file MachineRegisterInfo.h.

References reg_begin(), and reg_end().

static reg_iterator llvm::MachineRegisterInfo::reg_end ( ) [inline, static]

Definition at line 291 of file MachineRegisterInfo.h.

Referenced by reg_nodbg_instructions().

Definition at line 294 of file MachineRegisterInfo.h.

Referenced by reg_nodbg_instructions().

Definition at line 244 of file MachineRegisterInfo.h.

References reg_instr_begin(), and reg_instr_end().

Referenced by llvm::findPHICopyInsertPoint().

Definition at line 273 of file MachineRegisterInfo.h.

Referenced by reg_nodbg_empty(), and reg_nodbg_operands().

Definition at line 317 of file MachineRegisterInfo.h.

References reg_bundle_nodbg_begin(), and reg_bundle_nodbg_end().

reg_nodbg_empty - Return true if the only instructions using or defining Reg are Debug instructions.

Definition at line 324 of file MachineRegisterInfo.h.

References reg_nodbg_begin(), and reg_nodbg_end().

Referenced by llvm::LiveIntervals::addKillFlags(), and llvm::RegAllocBase::allocatePhysRegs().

Definition at line 276 of file MachineRegisterInfo.h.

Referenced by reg_nodbg_empty(), and reg_nodbg_operands().

Definition at line 299 of file MachineRegisterInfo.h.

References reg_instr_nodbg_begin(), and reg_instr_nodbg_end().

Definition at line 228 of file MachineRegisterInfo.h.

References reg_begin(), and reg_end().

Referenced by verifyUseList().

void MachineRegisterInfo::replaceRegWith ( unsigned  FromReg,
unsigned  ToReg 
)

replaceRegWith - Replace all instances of FromReg with ToReg in the machine function. This is like llvm-level X->replaceAllUsesWith(Y), except that it also changes any definitions of the register as well.

Note that it is usually necessary to first constrain ToReg's register class to match the FromReg constraints using:

constrainRegClass(ToReg, getRegClass(FromReg))

That function will return NULL if the virtual registers have incompatible constraints.

Note that if ToReg is a physical register the function will replace and apply sub registers to ToReg in order to obtain a final/proper physical register.

replaceRegWith - Replace all instances of FromReg with ToReg in the machine function. This is like llvm-level X->replaceAllUsesWith(Y), except that it also changes any definitions of the register as well. If ToReg is a physical register we apply the sub register to obtain the final/proper physical register.

Definition at line 282 of file MachineRegisterInfo.cpp.

References getTargetRegisterInfo(), I, llvm::TargetRegisterInfo::isPhysicalRegister(), reg_begin(), reg_end(), llvm::MachineOperand::setReg(), and llvm::MachineOperand::substPhysReg().

Referenced by llvm::SIInstrInfo::moveSMRDToVALU(), llvm::SIInstrInfo::moveToVALU(), and llvm::SelectionDAGISel::runOnMachineFunction().

reservedRegsFrozen - Returns true after freezeReservedRegs() was called to ensure the set of reserved registers stays constant.

Definition at line 696 of file MachineRegisterInfo.h.

References llvm::BitVector::empty().

Referenced by canReserveReg(), and getReservedRegs().

void llvm::MachineRegisterInfo::resetDelegate ( Delegate delegate) [inline]

Definition at line 132 of file MachineRegisterInfo.h.

Referenced by llvm::LiveRangeEdit::~LiveRangeEdit().

void llvm::MachineRegisterInfo::setDelegate ( Delegate delegate) [inline]

Definition at line 141 of file MachineRegisterInfo.h.

Referenced by llvm::LiveRangeEdit::LiveRangeEdit().

setPhysRegUnused - Mark the specified register unused in this function. This should only be called during and after register allocation.

Definition at line 670 of file MachineRegisterInfo.h.

References getTargetRegisterInfo(), llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::BitVector::reset().

Referenced by llvm::PPCFrameLowering::processFunctionBeforeCalleeSavedScan(), and llvm::XCoreFrameLowering::processFunctionBeforeCalleeSavedScan().

void llvm::MachineRegisterInfo::setRegAllocationHint ( unsigned  Reg,
unsigned  Type,
unsigned  PrefReg 
) [inline]

setRegAllocationHint - Specify a register allocation hint for the specified virtual register.

Definition at line 603 of file MachineRegisterInfo.h.

References Type.

Referenced by llvm::VirtRegAuxInfo::calculateSpillWeightAndHint(), and llvm::ARMBaseRegisterInfo::UpdateRegAllocHint().

setRegClass - Set the register class of the specified virtual register.

Definition at line 40 of file MachineRegisterInfo.cpp.

References llvm::TargetRegisterClass::isAllocatable().

Referenced by llvm::SITargetLowering::AdjustInstrPostInstrSelection(), constrainRegClass(), and recomputeRegClass().

Mark the specified register unit as used in this function. This should only be called during and after register allocation.

Definition at line 650 of file MachineRegisterInfo.h.

References llvm::BitVector::set().

tracksLiveness - Returns true when tracking register liveness accurately.

While this flag is true, register liveness information in basic block live-in lists and machine instruction operands is accurate. This means it can be used to change the code in ways that affect the values in registers, for example by the register scavenger.

When this flag is false, liveness is no longer reliable.

Definition at line 173 of file MachineRegisterInfo.h.

Referenced by llvm::RegScavenger::enterBasicBlock(), llvm::BranchFolder::OptimizeFunction(), and llvm::MachineFunction::print().

Definition at line 419 of file MachineRegisterInfo.h.

Referenced by use_bundles().

Definition at line 422 of file MachineRegisterInfo.h.

Referenced by use_bundles().

Definition at line 484 of file MachineRegisterInfo.h.

Referenced by use_nodbg_bundles().

Definition at line 487 of file MachineRegisterInfo.h.

Referenced by use_nodbg_bundles().

Definition at line 426 of file MachineRegisterInfo.h.

References use_bundle_begin(), and use_bundle_end().

use_empty - Return true if there are no instructions using the specified register.

Definition at line 433 of file MachineRegisterInfo.h.

References use_begin(), and use_end().

Referenced by llvm::R600TargetLowering::EmitInstrWithCustomInserter(), EmitLiveInCopies(), foldImmediates(), llvm::FastISel::hasTrivialKill(), and llvm::MachineInstr::print().

static use_iterator llvm::MachineRegisterInfo::use_end ( ) [inline, static]

Definition at line 469 of file MachineRegisterInfo.h.

Referenced by findUseBetween(), and use_nodbg_instructions().

Definition at line 410 of file MachineRegisterInfo.h.

References use_instr_begin(), and use_instr_end().

Referenced by dumpUses(), and isDefLiveOut().

Definition at line 448 of file MachineRegisterInfo.h.

Referenced by hasOneNonDBGUse(), use_nodbg_empty(), and use_nodbg_operands().

Definition at line 492 of file MachineRegisterInfo.h.

References use_bundle_nodbg_begin(), and use_bundle_nodbg_end().

use_nodbg_empty - Return true if there are no non-Debug instructions using the specified register.

Definition at line 499 of file MachineRegisterInfo.h.

References use_nodbg_begin(), and use_nodbg_end().

Referenced by eraseIfDead(), and llvm::AArch64InstrInfo::optimizeCompareInstr().

Definition at line 451 of file MachineRegisterInfo.h.

Referenced by hasOneNonDBGUse(), use_nodbg_empty(), and use_nodbg_operands().

Definition at line 474 of file MachineRegisterInfo.h.

References use_instr_nodbg_begin(), and use_instr_nodbg_end().

Definition at line 456 of file MachineRegisterInfo.h.

References use_nodbg_begin(), and use_nodbg_end().

Definition at line 394 of file MachineRegisterInfo.h.

References use_begin(), and use_end().

Referenced by clearKillFlags().

Verify the use list of all registers.

Definition at line 157 of file MachineRegisterInfo.cpp.

References getNumVirtRegs(), getTargetRegisterInfo(), llvm::TargetRegisterInfo::index2VirtReg(), and verifyUseList().


Friends And Related Function Documentation

friend class defusechain_instr_iterator [friend]

Definition at line 215 of file MachineRegisterInfo.h.

friend class defusechain_iterator [friend]

Definition at line 209 of file MachineRegisterInfo.h.


The documentation for this class was generated from the following files: