Non-functionality changes:
[oota-llvm.git] / lib / Analysis / DebugInfo.cpp
1 //===--- DebugInfo.cpp - Debug Information Helper Classes -----------------===//
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 implements the helper classes used to build and interpret debug
11 // information in LLVM IR form.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "llvm/Analysis/DebugInfo.h"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/Intrinsics.h"
19 #include "llvm/IntrinsicInst.h"
20 #include "llvm/Instructions.h"
21 #include "llvm/Module.h"
22 #include "llvm/Analysis/ValueTracking.h"
23 #include "llvm/Support/Dwarf.h"
24 #include "llvm/Support/Streams.h"
25
26 using namespace llvm;
27 using namespace llvm::dwarf;
28
29 //===----------------------------------------------------------------------===//
30 // DIDescriptor
31 //===----------------------------------------------------------------------===//
32
33 /// ValidDebugInfo - Return true if V represents valid debug info value.
34 bool DIDescriptor::ValidDebugInfo(Value *V, CodeGenOpt::Level OptLevel) {
35   if (!V)
36     return false;
37
38   GlobalVariable *GV = dyn_cast<GlobalVariable>(V->stripPointerCasts());
39   if (!GV)
40     return false;
41
42   if (!GV->hasInternalLinkage () && !GV->hasLinkOnceLinkage())
43     return false;
44
45   DIDescriptor DI(GV);
46
47   // Check current version. Allow Version6 for now.
48   unsigned Version = DI.getVersion();
49   if (Version != LLVMDebugVersion && Version != LLVMDebugVersion6)
50     return false;
51
52   unsigned Tag = DI.getTag();
53   switch (Tag) {
54   case DW_TAG_variable:
55     assert(DIVariable(GV).Verify() && "Invalid DebugInfo value");
56     break;
57   case DW_TAG_compile_unit:
58     assert(DICompileUnit(GV).Verify() && "Invalid DebugInfo value");
59     break;
60   case DW_TAG_subprogram:
61     assert(DISubprogram(GV).Verify() && "Invalid DebugInfo value");
62     break;
63   case DW_TAG_lexical_block:
64     // FIXME: This interfers with the quality of generated code during
65     // optimization.
66     if (OptLevel != CodeGenOpt::None)
67       return false;
68     // FALLTHROUGH
69   default:
70     break;
71   }
72
73   return true;
74 }
75
76 DIDescriptor::DIDescriptor(GlobalVariable *gv, unsigned RequiredTag) {
77   GV = gv;
78   
79   // If this is non-null, check to see if the Tag matches. If not, set to null.
80   if (GV && getTag() != RequiredTag)
81     GV = 0;
82 }
83
84 const std::string &
85 DIDescriptor::getStringField(unsigned Elt, std::string &Result) const {
86   if (GV == 0) {
87     Result.clear();
88     return Result;
89   }
90
91   Constant *C = GV->getInitializer();
92   if (C == 0 || Elt >= C->getNumOperands()) {
93     Result.clear();
94     return Result;
95   }
96
97   // Fills in the string if it succeeds
98   if (!GetConstantStringInfo(C->getOperand(Elt), Result))
99     Result.clear();
100
101   return Result;
102 }
103
104 uint64_t DIDescriptor::getUInt64Field(unsigned Elt) const {
105   if (GV == 0) return 0;
106
107   Constant *C = GV->getInitializer();
108   if (C == 0 || Elt >= C->getNumOperands())
109     return 0;
110
111   if (ConstantInt *CI = dyn_cast<ConstantInt>(C->getOperand(Elt)))
112     return CI->getZExtValue();
113   return 0;
114 }
115
116 DIDescriptor DIDescriptor::getDescriptorField(unsigned Elt) const {
117   if (GV == 0) return DIDescriptor();
118
119   Constant *C = GV->getInitializer();
120   if (C == 0 || Elt >= C->getNumOperands())
121     return DIDescriptor();
122
123   C = C->getOperand(Elt);
124   return DIDescriptor(dyn_cast<GlobalVariable>(C->stripPointerCasts()));
125 }
126
127 GlobalVariable *DIDescriptor::getGlobalVariableField(unsigned Elt) const {
128   if (GV == 0) return 0;
129
130   Constant *C = GV->getInitializer();
131   if (C == 0 || Elt >= C->getNumOperands())
132     return 0;
133
134   C = C->getOperand(Elt);
135   return dyn_cast<GlobalVariable>(C->stripPointerCasts());
136 }
137
138 //===----------------------------------------------------------------------===//
139 // Simple Descriptor Constructors and other Methods
140 //===----------------------------------------------------------------------===//
141
142 // Needed by DIVariable::getType().
143 DIType::DIType(GlobalVariable *gv) : DIDescriptor(gv) {
144   if (!gv) return;
145   unsigned tag = getTag();
146   if (tag != dwarf::DW_TAG_base_type && !DIDerivedType::isDerivedType(tag) &&
147       !DICompositeType::isCompositeType(tag))
148     GV = 0;
149 }
150
151 /// isDerivedType - Return true if the specified tag is legal for
152 /// DIDerivedType.
153 bool DIType::isDerivedType(unsigned Tag) {
154   switch (Tag) {
155   case dwarf::DW_TAG_typedef:
156   case dwarf::DW_TAG_pointer_type:
157   case dwarf::DW_TAG_reference_type:
158   case dwarf::DW_TAG_const_type:
159   case dwarf::DW_TAG_volatile_type:
160   case dwarf::DW_TAG_restrict_type:
161   case dwarf::DW_TAG_member:
162   case dwarf::DW_TAG_inheritance:
163     return true;
164   default:
165     // FIXME: Even though it doesn't make sense, CompositeTypes are current
166     // modelled as DerivedTypes, this should return true for them as well.
167     return false;
168   }
169 }
170
171 /// isCompositeType - Return true if the specified tag is legal for
172 /// DICompositeType.
173 bool DIType::isCompositeType(unsigned TAG) {
174   switch (TAG) {
175   case dwarf::DW_TAG_array_type:
176   case dwarf::DW_TAG_structure_type:
177   case dwarf::DW_TAG_union_type:
178   case dwarf::DW_TAG_enumeration_type:
179   case dwarf::DW_TAG_vector_type:
180   case dwarf::DW_TAG_subroutine_type:
181   case dwarf::DW_TAG_class_type:
182     return true;
183   default:
184     return false;
185   }
186 }
187
188 /// isVariable - Return true if the specified tag is legal for DIVariable.
189 bool DIVariable::isVariable(unsigned Tag) {
190   switch (Tag) {
191   case dwarf::DW_TAG_auto_variable:
192   case dwarf::DW_TAG_arg_variable:
193   case dwarf::DW_TAG_return_variable:
194     return true;
195   default:
196     return false;
197   }
198 }
199
200 unsigned DIArray::getNumElements() const {
201   assert (GV && "Invalid DIArray");
202   Constant *C = GV->getInitializer();
203   assert (C && "Invalid DIArray initializer");
204   return C->getNumOperands();
205 }
206
207 /// Verify - Verify that a compile unit is well formed.
208 bool DICompileUnit::Verify() const {
209   if (isNull()) 
210     return false;
211   std::string Res;
212   if (getFilename(Res).empty()) 
213     return false;
214   // It is possible that directory and produce string is empty.
215   return true;
216 }
217
218 /// Verify - Verify that a type descriptor is well formed.
219 bool DIType::Verify() const {
220   if (isNull()) 
221     return false;
222   if (getContext().isNull()) 
223     return false;
224
225   DICompileUnit CU = getCompileUnit();
226   if (!CU.isNull() && !CU.Verify()) 
227     return false;
228   return true;
229 }
230
231 /// Verify - Verify that a composite type descriptor is well formed.
232 bool DICompositeType::Verify() const {
233   if (isNull()) 
234     return false;
235   if (getContext().isNull()) 
236     return false;
237
238   DICompileUnit CU = getCompileUnit();
239   if (!CU.isNull() && !CU.Verify()) 
240     return false;
241   return true;
242 }
243
244 /// Verify - Verify that a subprogram descriptor is well formed.
245 bool DISubprogram::Verify() const {
246   if (isNull())
247     return false;
248   
249   if (getContext().isNull())
250     return false;
251
252   DICompileUnit CU = getCompileUnit();
253   if (!CU.Verify()) 
254     return false;
255
256   DICompositeType Ty = getType();
257   if (!Ty.isNull() && !Ty.Verify())
258     return false;
259   return true;
260 }
261
262 /// Verify - Verify that a global variable descriptor is well formed.
263 bool DIGlobalVariable::Verify() const {
264   if (isNull())
265     return false;
266   
267   if (getContext().isNull())
268     return false;
269
270   DICompileUnit CU = getCompileUnit();
271   if (!CU.isNull() && !CU.Verify()) 
272     return false;
273
274   DIType Ty = getType();
275   if (!Ty.Verify())
276     return false;
277
278   if (!getGlobal())
279     return false;
280
281   return true;
282 }
283
284 /// Verify - Verify that a variable descriptor is well formed.
285 bool DIVariable::Verify() const {
286   if (isNull())
287     return false;
288   
289   if (getContext().isNull())
290     return false;
291
292   DIType Ty = getType();
293   if (!Ty.Verify())
294     return false;
295
296   return true;
297 }
298
299 /// getOriginalTypeSize - If this type is derived from a base type then
300 /// return base type size.
301 uint64_t DIDerivedType::getOriginalTypeSize() const {
302   if (getTag() != dwarf::DW_TAG_member)
303     return getSizeInBits();
304   DIType BT = getTypeDerivedFrom();
305   if (BT.getTag() != dwarf::DW_TAG_base_type)
306     return getSizeInBits();
307   return BT.getSizeInBits();
308 }
309
310 /// describes - Return true if this subprogram provides debugging
311 /// information for the function F.
312 bool DISubprogram::describes(const Function *F) {
313   assert (F && "Invalid function");
314   std::string Name;
315   getLinkageName(Name);
316   if (Name.empty())
317     getName(Name);
318   if (!Name.empty() && (strcmp(Name.c_str(), F->getNameStart()) == false))
319     return true;
320   return false;
321 }
322
323 //===----------------------------------------------------------------------===//
324 // DIFactory: Basic Helpers
325 //===----------------------------------------------------------------------===//
326
327 DIFactory::DIFactory(Module &m)
328   : M(m), StopPointFn(0), FuncStartFn(0), RegionStartFn(0), RegionEndFn(0),
329     DeclareFn(0) {
330   EmptyStructPtr = PointerType::getUnqual(StructType::get(NULL, NULL));
331 }
332
333 /// getCastToEmpty - Return this descriptor as a Constant* with type '{}*'.
334 /// This is only valid when the descriptor is non-null.
335 Constant *DIFactory::getCastToEmpty(DIDescriptor D) {
336   if (D.isNull()) return Constant::getNullValue(EmptyStructPtr);
337   return ConstantExpr::getBitCast(D.getGV(), EmptyStructPtr);
338 }
339
340 Constant *DIFactory::GetTagConstant(unsigned TAG) {
341   assert((TAG & LLVMDebugVersionMask) == 0 &&
342          "Tag too large for debug encoding!");
343   return ConstantInt::get(Type::Int32Ty, TAG | LLVMDebugVersion);
344 }
345
346 Constant *DIFactory::GetStringConstant(const std::string &String) {
347   // Check string cache for previous edition.
348   Constant *&Slot = StringCache[String];
349   
350   // Return Constant if previously defined.
351   if (Slot) return Slot;
352   
353   const PointerType *DestTy = PointerType::getUnqual(Type::Int8Ty);
354   
355   // If empty string then use a sbyte* null instead.
356   if (String.empty())
357     return Slot = ConstantPointerNull::get(DestTy);
358
359   // Construct string as an llvm constant.
360   Constant *ConstStr = ConstantArray::get(String);
361     
362   // Otherwise create and return a new string global.
363   GlobalVariable *StrGV = new GlobalVariable(ConstStr->getType(), true,
364                                              GlobalVariable::InternalLinkage,
365                                              ConstStr, ".str", &M);
366   StrGV->setSection("llvm.metadata");
367   return Slot = ConstantExpr::getBitCast(StrGV, DestTy);
368 }
369
370 /// GetOrCreateAnchor - Look up an anchor for the specified tag and name.  If it
371 /// already exists, return it.  If not, create a new one and return it.
372 DIAnchor DIFactory::GetOrCreateAnchor(unsigned TAG, const char *Name) {
373   const Type *EltTy = StructType::get(Type::Int32Ty, Type::Int32Ty, NULL);
374   
375   // Otherwise, create the global or return it if already in the module.
376   Constant *C = M.getOrInsertGlobal(Name, EltTy);
377   assert(isa<GlobalVariable>(C) && "Incorrectly typed anchor?");
378   GlobalVariable *GV = cast<GlobalVariable>(C);
379   
380   // If it has an initializer, it is already in the module.
381   if (GV->hasInitializer()) 
382     return SubProgramAnchor = DIAnchor(GV);
383   
384   GV->setLinkage(GlobalValue::LinkOnceAnyLinkage);
385   GV->setSection("llvm.metadata");
386   GV->setConstant(true);
387   M.addTypeName("llvm.dbg.anchor.type", EltTy);
388   
389   // Otherwise, set the initializer.
390   Constant *Elts[] = {
391     GetTagConstant(dwarf::DW_TAG_anchor),
392     ConstantInt::get(Type::Int32Ty, TAG)
393   };
394   
395   GV->setInitializer(ConstantStruct::get(Elts, 2));
396   return DIAnchor(GV);
397 }
398
399
400
401 //===----------------------------------------------------------------------===//
402 // DIFactory: Primary Constructors
403 //===----------------------------------------------------------------------===//
404
405 /// GetOrCreateCompileUnitAnchor - Return the anchor for compile units,
406 /// creating a new one if there isn't already one in the module.
407 DIAnchor DIFactory::GetOrCreateCompileUnitAnchor() {
408   // If we already created one, just return it.
409   if (!CompileUnitAnchor.isNull())
410     return CompileUnitAnchor;
411   return CompileUnitAnchor = GetOrCreateAnchor(dwarf::DW_TAG_compile_unit,
412                                                "llvm.dbg.compile_units");
413 }
414
415 /// GetOrCreateSubprogramAnchor - Return the anchor for subprograms,
416 /// creating a new one if there isn't already one in the module.
417 DIAnchor DIFactory::GetOrCreateSubprogramAnchor() {
418   // If we already created one, just return it.
419   if (!SubProgramAnchor.isNull())
420     return SubProgramAnchor;
421   return SubProgramAnchor = GetOrCreateAnchor(dwarf::DW_TAG_subprogram,
422                                               "llvm.dbg.subprograms");
423 }
424
425 /// GetOrCreateGlobalVariableAnchor - Return the anchor for globals,
426 /// creating a new one if there isn't already one in the module.
427 DIAnchor DIFactory::GetOrCreateGlobalVariableAnchor() {
428   // If we already created one, just return it.
429   if (!GlobalVariableAnchor.isNull())
430     return GlobalVariableAnchor;
431   return GlobalVariableAnchor = GetOrCreateAnchor(dwarf::DW_TAG_variable,
432                                                   "llvm.dbg.global_variables");
433 }
434
435 /// GetOrCreateArray - Create an descriptor for an array of descriptors. 
436 /// This implicitly uniques the arrays created.
437 DIArray DIFactory::GetOrCreateArray(DIDescriptor *Tys, unsigned NumTys) {
438   SmallVector<Constant*, 16> Elts;
439   
440   for (unsigned i = 0; i != NumTys; ++i)
441     Elts.push_back(getCastToEmpty(Tys[i]));
442   
443   Constant *Init = ConstantArray::get(ArrayType::get(EmptyStructPtr,
444                                                      Elts.size()),
445                                       &Elts[0], Elts.size());
446   // If we already have this array, just return the uniqued version.
447   DIDescriptor &Entry = SimpleConstantCache[Init];
448   if (!Entry.isNull()) return DIArray(Entry.getGV());
449   
450   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
451                                           GlobalValue::InternalLinkage,
452                                           Init, "llvm.dbg.array", &M);
453   GV->setSection("llvm.metadata");
454   Entry = DIDescriptor(GV);
455   return DIArray(GV);
456 }
457
458 /// GetOrCreateSubrange - Create a descriptor for a value range.  This
459 /// implicitly uniques the values returned.
460 DISubrange DIFactory::GetOrCreateSubrange(int64_t Lo, int64_t Hi) {
461   Constant *Elts[] = {
462     GetTagConstant(dwarf::DW_TAG_subrange_type),
463     ConstantInt::get(Type::Int64Ty, Lo),
464     ConstantInt::get(Type::Int64Ty, Hi)
465   };
466   
467   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
468
469   // If we already have this range, just return the uniqued version.
470   DIDescriptor &Entry = SimpleConstantCache[Init];
471   if (!Entry.isNull()) return DISubrange(Entry.getGV());
472   
473   M.addTypeName("llvm.dbg.subrange.type", Init->getType());
474
475   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
476                                           GlobalValue::InternalLinkage,
477                                           Init, "llvm.dbg.subrange", &M);
478   GV->setSection("llvm.metadata");
479   Entry = DIDescriptor(GV);
480   return DISubrange(GV);
481 }
482
483
484
485 /// CreateCompileUnit - Create a new descriptor for the specified compile
486 /// unit.  Note that this does not unique compile units within the module.
487 DICompileUnit DIFactory::CreateCompileUnit(unsigned LangID,
488                                            const std::string &Filename,
489                                            const std::string &Directory,
490                                            const std::string &Producer,
491                                            bool isMain,
492                                            bool isOptimized,
493                                            const char *Flags,
494                                            unsigned RunTimeVer) {
495   Constant *Elts[] = {
496     GetTagConstant(dwarf::DW_TAG_compile_unit),
497     getCastToEmpty(GetOrCreateCompileUnitAnchor()),
498     ConstantInt::get(Type::Int32Ty, LangID),
499     GetStringConstant(Filename),
500     GetStringConstant(Directory),
501     GetStringConstant(Producer),
502     ConstantInt::get(Type::Int1Ty, isMain),
503     ConstantInt::get(Type::Int1Ty, isOptimized),
504     GetStringConstant(Flags),
505     ConstantInt::get(Type::Int32Ty, RunTimeVer)
506   };
507   
508   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
509   
510   M.addTypeName("llvm.dbg.compile_unit.type", Init->getType());
511   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
512                                           GlobalValue::InternalLinkage,
513                                           Init, "llvm.dbg.compile_unit", &M);
514   GV->setSection("llvm.metadata");
515   return DICompileUnit(GV);
516 }
517
518 /// CreateEnumerator - Create a single enumerator value.
519 DIEnumerator DIFactory::CreateEnumerator(const std::string &Name, uint64_t Val){
520   Constant *Elts[] = {
521     GetTagConstant(dwarf::DW_TAG_enumerator),
522     GetStringConstant(Name),
523     ConstantInt::get(Type::Int64Ty, Val)
524   };
525   
526   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
527   
528   M.addTypeName("llvm.dbg.enumerator.type", Init->getType());
529   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
530                                           GlobalValue::InternalLinkage,
531                                           Init, "llvm.dbg.enumerator", &M);
532   GV->setSection("llvm.metadata");
533   return DIEnumerator(GV);
534 }
535
536
537 /// CreateBasicType - Create a basic type like int, float, etc.
538 DIBasicType DIFactory::CreateBasicType(DIDescriptor Context,
539                                       const std::string &Name,
540                                        DICompileUnit CompileUnit,
541                                        unsigned LineNumber,
542                                        uint64_t SizeInBits,
543                                        uint64_t AlignInBits,
544                                        uint64_t OffsetInBits, unsigned Flags,
545                                        unsigned Encoding) {
546   Constant *Elts[] = {
547     GetTagConstant(dwarf::DW_TAG_base_type),
548     getCastToEmpty(Context),
549     GetStringConstant(Name),
550     getCastToEmpty(CompileUnit),
551     ConstantInt::get(Type::Int32Ty, LineNumber),
552     ConstantInt::get(Type::Int64Ty, SizeInBits),
553     ConstantInt::get(Type::Int64Ty, AlignInBits),
554     ConstantInt::get(Type::Int64Ty, OffsetInBits),
555     ConstantInt::get(Type::Int32Ty, Flags),
556     ConstantInt::get(Type::Int32Ty, Encoding)
557   };
558   
559   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
560   
561   M.addTypeName("llvm.dbg.basictype.type", Init->getType());
562   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
563                                           GlobalValue::InternalLinkage,
564                                           Init, "llvm.dbg.basictype", &M);
565   GV->setSection("llvm.metadata");
566   return DIBasicType(GV);
567 }
568
569 /// CreateDerivedType - Create a derived type like const qualified type,
570 /// pointer, typedef, etc.
571 DIDerivedType DIFactory::CreateDerivedType(unsigned Tag,
572                                            DIDescriptor Context,
573                                            const std::string &Name,
574                                            DICompileUnit CompileUnit,
575                                            unsigned LineNumber,
576                                            uint64_t SizeInBits,
577                                            uint64_t AlignInBits,
578                                            uint64_t OffsetInBits,
579                                            unsigned Flags,
580                                            DIType DerivedFrom) {
581   Constant *Elts[] = {
582     GetTagConstant(Tag),
583     getCastToEmpty(Context),
584     GetStringConstant(Name),
585     getCastToEmpty(CompileUnit),
586     ConstantInt::get(Type::Int32Ty, LineNumber),
587     ConstantInt::get(Type::Int64Ty, SizeInBits),
588     ConstantInt::get(Type::Int64Ty, AlignInBits),
589     ConstantInt::get(Type::Int64Ty, OffsetInBits),
590     ConstantInt::get(Type::Int32Ty, Flags),
591     getCastToEmpty(DerivedFrom)
592   };
593   
594   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
595   
596   M.addTypeName("llvm.dbg.derivedtype.type", Init->getType());
597   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
598                                           GlobalValue::InternalLinkage,
599                                           Init, "llvm.dbg.derivedtype", &M);
600   GV->setSection("llvm.metadata");
601   return DIDerivedType(GV);
602 }
603
604 /// CreateCompositeType - Create a composite type like array, struct, etc.
605 DICompositeType DIFactory::CreateCompositeType(unsigned Tag,
606                                                DIDescriptor Context,
607                                                const std::string &Name,
608                                                DICompileUnit CompileUnit,
609                                                unsigned LineNumber,
610                                                uint64_t SizeInBits,
611                                                uint64_t AlignInBits,
612                                                uint64_t OffsetInBits,
613                                                unsigned Flags,
614                                                DIType DerivedFrom,
615                                                DIArray Elements,
616                                                unsigned RuntimeLang) {
617
618   Constant *Elts[] = {
619     GetTagConstant(Tag),
620     getCastToEmpty(Context),
621     GetStringConstant(Name),
622     getCastToEmpty(CompileUnit),
623     ConstantInt::get(Type::Int32Ty, LineNumber),
624     ConstantInt::get(Type::Int64Ty, SizeInBits),
625     ConstantInt::get(Type::Int64Ty, AlignInBits),
626     ConstantInt::get(Type::Int64Ty, OffsetInBits),
627     ConstantInt::get(Type::Int32Ty, Flags),
628     getCastToEmpty(DerivedFrom),
629     getCastToEmpty(Elements),
630     ConstantInt::get(Type::Int32Ty, RuntimeLang)
631   };
632   
633   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
634   
635   M.addTypeName("llvm.dbg.composite.type", Init->getType());
636   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
637                                           GlobalValue::InternalLinkage,
638                                           Init, "llvm.dbg.composite", &M);
639   GV->setSection("llvm.metadata");
640   return DICompositeType(GV);
641 }
642
643
644 /// CreateSubprogram - Create a new descriptor for the specified subprogram.
645 /// See comments in DISubprogram for descriptions of these fields.  This
646 /// method does not unique the generated descriptors.
647 DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context, 
648                                          const std::string &Name,
649                                          const std::string &DisplayName,
650                                          const std::string &LinkageName,
651                                          DICompileUnit CompileUnit,
652                                          unsigned LineNo, DIType Type,
653                                          bool isLocalToUnit,
654                                          bool isDefinition) {
655
656   Constant *Elts[] = {
657     GetTagConstant(dwarf::DW_TAG_subprogram),
658     getCastToEmpty(GetOrCreateSubprogramAnchor()),
659     getCastToEmpty(Context),
660     GetStringConstant(Name),
661     GetStringConstant(DisplayName),
662     GetStringConstant(LinkageName),
663     getCastToEmpty(CompileUnit),
664     ConstantInt::get(Type::Int32Ty, LineNo),
665     getCastToEmpty(Type),
666     ConstantInt::get(Type::Int1Ty, isLocalToUnit),
667     ConstantInt::get(Type::Int1Ty, isDefinition)
668   };
669   
670   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
671   
672   M.addTypeName("llvm.dbg.subprogram.type", Init->getType());
673   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
674                                           GlobalValue::InternalLinkage,
675                                           Init, "llvm.dbg.subprogram", &M);
676   GV->setSection("llvm.metadata");
677   return DISubprogram(GV);
678 }
679
680 /// CreateGlobalVariable - Create a new descriptor for the specified global.
681 DIGlobalVariable
682 DIFactory::CreateGlobalVariable(DIDescriptor Context, const std::string &Name,
683                                 const std::string &DisplayName,
684                                 const std::string &LinkageName,
685                                 DICompileUnit CompileUnit,
686                                 unsigned LineNo, DIType Type,bool isLocalToUnit,
687                                 bool isDefinition, llvm::GlobalVariable *Val) {
688   Constant *Elts[] = {
689     GetTagConstant(dwarf::DW_TAG_variable),
690     getCastToEmpty(GetOrCreateGlobalVariableAnchor()),
691     getCastToEmpty(Context),
692     GetStringConstant(Name),
693     GetStringConstant(DisplayName),
694     GetStringConstant(LinkageName),
695     getCastToEmpty(CompileUnit),
696     ConstantInt::get(Type::Int32Ty, LineNo),
697     getCastToEmpty(Type),
698     ConstantInt::get(Type::Int1Ty, isLocalToUnit),
699     ConstantInt::get(Type::Int1Ty, isDefinition),
700     ConstantExpr::getBitCast(Val, EmptyStructPtr)
701   };
702   
703   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
704   
705   M.addTypeName("llvm.dbg.global_variable.type", Init->getType());
706   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
707                                           GlobalValue::InternalLinkage,
708                                           Init, "llvm.dbg.global_variable", &M);
709   GV->setSection("llvm.metadata");
710   return DIGlobalVariable(GV);
711 }
712
713
714 /// CreateVariable - Create a new descriptor for the specified variable.
715 DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context,
716                                      const std::string &Name,
717                                      DICompileUnit CompileUnit, unsigned LineNo,
718                                      DIType Type) {
719   Constant *Elts[] = {
720     GetTagConstant(Tag),
721     getCastToEmpty(Context),
722     GetStringConstant(Name),
723     getCastToEmpty(CompileUnit),
724     ConstantInt::get(Type::Int32Ty, LineNo),
725     getCastToEmpty(Type)
726   };
727   
728   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
729   
730   M.addTypeName("llvm.dbg.variable.type", Init->getType());
731   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
732                                           GlobalValue::InternalLinkage,
733                                           Init, "llvm.dbg.variable", &M);
734   GV->setSection("llvm.metadata");
735   return DIVariable(GV);
736 }
737
738
739 /// CreateBlock - This creates a descriptor for a lexical block with the
740 /// specified parent context.
741 DIBlock DIFactory::CreateBlock(DIDescriptor Context) {
742   Constant *Elts[] = {
743     GetTagConstant(dwarf::DW_TAG_lexical_block),
744     getCastToEmpty(Context)
745   };
746   
747   Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
748   
749   M.addTypeName("llvm.dbg.block.type", Init->getType());
750   GlobalVariable *GV = new GlobalVariable(Init->getType(), true,
751                                           GlobalValue::InternalLinkage,
752                                           Init, "llvm.dbg.block", &M);
753   GV->setSection("llvm.metadata");
754   return DIBlock(GV);
755 }
756
757
758 //===----------------------------------------------------------------------===//
759 // DIFactory: Routines for inserting code into a function
760 //===----------------------------------------------------------------------===//
761
762 /// InsertStopPoint - Create a new llvm.dbg.stoppoint intrinsic invocation,
763 /// inserting it at the end of the specified basic block.
764 void DIFactory::InsertStopPoint(DICompileUnit CU, unsigned LineNo,
765                                 unsigned ColNo, BasicBlock *BB) {
766   
767   // Lazily construct llvm.dbg.stoppoint function.
768   if (!StopPointFn)
769     StopPointFn = llvm::Intrinsic::getDeclaration(&M, 
770                                               llvm::Intrinsic::dbg_stoppoint);
771   
772   // Invoke llvm.dbg.stoppoint
773   Value *Args[] = {
774     llvm::ConstantInt::get(llvm::Type::Int32Ty, LineNo),
775     llvm::ConstantInt::get(llvm::Type::Int32Ty, ColNo),
776     getCastToEmpty(CU)
777   };
778   CallInst::Create(StopPointFn, Args, Args+3, "", BB);
779 }
780
781 /// InsertSubprogramStart - Create a new llvm.dbg.func.start intrinsic to
782 /// mark the start of the specified subprogram.
783 void DIFactory::InsertSubprogramStart(DISubprogram SP, BasicBlock *BB) {
784   // Lazily construct llvm.dbg.func.start.
785   if (!FuncStartFn)
786     FuncStartFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_func_start);
787   
788   // Call llvm.dbg.func.start which also implicitly sets a stoppoint.
789   CallInst::Create(FuncStartFn, getCastToEmpty(SP), "", BB);
790 }
791
792 /// InsertRegionStart - Insert a new llvm.dbg.region.start intrinsic call to
793 /// mark the start of a region for the specified scoping descriptor.
794 void DIFactory::InsertRegionStart(DIDescriptor D, BasicBlock *BB) {
795   // Lazily construct llvm.dbg.region.start function.
796   if (!RegionStartFn)
797     RegionStartFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_region_start);
798
799   // Call llvm.dbg.func.start.
800   CallInst::Create(RegionStartFn, getCastToEmpty(D), "", BB);
801 }
802
803 /// InsertRegionEnd - Insert a new llvm.dbg.region.end intrinsic call to
804 /// mark the end of a region for the specified scoping descriptor.
805 void DIFactory::InsertRegionEnd(DIDescriptor D, BasicBlock *BB) {
806   // Lazily construct llvm.dbg.region.end function.
807   if (!RegionEndFn)
808     RegionEndFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_region_end);
809
810   // Call llvm.dbg.region.end.
811   CallInst::Create(RegionEndFn, getCastToEmpty(D), "", BB);
812 }
813
814 /// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
815 void DIFactory::InsertDeclare(Value *Storage, DIVariable D, BasicBlock *BB) {
816   // Cast the storage to a {}* for the call to llvm.dbg.declare.
817   Storage = new BitCastInst(Storage, EmptyStructPtr, "", BB);
818   
819   if (!DeclareFn)
820     DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
821
822   Value *Args[] = { Storage, getCastToEmpty(D) };
823   CallInst::Create(DeclareFn, Args, Args+2, "", BB);
824 }
825
826 namespace llvm {
827   /// findStopPoint - Find the stoppoint coressponding to this instruction, that
828   /// is the stoppoint that dominates this instruction.
829   const DbgStopPointInst *findStopPoint(const Instruction *Inst) {
830     if (const DbgStopPointInst *DSI = dyn_cast<DbgStopPointInst>(Inst))
831       return DSI;
832
833     const BasicBlock *BB = Inst->getParent();
834     BasicBlock::const_iterator I = Inst, B;
835     while (BB) {
836       B = BB->begin();
837
838       // A BB consisting only of a terminator can't have a stoppoint.
839       while (I != B) {
840         --I;
841         if (const DbgStopPointInst *DSI = dyn_cast<DbgStopPointInst>(I))
842           return DSI;
843       }
844
845       // This BB didn't have a stoppoint: if there is only one predecessor, look
846       // for a stoppoint there. We could use getIDom(), but that would require
847       // dominator info.
848       BB = I->getParent()->getUniquePredecessor();
849       if (BB)
850         I = BB->getTerminator();
851     }
852
853     return 0;
854   }
855
856   /// findBBStopPoint - Find the stoppoint corresponding to first real
857   /// (non-debug intrinsic) instruction in this Basic Block, and return the
858   /// stoppoint for it.
859   const DbgStopPointInst *findBBStopPoint(const BasicBlock *BB) {
860     for(BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I)
861       if (const DbgStopPointInst *DSI = dyn_cast<DbgStopPointInst>(I))
862         return DSI;
863
864     // Fallback to looking for stoppoint of unique predecessor. Useful if this
865     // BB contains no stoppoints, but unique predecessor does.
866     BB = BB->getUniquePredecessor();
867     if (BB)
868       return findStopPoint(BB->getTerminator());
869
870     return 0;
871   }
872
873   Value *findDbgGlobalDeclare(GlobalVariable *V) {
874     const Module *M = V->getParent();
875     const Type *Ty = M->getTypeByName("llvm.dbg.global_variable.type");
876     if (!Ty) return 0;
877
878     Ty = PointerType::get(Ty, 0);
879
880     Value *Val = V->stripPointerCasts();
881     for (Value::use_iterator I = Val->use_begin(), E = Val->use_end();
882          I != E; ++I) {
883       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(I)) {
884         if (CE->getOpcode() == Instruction::BitCast) {
885           Value *VV = CE;
886
887           while (VV->hasOneUse())
888             VV = *VV->use_begin();
889
890           if (VV->getType() == Ty)
891             return VV;
892         }
893       }
894     }
895     
896     if (Val->getType() == Ty)
897       return Val;
898
899     return 0;
900   }
901
902   /// Finds the llvm.dbg.declare intrinsic corresponding to this value if any.
903   /// It looks through pointer casts too.
904   const DbgDeclareInst *findDbgDeclare(const Value *V, bool stripCasts) {
905     if (stripCasts) {
906       V = V->stripPointerCasts();
907
908       // Look for the bitcast.
909       for (Value::use_const_iterator I = V->use_begin(), E =V->use_end();
910             I != E; ++I)
911         if (isa<BitCastInst>(I))
912           return findDbgDeclare(*I, false);
913
914       return 0;
915     }
916
917     // Find llvm.dbg.declare among uses of the instruction.
918     for (Value::use_const_iterator I = V->use_begin(), E =V->use_end();
919           I != E; ++I)
920       if (const DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(I))
921         return DDI;
922
923     return 0;
924   }
925
926   bool getLocationInfo(const Value *V, std::string &DisplayName,
927                        std::string &Type, unsigned &LineNo, std::string &File,
928                        std::string &Dir) {
929     DICompileUnit Unit;
930     DIType TypeD;
931
932     if (GlobalVariable *GV = dyn_cast<GlobalVariable>(const_cast<Value*>(V))) {
933       Value *DIGV = findDbgGlobalDeclare(GV);
934       if (!DIGV) return false;
935       DIGlobalVariable Var(cast<GlobalVariable>(DIGV));
936
937       Var.getDisplayName(DisplayName);
938       LineNo = Var.getLineNumber();
939       Unit = Var.getCompileUnit();
940       TypeD = Var.getType();
941     } else {
942       const DbgDeclareInst *DDI = findDbgDeclare(V);
943       if (!DDI) return false;
944       DIVariable Var(cast<GlobalVariable>(DDI->getVariable()));
945
946       Var.getName(DisplayName);
947       LineNo = Var.getLineNumber();
948       Unit = Var.getCompileUnit();
949       TypeD = Var.getType();
950     }
951
952     TypeD.getName(Type);
953     Unit.getFilename(File);
954     Unit.getDirectory(Dir);
955     return true;
956   }
957 }
958
959 /// dump - Print descriptor.
960 void DIDescriptor::dump() const {
961   cerr << "[" << dwarf::TagString(getTag()) << "] ";
962   cerr << std::hex << "[GV:" << GV << "]" << std::dec;
963 }
964
965 /// dump - Print compile unit.
966 void DICompileUnit::dump() const {
967   if (getLanguage())
968     cerr << " [" << dwarf::LanguageString(getLanguage()) << "] ";
969
970   std::string Res1, Res2;
971   cerr << " [" << getDirectory(Res1) << "/" << getFilename(Res2) << " ]";
972 }
973
974 /// dump - Print type.
975 void DIType::dump() const {
976   if (isNull()) return;
977
978   std::string Res;
979   if (!getName(Res).empty())
980     cerr << " [" << Res << "] ";
981
982   unsigned Tag = getTag();
983   cerr << " [" << dwarf::TagString(Tag) << "] ";
984
985   // TODO : Print context
986   getCompileUnit().dump();
987   cerr << " [" 
988        << getLineNumber() << ", " 
989        << getSizeInBits() << ", "
990        << getAlignInBits() << ", "
991        << getOffsetInBits() 
992        << "] ";
993
994   if (isPrivate()) 
995     cerr << " [private] ";
996   else if (isProtected())
997     cerr << " [protected] ";
998
999   if (isForwardDecl())
1000     cerr << " [fwd] ";
1001
1002   if (isBasicType(Tag))
1003     DIBasicType(GV).dump();
1004   else if (isDerivedType(Tag))
1005     DIDerivedType(GV).dump();
1006   else if (isCompositeType(Tag))
1007     DICompositeType(GV).dump();
1008   else {
1009     cerr << "Invalid DIType\n";
1010     return;
1011   }
1012
1013   cerr << "\n";
1014 }
1015
1016 /// dump - Print basic type.
1017 void DIBasicType::dump() const {
1018   cerr << " [" << dwarf::AttributeEncodingString(getEncoding()) << "] ";
1019 }
1020
1021 /// dump - Print derived type.
1022 void DIDerivedType::dump() const {
1023   cerr << "\n\t Derived From: "; getTypeDerivedFrom().dump();
1024 }
1025
1026 /// dump - Print composite type.
1027 void DICompositeType::dump() const {
1028   DIArray A = getTypeArray();
1029   if (A.isNull())
1030     return;
1031   cerr << " [" << A.getNumElements() << " elements]";
1032 }
1033
1034 /// dump - Print global.
1035 void DIGlobal::dump() const {
1036   std::string Res;
1037   if (!getName(Res).empty())
1038     cerr << " [" << Res << "] ";
1039
1040   unsigned Tag = getTag();
1041   cerr << " [" << dwarf::TagString(Tag) << "] ";
1042
1043   // TODO : Print context
1044   getCompileUnit().dump();
1045   cerr << " [" << getLineNumber() << "] ";
1046
1047   if (isLocalToUnit())
1048     cerr << " [local] ";
1049
1050   if (isDefinition())
1051     cerr << " [def] ";
1052
1053   if (isGlobalVariable(Tag))
1054     DIGlobalVariable(GV).dump();
1055
1056   cerr << "\n";
1057 }
1058
1059 /// dump - Print subprogram.
1060 void DISubprogram::dump() const {
1061   DIGlobal::dump();
1062 }
1063
1064 /// dump - Print global variable.
1065 void DIGlobalVariable::dump() const {
1066   cerr << " ["; getGlobal()->dump(); cerr << "] ";
1067 }
1068
1069 /// dump - Print variable.
1070 void DIVariable::dump() const {
1071   std::string Res;
1072   if (!getName(Res).empty())
1073     cerr << " [" << Res << "] ";
1074
1075   getCompileUnit().dump();
1076   cerr << " [" << getLineNumber() << "] ";
1077   getType().dump();
1078   cerr << "\n";
1079 }