class LegalizationArtifactCombiner

Declaration

class LegalizationArtifactCombiner { /* full declaration omitted */ };

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:33

Member Variables

private llvm::MachineIRBuilder& Builder
private llvm::MachineRegisterInfo& MRI
private const llvm::LegalizerInfo& LI

Method Overview

  • public LegalizationArtifactCombiner(llvm::MachineIRBuilder & B, llvm::MachineRegisterInfo & MRI, const llvm::LegalizerInfo & LI)
  • public static bool canFoldMergeOpcode(unsigned int MergeOp, unsigned int ConvertOp, llvm::LLT OpTy, llvm::LLT DestTy)
  • private void deleteMarkedDeadInsts(SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, llvm::GISelObserverWrapper & WrapperObserver)
  • private static llvm::Register getArtifactSrcReg(const llvm::MachineInstr & MI)
  • public static unsigned int getDefIndex(const llvm::MachineInstr & MI, llvm::Register SearchDef)
  • private static bool isArtifactCast(unsigned int Opc)
  • private bool isConstantUnsupported(llvm::LLT Ty) const
  • private bool isInstLegal(const llvm::LegalityQuery & Query) const
  • private bool isInstUnsupported(const llvm::LegalityQuery & Query) const
  • private llvm::Register lookThroughCopyInstrs(llvm::Register Reg)
  • private void markDefDead(llvm::MachineInstr & MI, llvm::MachineInstr & DefMI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, unsigned int DefIdx = 0)
  • private void markInstAndDefDead(llvm::MachineInstr & MI, llvm::MachineInstr & DefMI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, unsigned int DefIdx = 0)
  • public static void replaceRegOrBuildCopy(llvm::Register DstReg, llvm::Register SrcReg, llvm::MachineRegisterInfo & MRI, llvm::MachineIRBuilder & Builder, SmallVectorImpl<llvm::Register> & UpdatedDefs, llvm::GISelChangeObserver & Observer)
  • public bool tryCombineAnyExt(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs, llvm::GISelObserverWrapper & Observer)
  • public bool tryCombineExtract(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs)
  • public bool tryCombineInstruction(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, llvm::GISelObserverWrapper & WrapperObserver)
  • public bool tryCombineSExt(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs)
  • public bool tryCombineTrunc(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs, llvm::GISelObserverWrapper & Observer)
  • public bool tryCombineUnmergeValues(llvm::GUnmerge & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs, llvm::GISelChangeObserver & Observer)
  • public bool tryCombineZExt(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs, llvm::GISelObserverWrapper & Observer)
  • public bool tryFoldImplicitDef(llvm::MachineInstr & MI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs)
  • public bool tryFoldUnmergeCast(llvm::MachineInstr & MI, llvm::MachineInstr & CastMI, SmallVectorImpl<llvm::MachineInstr *> & DeadInsts, SmallVectorImpl<llvm::Register> & UpdatedDefs)

Methods

LegalizationArtifactCombiner(
    llvm::MachineIRBuilder& B,
    llvm::MachineRegisterInfo& MRI,
    const llvm::LegalizerInfo& LI)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:51

Parameters

llvm::MachineIRBuilder& B
llvm::MachineRegisterInfo& MRI
const llvm::LegalizerInfo& LI

static bool canFoldMergeOpcode(
    unsigned int MergeOp,
    unsigned int ConvertOp,
    llvm::LLT OpTy,
    llvm::LLT DestTy)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:462

Parameters

unsigned int MergeOp
unsigned int ConvertOp
llvm::LLT OpTy
llvm::LLT DestTy

void deleteMarkedDeadInsts(
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    llvm::GISelObserverWrapper& WrapperObserver)

Description

Erase the dead instructions in the list and call the observer hooks. Normally the Legalizer will deal with erasing instructions that have been marked dead. However, for the trunc(ext(x)) cases we can end up trying to process instructions which have been marked dead, but otherwise break the MIR by introducing multiple vreg defs. For those cases, allow the combines to explicitly delete the instructions before we run into trouble.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1254

Parameters

SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
llvm::GISelObserverWrapper& WrapperObserver

static llvm::Register getArtifactSrcReg(
    const llvm::MachineInstr& MI)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1163

Parameters

const llvm::MachineInstr& MI

static unsigned int getDefIndex(
    const llvm::MachineInstr& MI,
    llvm::Register SearchDef)

Description

Return the operand index in \p MI that defines \p Def

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:541

Parameters

