class RegBankSelect::InsertPoint

Declaration

class RegBankSelect::InsertPoint { /* full declaration omitted */ };

Description

Abstract class used to represent an insertion point in a CFG. This class records an insertion point and materializes it on demand. It allows to reason about the frequency of this insertion point, without having to logically materialize it (e.g., on an edge), before we actually need to insert something.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:111

Member Variables

protected bool WasMaterialized = false
Tell if the insert point has already been materialized.

Method Overview

Methods

virtual bool canMaterialize() const

Description

Check whether this insertion point can be materialized. As soon as ::getPoint is called and thus, the point materialized calling this method does not make sense.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:200

virtual uint64_t frequency(
    const llvm::Pass& P) const

Description

Frequency of the insertion point.\p P is used to access the various analysis that will help to get that information, like MachineBlockFrequencyInfo. If \p P does not contain enough enough to return the actual frequency, this returns 1.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:195

Parameters

const llvm::Pass& P

llvm::MachineBasicBlock& getInsertMBB()

Description

The first call to this method will cause the splitting to happen if need be, then sub sequent calls just return the basic block that contains the insertion point. I.e., no more splitting will occur.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:168

Returns

The basic block should be used with MachineBasicBlock::insert and ::getPoint. The new code should happen before that point.

virtual llvm::MachineBasicBlock&
getInsertMBBImpl()

Description

Return the materialized insertion basic block. Code will be inserted into that basic block.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:130

MachineBasicBlock::iterator getPoint()

Description

The first call to this method will cause the splitting to happen if need be, then sub sequent calls just return the iterator to that point. I.e., no more splitting will occur.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:149

Returns

The iterator that should be used with MachineBasicBlock::insert. I.e., additional code happens before that point.

virtual MachineBasicBlock::iterator getPointImpl()

Description

Return the materialized insertion point. Code will be inserted before that point.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:136

MachineBasicBlock::iterator insert(
    llvm::MachineInstr& MI)

Description

Insert \p MI in the just before ::getPoint()

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:180

Parameters

llvm::MachineInstr& MI

virtual bool isSplit() const

Description

Does this point involve splitting an edge or block? As soon as ::getPoint is called and thus, the point materialized, the point will not require splitting anymore, i.e., this will return false.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:188

virtual void materialize()

Description

Materialize the insertion point. If isSplit() is true, this involves actually splitting the block or edge.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:124

virtual ~InsertPoint()

Declared at: llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h:139