LLVM: lib/CodeGen/PHIElimination.cpp File Reference (original) (raw)

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< bool > DisableEdgeSplitting ("disable-phi-elim-edge-splitting", cl::init(false), cl::Hidden, cl::desc("Disable critical edge splitting " "during PHI elimination"))
static cl::opt< bool > SplitAllCriticalEdges ("phi-elim-split-all-critical-edges", cl::init(false), cl::Hidden, cl::desc("Split all critical edges during " "PHI elimination"))
static 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."))
DEBUG_TYPE
Eliminate PHI nodes for register allocation
Eliminate PHI nodes for register false

DEBUG_TYPE

#define DEBUG_TYPE "phi-node-elimination"

allPhiOperandsUndefined()

INITIALIZE_PASS_BEGIN()

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

isImplicitlyDefined()

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

allocation

DEBUG_TYPE

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

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