summaryrefslogtreecommitdiff
path: root/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2011-01-26 18:20:04 +0000
committerDevang Patel <dpatel@apple.com>2011-01-26 18:20:04 +0000
commit55d20e8ff1e458f177302386d14f1a4dbdd86028 (patch)
tree37dab20a5e3e8fc3838cc61d1a3ca4f2b7dc56fc /lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
parent91585098eff1f0acdefa2667e091742b60dcbf15 (diff)
downloadllvm-55d20e8ff1e458f177302386d14f1a4dbdd86028.tar.gz
llvm-55d20e8ff1e458f177302386d14f1a4dbdd86028.tar.bz2
llvm-55d20e8ff1e458f177302386d14f1a4dbdd86028.tar.xz
Refactor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124300 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp')
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp49
1 files changed, 30 insertions, 19 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
index 5d20fd70a4..4c9158a452 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);
}