Add extra element to composite type. This new element will be used to record c++...
[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/Target/TargetMachine.h"  // FIXME: LAYERING VIOLATION!
17 #include "llvm/Constants.h"
18 #include "llvm/DerivedTypes.h"
19 #include "llvm/Intrinsics.h"
20 #include "llvm/IntrinsicInst.h"
21 #include "llvm/Instructions.h"
22 #include "llvm/Module.h"
23 #include "llvm/Analysis/ValueTracking.h"
24 #include "llvm/ADT/SmallPtrSet.h"
25 #include "llvm/Support/Debug.h"
26 #include "llvm/Support/Dwarf.h"
27 #include "llvm/Support/DebugLoc.h"
28 #include "llvm/Support/raw_ostream.h"
29 using namespace llvm;
30 using namespace llvm::dwarf;
31
32 //===----------------------------------------------------------------------===//
33 // DIDescriptor
34 //===----------------------------------------------------------------------===//
35
36 /// ValidDebugInfo - Return true if V represents valid debug info value.
37 /// FIXME : Add DIDescriptor.isValid()
38 bool DIDescriptor::ValidDebugInfo(MDNode *N, unsigned OptLevel) {
39   if (!N)
40     return false;
41
42   DIDescriptor DI(N);
43
44   // Check current version. Allow Version6 for now.
45   unsigned Version = DI.getVersion();
46   if (Version != LLVMDebugVersion && Version != LLVMDebugVersion6)
47     return false;
48
49   switch (DI.getTag()) {
50   case DW_TAG_variable:
51     assert(DIVariable(N).Verify() && "Invalid DebugInfo value");
52     break;
53   case DW_TAG_compile_unit:
54     assert(DICompileUnit(N).Verify() && "Invalid DebugInfo value");
55     break;
56   case DW_TAG_subprogram:
57     assert(DISubprogram(N).Verify() && "Invalid DebugInfo value");
58     break;
59   case DW_TAG_lexical_block:
60     // FIXME: This interfers with the quality of generated code during
61     // optimization.
62     if (OptLevel != CodeGenOpt::None)
63       return false;
64     // FALLTHROUGH
65   default:
66     break;
67   }
68
69   return true;
70 }
71
72 DIDescriptor::DIDescriptor(MDNode *N, unsigned RequiredTag) {
73   DbgNode = N;
74
75   // If this is non-null, check to see if the Tag matches. If not, set to null.
76   if (N && getTag() != RequiredTag) {
77     DbgNode = 0;
78   }
79 }
80
81 StringRef 
82 DIDescriptor::getStringField(unsigned Elt) const {
83   if (DbgNode == 0)
84     return StringRef();
85
86   if (Elt < DbgNode->getNumOperands())
87     if (MDString *MDS = dyn_cast_or_null<MDString>(DbgNode->getOperand(Elt)))
88       return MDS->getString();
89
90   return StringRef();
91 }
92
93 uint64_t DIDescriptor::getUInt64Field(unsigned Elt) const {
94   if (DbgNode == 0)
95     return 0;
96
97   if (Elt < DbgNode->getNumOperands())
98     if (ConstantInt *CI = dyn_cast<ConstantInt>(DbgNode->getOperand(Elt)))
99       return CI->getZExtValue();
100
101   return 0;
102 }
103
104 DIDescriptor DIDescriptor::getDescriptorField(unsigned Elt) const {
105   if (DbgNode == 0)
106     return DIDescriptor();
107
108   if (Elt < DbgNode->getNumOperands() && DbgNode->getOperand(Elt))
109     return DIDescriptor(dyn_cast<MDNode>(DbgNode->getOperand(Elt)));
110
111   return DIDescriptor();
112 }
113
114 GlobalVariable *DIDescriptor::getGlobalVariableField(unsigned Elt) const {
115   if (DbgNode == 0)
116     return 0;
117
118   if (Elt < DbgNode->getNumOperands())
119       return dyn_cast_or_null<GlobalVariable>(DbgNode->getOperand(Elt));
120   return 0;
121 }
122
123 unsigned DIVariable::getNumAddrElements() const {
124   return DbgNode->getNumOperands()-6;
125 }
126
127
128 //===----------------------------------------------------------------------===//
129 // Predicates
130 //===----------------------------------------------------------------------===//
131
132 /// isBasicType - Return true if the specified tag is legal for
133 /// DIBasicType.
134 bool DIDescriptor::isBasicType() const {
135   assert(!isNull() && "Invalid descriptor!");
136   return getTag() == dwarf::DW_TAG_base_type;
137 }
138
139 /// isDerivedType - Return true if the specified tag is legal for DIDerivedType.
140 bool DIDescriptor::isDerivedType() const {
141   assert(!isNull() && "Invalid descriptor!");
142   switch (getTag()) {
143   case dwarf::DW_TAG_typedef:
144   case dwarf::DW_TAG_pointer_type:
145   case dwarf::DW_TAG_reference_type:
146   case dwarf::DW_TAG_const_type:
147   case dwarf::DW_TAG_volatile_type:
148   case dwarf::DW_TAG_restrict_type:
149   case dwarf::DW_TAG_member:
150   case dwarf::DW_TAG_inheritance:
151     return true;
152   default:
153     // CompositeTypes are currently modelled as DerivedTypes.
154     return isCompositeType();
155   }
156 }
157
158 /// isCompositeType - Return true if the specified tag is legal for
159 /// DICompositeType.
160 bool DIDescriptor::isCompositeType() const {
161   assert(!isNull() && "Invalid descriptor!");
162   switch (getTag()) {
163   case dwarf::DW_TAG_array_type:
164   case dwarf::DW_TAG_structure_type:
165   case dwarf::DW_TAG_union_type:
166   case dwarf::DW_TAG_enumeration_type:
167   case dwarf::DW_TAG_vector_type:
168   case dwarf::DW_TAG_subroutine_type:
169   case dwarf::DW_TAG_class_type:
170     return true;
171   default:
172     return false;
173   }
174 }
175
176 /// isVariable - Return true if the specified tag is legal for DIVariable.
177 bool DIDescriptor::isVariable() const {
178   assert(!isNull() && "Invalid descriptor!");
179   switch (getTag()) {
180   case dwarf::DW_TAG_auto_variable:
181   case dwarf::DW_TAG_arg_variable:
182   case dwarf::DW_TAG_return_variable:
183     return true;
184   default:
185     return false;
186   }
187 }
188
189 /// isType - Return true if the specified tag is legal for DIType.
190 bool DIDescriptor::isType() const {
191   return isBasicType() || isCompositeType() || isDerivedType();
192 }
193
194 /// isSubprogram - Return true if the specified tag is legal for
195 /// DISubprogram.
196 bool DIDescriptor::isSubprogram() const {
197   assert(!isNull() && "Invalid descriptor!");
198   return getTag() == dwarf::DW_TAG_subprogram;
199 }
200
201 /// isGlobalVariable - Return true if the specified tag is legal for
202 /// DIGlobalVariable.
203 bool DIDescriptor::isGlobalVariable() const {
204   assert(!isNull() && "Invalid descriptor!");
205   return getTag() == dwarf::DW_TAG_variable;
206 }
207
208 /// isGlobal - Return true if the specified tag is legal for DIGlobal.
209 bool DIDescriptor::isGlobal() const {
210   return isGlobalVariable();
211 }
212
213 /// isScope - Return true if the specified tag is one of the scope
214 /// related tag.
215 bool DIDescriptor::isScope() const {
216   assert(!isNull() && "Invalid descriptor!");
217   switch (getTag()) {
218   case dwarf::DW_TAG_compile_unit:
219   case dwarf::DW_TAG_lexical_block:
220   case dwarf::DW_TAG_subprogram:
221   case dwarf::DW_TAG_namespace:
222     return true;
223   default:
224     break;
225   }
226   return false;
227 }
228
229 /// isCompileUnit - Return true if the specified tag is DW_TAG_compile_unit.
230 bool DIDescriptor::isCompileUnit() const {
231   assert(!isNull() && "Invalid descriptor!");
232   return getTag() == dwarf::DW_TAG_compile_unit;
233 }
234
235 /// isNameSpace - Return true if the specified tag is DW_TAG_namespace.
236 bool DIDescriptor::isNameSpace() const {
237   assert(!isNull() && "Invalid descriptor!");
238   return getTag() == dwarf::DW_TAG_namespace;
239 }
240
241 /// isLexicalBlock - Return true if the specified tag is DW_TAG_lexical_block.
242 bool DIDescriptor::isLexicalBlock() const {
243   assert(!isNull() && "Invalid descriptor!");
244   return getTag() == dwarf::DW_TAG_lexical_block;
245 }
246
247 /// isSubrange - Return true if the specified tag is DW_TAG_subrange_type.
248 bool DIDescriptor::isSubrange() const {
249   assert(!isNull() && "Invalid descriptor!");
250   return getTag() == dwarf::DW_TAG_subrange_type;
251 }
252
253 /// isEnumerator - Return true if the specified tag is DW_TAG_enumerator.
254 bool DIDescriptor::isEnumerator() const {
255   assert(!isNull() && "Invalid descriptor!");
256   return getTag() == dwarf::DW_TAG_enumerator;
257 }
258
259 //===----------------------------------------------------------------------===//
260 // Simple Descriptor Constructors and other Methods
261 //===----------------------------------------------------------------------===//
262
263 DIType::DIType(MDNode *N) : DIDescriptor(N) {
264   if (!N) return;
265   if (!isBasicType() && !isDerivedType() && !isCompositeType()) {
266     DbgNode = 0;
267   }
268 }
269
270 unsigned DIArray::getNumElements() const {
271   assert(DbgNode && "Invalid DIArray");
272   return DbgNode->getNumOperands();
273 }
274
275 /// replaceAllUsesWith - Replace all uses of debug info referenced by
276 /// this descriptor. After this completes, the current debug info value
277 /// is erased.
278 void DIDerivedType::replaceAllUsesWith(DIDescriptor &D) {
279   if (isNull())
280     return;
281
282   assert(!D.isNull() && "Can not replace with null");
283
284   // Since we use a TrackingVH for the node, its easy for clients to manufacture
285   // legitimate situations where they want to replaceAllUsesWith() on something
286   // which, due to uniquing, has merged with the source. We shield clients from
287   // this detail by allowing a value to be replaced with replaceAllUsesWith()
288   // itself.
289   if (getNode() != D.getNode()) {
290     MDNode *Node = DbgNode;
291     Node->replaceAllUsesWith(D.getNode());
292     Node->destroy();
293   }
294 }
295
296 /// Verify - Verify that a compile unit is well formed.
297 bool DICompileUnit::Verify() const {
298   if (isNull())
299     return false;
300   StringRef N = getFilename();
301   if (N.empty())
302     return false;
303   // It is possible that directory and produce string is empty.
304   return true;
305 }
306
307 /// Verify - Verify that a type descriptor is well formed.
308 bool DIType::Verify() const {
309   if (isNull())
310     return false;
311   if (getContext().isNull())
312     return false;
313
314   DICompileUnit CU = getCompileUnit();
315   if (!CU.isNull() && !CU.Verify())
316     return false;
317   return true;
318 }
319
320 /// Verify - Verify that a composite type descriptor is well formed.
321 bool DICompositeType::Verify() const {
322   if (isNull())
323     return false;
324   if (getContext().isNull())
325     return false;
326
327   DICompileUnit CU = getCompileUnit();
328   if (!CU.isNull() && !CU.Verify())
329     return false;
330   return true;
331 }
332
333 /// Verify - Verify that a subprogram descriptor is well formed.
334 bool DISubprogram::Verify() const {
335   if (isNull())
336     return false;
337
338   if (getContext().isNull())
339     return false;
340
341   DICompileUnit CU = getCompileUnit();
342   if (!CU.Verify())
343     return false;
344
345   DICompositeType Ty = getType();
346   if (!Ty.isNull() && !Ty.Verify())
347     return false;
348   return true;
349 }
350
351 /// Verify - Verify that a global variable descriptor is well formed.
352 bool DIGlobalVariable::Verify() const {
353   if (isNull())
354     return false;
355
356   if (getDisplayName().empty())
357     return false;
358
359   if (getContext().isNull())
360     return false;
361
362   DICompileUnit CU = getCompileUnit();
363   if (!CU.isNull() && !CU.Verify())
364     return false;
365
366   DIType Ty = getType();
367   if (!Ty.Verify())
368     return false;
369
370   if (!getGlobal())
371     return false;
372
373   return true;
374 }
375
376 /// Verify - Verify that a variable descriptor is well formed.
377 bool DIVariable::Verify() const {
378   if (isNull())
379     return false;
380
381   if (getContext().isNull())
382     return false;
383
384   DIType Ty = getType();
385   if (!Ty.Verify())
386     return false;
387
388   return true;
389 }
390
391 /// getOriginalTypeSize - If this type is derived from a base type then
392 /// return base type size.
393 uint64_t DIDerivedType::getOriginalTypeSize() const {
394   unsigned Tag = getTag();
395   if (Tag == dwarf::DW_TAG_member || Tag == dwarf::DW_TAG_typedef ||
396       Tag == dwarf::DW_TAG_const_type || Tag == dwarf::DW_TAG_volatile_type ||
397       Tag == dwarf::DW_TAG_restrict_type) {
398     DIType BaseType = getTypeDerivedFrom();
399     // If this type is not derived from any type then take conservative 
400     // approach.
401     if (BaseType.isNull())
402       return getSizeInBits();
403     if (BaseType.isDerivedType())
404       return DIDerivedType(BaseType.getNode()).getOriginalTypeSize();
405     else
406       return BaseType.getSizeInBits();
407   }
408     
409   return getSizeInBits();
410 }
411
412 /// describes - Return true if this subprogram provides debugging
413 /// information for the function F.
414 bool DISubprogram::describes(const Function *F) {
415   assert(F && "Invalid function");
416   StringRef Name = getLinkageName();
417   if (Name.empty())
418     Name = getName();
419   if (F->getName() == Name)
420     return true;
421   return false;
422 }
423
424 StringRef DIScope::getFilename() const {
425   if (isLexicalBlock()) 
426     return DILexicalBlock(DbgNode).getFilename();
427   if (isSubprogram())
428     return DISubprogram(DbgNode).getFilename();
429   if (isCompileUnit())
430     return DICompileUnit(DbgNode).getFilename();
431   if (isNameSpace())
432     return DINameSpace(DbgNode).getFilename();
433   assert(0 && "Invalid DIScope!");
434   return StringRef();
435 }
436
437 StringRef DIScope::getDirectory() const {
438   if (isLexicalBlock()) 
439     return DILexicalBlock(DbgNode).getDirectory();
440   if (isSubprogram())
441     return DISubprogram(DbgNode).getDirectory();
442   if (isCompileUnit())
443     return DICompileUnit(DbgNode).getDirectory();
444   if (isNameSpace())
445     return DINameSpace(DbgNode).getDirectory();
446   assert(0 && "Invalid DIScope!");
447   return StringRef();
448 }
449
450 //===----------------------------------------------------------------------===//
451 // DIDescriptor: dump routines for all descriptors.
452 //===----------------------------------------------------------------------===//
453
454
455 /// dump - Print descriptor.
456 void DIDescriptor::dump() const {
457   dbgs() << "[" << dwarf::TagString(getTag()) << "] ";
458   dbgs().write_hex((intptr_t) &*DbgNode) << ']';
459 }
460
461 /// dump - Print compile unit.
462 void DICompileUnit::dump() const {
463   if (getLanguage())
464     dbgs() << " [" << dwarf::LanguageString(getLanguage()) << "] ";
465
466   dbgs() << " [" << getDirectory() << "/" << getFilename() << " ]";
467 }
468
469 /// dump - Print type.
470 void DIType::dump() const {
471   if (isNull()) return;
472
473   StringRef Res = getName();
474   if (!Res.empty())
475     dbgs() << " [" << Res << "] ";
476
477   unsigned Tag = getTag();
478   dbgs() << " [" << dwarf::TagString(Tag) << "] ";
479
480   // TODO : Print context
481   getCompileUnit().dump();
482   dbgs() << " ["
483          << getLineNumber() << ", "
484          << getSizeInBits() << ", "
485          << getAlignInBits() << ", "
486          << getOffsetInBits()
487          << "] ";
488
489   if (isPrivate())
490     dbgs() << " [private] ";
491   else if (isProtected())
492     dbgs() << " [protected] ";
493
494   if (isForwardDecl())
495     dbgs() << " [fwd] ";
496
497   if (isBasicType())
498     DIBasicType(DbgNode).dump();
499   else if (isDerivedType())
500     DIDerivedType(DbgNode).dump();
501   else if (isCompositeType())
502     DICompositeType(DbgNode).dump();
503   else {
504     dbgs() << "Invalid DIType\n";
505     return;
506   }
507
508   dbgs() << "\n";
509 }
510
511 /// dump - Print basic type.
512 void DIBasicType::dump() const {
513   dbgs() << " [" << dwarf::AttributeEncodingString(getEncoding()) << "] ";
514 }
515
516 /// dump - Print derived type.
517 void DIDerivedType::dump() const {
518   dbgs() << "\n\t Derived From: "; getTypeDerivedFrom().dump();
519 }
520
521 /// dump - Print composite type.
522 void DICompositeType::dump() const {
523   DIArray A = getTypeArray();
524   if (A.isNull())
525     return;
526   dbgs() << " [" << A.getNumElements() << " elements]";
527 }
528
529 /// dump - Print global.
530 void DIGlobal::dump() const {
531   StringRef Res = getName();
532   if (!Res.empty())
533     dbgs() << " [" << Res << "] ";
534
535   unsigned Tag = getTag();
536   dbgs() << " [" << dwarf::TagString(Tag) << "] ";
537
538   // TODO : Print context
539   getCompileUnit().dump();
540   dbgs() << " [" << getLineNumber() << "] ";
541
542   if (isLocalToUnit())
543     dbgs() << " [local] ";
544
545   if (isDefinition())
546     dbgs() << " [def] ";
547
548   if (isGlobalVariable())
549     DIGlobalVariable(DbgNode).dump();
550
551   dbgs() << "\n";
552 }
553
554 /// dump - Print subprogram.
555 void DISubprogram::dump() const {
556   StringRef Res = getName();
557   if (!Res.empty())
558     dbgs() << " [" << Res << "] ";
559
560   unsigned Tag = getTag();
561   dbgs() << " [" << dwarf::TagString(Tag) << "] ";
562
563   // TODO : Print context
564   getCompileUnit().dump();
565   dbgs() << " [" << getLineNumber() << "] ";
566
567   if (isLocalToUnit())
568     dbgs() << " [local] ";
569
570   if (isDefinition())
571     dbgs() << " [def] ";
572
573   dbgs() << "\n";
574 }
575
576 /// dump - Print global variable.
577 void DIGlobalVariable::dump() const {
578   dbgs() << " [";
579   getGlobal()->dump();
580   dbgs() << "] ";
581 }
582
583 /// dump - Print variable.
584 void DIVariable::dump() const {
585   StringRef Res = getName();
586   if (!Res.empty())
587     dbgs() << " [" << Res << "] ";
588
589   getCompileUnit().dump();
590   dbgs() << " [" << getLineNumber() << "] ";
591   getType().dump();
592   dbgs() << "\n";
593
594   // FIXME: Dump complex addresses
595 }
596
597 //===----------------------------------------------------------------------===//
598 // DIFactory: Basic Helpers
599 //===----------------------------------------------------------------------===//
600
601 DIFactory::DIFactory(Module &m)
602   : M(m), VMContext(M.getContext()), DeclareFn(0), ValueFn(0) {}
603
604 Constant *DIFactory::GetTagConstant(unsigned TAG) {
605   assert((TAG & LLVMDebugVersionMask) == 0 &&
606          "Tag too large for debug encoding!");
607   return ConstantInt::get(Type::getInt32Ty(VMContext), TAG | LLVMDebugVersion);
608 }
609
610 //===----------------------------------------------------------------------===//
611 // DIFactory: Primary Constructors
612 //===----------------------------------------------------------------------===//
613
614 /// GetOrCreateArray - Create an descriptor for an array of descriptors.
615 /// This implicitly uniques the arrays created.
616 DIArray DIFactory::GetOrCreateArray(DIDescriptor *Tys, unsigned NumTys) {
617   SmallVector<Value*, 16> Elts;
618
619   if (NumTys == 0)
620     Elts.push_back(llvm::Constant::getNullValue(Type::getInt32Ty(VMContext)));
621   else
622     for (unsigned i = 0; i != NumTys; ++i)
623       Elts.push_back(Tys[i].getNode());
624
625   return DIArray(MDNode::get(VMContext,Elts.data(), Elts.size()));
626 }
627
628 /// GetOrCreateSubrange - Create a descriptor for a value range.  This
629 /// implicitly uniques the values returned.
630 DISubrange DIFactory::GetOrCreateSubrange(int64_t Lo, int64_t Hi) {
631   Value *Elts[] = {
632     GetTagConstant(dwarf::DW_TAG_subrange_type),
633     ConstantInt::get(Type::getInt64Ty(VMContext), Lo),
634     ConstantInt::get(Type::getInt64Ty(VMContext), Hi)
635   };
636
637   return DISubrange(MDNode::get(VMContext, &Elts[0], 3));
638 }
639
640
641
642 /// CreateCompileUnit - Create a new descriptor for the specified compile
643 /// unit.  Note that this does not unique compile units within the module.
644 DICompileUnit DIFactory::CreateCompileUnit(unsigned LangID,
645                                            StringRef Filename,
646                                            StringRef Directory,
647                                            StringRef Producer,
648                                            bool isMain,
649                                            bool isOptimized,
650                                            StringRef Flags,
651                                            unsigned RunTimeVer) {
652   Value *Elts[] = {
653     GetTagConstant(dwarf::DW_TAG_compile_unit),
654     llvm::Constant::getNullValue(Type::getInt32Ty(VMContext)),
655     ConstantInt::get(Type::getInt32Ty(VMContext), LangID),
656     MDString::get(VMContext, Filename),
657     MDString::get(VMContext, Directory),
658     MDString::get(VMContext, Producer),
659     ConstantInt::get(Type::getInt1Ty(VMContext), isMain),
660     ConstantInt::get(Type::getInt1Ty(VMContext), isOptimized),
661     MDString::get(VMContext, Flags),
662     ConstantInt::get(Type::getInt32Ty(VMContext), RunTimeVer)
663   };
664
665   return DICompileUnit(MDNode::get(VMContext, &Elts[0], 10));
666 }
667
668 /// CreateEnumerator - Create a single enumerator value.
669 DIEnumerator DIFactory::CreateEnumerator(StringRef Name, uint64_t Val){
670   Value *Elts[] = {
671     GetTagConstant(dwarf::DW_TAG_enumerator),
672     MDString::get(VMContext, Name),
673     ConstantInt::get(Type::getInt64Ty(VMContext), Val)
674   };
675   return DIEnumerator(MDNode::get(VMContext, &Elts[0], 3));
676 }
677
678
679 /// CreateBasicType - Create a basic type like int, float, etc.
680 DIBasicType DIFactory::CreateBasicType(DIDescriptor Context,
681                                        StringRef Name,
682                                        DICompileUnit CompileUnit,
683                                        unsigned LineNumber,
684                                        uint64_t SizeInBits,
685                                        uint64_t AlignInBits,
686                                        uint64_t OffsetInBits, unsigned Flags,
687                                        unsigned Encoding) {
688   Value *Elts[] = {
689     GetTagConstant(dwarf::DW_TAG_base_type),
690     Context.getNode(),
691     MDString::get(VMContext, Name),
692     CompileUnit.getNode(),
693     ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber),
694     ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBits),
695     ConstantInt::get(Type::getInt64Ty(VMContext), AlignInBits),
696     ConstantInt::get(Type::getInt64Ty(VMContext), OffsetInBits),
697     ConstantInt::get(Type::getInt32Ty(VMContext), Flags),
698     ConstantInt::get(Type::getInt32Ty(VMContext), Encoding)
699   };
700   return DIBasicType(MDNode::get(VMContext, &Elts[0], 10));
701 }
702
703
704 /// CreateBasicType - Create a basic type like int, float, etc.
705 DIBasicType DIFactory::CreateBasicTypeEx(DIDescriptor Context,
706                                          StringRef Name,
707                                          DICompileUnit CompileUnit,
708                                          unsigned LineNumber,
709                                          Constant *SizeInBits,
710                                          Constant *AlignInBits,
711                                          Constant *OffsetInBits, unsigned Flags,
712                                          unsigned Encoding) {
713   Value *Elts[] = {
714     GetTagConstant(dwarf::DW_TAG_base_type),
715     Context.getNode(),
716     MDString::get(VMContext, Name),
717     CompileUnit.getNode(),
718     ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber),
719     SizeInBits,
720     AlignInBits,
721     OffsetInBits,
722     ConstantInt::get(Type::getInt32Ty(VMContext), Flags),
723     ConstantInt::get(Type::getInt32Ty(VMContext), Encoding)
724   };
725   return DIBasicType(MDNode::get(VMContext, &Elts[0], 10));
726 }
727
728
729 /// CreateDerivedType - Create a derived type like const qualified type,
730 /// pointer, typedef, etc.
731 DIDerivedType DIFactory::CreateDerivedType(unsigned Tag,
732                                            DIDescriptor Context,
733                                            StringRef Name,
734                                            DICompileUnit CompileUnit,
735                                            unsigned LineNumber,
736                                            uint64_t SizeInBits,
737                                            uint64_t AlignInBits,
738                                            uint64_t OffsetInBits,
739                                            unsigned Flags,
740                                            DIType DerivedFrom) {
741   Value *Elts[] = {
742     GetTagConstant(Tag),
743     Context.getNode(),
744     MDString::get(VMContext, Name),
745     CompileUnit.getNode(),
746     ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber),
747     ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBits),
748     ConstantInt::get(Type::getInt64Ty(VMContext), AlignInBits),
749     ConstantInt::get(Type::getInt64Ty(VMContext), OffsetInBits),
750     ConstantInt::get(Type::getInt32Ty(VMContext), Flags),
751     DerivedFrom.getNode(),
752   };
753   return DIDerivedType(MDNode::get(VMContext, &Elts[0], 10));
754 }
755
756
757 /// CreateDerivedType - Create a derived type like const qualified type,
758 /// pointer, typedef, etc.
759 DIDerivedType DIFactory::CreateDerivedTypeEx(unsigned Tag,
760                                              DIDescriptor Context,
761                                              StringRef Name,
762                                              DICompileUnit CompileUnit,
763                                              unsigned LineNumber,
764                                              Constant *SizeInBits,
765                                              Constant *AlignInBits,
766                                              Constant *OffsetInBits,
767                                              unsigned Flags,
768                                              DIType DerivedFrom) {
769   Value *Elts[] = {
770     GetTagConstant(Tag),
771     Context.getNode(),
772     MDString::get(VMContext, Name),
773     CompileUnit.getNode(),
774     ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber),
775     SizeInBits,
776     AlignInBits,
777     OffsetInBits,
778     ConstantInt::get(Type::getInt32Ty(VMContext), Flags),
779     DerivedFrom.getNode(),
780   };
781   return DIDerivedType(MDNode::get(VMContext, &Elts[0], 10));
782 }
783
784
785 /// CreateCompositeType - Create a composite type like array, struct, etc.
786 DICompositeType DIFactory::CreateCompositeType(unsigned Tag,
787                                                DIDescriptor Context,
788                                                StringRef Name,
789                                                DICompileUnit CompileUnit,
790                                                unsigned LineNumber,
791                                                uint64_t SizeInBits,
792                                                uint64_t AlignInBits,
793                                                uint64_t OffsetInBits,
794                                                unsigned Flags,
795                                                DIType DerivedFrom,
796                                                DIArray Elements,
797                                                unsigned RuntimeLang,
798                                                MDNode *ContainingType) {
799
800   Value *Elts[] = {
801     GetTagConstant(Tag),
802     Context.getNode(),
803     MDString::get(VMContext, Name),
804     CompileUnit.getNode(),
805     ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber),
806     ConstantInt::get(Type::getInt64Ty(VMContext), SizeInBits),
807     ConstantInt::get(Type::getInt64Ty(VMContext), AlignInBits),
808     ConstantInt::get(Type::getInt64Ty(VMContext), OffsetInBits),
809     ConstantInt::get(Type::getInt32Ty(VMContext), Flags),
810     DerivedFrom.getNode(),
811     Elements.getNode(),
812     ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang),
813     ContainingType
814   };
815   return DICompositeType(MDNode::get(VMContext, &Elts[0], 13));
816 }
817
818
819 /// CreateCompositeType - Create a composite type like array, struct, etc.
820 DICompositeType DIFactory::CreateCompositeTypeEx(unsigned Tag,
821                                                  DIDescriptor Context,
822                                                  StringRef Name,
823                                                  DICompileUnit CompileUnit,
824                                                  unsigned LineNumber,
825                                                  Constant *SizeInBits,
826                                                  Constant *AlignInBits,
827                                                  Constant *OffsetInBits,
828                                                  unsigned Flags,
829                                                  DIType DerivedFrom,
830                                                  DIArray Elements,
831                                                  unsigned RuntimeLang) {
832
833   Value *Elts[] = {
834     GetTagConstant(Tag),
835     Context.getNode(),
836     MDString::get(VMContext, Name),
837     CompileUnit.getNode(),
838     ConstantInt::get(Type::getInt32Ty(VMContext), LineNumber),
839     SizeInBits,
840     AlignInBits,
841     OffsetInBits,
842     ConstantInt::get(Type::getInt32Ty(VMContext), Flags),
843     DerivedFrom.getNode(),
844     Elements.getNode(),
845     ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang)
846   };
847   return DICompositeType(MDNode::get(VMContext, &Elts[0], 12));
848 }
849
850
851 /// CreateSubprogram - Create a new descriptor for the specified subprogram.
852 /// See comments in DISubprogram for descriptions of these fields.  This
853 /// method does not unique the generated descriptors.
854 DISubprogram DIFactory::CreateSubprogram(DIDescriptor Context,
855                                          StringRef Name,
856                                          StringRef DisplayName,
857                                          StringRef LinkageName,
858                                          DICompileUnit CompileUnit,
859                                          unsigned LineNo, DIType Ty,
860                                          bool isLocalToUnit,
861                                          bool isDefinition,
862                                          unsigned VK, unsigned VIndex,
863                                          DIType ContainingType) {
864
865   Value *Elts[] = {
866     GetTagConstant(dwarf::DW_TAG_subprogram),
867     llvm::Constant::getNullValue(Type::getInt32Ty(VMContext)),
868     Context.getNode(),
869     MDString::get(VMContext, Name),
870     MDString::get(VMContext, DisplayName),
871     MDString::get(VMContext, LinkageName),
872     CompileUnit.getNode(),
873     ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
874     Ty.getNode(),
875     ConstantInt::get(Type::getInt1Ty(VMContext), isLocalToUnit),
876     ConstantInt::get(Type::getInt1Ty(VMContext), isDefinition),
877     ConstantInt::get(Type::getInt32Ty(VMContext), (unsigned)VK),
878     ConstantInt::get(Type::getInt32Ty(VMContext), VIndex),
879     ContainingType.getNode()
880   };
881   return DISubprogram(MDNode::get(VMContext, &Elts[0], 14));
882 }
883
884 /// CreateSubprogramDefinition - Create new subprogram descriptor for the
885 /// given declaration. 
886 DISubprogram DIFactory::CreateSubprogramDefinition(DISubprogram &SPDeclaration) {
887   if (SPDeclaration.isDefinition())
888     return DISubprogram(SPDeclaration.getNode());
889
890   MDNode *DeclNode = SPDeclaration.getNode();
891   Value *Elts[] = {
892     GetTagConstant(dwarf::DW_TAG_subprogram),
893     llvm::Constant::getNullValue(Type::getInt32Ty(VMContext)),
894     DeclNode->getOperand(2), // Context
895     DeclNode->getOperand(3), // Name
896     DeclNode->getOperand(4), // DisplayName
897     DeclNode->getOperand(5), // LinkageName
898     DeclNode->getOperand(6), // CompileUnit
899     DeclNode->getOperand(7), // LineNo
900     DeclNode->getOperand(8), // Type
901     DeclNode->getOperand(9), // isLocalToUnit
902     ConstantInt::get(Type::getInt1Ty(VMContext), true),
903     DeclNode->getOperand(11), // Virtuality
904     DeclNode->getOperand(12), // VIndex
905     DeclNode->getOperand(13)  // Containting Type
906   };
907   return DISubprogram(MDNode::get(VMContext, &Elts[0], 14));
908 }
909
910 /// CreateGlobalVariable - Create a new descriptor for the specified global.
911 DIGlobalVariable
912 DIFactory::CreateGlobalVariable(DIDescriptor Context, StringRef Name,
913                                 StringRef DisplayName,
914                                 StringRef LinkageName,
915                                 DICompileUnit CompileUnit,
916                                 unsigned LineNo, DIType Ty,bool isLocalToUnit,
917                                 bool isDefinition, llvm::GlobalVariable *Val) {
918   Value *Elts[] = {
919     GetTagConstant(dwarf::DW_TAG_variable),
920     llvm::Constant::getNullValue(Type::getInt32Ty(VMContext)),
921     Context.getNode(),
922     MDString::get(VMContext, Name),
923     MDString::get(VMContext, DisplayName),
924     MDString::get(VMContext, LinkageName),
925     CompileUnit.getNode(),
926     ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
927     Ty.getNode(),
928     ConstantInt::get(Type::getInt1Ty(VMContext), isLocalToUnit),
929     ConstantInt::get(Type::getInt1Ty(VMContext), isDefinition),
930     Val
931   };
932
933   Value *const *Vs = &Elts[0];
934   MDNode *Node = MDNode::get(VMContext,Vs, 12);
935
936   // Create a named metadata so that we do not lose this mdnode.
937   NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.gv");
938   NMD->addOperand(Node);
939
940   return DIGlobalVariable(Node);
941 }
942
943
944 /// CreateVariable - Create a new descriptor for the specified variable.
945 DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context,
946                                      StringRef Name,
947                                      DICompileUnit CompileUnit, unsigned LineNo,
948                                      DIType Ty) {
949   Value *Elts[] = {
950     GetTagConstant(Tag),
951     Context.getNode(),
952     MDString::get(VMContext, Name),
953     CompileUnit.getNode(),
954     ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
955     Ty.getNode(),
956   };
957   return DIVariable(MDNode::get(VMContext, &Elts[0], 6));
958 }
959
960
961 /// CreateComplexVariable - Create a new descriptor for the specified variable
962 /// which has a complex address expression for its address.
963 DIVariable DIFactory::CreateComplexVariable(unsigned Tag, DIDescriptor Context,
964                                             const std::string &Name,
965                                             DICompileUnit CompileUnit,
966                                             unsigned LineNo,
967                                             DIType Ty, 
968                                             SmallVector<Value *, 9> &addr) {
969   SmallVector<Value *, 9> Elts;
970   Elts.push_back(GetTagConstant(Tag));
971   Elts.push_back(Context.getNode());
972   Elts.push_back(MDString::get(VMContext, Name));
973   Elts.push_back(CompileUnit.getNode());
974   Elts.push_back(ConstantInt::get(Type::getInt32Ty(VMContext), LineNo));
975   Elts.push_back(Ty.getNode());
976   Elts.insert(Elts.end(), addr.begin(), addr.end());
977
978   return DIVariable(MDNode::get(VMContext, &Elts[0], 6+addr.size()));
979 }
980
981
982 /// CreateBlock - This creates a descriptor for a lexical block with the
983 /// specified parent VMContext.
984 DILexicalBlock DIFactory::CreateLexicalBlock(DIDescriptor Context) {
985   Value *Elts[] = {
986     GetTagConstant(dwarf::DW_TAG_lexical_block),
987     Context.getNode()
988   };
989   return DILexicalBlock(MDNode::get(VMContext, &Elts[0], 2));
990 }
991
992 /// CreateNameSpace - This creates new descriptor for a namespace
993 /// with the specified parent context.
994 DINameSpace DIFactory::CreateNameSpace(DIDescriptor Context, StringRef Name,
995                                        DICompileUnit CompileUnit, 
996                                        unsigned LineNo) {
997   Value *Elts[] = {
998     GetTagConstant(dwarf::DW_TAG_namespace),
999     Context.getNode(),
1000     MDString::get(VMContext, Name),
1001     CompileUnit.getNode(),
1002     ConstantInt::get(Type::getInt32Ty(VMContext), LineNo)
1003   };
1004   return DINameSpace(MDNode::get(VMContext, &Elts[0], 5));
1005 }
1006
1007 /// CreateLocation - Creates a debug info location.
1008 DILocation DIFactory::CreateLocation(unsigned LineNo, unsigned ColumnNo,
1009                                      DIScope S, DILocation OrigLoc) {
1010   Value *Elts[] = {
1011     ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
1012     ConstantInt::get(Type::getInt32Ty(VMContext), ColumnNo),
1013     S.getNode(),
1014     OrigLoc.getNode(),
1015   };
1016   return DILocation(MDNode::get(VMContext, &Elts[0], 4));
1017 }
1018
1019 /// CreateLocation - Creates a debug info location.
1020 DILocation DIFactory::CreateLocation(unsigned LineNo, unsigned ColumnNo,
1021                                      DIScope S, MDNode *OrigLoc) {
1022  Value *Elts[] = {
1023     ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
1024     ConstantInt::get(Type::getInt32Ty(VMContext), ColumnNo),
1025     S.getNode(),
1026     OrigLoc
1027   };
1028   return DILocation(MDNode::get(VMContext, &Elts[0], 4));
1029 }
1030
1031 //===----------------------------------------------------------------------===//
1032 // DIFactory: Routines for inserting code into a function
1033 //===----------------------------------------------------------------------===//
1034
1035 /// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
1036 Instruction *DIFactory::InsertDeclare(Value *Storage, DIVariable D,
1037                                       Instruction *InsertBefore) {
1038   assert(Storage && "no storage passed to dbg.declare");
1039   assert(D.getNode() && "empty DIVariable passed to dbg.declare");
1040   if (!DeclareFn)
1041     DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
1042
1043   Value *Args[] = { MDNode::get(Storage->getContext(), &Storage, 1),
1044                     D.getNode() };
1045   return CallInst::Create(DeclareFn, Args, Args+2, "", InsertBefore);
1046 }
1047
1048 /// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
1049 Instruction *DIFactory::InsertDeclare(Value *Storage, DIVariable D,
1050                                       BasicBlock *InsertAtEnd) {
1051   assert(Storage && "no storage passed to dbg.declare");
1052   assert(D.getNode() && "empty DIVariable passed to dbg.declare");
1053   if (!DeclareFn)
1054     DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);
1055
1056   Value *Args[] = { MDNode::get(Storage->getContext(), &Storage, 1),
1057                     D.getNode() };
1058   return CallInst::Create(DeclareFn, Args, Args+2, "", InsertAtEnd);
1059 }
1060
1061 /// InsertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
1062 Instruction *DIFactory::InsertDbgValueIntrinsic(Value *V, uint64_t Offset,
1063                                                 DIVariable D,
1064                                                 Instruction *InsertBefore) {
1065   assert(V && "no value passed to dbg.value");
1066   assert(D.getNode() && "empty DIVariable passed to dbg.value");
1067   if (!ValueFn)
1068     ValueFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_value);
1069
1070   Value *Args[] = { MDNode::get(V->getContext(), &V, 1),
1071                     ConstantInt::get(Type::getInt64Ty(V->getContext()), Offset),
1072                     D.getNode() };
1073   return CallInst::Create(ValueFn, Args, Args+3, "", InsertBefore);
1074 }
1075
1076 /// InsertDbgValueIntrinsic - Insert a new llvm.dbg.value intrinsic call.
1077 Instruction *DIFactory::InsertDbgValueIntrinsic(Value *V, uint64_t Offset,
1078                                                 DIVariable D,
1079                                                 BasicBlock *InsertAtEnd) {
1080   assert(V && "no value passed to dbg.value");
1081   assert(D.getNode() && "empty DIVariable passed to dbg.value");
1082   if (!ValueFn)
1083     ValueFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_value);
1084
1085   Value *Args[] = { MDNode::get(V->getContext(), &V, 1), 
1086                     ConstantInt::get(Type::getInt64Ty(V->getContext()), Offset),
1087                     D.getNode() };
1088   return CallInst::Create(ValueFn, Args, Args+3, "", InsertAtEnd);
1089 }
1090
1091 //===----------------------------------------------------------------------===//
1092 // DebugInfoFinder implementations.
1093 //===----------------------------------------------------------------------===//
1094
1095 /// processModule - Process entire module and collect debug info.
1096 void DebugInfoFinder::processModule(Module &M) {
1097   unsigned MDDbgKind = M.getMDKindID("dbg");
1098
1099   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
1100     for (Function::iterator FI = (*I).begin(), FE = (*I).end(); FI != FE; ++FI)
1101       for (BasicBlock::iterator BI = (*FI).begin(), BE = (*FI).end(); BI != BE;
1102            ++BI) {
1103         if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(BI))
1104           processDeclare(DDI);
1105         else if (MDNode *L = BI->getMetadata(MDDbgKind)) 
1106           processLocation(DILocation(L));
1107       }
1108
1109   NamedMDNode *NMD = M.getNamedMetadata("llvm.dbg.gv");
1110   if (!NMD)
1111     return;
1112
1113   for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1114     DIGlobalVariable DIG(cast<MDNode>(NMD->getOperand(i)));
1115     if (addGlobalVariable(DIG)) {
1116       addCompileUnit(DIG.getCompileUnit());
1117       processType(DIG.getType());
1118     }
1119   }
1120 }
1121
1122 /// processLocation - Process DILocation.
1123 void DebugInfoFinder::processLocation(DILocation Loc) {
1124   if (Loc.isNull()) return;
1125   DIScope S(Loc.getScope().getNode());
1126   if (S.isNull()) return;
1127   if (S.isCompileUnit())
1128     addCompileUnit(DICompileUnit(S.getNode()));
1129   else if (S.isSubprogram())
1130     processSubprogram(DISubprogram(S.getNode()));
1131   else if (S.isLexicalBlock())
1132     processLexicalBlock(DILexicalBlock(S.getNode()));
1133   processLocation(Loc.getOrigLocation());
1134 }
1135
1136 /// processType - Process DIType.
1137 void DebugInfoFinder::processType(DIType DT) {
1138   if (!addType(DT))
1139     return;
1140
1141   addCompileUnit(DT.getCompileUnit());
1142   if (DT.isCompositeType()) {
1143     DICompositeType DCT(DT.getNode());
1144     processType(DCT.getTypeDerivedFrom());
1145     DIArray DA = DCT.getTypeArray();
1146     if (!DA.isNull())
1147       for (unsigned i = 0, e = DA.getNumElements(); i != e; ++i) {
1148         DIDescriptor D = DA.getElement(i);
1149         DIType TyE = DIType(D.getNode());
1150         if (!TyE.isNull())
1151           processType(TyE);
1152         else
1153           processSubprogram(DISubprogram(D.getNode()));
1154       }
1155   } else if (DT.isDerivedType()) {
1156     DIDerivedType DDT(DT.getNode());
1157     if (!DDT.isNull())
1158       processType(DDT.getTypeDerivedFrom());
1159   }
1160 }
1161
1162 /// processLexicalBlock
1163 void DebugInfoFinder::processLexicalBlock(DILexicalBlock LB) {
1164   if (LB.isNull())
1165     return;
1166   DIScope Context = LB.getContext();
1167   if (Context.isLexicalBlock())
1168     return processLexicalBlock(DILexicalBlock(Context.getNode()));
1169   else
1170     return processSubprogram(DISubprogram(Context.getNode()));
1171 }
1172
1173 /// processSubprogram - Process DISubprogram.
1174 void DebugInfoFinder::processSubprogram(DISubprogram SP) {
1175   if (SP.isNull())
1176     return;
1177   if (!addSubprogram(SP))
1178     return;
1179   addCompileUnit(SP.getCompileUnit());
1180   processType(SP.getType());
1181 }
1182
1183 /// processDeclare - Process DbgDeclareInst.
1184 void DebugInfoFinder::processDeclare(DbgDeclareInst *DDI) {
1185   DIVariable DV(cast<MDNode>(DDI->getVariable()));
1186   if (DV.isNull())
1187     return;
1188
1189   if (!NodesSeen.insert(DV.getNode()))
1190     return;
1191
1192   addCompileUnit(DV.getCompileUnit());
1193   processType(DV.getType());
1194 }
1195
1196 /// addType - Add type into Tys.
1197 bool DebugInfoFinder::addType(DIType DT) {
1198   if (DT.isNull())
1199     return false;
1200
1201   if (!NodesSeen.insert(DT.getNode()))
1202     return false;
1203
1204   TYs.push_back(DT.getNode());
1205   return true;
1206 }
1207
1208 /// addCompileUnit - Add compile unit into CUs.
1209 bool DebugInfoFinder::addCompileUnit(DICompileUnit CU) {
1210   if (CU.isNull())
1211     return false;
1212
1213   if (!NodesSeen.insert(CU.getNode()))
1214     return false;
1215
1216   CUs.push_back(CU.getNode());
1217   return true;
1218 }
1219
1220 /// addGlobalVariable - Add global variable into GVs.
1221 bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable DIG) {
1222   if (DIG.isNull())
1223     return false;
1224
1225   if (!NodesSeen.insert(DIG.getNode()))
1226     return false;
1227
1228   GVs.push_back(DIG.getNode());
1229   return true;
1230 }
1231
1232 // addSubprogram - Add subprgoram into SPs.
1233 bool DebugInfoFinder::addSubprogram(DISubprogram SP) {
1234   if (SP.isNull())
1235     return false;
1236
1237   if (!NodesSeen.insert(SP.getNode()))
1238     return false;
1239
1240   SPs.push_back(SP.getNode());
1241   return true;
1242 }
1243
1244 /// Find the debug info descriptor corresponding to this global variable.
1245 static Value *findDbgGlobalDeclare(GlobalVariable *V) {
1246   const Module *M = V->getParent();
1247   NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv");
1248   if (!NMD)
1249     return 0;
1250
1251   for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1252     DIGlobalVariable DIG(cast_or_null<MDNode>(NMD->getOperand(i)));
1253     if (DIG.isNull())
1254       continue;
1255     if (DIG.getGlobal() == V)
1256       return DIG.getNode();
1257   }
1258   return 0;
1259 }
1260
1261 /// Finds the llvm.dbg.declare intrinsic corresponding to this value if any.
1262 /// It looks through pointer casts too.
1263 static const DbgDeclareInst *findDbgDeclare(const Value *V) {
1264   V = V->stripPointerCasts();
1265   
1266   if (!isa<Instruction>(V) && !isa<Argument>(V))
1267     return 0;
1268     
1269   const Function *F = NULL;
1270   if (const Instruction *I = dyn_cast<Instruction>(V))
1271     F = I->getParent()->getParent();
1272   else if (const Argument *A = dyn_cast<Argument>(V))
1273     F = A->getParent();
1274   
1275   for (Function::const_iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
1276     for (BasicBlock::const_iterator BI = (*FI).begin(), BE = (*FI).end();
1277          BI != BE; ++BI)
1278       if (const DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(BI))
1279         if (DDI->getAddress() == V)
1280           return DDI;
1281
1282   return 0;
1283 }
1284
1285 bool llvm::getLocationInfo(const Value *V, std::string &DisplayName,
1286                            std::string &Type, unsigned &LineNo,
1287                            std::string &File, std::string &Dir) {
1288   DICompileUnit Unit;
1289   DIType TypeD;
1290
1291   if (GlobalVariable *GV = dyn_cast<GlobalVariable>(const_cast<Value*>(V))) {
1292     Value *DIGV = findDbgGlobalDeclare(GV);
1293     if (!DIGV) return false;
1294     DIGlobalVariable Var(cast<MDNode>(DIGV));
1295
1296     StringRef D = Var.getDisplayName();
1297     if (!D.empty())
1298       DisplayName = D;
1299     LineNo = Var.getLineNumber();
1300     Unit = Var.getCompileUnit();
1301     TypeD = Var.getType();
1302   } else {
1303     const DbgDeclareInst *DDI = findDbgDeclare(V);
1304     if (!DDI) return false;
1305     DIVariable Var(cast<MDNode>(DDI->getVariable()));
1306
1307     StringRef D = Var.getName();
1308     if (!D.empty())
1309       DisplayName = D;
1310     LineNo = Var.getLineNumber();
1311     Unit = Var.getCompileUnit();
1312     TypeD = Var.getType();
1313   }
1314
1315   StringRef T = TypeD.getName();
1316   if (!T.empty())
1317     Type = T;
1318   StringRef F = Unit.getFilename();
1319   if (!F.empty())
1320     File = F;
1321   StringRef D = Unit.getDirectory();
1322   if (!D.empty())
1323     Dir = D;
1324   return true;
1325 }
1326
1327 /// ExtractDebugLocation - Extract debug location information
1328 /// from DILocation.
1329 DebugLoc llvm::ExtractDebugLocation(DILocation &Loc,
1330                                     DebugLocTracker &DebugLocInfo) {
1331   DenseMap<MDNode *, unsigned>::iterator II
1332     = DebugLocInfo.DebugIdMap.find(Loc.getNode());
1333   if (II != DebugLocInfo.DebugIdMap.end())
1334     return DebugLoc::get(II->second);
1335
1336   // Add a new location entry.
1337   unsigned Id = DebugLocInfo.DebugLocations.size();
1338   DebugLocInfo.DebugLocations.push_back(Loc.getNode());
1339   DebugLocInfo.DebugIdMap[Loc.getNode()] = Id;
1340
1341   return DebugLoc::get(Id);
1342 }
1343
1344 /// getDISubprogram - Find subprogram that is enclosing this scope.
1345 DISubprogram llvm::getDISubprogram(MDNode *Scope) {
1346   DIDescriptor D(Scope);
1347   if (D.isNull())
1348     return DISubprogram();
1349   
1350   if (D.isCompileUnit())
1351     return DISubprogram();
1352   
1353   if (D.isSubprogram())
1354     return DISubprogram(Scope);
1355   
1356   if (D.isLexicalBlock())
1357     return getDISubprogram(DILexicalBlock(Scope).getContext().getNode());
1358   
1359   return DISubprogram();
1360 }
1361
1362 /// getDICompositeType - Find underlying composite type.
1363 DICompositeType llvm::getDICompositeType(DIType T) {
1364   if (T.isNull())
1365     return DICompositeType();
1366   
1367   if (T.isCompositeType())
1368     return DICompositeType(T.getNode());
1369   
1370   if (T.isDerivedType())
1371     return getDICompositeType(DIDerivedType(T.getNode()).getTypeDerivedFrom());
1372   
1373   return DICompositeType();
1374 }