LLVM
8.0.1
|
#include "ScheduleDAGSDNodes.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/CodeGen/ScheduleHazardRecognizer.h"
#include "llvm/CodeGen/SchedulerRegistry.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetOpcodes.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MachineValueType.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstdlib>
#include <iterator>
#include <limits>
#include <memory>
#include <utility>
#include <vector>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "pre-RA-sched" |
Functions | |
STATISTIC (NumBacktracks, "Number of times scheduler backtracked") | |
STATISTIC (NumUnfolds, "Number of nodes unfolded") | |
STATISTIC (NumDups, "Number of duplicated nodes") | |
STATISTIC (NumPRCopies, "Number of physical register copies") | |
static void | GetCostForDef (const ScheduleDAGSDNodes::RegDefIter &RegDefPos, const TargetLowering *TLI, const TargetInstrInfo *TII, const TargetRegisterInfo *TRI, unsigned &RegClass, unsigned &Cost, const MachineFunction &MF) |
GetCostForDef - Looks up the register class and cost for a given definition. More... | |
static bool | IsChainDependent (SDNode *Outer, SDNode *Inner, unsigned NestLevel, const TargetInstrInfo *TII) |
IsChainDependent - Test if Outer is reachable from Inner through chain dependencies. More... | |
static SDNode * | FindCallSeqStart (SDNode *N, unsigned &NestLevel, unsigned &MaxNest, const TargetInstrInfo *TII) |
FindCallSeqStart - Starting from the (lowered) CALLSEQ_END node, locate the corresponding (lowered) CALLSEQ_BEGIN node. More... | |
static void | resetVRegCycle (SUnit *SU) |
static bool | isOperandOf (const SUnit *SU, SDNode *N) |
static MVT | getPhysicalRegisterVT (SDNode *N, unsigned Reg, const TargetInstrInfo *TII) |
getPhysicalRegisterVT - Returns the ValueType of the physical register definition of the specified node. More... | |
static void | CheckForLiveRegDef (SUnit *SU, unsigned Reg, SUnit **LiveRegDefs, SmallSet< unsigned, 4 > &RegAdded, SmallVectorImpl< unsigned > &LRegs, const TargetRegisterInfo *TRI) |
CheckForLiveRegDef - Return true and update live register vector if the specified register def of the specified SUnit clobbers any "live" registers. More... | |
static void | CheckForLiveRegDefMasked (SUnit *SU, const uint32_t *RegMask, ArrayRef< SUnit *> LiveRegDefs, SmallSet< unsigned, 4 > &RegAdded, SmallVectorImpl< unsigned > &LRegs) |
CheckForLiveRegDefMasked - Check for any live physregs that are clobbered by RegMask, and add them to LRegs. More... | |
static const uint32_t * | getNodeRegMask (const SDNode *N) |
getNodeRegMask - Returns the register mask attached to an SDNode, if any. More... | |
static int | checkSpecialNodes (const SUnit *left, const SUnit *right) |
static unsigned | CalcNodeSethiUllmanNumber (const SUnit *SU, std::vector< unsigned > &SUNumbers) |
CalcNodeSethiUllmanNumber - Compute Sethi Ullman number. More... | |
static unsigned | closestSucc (const SUnit *SU) |
closestSucc - Returns the scheduled cycle of the successor which is closest to the current cycle. More... | |
static unsigned | calcMaxScratches (const SUnit *SU) |
calcMaxScratches - Returns an cost estimate of the worse case requirement for scratch registers, i.e. More... | |
static bool | hasOnlyLiveInOpers (const SUnit *SU) |
hasOnlyLiveInOpers - Return true if SU has only value predecessors that are CopyFromReg from a virtual register. More... | |
static bool | hasOnlyLiveOutUses (const SUnit *SU) |
hasOnlyLiveOutUses - Return true if SU has only value successors that are CopyToReg to a virtual register. More... | |
static void | initVRegCycle (SUnit *SU) |
static bool | hasVRegCycleUse (const SUnit *SU) |
static bool | BUHasStall (SUnit *SU, int Height, RegReductionPQBase *SPQ) |
static int | BUCompareLatency (SUnit *left, SUnit *right, bool checkPref, RegReductionPQBase *SPQ) |
static bool | BURRSort (SUnit *left, SUnit *right, RegReductionPQBase *SPQ) |
static bool | canEnableCoalescing (SUnit *SU) |
static bool | canClobberReachingPhysRegUse (const SUnit *DepSU, const SUnit *SU, ScheduleDAGRRList *scheduleDAG, const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) |
canClobberReachingPhysRegUse - True if SU would clobber one of it's successor's explicit physregs whose definition can reach DepSU. More... | |
static bool | canClobberPhysRegDefs (const SUnit *SuccSU, const SUnit *SU, const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) |
canClobberPhysRegDefs - True if SU would clobber one of SuccSU's physical register defs. More... | |
Variables | |
static RegisterScheduler | burrListDAGScheduler ("list-burr", "Bottom-up register reduction list scheduling", createBURRListDAGScheduler) |
static RegisterScheduler | sourceListDAGScheduler ("source", "Similar to list-burr but schedules in source " "order when possible", createSourceListDAGScheduler) |
static RegisterScheduler | hybridListDAGScheduler ("list-hybrid", "Bottom-up register pressure aware list scheduling " "which tries to balance latency and register pressure", createHybridListDAGScheduler) |
static RegisterScheduler | ILPListDAGScheduler ("list-ilp", "Bottom-up register pressure aware list scheduling " "which tries to balance ILP and register pressure", createILPListDAGScheduler) |
static cl::opt< bool > | DisableSchedCycles ("disable-sched-cycles", cl::Hidden, cl::init(false), cl::desc("Disable cycle-level precision during preRA scheduling")) |
static cl::opt< bool > | DisableSchedRegPressure ("disable-sched-reg-pressure", cl::Hidden, cl::init(false), cl::desc("Disable regpressure priority in sched=list-ilp")) |
static cl::opt< bool > | DisableSchedLiveUses ("disable-sched-live-uses", cl::Hidden, cl::init(true), cl::desc("Disable live use priority in sched=list-ilp")) |
static cl::opt< bool > | DisableSchedVRegCycle ("disable-sched-vrcycle", cl::Hidden, cl::init(false), cl::desc("Disable virtual register cycle interference checks")) |
static cl::opt< bool > | DisableSchedPhysRegJoin ("disable-sched-physreg-join", cl::Hidden, cl::init(false), cl::desc("Disable physreg def-use affinity")) |
static cl::opt< bool > | DisableSchedStalls ("disable-sched-stalls", cl::Hidden, cl::init(true), cl::desc("Disable no-stall priority in sched=list-ilp")) |
static cl::opt< bool > | DisableSchedCriticalPath ("disable-sched-critical-path", cl::Hidden, cl::init(false), cl::desc("Disable critical path priority in sched=list-ilp")) |
static cl::opt< bool > | DisableSchedHeight ("disable-sched-height", cl::Hidden, cl::init(false), cl::desc("Disable scheduled-height priority in sched=list-ilp")) |
static cl::opt< bool > | Disable2AddrHack ("disable-2addr-hack", cl::Hidden, cl::init(true), cl::desc("Disable scheduler's two-address hack")) |
static cl::opt< int > | MaxReorderWindow ("max-sched-reorder", cl::Hidden, cl::init(6), cl::desc("Number of instructions to allow ahead of the critical path " "in sched=list-ilp")) |
static cl::opt< unsigned > | AvgIPC ("sched-avg-ipc", cl::Hidden, cl::init(1), cl::desc("Average inst/cycle whan no target itinerary exists.")) |
#define DEBUG_TYPE "pre-RA-sched" |
Definition at line 63 of file ScheduleDAGRRList.cpp.
|
static |
Definition at line 2454 of file ScheduleDAGRRList.cpp.
References BUHasStall(), llvm::dbgs(), llvm::SUnit::getDepth(), llvm::SUnit::getHeight(), hasVRegCycleUse(), llvm::Sched::ILP, llvm::SUnit::Latency, LLVM_DEBUG, llvm::SUnit::NodeNum, and llvm::SUnit::SchedulingPref.
Referenced by BURRSort().
Definition at line 2444 of file ScheduleDAGRRList.cpp.
References llvm::ScheduleHazardRecognizer::NoHazard.
Referenced by BUCompareLatency(), and canEnableCoalescing().
Definition at line 2505 of file ScheduleDAGRRList.cpp.
References assert(), BUCompareLatency(), calcMaxScratches(), checkSpecialNodes(), closestSucc(), llvm::dbgs(), DisableSchedCycles, DisableSchedPhysRegJoin, llvm::SUnit::getDepth(), llvm::SUnit::getHeight(), llvm::SUnit::getNode(), llvm::SDNode::getNumValues(), llvm::SUnit::hasPhysRegDefs, llvm::SUnit::isCall, llvm::SUnit::isCallOp, LLVM_DEBUG, llvm::SUnit::NodeNum, llvm::SUnit::NodeQueueId, and llvm::ScheduleHazardRecognizer::NoHazard.
Referenced by canEnableCoalescing().
calcMaxScratches - Returns an cost estimate of the worse case requirement for scratch registers, i.e.
number of data dependencies.
Definition at line 2328 of file ScheduleDAGRRList.cpp.
References llvm::SDep::isCtrl(), and llvm::SUnit::Preds.
Referenced by BURRSort().
|
static |
CalcNodeSethiUllmanNumber - Compute Sethi Ullman number.
Smaller number is the higher priority.
Definition at line 1925 of file ScheduleDAGRRList.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::back(), llvm::ISD::CopyFromReg, llvm::ISD::CopyToReg, llvm::dbgs(), llvm::SmallVectorBase::empty(), for(), GetCostForDef(), llvm::SDNode::getMachineOpcode(), llvm::SUnit::getNode(), llvm::SDNode::getNumValues(), llvm::SDNode::getOpcode(), llvm::SDNode::getSimpleValueType(), llvm::SDep::getSUnit(), llvm::MVT::Glue, llvm::SDNode::hasAnyUseOfValue(), llvm::SUnit::isCallOp, llvm::SDep::isCtrl(), llvm::SDNode::isMachineOpcode(), llvm::ScheduleDAGSDNodes::RegDefIter::IsValid(), LLVM_DEBUG, LLVM_DUMP_METHOD, llvm::SUnit::NodeNum, llvm::SUnit::NumPreds, llvm::SUnit::NumRegDefsLeft, llvm::SUnit::NumSuccs, llvm::SUnit::NumSuccsLeft, llvm::MVT::Other, P, llvm::SmallVectorTemplateBase< T >::pop_back(), llvm::SUnit::Preds, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::Sched::RegPressure, llvm::NVPTX::PTXCvtMode::RP, llvm::SUnit::Succs, TII, llvm::ISD::TokenFactor, and TRI.
|
static |
canClobberPhysRegDefs - True if SU would clobber one of SuccSU's physical register defs.
Definition at line 2856 of file ScheduleDAGRRList.cpp.
References assert(), llvm::MachineOperand::clobbersPhysReg(), llvm::ISD::CopyFromReg, llvm::ISD::CopyToReg, llvm::dbgs(), llvm::MCInstrInfo::get(), llvm::SDNode::getGluedNode(), llvm::SDNode::getMachineOpcode(), llvm::SUnit::getNode(), getNodeRegMask(), llvm::SDNode::getNumValues(), getReg(), llvm::SDNode::getSimpleValueType(), llvm::SDep::getSUnit(), llvm::MVT::Glue, llvm::SDNode::hasAnyUseOfValue(), llvm::SUnit::hasPhysRegClobbers, llvm::SUnit::hasPhysRegDefs, llvm::SDep::isAssignedRegDep(), llvm::SDep::isCtrl(), llvm::SUnit::isTwoAddress, llvm::TargetRegisterInfo::isVirtualRegister(), LLVM_DEBUG, llvm::SUnit::NodeNum, llvm::SUnit::NumPreds, llvm::SUnit::NumSuccs, llvm::MVT::Other, llvm::SUnit::Preds, llvm::TargetRegisterInfo::regsOverlap(), llvm::SDep::setSUnit(), llvm::SUnit::Succs, TII, and TRI.
|
static |
canClobberReachingPhysRegUse - True if SU would clobber one of it's successor's explicit physregs whose definition can reach DepSU.
i.e. DepSU should not be scheduled above SU.
Definition at line 2820 of file ScheduleDAGRRList.cpp.
References llvm::MachineOperand::clobbersPhysReg(), llvm::MCInstrInfo::get(), llvm::SDNode::getMachineOpcode(), llvm::SUnit::getNode(), getNodeRegMask(), llvm::SDep::getReg(), llvm::SDep::getSUnit(), llvm::SDep::isAssignedRegDep(), llvm::SUnit::Preds, llvm::TargetRegisterInfo::regsOverlap(), and llvm::SUnit::Succs.
Definition at line 2693 of file ScheduleDAGRRList.cpp.
References llvm::abs(), BUHasStall(), BURRSort(), checkSpecialNodes(), llvm::ISD::CopyToReg, llvm::dbgs(), Disable2AddrHack, DisableSchedCriticalPath, DisableSchedHeight, DisableSchedLiveUses, DisableSchedRegPressure, DisableSchedStalls, llvm::SUnit::getDepth(), llvm::SUnit::getHeight(), llvm::SDNode::getMachineOpcode(), llvm::SDValue::getNode(), llvm::SUnit::getNode(), llvm::SDNode::getNodeId(), llvm::MCInstrDesc::getNumDefs(), llvm::MCInstrDesc::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::MCInstrDesc::getOperandConstraint(), initVRegCycle(), llvm::SUnit::isCall, llvm::SUnit::isTwoAddress, LLVM_DEBUG, MaxReorderWindow, llvm::SUnit::NodeNum, llvm::SUnit::NumPreds, llvm::SUnit::NumSuccs, llvm::SUnit::OrigNode, llvm::MCOI::TIED_TO, TII, and llvm::ISD::TokenFactor.
|
static |
CheckForLiveRegDef - Return true and update live register vector if the specified register def of the specified SUnit clobbers any "live" registers.
Definition at line 1286 of file ScheduleDAGRRList.cpp.
References llvm::SmallSet< T, N, C >::insert(), llvm::MCRegAliasIterator::isValid(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by getNodeRegMask().
|
static |
CheckForLiveRegDefMasked - Check for any live physregs that are clobbered by RegMask, and add them to LRegs.
Definition at line 1308 of file ScheduleDAGRRList.cpp.
References llvm::MachineOperand::clobbersPhysReg(), llvm::SmallSet< T, N, C >::insert(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ArrayRef< T >::size().
Definition at line 1914 of file ScheduleDAGRRList.cpp.
References llvm::SUnit::isScheduleLow.
Referenced by BURRSort(), and canEnableCoalescing().
closestSucc - Returns the scheduled cycle of the successor which is closest to the current cycle.
Definition at line 2310 of file ScheduleDAGRRList.cpp.
References llvm::ISD::CopyToReg, llvm::SUnit::getHeight(), llvm::SUnit::getNode(), llvm::SDNode::getOpcode(), llvm::SDep::getSUnit(), llvm::SDep::isCtrl(), and llvm::SUnit::Succs.
Referenced by BURRSort().
|
static |
FindCallSeqStart - Starting from the (lowered) CALLSEQ_END node, locate the corresponding (lowered) CALLSEQ_BEGIN node.
NestLevel and MaxNested are used in recursion to indcate the current level of nesting of CALLSEQ_BEGIN and CALLSEQ_END pairs, as well as the maximum level seen so far.
TODO: It would be better to give CALLSEQ_END an explicit operand to point to the corresponding CALLSEQ_BEGIN to avoid needing to search for it.
Definition at line 484 of file ScheduleDAGRRList.cpp.
References assert(), llvm::ISD::EntryToken, llvm::TargetInstrInfo::getCallFrameDestroyOpcode(), llvm::TargetInstrInfo::getCallFrameSetupOpcode(), llvm::SDNode::getMachineOpcode(), llvm::SDNode::getOpcode(), llvm::SDep::getReg(), llvm::SDep::getSUnit(), llvm::SDep::isAssignedRegDep(), llvm::SDNode::isMachineOpcode(), llvm::max(), N, llvm::SDNode::op_values(), llvm::MVT::Other, llvm::SUnit::Preds, TII, llvm::ISD::TokenFactor, and TRI.
|
static |
GetCostForDef - Looks up the register class and cost for a given definition.
Typically this just means looking up the representative register class, but for untyped values (MVT::Untyped) it means inspecting the node's opcode to determine what register class is being generated.
Definition at line 304 of file ScheduleDAGRRList.cpp.
References llvm::ScheduleDAGSDNodes::RegDefIter::GetValue(), and llvm::MVT::Untyped.
Referenced by CalcNodeSethiUllmanNumber().
getNodeRegMask - Returns the register mask attached to an SDNode, if any.
Definition at line 1323 of file ScheduleDAGRRList.cpp.
References CheckForLiveRegDef(), llvm::SDep::getReg(), llvm::SDep::getSUnit(), llvm::SDep::isAssignedRegDep(), llvm::SDNode::op_values(), llvm::SUnit::Preds, and TRI.
Referenced by canClobberPhysRegDefs(), and canClobberReachingPhysRegUse().
|
static |
getPhysicalRegisterVT - Returns the ValueType of the physical register definition of the specified node.
FIXME: Move to SelectionDAG?
Definition at line 1265 of file ScheduleDAGRRList.cpp.
References assert(), llvm::ISD::CopyFromReg, llvm::MCInstrInfo::get(), llvm::MCInstrDesc::getImplicitDefs(), llvm::SDNode::getMachineOpcode(), llvm::MCInstrDesc::getNumDefs(), llvm::SDNode::getOpcode(), llvm::SDNode::getSimpleValueType(), and llvm::MCInstrDesc::ImplicitDefs.
hasOnlyLiveInOpers - Return true if SU has only value predecessors that are CopyFromReg from a virtual register.
Definition at line 2339 of file ScheduleDAGRRList.cpp.
References llvm::ISD::CopyFromReg, llvm::SUnit::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), getReg(), llvm::SDep::getSUnit(), llvm::SDep::isCtrl(), llvm::TargetRegisterInfo::isVirtualRegister(), and llvm::SUnit::Preds.
Referenced by initVRegCycle().
hasOnlyLiveOutUses - Return true if SU has only value successors that are CopyToReg to a virtual register.
This SU def is probably a liveout and it has no other use. It should be scheduled closer to the terminator.
Definition at line 2361 of file ScheduleDAGRRList.cpp.
References llvm::ISD::CopyToReg, llvm::SUnit::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), getReg(), llvm::SDep::getSUnit(), llvm::SDep::isCtrl(), llvm::TargetRegisterInfo::isVirtualRegister(), and llvm::SUnit::Succs.
Referenced by initVRegCycle().
Definition at line 2425 of file ScheduleDAGRRList.cpp.
References llvm::ISD::CopyFromReg, llvm::dbgs(), llvm::SUnit::getNode(), llvm::SDNode::getOpcode(), llvm::SDep::getSUnit(), llvm::SDep::isCtrl(), llvm::SUnit::isVRegCycle, LLVM_DEBUG, llvm::SUnit::NodeNum, and llvm::SUnit::Preds.
Referenced by BUCompareLatency().
|
static |
Definition at line 2389 of file ScheduleDAGRRList.cpp.
References llvm::dbgs(), DisableSchedVRegCycle, llvm::SDep::getSUnit(), hasOnlyLiveInOpers(), hasOnlyLiveOutUses(), llvm::SDep::isCtrl(), llvm::SUnit::isVRegCycle, LLVM_DEBUG, llvm::SUnit::NodeNum, and llvm::SUnit::Preds.
Referenced by canEnableCoalescing().
|
static |
IsChainDependent - Test if Outer is reachable from Inner through chain dependencies.
Definition at line 435 of file ScheduleDAGRRList.cpp.
References llvm::ISD::EntryToken, llvm::TargetInstrInfo::getCallFrameDestroyOpcode(), llvm::TargetInstrInfo::getCallFrameSetupOpcode(), llvm::SDNode::getMachineOpcode(), llvm::SDNode::getOpcode(), llvm::SDNode::isMachineOpcode(), llvm::SDNode::op_values(), llvm::MVT::Other, TII, and llvm::ISD::TokenFactor.
Definition at line 964 of file ScheduleDAGRRList.cpp.
References llvm::SchedulingPriorityQueue::addNode(), llvm::SDep::Artificial, assert(), Copies, llvm::SUnit::CopyDstRC, llvm::SUnit::CopySrcRC, D, llvm::SDep::Data, llvm::dbgs(), llvm::SDNode::getGluedNode(), llvm::SUnit::getNode(), llvm::SDNode::getNodeId(), llvm::MCInstrDesc::getNumOperands(), llvm::SDNode::getNumValues(), llvm::MCInstrDesc::getOperandConstraint(), llvm::SDNode::getSimpleValueType(), llvm::SDep::getSUnit(), llvm::MVT::Glue, llvm::SDep::isArtificial(), llvm::SUnit::isAvailable, llvm::SUnit::isCommutable, llvm::MCInstrDesc::isCommutable(), llvm::SDep::isCtrl(), llvm::SUnit::isScheduled, llvm::SUnit::isTwoAddress, llvm::SUnit::Latency, LLVM_DEBUG, llvm::SUnit::NodeNum, llvm::SUnit::NumRegDefsLeft, llvm::SUnit::NumSuccsLeft, llvm::SDNode::op_values(), llvm::MVT::Other, llvm::SUnit::Preds, llvm::SmallVectorTemplateBase< T >::push_back(), Reg, llvm::SDep::setLatency(), llvm::SDNode::setNodeId(), llvm::SDep::setSUnit(), llvm::SmallVectorBase::size(), llvm::SUnit::Succs, llvm::MCOI::TIED_TO, TII, llvm::SchedulingPriorityQueue::tracksRegPressure(), and llvm::SchedulingPriorityQueue::updateNode().
Referenced by llvm::SDValue::getValue(), and llvm::SDNode::uses().
|
static |
Definition at line 2408 of file ScheduleDAGRRList.cpp.
References assert(), llvm::ISD::CopyFromReg, llvm::SUnit::getNode(), llvm::SDNode::getOpcode(), llvm::SDep::getSUnit(), llvm::SDep::isCtrl(), llvm::SUnit::isVRegCycle, and llvm::SUnit::Preds.
STATISTIC | ( | NumBacktracks | , |
"Number of times scheduler backtracked" | |||
) |
STATISTIC | ( | NumUnfolds | , |
"Number of nodes unfolded" | |||
) |
STATISTIC | ( | NumDups | , |
"Number of duplicated nodes" | |||
) |
STATISTIC | ( | NumPRCopies | , |
"Number of physical register copies" | |||
) |
|
static |
|
static |
|
static |
Referenced by canEnableCoalescing().
|
static |
Referenced by BUCompareLatency(), and canEnableCoalescing().
|
static |
Referenced by BUCompareLatency(), and BURRSort().
|
static |
Referenced by BUCompareLatency(), and canEnableCoalescing().
|
static |
Referenced by canEnableCoalescing().
|
static |
Referenced by BURRSort().
|
static |
Referenced by canEnableCoalescing().
|
static |
Referenced by canEnableCoalescing().
|
static |
Referenced by initVRegCycle().
|
static |
|
static |
|
static |
Referenced by BUCompareLatency(), and canEnableCoalescing().
|
static |