1 //===- LiveDebugVariables.h - Tracking debug info variables -----*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file provides the interface to the LiveDebugVariables analysis. 10 // 11 // The analysis removes DBG_VALUE instructions for virtual registers and tracks 12 // live user variables in a data structure that can be updated during register 13 // allocation. 14 // 15 // After register allocation new DBG_VALUE instructions are emitted to reflect 16 // the new locations of user variables. 17 // 18 //===----------------------------------------------------------------------===// 19 20 #ifndef LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H 21 #define LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H 22 23 #include "llvm/CodeGen/MachineFunctionPass.h" 24 #include "llvm/Support/Compiler.h" 25 26 namespace llvm { 27 28 template <typename T> class ArrayRef; 29 class LiveIntervals; 30 class VirtRegMap; 31 32 class LLVM_LIBRARY_VISIBILITY LiveDebugVariables : public MachineFunctionPass { 33 void *pImpl = nullptr; 34 35 public: 36 static char ID; // Pass identification, replacement for typeid 37 38 LiveDebugVariables(); 39 ~LiveDebugVariables() override; 40 41 /// splitRegister - Move any user variables in OldReg to the live ranges in 42 /// NewRegs where they are live. Mark the values as unavailable where no new 43 /// register is live. 44 void splitRegister(unsigned OldReg, ArrayRef<unsigned> NewRegs, 45 LiveIntervals &LIS); 46 47 /// emitDebugValues - Emit new DBG_VALUE instructions reflecting the changes 48 /// that happened during register allocation. 49 /// @param VRM Rename virtual registers according to map. 50 void emitDebugValues(VirtRegMap *VRM); 51 52 /// dump - Print data structures to dbgs(). 53 void dump() const; 54 55 private: 56 bool runOnMachineFunction(MachineFunction &) override; 57 void releaseMemory() override; 58 void getAnalysisUsage(AnalysisUsage &) const override; 59 bool doInitialization(Module &) override; 60 }; 61 62 } // end namespace llvm 63 64 #endif // LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H 65