X86: Mark MOV.*_{TC,NOREX} instruction as code gen only, they aren't real.
[oota-llvm.git] / lib / Target / PIC16 / PIC16DebugInfo.h
1 //===-- PIC16DebugInfo.h - Interfaces for PIC16 Debug Information ============//
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 the helper functions for representing debug information.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef PIC16DBG_H
15 #define PIC16DBG_H
16
17 #include "llvm/Analysis/DebugInfo.h"
18 #include "llvm/Module.h"
19
20 namespace llvm {
21   class MachineFunction;
22   class DebugLoc;
23   class MCStreamer;
24   
25   namespace PIC16Dbg {
26     enum VarType {
27       T_NULL,
28       T_VOID,
29       T_CHAR,
30       T_SHORT,
31       T_INT,
32       T_LONG,
33       T_FLOAT,
34       T_DOUBLE,
35       T_STRUCT,
36       T_UNION,
37       T_ENUM,
38       T_MOE,
39       T_UCHAR,
40       T_USHORT,
41       T_UINT,
42       T_ULONG
43     };
44     enum DerivedType {
45       DT_NONE,
46       DT_PTR,
47       DT_FCN,
48       DT_ARY
49     };
50     enum TypeSize {
51       S_BASIC = 5,
52       S_DERIVED = 3
53     };
54     enum DbgClass {
55       C_NULL,
56       C_AUTO,
57       C_EXT,
58       C_STAT,
59       C_REG,
60       C_EXTDEF,
61       C_LABEL,
62       C_ULABEL,
63       C_MOS,
64       C_ARG,
65       C_STRTAG,
66       C_MOU,
67       C_UNTAG,
68       C_TPDEF,
69       C_USTATIC,
70       C_ENTAG,
71       C_MOE,
72       C_REGPARM,
73       C_FIELD,
74       C_AUTOARG,
75       C_LASTENT,
76       C_BLOCK = 100,
77       C_FCN,
78       C_EOS,
79       C_FILE,
80       C_LINE,
81       C_ALIAS,
82       C_HIDDEN,
83       C_EOF,
84       C_LIST,
85       C_SECTION,
86       C_EFCN = 255
87     };
88     enum SymbolSize {
89       AuxSize =20
90     };
91   }
92
93   class PIC16DbgInfo {
94     MCStreamer &OS;
95     const MCAsmInfo *MAI;
96     std::string CurFile;
97     unsigned CurLine;
98
99     // EmitDebugDirectives is set if debug information is available. Default
100     // value for it is false.
101     bool EmitDebugDirectives;
102
103   public:
104     PIC16DbgInfo(MCStreamer &os, const MCAsmInfo *T) : OS(os), MAI(T) {
105       CurFile = "";
106       CurLine = 0;
107       EmitDebugDirectives = false; 
108     }
109
110     void BeginModule (Module &M);
111     void BeginFunction (const MachineFunction &MF);
112     void ChangeDebugLoc (const MachineFunction &MF, const DebugLoc &DL,
113                          bool IsInBeginFunction = false);
114     void EndFunction (const MachineFunction &MF);
115     void EndModule (Module &M);
116
117
118     private:
119     void SwitchToCU (MDNode *CU);
120     void SwitchToLine (unsigned Line, bool IsInBeginFunction = false);
121
122     void PopulateDebugInfo (DIType Ty, unsigned short &TypeNo, bool &HasAux,
123                            int Aux[], std::string &TypeName);
124     void PopulateBasicTypeInfo (DIType Ty, unsigned short &TypeNo);
125     void PopulateDerivedTypeInfo (DIType Ty, unsigned short &TypeNo, 
126                                   bool &HasAux, int Aux[],
127                                   std::string &TypeName);
128
129     void PopulateCompositeTypeInfo (DIType Ty, unsigned short &TypeNo,
130                                     bool &HasAux, int Aux[],
131                                     std::string &TypeName);
132     void PopulateArrayTypeInfo (DIType Ty, unsigned short &TypeNo,
133                                 bool &HasAux, int Aux[],
134                                 std::string &TypeName);
135
136     void PopulateStructOrUnionTypeInfo (DIType Ty, unsigned short &TypeNo,
137                                         bool &HasAux, int Aux[],
138                                         std::string &TypeName);
139     void PopulateEnumTypeInfo (DIType Ty, unsigned short &TypeNo);
140
141     unsigned GetTypeDebugNumber(std::string &Type);
142     short getStorageClass(DIGlobalVariable DIGV);
143     void EmitFunctBeginDI(const Function *F);
144     void EmitCompositeTypeDecls(Module &M);
145     void EmitCompositeTypeElements (DICompositeType CTy, std::string Suffix);
146     void EmitFunctEndDI(const Function *F, unsigned Line);
147     void EmitAuxEntry(const std::string VarName, int Aux[], 
148                       int num = PIC16Dbg::AuxSize, std::string TagName = "");
149     inline void EmitSymbol(std::string Name, short Class, 
150                            unsigned short Type = PIC16Dbg::T_NULL, 
151                            unsigned long Value = 0);
152     void EmitVarDebugInfo(Module &M);
153     void EmitEOF();
154   };
155 } // end namespace llvm;
156 #endif