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)
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)
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
¶void deleteMarkedDeadInsts(
SmallVectorImpl<llvm::MachineInstr*>&
DeadInsts,
llvm::GISelObserverWrapper& WrapperObserver)
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)
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)
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)
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
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
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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