const llvm::MachineInstr& MI
llvm::Register SearchDef

static bool isArtifactCast(unsigned int Opc)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:38

Parameters

unsigned int Opc

bool isConstantUnsupported(llvm::LLT Ty) const

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1276

Parameters

llvm::LLT Ty

bool isInstLegal(
    const llvm::LegalityQuery& Query) const

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1272

Parameters

const llvm::LegalityQuery& Query

bool isInstUnsupported(
    const llvm::LegalityQuery& Query) const

Description

Checks if the target legalizer info has specified anything about the instruction, or if unsupported.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1266

Parameters

const llvm::LegalityQuery& Query

llvm::Register lookThroughCopyInstrs(
    llvm::Register Reg)

Description

Looks through copy instructions and returns the actual source register.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1287

Parameters

llvm::Register Reg

void markDefDead(
    llvm::MachineInstr& MI,
    llvm::MachineInstr& DefMI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    unsigned int DefIdx = 0)

Description

Mark a def of one of MI's original operands, DefMI, as dead if changing MI (either by killing it or changing operands) results in DefMI being dead too. In-between COPYs or artifact-casts are also collected if they are dead. MI is not marked dead.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1184

Parameters

llvm::MachineInstr& MI
llvm::MachineInstr& DefMI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
unsigned int DefIdx = 0

void markInstAndDefDead(
    llvm::MachineInstr& MI,
    llvm::MachineInstr& DefMI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    unsigned int DefIdx = 0)

Description

Mark MI as dead. If a def of one of MI's operands, DefMI, would also be dead due to MI being killed, then mark DefMI as dead too. Some of the combines (extends(trunc)), try to walk through redundant copies in between the extends and the truncs, and this attempts to collect the in between copies if they're dead.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1241

Parameters

llvm::MachineInstr& MI
llvm::MachineInstr& DefMI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
unsigned int DefIdx = 0

static void replaceRegOrBuildCopy(
    llvm::Register DstReg,
    llvm::Register SrcReg,
    llvm::MachineRegisterInfo& MRI,
    llvm::MachineIRBuilder& Builder,
    SmallVectorImpl<llvm::Register>& UpdatedDefs,
    llvm::GISelChangeObserver& Observer)

Description

Try to replace DstReg with SrcReg or build a COPY instruction depending on the register constraints.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:516

Parameters

llvm::Register DstReg
llvm::Register SrcReg
llvm::MachineRegisterInfo& MRI
llvm::MachineIRBuilder& Builder
SmallVectorImpl<llvm::Register>& UpdatedDefs
llvm::GISelChangeObserver& Observer

bool tryCombineAnyExt(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs,
    llvm::GISelObserverWrapper& Observer)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:55

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs
llvm::GISelObserverWrapper& Observer

bool tryCombineExtract(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1015

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs

bool tryCombineInstruction(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    llvm::GISelObserverWrapper& WrapperObserver)

Description

Try to combine away MI. Returns true if it combined away the MI. Adds instructions that are dead as a result of the combine into DeadInsts, which can include MI.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:1068

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
llvm::GISelObserverWrapper& WrapperObserver

bool tryCombineSExt(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:172

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs

bool tryCombineTrunc(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs,
    llvm::GISelObserverWrapper& Observer)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:229

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs
llvm::GISelObserverWrapper& Observer

bool tryCombineUnmergeValues(
    llvm::GUnmerge& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs,
    llvm::GISelChangeObserver& Observer)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:813

Parameters

llvm::GUnmerge& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs
llvm::GISelChangeObserver& Observer

bool tryCombineZExt(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs,
    llvm::GISelObserverWrapper& Observer)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:109

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs
llvm::GISelObserverWrapper& Observer

bool tryFoldImplicitDef(
    llvm::MachineInstr& MI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs)

Description

Try to fold G_[ASZ]EXT (G_IMPLICIT_DEF).

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:332

Parameters

llvm::MachineInstr& MI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs

bool tryFoldUnmergeCast(
    llvm::MachineInstr& MI,
    llvm::MachineInstr& CastMI,
    SmallVectorImpl<llvm::MachineInstr*>&
        DeadInsts,
    SmallVectorImpl<llvm::Register>& UpdatedDefs)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h:368

Parameters

llvm::MachineInstr& MI
llvm::MachineInstr& CastMI
SmallVectorImpl<llvm::MachineInstr*>& DeadInsts
SmallVectorImpl<llvm::Register>& UpdatedDefs