Go to the source code of this file.
|
| | STATISTIC (NumSunk,"Number of machine instructions sunk") |
| |
| | STATISTIC (NumSplit,"Number of critical edges split") |
| |
| | STATISTIC (NumCoalesces,"Number of copies coalesced") |
| |
| | INITIALIZE_PASS_BEGIN (MachineSinking,"machine-sink","Machine code sinking", false, false) INITIALIZE_PASS_END(MachineSinking |
| |
| static void | collectDebugValues (MachineInstr &MI, SmallVectorImpl< MachineInstr * > &DbgValues) |
| | collectDebgValues - Scan instructions following MI and collect any matching DBG_VALUEs. More...
|
| |
| static bool | SinkingPreventsImplicitNullCheck (MachineInstr &MI, const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) |
| | Return true if MI is likely to be usable as a memory operation by the implicit null check optimization. More...
|
| |
|
| static cl::opt< bool > | SplitEdges ("machine-sink-split", cl::desc("Split critical edges during machine sinking"), cl::init(true), cl::Hidden) |
| |
| static cl::opt< bool > | UseBlockFreqInfo ("machine-sink-bfi", cl::desc("Use block frequency info to find successors to sink"), cl::init(true), cl::Hidden) |
| |
| static cl::opt< unsigned > | SplitEdgeProbabilityThreshold ("machine-sink-split-probability-threshold", cl::desc("Percentage threshold for splitting single-instruction critical edge. ""If the branch threshold is higher than this threshold, we allow ""speculative execution of up to 1 instruction to avoid branching to ""splitted critical edge"), cl::init(40), cl::Hidden) |
| |
| machine | sink |
| | When an instruction is found to only be used outside of the loop, this function moves it to the exit blocks and patches up SSA form as needed. More...
|
| |
| machine Machine code | sinking |
| |
| machine Machine code | false |
| |
| #define DEBUG_TYPE "machine-sink" |
Return true if MI is likely to be usable as a memory operation by the implicit null check optimization.
This is a "best effort" heuristic, and should not be relied upon for correctness. This returning true does not guarantee that the implicit null check optimization is legal over MI, and this returning false does not guarantee MI cannot possibly be used to do a null check.
Definition at line 711 of file MachineSink.cpp.
References llvm::TargetInstrInfo::analyzeBranchPredicate(), llvm::TargetInstrInfo::getMemOpBaseRegImmOfs(), llvm::MachineInstr::getParent(), llvm::MachineInstr::isPredicable(), llvm::MachineInstr::mayLoad(), llvm::LLVMContext::MD_make_implicit, Offset, llvm::MachineBasicBlock::pred_begin(), llvm::PPC::PRED_EQ, llvm::PPC::PRED_NE, and llvm::MachineBasicBlock::pred_size().
| STATISTIC |
( |
NumSunk |
, |
|
|
"Number of machine instructions sunk" |
|
|
) |
| |
| STATISTIC |
( |
NumSplit |
, |
|
|
"Number of critical edges split" |
|
|
) |
| |
| STATISTIC |
( |
NumCoalesces |
, |
|
|
"Number of copies coalesced" |
|
|
) |
| |
When an instruction is found to only be used outside of the loop, this function moves it to the exit blocks and patches up SSA form as needed.
This method is guaranteed to remove the original instruction from its position, and may either delete it or move it to outside of the loop.
Definition at line 182 of file MachineSink.cpp.
| cl::opt<unsigned> SplitEdgeProbabilityThreshold("machine-sink-split-probability-threshold", cl::desc("Percentage threshold for splitting single-instruction critical edge. ""If the branch threshold is higher than this threshold, we allow ""speculative execution of up to 1 instruction to avoid branching to ""splitted critical edge"), cl::init(40), cl::Hidden) |
|
static |
| cl::opt<bool> UseBlockFreqInfo("machine-sink-bfi", cl::desc("Use block frequency info to find successors to sink"), cl::init(true), cl::Hidden) |
|
static |