diff options
| author | Ekaterina Romanova <katya_romanova@playstation.sony.com> | 2014-03-13 18:47:12 +0000 |
|---|---|---|
| committer | Ekaterina Romanova <katya_romanova@playstation.sony.com> | 2014-03-13 18:47:12 +0000 |
| commit | 8d62008ecb3edd841341789112a0fcab587beff5 (patch) | |
| tree | 2d4176db3955c65cf9283bbbec535bffea398b39 /llvm/lib/CodeGen/MachineRegisterInfo.cpp | |
| parent | c3ec337e4db6ee91db5471cb9e4e479d2f6c1d99 (diff) | |
| download | bcm5719-llvm-8d62008ecb3edd841341789112a0fcab587beff5.tar.gz bcm5719-llvm-8d62008ecb3edd841341789112a0fcab587beff5.zip | |
Fix for http://llvm.org/bugs/show_bug.cgi?id=18590
This patch fixes the bug in peephole optimization that folds a load which defines one vreg into the one and only use of that vreg. With debug info, a DBG_VALUE that referenced the vreg considered to be a use, preventing the optimization. The fix is to ignore DBG_VALUE's during the optimization, and undef a DBG_VALUE that references a vreg that gets removed.
Patch by Trevor Smigiel!
llvm-svn: 203829
Diffstat (limited to 'llvm/lib/CodeGen/MachineRegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index 4029f4a2bbc..3dabcbed7fc 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -414,3 +414,18 @@ bool MachineRegisterInfo::isConstantPhysReg(unsigned PhysReg, return false; return true; } + +/// markUsesInDebugValueAsUndef - Mark every DBG_VALUE referencing the +/// specified register as undefined which causes the DBG_VALUE to be +/// deleted during LiveDebugVariables analysis. +void MachineRegisterInfo::markUsesInDebugValueAsUndef(unsigned Reg) const { + // Mark any DBG_VALUE that uses Reg as undef (but don't delete it.) + MachineRegisterInfo::use_iterator nextI; + for (use_iterator I = use_begin(Reg), E = use_end(); I != E; I = nextI) { + nextI = std::next(I); // I is invalidated by the setReg + MachineOperand& Use = I.getOperand(); + MachineInstr *UseMI = Use.getParent(); + if (UseMI->isDebugValue()) + UseMI->getOperand(0).setReg(0U); + } +} |

