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 | 1448e7c8b65ee20585b10791992a86b7857d7341 (patch) | |
tree | 544b0b80f2eef7d7d0b8788d5eb0e873e25080b7 /llvm/lib | |
parent | 8bfb2f8ab51eedfb6e662aa82f6599cbc8d98f90 (diff) | |
download | bcm5719-llvm-1448e7c8b65ee20585b10791992a86b7857d7341.tar.gz bcm5719-llvm-1448e7c8b65ee20585b10791992a86b7857d7341.zip |
Refactor.
llvm-svn: 124300
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index 5d20fd70a47..4c9158a4529 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/llvm/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); } |