summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AntiDepBreaker.h
diff options
context:
space:
mode:
authorAndrew Ng <anng.sw@gmail.com>2017-04-25 15:39:57 +0000
committerAndrew Ng <anng.sw@gmail.com>2017-04-25 15:39:57 +0000
commit10ebfe0684ea6480a06638a6a2e1d23f50dacbff (patch)
tree3a82836fd73a7de6dabe93a0c6feec7b5fec738b /llvm/lib/CodeGen/AntiDepBreaker.h
parentba011431938ec4e1716c13a1aada4510f547c89f (diff)
downloadbcm5719-llvm-10ebfe0684ea6480a06638a6a2e1d23f50dacbff.tar.gz
bcm5719-llvm-10ebfe0684ea6480a06638a6a2e1d23f50dacbff.zip
Resubmit r301309: [DebugInfo][X86] Fix handling of DBG_VALUE's in post-RA scheduler.
This patch reapplies r301309 with the fix to the MIR test to fix the assertion triggered by r301309. Had trimmed a little bit too much from the MIR! llvm-svn: 301317
Diffstat (limited to 'llvm/lib/CodeGen/AntiDepBreaker.h')
-rw-r--r--llvm/lib/CodeGen/AntiDepBreaker.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AntiDepBreaker.h b/llvm/lib/CodeGen/AntiDepBreaker.h
index 04f7f419f5e..d14d93100ad 100644
--- a/llvm/lib/CodeGen/AntiDepBreaker.h
+++ b/llvm/lib/CodeGen/AntiDepBreaker.h
@@ -60,6 +60,25 @@ public:
if (MI.getOperand(0).isReg() && MI.getOperand(0).getReg() == OldReg)
MI.getOperand(0).setReg(NewReg);
}
+
+ /// Update all DBG_VALUE instructions that may be affected by the dependency
+ /// breaker's update of ParentMI to use NewReg.
+ void UpdateDbgValues(const DbgValueVector &DbgValues, MachineInstr *ParentMI,
+ unsigned OldReg, unsigned NewReg) {
+ // The following code is dependent on the order in which the DbgValues are
+ // constructed in ScheduleDAGInstrs::buildSchedGraph.
+ MachineInstr *PrevDbgMI = nullptr;
+ for (const auto &DV : make_range(DbgValues.crbegin(), DbgValues.crend())) {
+ MachineInstr *PrevMI = DV.second;
+ if ((PrevMI == ParentMI) || (PrevMI == PrevDbgMI)) {
+ MachineInstr *DbgMI = DV.first;
+ UpdateDbgValue(*DbgMI, OldReg, NewReg);
+ PrevDbgMI = DbgMI;
+ } else if (PrevDbgMI) {
+ break; // If no match and already found a DBG_VALUE, we're done.
+ }
+ }
+ }
};
}
OpenPOWER on IntegriCloud