LLVM 22.0.0git
PHIElimination.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "phi-node-elimination"

Functions

 STATISTIC (NumLowered, "Number of phis lowered")
 STATISTIC (NumCriticalEdgesSplit, "Number of critical edges split")
 STATISTIC (NumReused, "Number of reused lowered phis")
 INITIALIZE_PASS_BEGIN (PHIElimination, DEBUG_TYPE, "Eliminate PHI nodes for register allocation", false, false) INITIALIZE_PASS_END(PHIElimination
static bool isImplicitlyDefined (Register VirtReg, const MachineRegisterInfo &MRI)
 Return true if all defs of VirtReg are implicit-defs.
static bool allPhiOperandsUndefined (const MachineInstr &MPhi, const MachineRegisterInfo &MRI)
 Return true if all sources of the phi node are implicit_def's, or undef's.

Variables

static cl::opt< boolDisableEdgeSplitting ("disable-phi-elim-edge-splitting", cl::init(false), cl::Hidden, cl::desc("Disable critical edge splitting " "during PHI elimination"))
static cl::opt< boolSplitAllCriticalEdges ("phi-elim-split-all-critical-edges", cl::init(false), cl::Hidden, cl::desc("Split all critical edges during " "PHI elimination"))
static cl::opt< boolNoPhiElimLiveOutEarlyExit ("no-phi-elim-live-out-early-exit", cl::init(false), cl::Hidden, cl::desc("Do not use an early exit if isLiveOutPastPHIs returns true."))
 DEBUG_TYPE
Eliminate PHI nodes for register allocation
Eliminate PHI nodes for register false

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "phi-node-elimination"

Definition at line 50 of file PHIElimination.cpp.

Function Documentation

◆ allPhiOperandsUndefined()

bool allPhiOperandsUndefined ( const MachineInstr & MPhi,
const MachineRegisterInfo & MRI )
static

Return true if all sources of the phi node are implicit_def's, or undef's.

Definition at line 334 of file PHIElimination.cpp.

References E(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), I, isImplicitlyDefined(), llvm::MachineOperand::isUndef(), and MRI.

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( PHIElimination ,
DEBUG_TYPE ,
"Eliminate PHI nodes for register allocation" ,
false ,
false  )

◆ isImplicitlyDefined()

bool isImplicitlyDefined ( Register VirtReg,
const MachineRegisterInfo & MRI )
static

Return true if all defs of VirtReg are implicit-defs.

This includes registers with no defs.

Definition at line 325 of file PHIElimination.cpp.

References MRI.

Referenced by allPhiOperandsUndefined().

◆ STATISTIC() [1/3]

STATISTIC ( NumCriticalEdgesSplit ,
"Number of critical edges split"  )

◆ STATISTIC() [2/3]

STATISTIC ( NumLowered ,
"Number of phis lowered"  )

◆ STATISTIC() [3/3]

STATISTIC ( NumReused ,
"Number of reused lowered phis"  )

Variable Documentation

◆ allocation

Eliminate PHI nodes for register allocation

Definition at line 200 of file PHIElimination.cpp.

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 199 of file PHIElimination.cpp.

◆ DisableEdgeSplitting

cl::opt< bool > DisableEdgeSplitting("disable-phi-elim-edge-splitting", cl::init(false), cl::Hidden, cl::desc("Disable critical edge splitting " "during PHI elimination")) ( "disable-phi-elim-edge-splitting" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Disable critical edge splitting " "during PHI elimination")  )
static

◆ false

Eliminate PHI nodes for register false

Definition at line 200 of file PHIElimination.cpp.

◆ NoPhiElimLiveOutEarlyExit

cl::opt< bool > NoPhiElimLiveOutEarlyExit("no-phi-elim-live-out-early-exit", cl::init(false), cl::Hidden, cl::desc("Do not use an early exit if isLiveOutPastPHIs returns true.")) ( "no-phi-elim-live-out-early-exit" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Do not use an early exit if isLiveOutPastPHIs returns true.")  )
static

◆ SplitAllCriticalEdges

cl::opt< bool > SplitAllCriticalEdges("phi-elim-split-all-critical-edges", cl::init(false), cl::Hidden, cl::desc("Split all critical edges during " "PHI elimination")) ( "phi-elim-split-all-critical-edges" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Split all critical edges during " "PHI elimination")  )
static