LiveDebugVariables.h revision bb7b23f5b79a7ca2aa62faa1a6078428af597234
1bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen//===- LiveDebugVariables.h - Tracking debug info variables ----*- c++ -*--===// 2bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 3bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// The LLVM Compiler Infrastructure 4bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 5bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// This file is distributed under the University of Illinois Open Source 6bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// License. See LICENSE.TXT for details. 7bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 8bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen//===----------------------------------------------------------------------===// 9bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 10bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// This file provides the interface to the LiveDebugVariables analysis. 11bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 12bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// The analysis removes DBG_VALUE instructions for virtual registers and tracks 13bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// live user variables in a data structure that can be updated during register 14bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// allocation. 15bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 16bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// After register allocation new DBG_VALUE instructions are emitted to reflect 17bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// the new locations of user variables. 18bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 19bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen//===----------------------------------------------------------------------===// 20bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 21bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#ifndef LLVM_CODEGEN_LIVEDEBUGVARIABLES_H 22bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#define LLVM_CODEGEN_LIVEDEBUGVARIABLES_H 23bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 24bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#include "llvm/CodeGen/MachineFunctionPass.h" 25bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 26bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesennamespace llvm { 27bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 28bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenclass LiveDebugVariables : public MachineFunctionPass { 29bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen void *pImpl; 30bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenpublic: 31bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen static char ID; // Pass identification, replacement for typeid 32bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 33bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen LiveDebugVariables(); 34bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 35bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// renameRegister - Move any user variables in OldReg to NewReg:SubIdx. 36bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// @param OldReg Old virtual register that is going away. 37bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// @param NewReg New register holding the user variables. 38bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// @param SubIdx If NewReg is a virtual register, SubIdx may indicate a sub- 39bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// register. 40bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx); 41bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 42bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// emitDebugValues - Emit new DBG_VALUE instructions reflecting the changes 43bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// that happened during register allocation. 44bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen void emitDebugValues(); 45bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 46bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenprivate: 47bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 48bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen /// runOnMachineFunction - Analyze and remove DBG_VALUE instructions. 49bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen virtual bool runOnMachineFunction(MachineFunction &); 50bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 51bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen virtual void getAnalysisUsage(AnalysisUsage &) const; 52bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 53bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen}; 54bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 55bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen} // namespace llvm 56bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 57bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#endif // LLVM_CODEGEN_LIVEDEBUGVARIABLES_H 58