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:

Inherited from FunctionPass:

Inherited from Pass:

Methods

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)

Description

DomainValue allocation.

Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:162

Parameters

int domain = -1

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)

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)

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

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::AnalysisUsage& AU

llvm::MachineFunctionProperties
getRequiredProperties() const

Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:150

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)

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)

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

llvm::DomainValue* A
llvm::DomainValue* B

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)

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

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*)

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*

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)

Description

Add reference to DV.

Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:165

Parameters

llvm::DomainValue* DV

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

llvm::MachineFunction& MF

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)

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*)

Description

Visit given insturcion.

Declared at: llvm/include/llvm/CodeGen/ExecutionDomainFix.h:205

Parameters

llvm::MachineInstr*

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