1 //===- LiveDebugVariables.h - Tracking debug info variables ----*- c++ -*--===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file provides the interface to the LiveDebugVariables analysis. 11 // 12 // The analysis removes DBG_VALUE instructions for virtual registers and tracks 13 // live user variables in a data structure that can be updated during register 14 // allocation. 15 // 16 // After register allocation new DBG_VALUE instructions are emitted to reflect 17 // the new locations of user variables. 18 // 19 //===----------------------------------------------------------------------===// 20 21 #ifndef LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H 22 #define LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H 23 24 #include "llvm/ADT/ArrayRef.h" 25 #include "llvm/CodeGen/MachineFunctionPass.h" 26 #include "llvm/IR/DebugInfo.h" 27 28 namespace llvm { 29 30 class LiveInterval; 31 class LiveIntervals; 32 class VirtRegMap; 33 34 class LLVM_LIBRARY_VISIBILITY LiveDebugVariables : public MachineFunctionPass { 35 void *pImpl; 36 DenseMap<const Function *, DISubprogram *> FunctionDIs; 37 38 public: 39 static char ID; // Pass identification, replacement for typeid 40 41 LiveDebugVariables(); 42 ~LiveDebugVariables() override; 43 44 /// renameRegister - Move any user variables in OldReg to NewReg:SubIdx. 45 /// @param OldReg Old virtual register that is going away. 46 /// @param NewReg New register holding the user variables. 47 /// @param SubIdx If NewReg is a virtual register, SubIdx may indicate a sub- 48 /// register. 49 void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx); 50 51 /// splitRegister - Move any user variables in OldReg to the live ranges in 52 /// NewRegs where they are live. Mark the values as unavailable where no new 53 /// register is live. 54 void splitRegister(unsigned OldReg, ArrayRef<unsigned> NewRegs, 55 LiveIntervals &LIS); 56 57 /// emitDebugValues - Emit new DBG_VALUE instructions reflecting the changes 58 /// that happened during register allocation. 59 /// @param VRM Rename virtual registers according to map. 60 void emitDebugValues(VirtRegMap *VRM); 61 62 /// dump - Print data structures to dbgs(). 63 void dump(); 64 65 private: 66 67 bool runOnMachineFunction(MachineFunction &) override; 68 void releaseMemory() override; 69 void getAnalysisUsage(AnalysisUsage &) const override; 70 bool doInitialization(Module &) override; 71 72 }; 73 74 } // namespace llvm 75 76 #endif 77