diff options
author | Devang Patel <dpatel@apple.com> | 2011-01-26 18:20:04 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-01-26 18:20:04 +0000 |
commit | 55d20e8ff1e458f177302386d14f1a4dbdd86028 (patch) | |
tree | 37dab20a5e3e8fc3838cc61d1a3ca4f2b7dc56fc /lib | |
parent | 91585098eff1f0acdefa2667e091742b60dcbf15 (diff) | |
download | external_llvm-55d20e8ff1e458f177302386d14f1a4dbdd86028.zip external_llvm-55d20e8ff1e458f177302386d14f1a4dbdd86028.tar.gz external_llvm-55d20e8ff1e458f177302386d14f1a4dbdd86028.tar.bz2 |
Refactor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124300 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index 5d20fd7..4c9158a 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -501,6 +501,35 @@ namespace { }; } +/// ProcessSDDbgValues - Process SDDbgValues assoicated with this node. +static void ProcessSDDbgValues(SDNode *N, SelectionDAG *DAG, + InstrEmitter &Emitter, + SmallVector<std::pair<unsigned, MachineInstr*>, 32> &Orders, + DenseMap<SDValue, unsigned> &VRBaseMap, + unsigned Order) { + if (!N->getHasDebugValue()) + return; + + // Opportunistically insert immediate dbg_value uses, i.e. those with source + // order number right after the N. + MachineBasicBlock *BB = Emitter.getBlock(); + MachineBasicBlock::iterator InsertPos = Emitter.getInsertPos(); + SmallVector<SDDbgValue*,2> &DVs = DAG->GetDbgValues(N); + for (unsigned i = 0, e = DVs.size(); i != e; ++i) { + if (DVs[i]->isInvalidated()) + continue; + unsigned DVOrder = DVs[i]->getOrder(); + if (!Order || DVOrder == ++Order) { + MachineInstr *DbgMI = Emitter.EmitDbgValue(DVs[i], VRBaseMap); + if (DbgMI) { + Orders.push_back(std::make_pair(DVOrder, DbgMI)); + BB->insert(InsertPos, DbgMI); + } + DVs[i]->setIsInvalidated(); + } + } +} + // ProcessSourceNode - Process nodes with source order numbers. These are added // to a vector which EmitSchedule uses to determine how to insert dbg_value // instructions in the right order. @@ -521,25 +550,7 @@ static void ProcessSourceNode(SDNode *N, SelectionDAG *DAG, } Orders.push_back(std::make_pair(Order, prior(Emitter.getInsertPos()))); - if (!N->getHasDebugValue()) - return; - // Opportunistically insert immediate dbg_value uses, i.e. those with source - // order number right after the N. - MachineBasicBlock::iterator InsertPos = Emitter.getInsertPos(); - SmallVector<SDDbgValue*,2> &DVs = DAG->GetDbgValues(N); - for (unsigned i = 0, e = DVs.size(); i != e; ++i) { - if (DVs[i]->isInvalidated()) - continue; - unsigned DVOrder = DVs[i]->getOrder(); - if (DVOrder == ++Order) { - MachineInstr *DbgMI = Emitter.EmitDbgValue(DVs[i], VRBaseMap); - if (DbgMI) { - Orders.push_back(std::make_pair(DVOrder, DbgMI)); - BB->insert(InsertPos, DbgMI); - } - DVs[i]->setIsInvalidated(); - } - } + ProcessSDDbgValues(N, DAG, Emitter, Orders, VRBaseMap, Order); } |