It's not legal to fold a load from a narrower stack slot into a wider instruction...
[llvm/avr.git] / lib / CodeGen / AsmPrinter / DwarfWriter.cpp
blobaafac71b229e9fd8fa11ecf977ab421d37cfaeff
1 //===-- llvm/CodeGen/DwarfWriter.cpp - Dwarf Framework --------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains support for writing dwarf info into asm files.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/CodeGen/DwarfWriter.h"
15 #include "DwarfDebug.h"
16 #include "DwarfException.h"
17 #include "llvm/CodeGen/MachineModuleInfo.h"
19 using namespace llvm;
21 static RegisterPass<DwarfWriter>
22 X("dwarfwriter", "DWARF Information Writer");
23 char DwarfWriter::ID = 0;
25 //===----------------------------------------------------------------------===//
26 /// DwarfWriter Implementation
27 ///
29 DwarfWriter::DwarfWriter()
30 : ImmutablePass(&ID), DD(0), DE(0) {}
32 DwarfWriter::~DwarfWriter() {
33 delete DE;
34 delete DD;
37 /// BeginModule - Emit all Dwarf sections that should come prior to the
38 /// content.
39 void DwarfWriter::BeginModule(Module *M,
40 MachineModuleInfo *MMI,
41 raw_ostream &OS, AsmPrinter *A,
42 const MCAsmInfo *T) {
43 DE = new DwarfException(OS, A, T);
44 DD = new DwarfDebug(OS, A, T);
45 DE->BeginModule(M, MMI);
46 DD->BeginModule(M, MMI);
49 /// EndModule - Emit all Dwarf sections that should come after the content.
50 ///
51 void DwarfWriter::EndModule() {
52 DE->EndModule();
53 DD->EndModule();
56 /// BeginFunction - Gather pre-function debug information. Assumes being
57 /// emitted immediately after the function entry point.
58 void DwarfWriter::BeginFunction(MachineFunction *MF) {
59 DE->BeginFunction(MF);
60 DD->BeginFunction(MF);
63 /// EndFunction - Gather and emit post-function debug information.
64 ///
65 void DwarfWriter::EndFunction(MachineFunction *MF) {
66 DD->EndFunction(MF);
67 DE->EndFunction();
69 if (MachineModuleInfo *MMI = DD->getMMI() ? DD->getMMI() : DE->getMMI())
70 // Clear function debug information.
71 MMI->EndFunction();
74 /// RecordSourceLine - Records location information and associates it with a
75 /// label. Returns a unique label ID used to generate a label and provide
76 /// correspondence to the source line list.
77 unsigned DwarfWriter::RecordSourceLine(unsigned Line, unsigned Col,
78 DICompileUnit CU) {
79 return DD->RecordSourceLine(Line, Col, CU);
82 /// RecordRegionStart - Indicate the start of a region.
83 unsigned DwarfWriter::RecordRegionStart(MDNode *N) {
84 return DD->RecordRegionStart(N);
87 /// RecordRegionEnd - Indicate the end of a region.
88 unsigned DwarfWriter::RecordRegionEnd(MDNode *N) {
89 return DD->RecordRegionEnd(N);
92 /// getRecordSourceLineCount - Count source lines.
93 unsigned DwarfWriter::getRecordSourceLineCount() {
94 return DD->getRecordSourceLineCount();
97 /// RecordVariable - Indicate the declaration of a local variable.
98 ///
99 void DwarfWriter::RecordVariable(MDNode *N, unsigned FrameIndex) {
100 DD->RecordVariable(N, FrameIndex);
103 /// ShouldEmitDwarfDebug - Returns true if Dwarf debugging declarations should
104 /// be emitted.
105 bool DwarfWriter::ShouldEmitDwarfDebug() const {
106 return DD && DD->ShouldEmitDwarfDebug();
109 //// RecordInlinedFnStart
110 unsigned DwarfWriter::RecordInlinedFnStart(DISubprogram SP, DICompileUnit CU,
111 unsigned Line, unsigned Col) {
112 return DD->RecordInlinedFnStart(SP, CU, Line, Col);
115 /// RecordInlinedFnEnd - Indicate the end of inlined subroutine.
116 unsigned DwarfWriter::RecordInlinedFnEnd(DISubprogram SP) {
117 return DD->RecordInlinedFnEnd(SP);