diff options
author | Andrew Trick <atrick@apple.com> | 2010-12-24 06:46:50 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2010-12-24 06:46:50 +0000 |
commit | c94056692a8ce13d00689b8a0b8c3194aa76de0a (patch) | |
tree | 48fec4747f1e610bee5b624b9ecdd5ba512a836d /llvm/lib/CodeGen | |
parent | 9d6af5328e3a61641a125b17125952fa1a6bf11d (diff) | |
download | bcm5719-llvm-c94056692a8ce13d00689b8a0b8c3194aa76de0a.tar.gz bcm5719-llvm-c94056692a8ce13d00689b8a0b8c3194aa76de0a.zip |
Fix a few cases where the scheduler is not checking for phys reg copies. The scheduling node may have a NULL DAG node, yuck.
llvm-svn: 122544
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/ScheduleDAG.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/ScheduleDAG.cpp b/llvm/lib/CodeGen/ScheduleDAG.cpp index 02e398f7efc..83f2dd07f1d 100644 --- a/llvm/lib/CodeGen/ScheduleDAG.cpp +++ b/llvm/lib/CodeGen/ScheduleDAG.cpp @@ -36,7 +36,7 @@ ScheduleDAG::~ScheduleDAG() {} /// getInstrDesc helper to handle SDNodes. const TargetInstrDesc *ScheduleDAG::getNodeDesc(const SDNode *Node) const { - if (!Node->isMachineOpcode()) return NULL; + if (!Node || !Node->isMachineOpcode()) return NULL; return &TII->get(Node->getMachineOpcode()); } diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp index c93ef4dd467..d6368047bcd 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp @@ -435,6 +435,13 @@ void ScheduleDAGRRList::AdvancePastStalls(SUnit *SU) { /// Record this SUnit in the HazardRecognizer. /// Does not update CurCycle. void ScheduleDAGRRList::EmitNode(SUnit *SU) { + if (!EnableSchedCycles || HazardRec->getMaxLookAhead() == 0) + return; + + // Check for phys reg copy. + if (!SU->getNode()) + return; + switch (SU->getNode()->getOpcode()) { default: assert(SU->getNode()->isMachineOpcode() && @@ -645,13 +652,13 @@ static bool isOperandOf(const SUnit *SU, SDNode *N) { /// CopyAndMoveSuccessors - Clone the specified node and move its scheduled /// successors to the newly created node. SUnit *ScheduleDAGRRList::CopyAndMoveSuccessors(SUnit *SU) { - if (SU->getNode()->getGluedNode()) - return NULL; - SDNode *N = SU->getNode(); if (!N) return NULL; + if (SU->getNode()->getGluedNode()) + return NULL; + SUnit *NewSU; bool TryUnfold = false; for (unsigned i = 0, e = N->getNumValues(); i != e; ++i) { |