LiveDebugVariables.cpp revision bb7b23f5b79a7ca2aa62faa1a6078428af597234
1bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen//===- LiveDebugVariables.cpp - Tracking debug info variables -------------===// 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 implements the LiveDebugVariables analysis. 11bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 12bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// Remove all DBG_VALUE instructions referencing virtual registers and replace 13bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// them with a data structure tracking where live user variables are kept - in a 14bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// virtual register or in a stack slot. 15bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 16bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// Allow the data structure to be updated during register allocation when values 17bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// are moved between registers and stack slots. Finally emit new DBG_VALUE 18bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// instructions after register allocation is complete. 19bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen// 20bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen//===----------------------------------------------------------------------===// 21bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 22bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#include "LiveDebugVariables.h" 23bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#include "llvm/CodeGen/LiveIntervalAnalysis.h" 24bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#include "llvm/CodeGen/MachineFunction.h" 25bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#include "llvm/CodeGen/Passes.h" 26bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen#include "llvm/Target/TargetMachine.h" 27bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 28bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenusing namespace llvm; 29bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 30bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenchar LiveDebugVariables::ID = 0; 31bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 32bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund OlesenINITIALIZE_PASS_BEGIN(LiveDebugVariables, "livedebugvars", 33bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen "Debug Variable Analysis", false, false) 34bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund OlesenINITIALIZE_PASS_DEPENDENCY(LiveIntervals) 35bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund OlesenINITIALIZE_PASS_END(LiveDebugVariables, "livedebugvars", 36bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen "Debug Variable Analysis", false, false) 37bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 38bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenvoid LiveDebugVariables::getAnalysisUsage(AnalysisUsage &AU) const { 39bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen AU.addRequiredTransitive<LiveIntervals>(); 40bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen AU.setPreservesAll(); 41bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen MachineFunctionPass::getAnalysisUsage(AU); 42bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen} 43bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 44bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund OlesenLiveDebugVariables::LiveDebugVariables() : MachineFunctionPass(ID) { 45bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen initializeLiveDebugVariablesPass(*PassRegistry::getPassRegistry()); 46bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen} 47bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen 48bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesenbool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) { 49bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen return false; 50bb7b23f5b79a7ca2aa62faa1a6078428af597234Jakob Stoklund Olesen} 51