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