diff options
author | Adrian Prantl <aprantl@apple.com> | 2013-10-05 00:08:27 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2013-10-05 00:08:27 +0000 |
commit | f01b562a15caf8acd95d2d580de534352d855447 (patch) | |
tree | f38d591d231962daf6199e860d1b3f0da099ad88 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | |
parent | 4e07b5b95539634ef6ac6cf54be7355302101080 (diff) | |
download | bcm5719-llvm-f01b562a15caf8acd95d2d580de534352d855447.tar.gz bcm5719-llvm-f01b562a15caf8acd95d2d580de534352d855447.zip |
Debug info: Don't crash in SelectionDAGISel when a vreg that is being
pointed to by a dbg_value belonging to a function argument is eliminated
during instruction selection.
rdar://problem/15094721.
llvm-svn: 192011
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index fcde6b5b939..1d0ed3af453 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -408,9 +408,13 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) { EntryMBB->insert(EntryMBB->begin(), MI); else { MachineInstr *Def = RegInfo->getVRegDef(Reg); - MachineBasicBlock::iterator InsertPos = Def; - // FIXME: VR def may not be in entry block. - Def->getParent()->insert(llvm::next(InsertPos), MI); + if (Def) { + MachineBasicBlock::iterator InsertPos = Def; + // FIXME: VR def may not be in entry block. + Def->getParent()->insert(llvm::next(InsertPos), MI); + } else + DEBUG(dbgs() << "Dropping debug info for dead vreg" + << TargetRegisterInfo::virtReg2Index(Reg) << "\n"); } // If Reg is live-in then update debug info to track its copy in a vreg. |