class ExecutionDomainFix
Declaration
class ExecutionDomainFix : public MachineFunctionPass { /* full declaration omitted */ };
Description
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of passes that operate on the MachineFunction representation. Instead of overriding runOnFunction, subclasses override runOnMachineFunction.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:116
Inherits from: MachineFunctionPass
Member Variables
- private SpecificBumpPtrAllocator<llvm::DomainValue> Allocator
- private SmallVector<llvm::DomainValue*, 16> Avail
- private const llvm::TargetRegisterClass* const RC
- private llvm::MachineFunction* MF
- private const llvm::TargetInstrInfo* TII
- private const llvm::TargetRegisterInfo* TRI
- private std::vector<SmallVector<int, 1>> AliasMap
- private const unsigned int NumRegs
- private llvm::ExecutionDomainFix::LiveRegsDVInfo LiveRegs
- private llvm::ExecutionDomainFix::OutRegsInfoMap MBBOutRegsInfos
- private llvm::ReachingDefAnalysis* RDA
Method Overview
- public ExecutionDomainFix(char & PassID, const llvm::TargetRegisterClass & RC)
- private llvm::DomainValue * alloc(int domain = -1)
- private void collapse(llvm::DomainValue * dv, unsigned int domain)
- private void enterBasicBlock(const LoopTraversal::TraversedMBBInfo & TraversedMBB)
- private void force(int rx, unsigned int domain)
- public void getAnalysisUsage(llvm::AnalysisUsage & AU) const
- public llvm::MachineFunctionProperties getRequiredProperties() const
- private void kill(int rx)
- private void leaveBasicBlock(const LoopTraversal::TraversedMBBInfo & TraversedMBB)
- private bool merge(llvm::DomainValue * A, llvm::DomainValue * B)
- private void processBasicBlock(const LoopTraversal::TraversedMBBInfo & TraversedMBB)
- private void processDefs(llvm::MachineInstr *, bool Kill)
- private iterator_range<SmallVectorImpl<int>::const_iterator> regIndices(unsigned int Reg) const
- private void release(llvm::DomainValue *)
- private llvm::DomainValue * resolve(llvm::DomainValue *&)
- private llvm::DomainValue * retain(llvm::DomainValue * DV)
- public bool runOnMachineFunction(llvm::MachineFunction & MF)
- private void setLiveReg(int rx, llvm::DomainValue * DV)
- private void visitHardInstr(llvm::MachineInstr *, unsigned int domain)
- private bool visitInstr(llvm::MachineInstr *)
- private void visitSoftInstr(llvm::MachineInstr *, unsigned int mask)
Inherited from MachineFunctionPass:
- public doInitialization
- protected getAnalysisUsage
- protected getClearedProperties
- protected getRequiredProperties
- protected getSetProperties
- protected runOnMachineFunction
Inherited from FunctionPass:
- public assignPassManager
- public createPrinterPass
- public getPotentialPassManagerType
- public runOnFunction
- protected skipFunction
Inherited from Pass:
- public assignPassManager
- public createPass
- public createPrinterPass
- public doFinalization
- public doInitialization
- public dump
- public dumpPassStructure
- public getAdjustedAnalysisPointer
- public getAnalysis
- public getAnalysis
- public getAnalysisID
- public getAnalysisID
- public getAnalysisIfAvailable
- public getAnalysisUsage
- public getAsImmutablePass
- public getAsPMDataManager
- public getPassID
- public getPassKind
- public getPassName
- public getPotentialPassManagerType
- public getResolver
- public lookupPassInfo
- public lookupPassInfo
- public mustPreserveAnalysisID
- public preparePassManager
- public print
- public releaseMemory
- public setResolver
- public verifyAnalysis
Methods
¶ExecutionDomainFix(
char& PassID,
const llvm::TargetRegisterClass& RC)
ExecutionDomainFix(
char& PassID,
const llvm::TargetRegisterClass& RC)
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:139
Parameters
- char& PassID
- const llvm::TargetRegisterClass& RC
¶llvm::DomainValue* alloc(int domain = -1)
llvm::DomainValue* alloc(int domain = -1)
Description
DomainValue allocation.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:162
Parameters
- int domain = -1
¶void collapse(llvm::DomainValue* dv,
unsigned int domain)
void collapse(llvm::DomainValue* dv,
unsigned int domain)
Description
Collapse open DomainValue into given domain. If there are multiple registers using dv, they each get a unique collapsed DomainValue.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:190
Parameters
- llvm::DomainValue* dv
- unsigned int domain
¶void enterBasicBlock(
const LoopTraversal::TraversedMBBInfo&
TraversedMBB)
void enterBasicBlock(
const LoopTraversal::TraversedMBBInfo&
TraversedMBB)
Description
Set up LiveRegs by merging predecessor live-out values.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:196
Parameters
- const LoopTraversal::TraversedMBBInfo& TraversedMBB
¶void force(int rx, unsigned int domain)
void force(int rx, unsigned int domain)
Description
Force register rx into domain.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:186
Parameters
- int rx
- unsigned int domain
¶void getAnalysisUsage(
llvm::AnalysisUsage& AU) const
void getAnalysisUsage(
llvm::AnalysisUsage& AU) const
Description
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this. For MachineFunctionPasses, calling AU.preservesCFG() indicates that the pass does not modify the MachineBasicBlock CFG.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:142
Parameters
¶llvm::MachineFunctionProperties
getRequiredProperties() const
llvm::MachineFunctionProperties
getRequiredProperties() const
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:150
¶void kill(int rx)
void kill(int rx)
Description
Kill register rx, recycle or collapse any DomainValue.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:183
Parameters
- int rx
¶void leaveBasicBlock(
const LoopTraversal::TraversedMBBInfo&
TraversedMBB)
void leaveBasicBlock(
const LoopTraversal::TraversedMBBInfo&
TraversedMBB)
Description
Update live-out values.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:199
Parameters
- const LoopTraversal::TraversedMBBInfo& TraversedMBB
¶bool merge(llvm::DomainValue* A,
llvm::DomainValue* B)
bool merge(llvm::DomainValue* A,
llvm::DomainValue* B)
Description
All instructions and registers in B are moved to A, and B is released.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:193
Parameters
¶void processBasicBlock(
const LoopTraversal::TraversedMBBInfo&
TraversedMBB)
void processBasicBlock(
const LoopTraversal::TraversedMBBInfo&
TraversedMBB)
Description
Process he given basic block.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:202
Parameters
- const LoopTraversal::TraversedMBBInfo& TraversedMBB
¶void processDefs(llvm::MachineInstr*, bool Kill)
void processDefs(llvm::MachineInstr*, bool Kill)
Description
Update def-ages for registers defined by MI. If Kill is set, also kill off DomainValues clobbered by the defs.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:209
Parameters
- llvm::MachineInstr*
- bool Kill
¶iterator_range<
SmallVectorImpl<int>::const_iterator>
regIndices(unsigned int Reg) const
iterator_range<
SmallVectorImpl<int>::const_iterator>
regIndices(unsigned int Reg) const
Description
Translate TRI register number to a list of indices into our smaller tables of interesting registers.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:159
Parameters
- unsigned int Reg
¶void release(llvm::DomainValue*)
void release(llvm::DomainValue*)
Description
Release a reference to DV. When the last reference is released, collapse if needed.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:173
Parameters
¶llvm::DomainValue* resolve(llvm::DomainValue*&)
llvm::DomainValue* resolve(llvm::DomainValue*&)
Description
Follow the chain of dead DomainValues until a live DomainValue is reached. Update the referenced pointer when necessary.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:177
Parameters
- llvm::DomainValue*&
¶llvm::DomainValue* retain(llvm::DomainValue* DV)
llvm::DomainValue* retain(llvm::DomainValue* DV)
Description
Add reference to DV.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:165
Parameters
¶bool runOnMachineFunction(
llvm::MachineFunction& MF)
bool runOnMachineFunction(
llvm::MachineFunction& MF)
Description
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:148
Parameters
¶void setLiveReg(int rx, llvm::DomainValue* DV)
void setLiveReg(int rx, llvm::DomainValue* DV)
Description
Set LiveRegs[rx] = dv, updating reference counts.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:180
Parameters
- int rx
- llvm::DomainValue* DV
¶void visitHardInstr(llvm::MachineInstr*,
unsigned int domain)
void visitHardInstr(llvm::MachineInstr*,
unsigned int domain)
Description
A hard instruction only works in one domain. All input registers will be forced into that domain.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:216
Parameters
- llvm::MachineInstr*
- unsigned int domain
¶bool visitInstr(llvm::MachineInstr*)
bool visitInstr(llvm::MachineInstr*)
Description
Visit given insturcion.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:205
Parameters
¶void visitSoftInstr(llvm::MachineInstr*,
unsigned int mask)
void visitSoftInstr(llvm::MachineInstr*,
unsigned int mask)
Description
A soft instruction can be changed to work in other domains given by mask.
Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:212
Parameters
- llvm::MachineInstr*
- unsigned int mask