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