087464de46566da8e174eef93c703446b5334b4a
[oota-llvm.git] / lib / VMCore / Type.cpp
1 //===-- Type.cpp - Implement the Type class -------------------------------===//
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 Type class for the VMCore library.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "LLVMContextImpl.h"
15 #include "llvm/DerivedTypes.h"
16 #include "llvm/Constants.h"
17 #include "llvm/Assembly/Writer.h"
18 #include "llvm/LLVMContext.h"
19 #include "llvm/Metadata.h"
20 #include "llvm/ADT/DepthFirstIterator.h"
21 #include "llvm/ADT/StringExtras.h"
22 #include "llvm/ADT/SCCIterator.h"
23 #include "llvm/ADT/STLExtras.h"
24 #include "llvm/Support/Compiler.h"
25 #include "llvm/Support/Debug.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Support/ManagedStatic.h"
28 #include "llvm/Support/MathExtras.h"
29 #include "llvm/Support/raw_ostream.h"
30 #include "llvm/System/Mutex.h"
31 #include "llvm/System/RWMutex.h"
32 #include "llvm/System/Threading.h"
33 #include <algorithm>
34 #include <cstdarg>
35 using namespace llvm;
36
37 // DEBUG_MERGE_TYPES - Enable this #define to see how and when derived types are
38 // created and later destroyed, all in an effort to make sure that there is only
39 // a single canonical version of a type.
40 //
41 // #define DEBUG_MERGE_TYPES 1
42
43 AbstractTypeUser::~AbstractTypeUser() {}
44
45 void AbstractTypeUser::setType(Value *V, const Type *NewTy) {
46   V->VTy = NewTy;
47 }
48
49 //===----------------------------------------------------------------------===//
50 //                         Type Class Implementation
51 //===----------------------------------------------------------------------===//
52
53 /// Because of the way Type subclasses are allocated, this function is necessary
54 /// to use the correct kind of "delete" operator to deallocate the Type object.
55 /// Some type objects (FunctionTy, StructTy) allocate additional space after 
56 /// the space for their derived type to hold the contained types array of
57 /// PATypeHandles. Using this allocation scheme means all the PATypeHandles are
58 /// allocated with the type object, decreasing allocations and eliminating the
59 /// need for a std::vector to be used in the Type class itself. 
60 /// @brief Type destruction function
61 void Type::destroy() const {
62
63   // Structures and Functions allocate their contained types past the end of
64   // the type object itself. These need to be destroyed differently than the
65   // other types.
66   if (isa<FunctionType>(this) || isa<StructType>(this)) {
67     // First, make sure we destruct any PATypeHandles allocated by these
68     // subclasses.  They must be manually destructed. 
69     for (unsigned i = 0; i < NumContainedTys; ++i)
70       ContainedTys[i].PATypeHandle::~PATypeHandle();
71
72     // Now call the destructor for the subclass directly because we're going
73     // to delete this as an array of char.
74     if (isa<FunctionType>(this))
75       static_cast<const FunctionType*>(this)->FunctionType::~FunctionType();
76     else
77       static_cast<const StructType*>(this)->StructType::~StructType();
78
79     // Finally, remove the memory as an array deallocation of the chars it was
80     // constructed from.
81     operator delete(const_cast<Type *>(this));
82
83     return;
84   }
85
86   // For all the other type subclasses, there is either no contained types or 
87   // just one (all Sequentials). For Sequentials, the PATypeHandle is not
88   // allocated past the type object, its included directly in the SequentialType
89   // class. This means we can safely just do "normal" delete of this object and
90   // all the destructors that need to run will be run.
91   delete this; 
92 }
93
94 const Type *Type::getPrimitiveType(LLVMContext &C, TypeID IDNumber) {
95   switch (IDNumber) {
96   case VoidTyID      : return getVoidTy(C);
97   case FloatTyID     : return getFloatTy(C);
98   case DoubleTyID    : return getDoubleTy(C);
99   case X86_FP80TyID  : return getX86_FP80Ty(C);
100   case FP128TyID     : return getFP128Ty(C);
101   case PPC_FP128TyID : return getPPC_FP128Ty(C);
102   case LabelTyID     : return getLabelTy(C);
103   case MetadataTyID  : return getMetadataTy(C);
104   default:
105     return 0;
106   }
107 }
108
109 const Type *Type::getVAArgsPromotedType(LLVMContext &C) const {
110   if (ID == IntegerTyID && getSubclassData() < 32)
111     return Type::getInt32Ty(C);
112   else if (ID == FloatTyID)
113     return Type::getDoubleTy(C);
114   else
115     return this;
116 }
117
118 /// getScalarType - If this is a vector type, return the element type,
119 /// otherwise return this.
120 const Type *Type::getScalarType() const {
121   if (const VectorType *VTy = dyn_cast<VectorType>(this))
122     return VTy->getElementType();
123   return this;
124 }
125
126 /// isIntOrIntVector - Return true if this is an integer type or a vector of
127 /// integer types.
128 ///
129 bool Type::isIntOrIntVector() const {
130   if (isInteger())
131     return true;
132   if (ID != Type::VectorTyID) return false;
133   
134   return cast<VectorType>(this)->getElementType()->isInteger();
135 }
136
137 /// isFPOrFPVector - Return true if this is a FP type or a vector of FP types.
138 ///
139 bool Type::isFPOrFPVector() const {
140   if (ID == Type::FloatTyID || ID == Type::DoubleTyID || 
141       ID == Type::FP128TyID || ID == Type::X86_FP80TyID || 
142       ID == Type::PPC_FP128TyID)
143     return true;
144   if (ID != Type::VectorTyID) return false;
145   
146   return cast<VectorType>(this)->getElementType()->isFloatingPoint();
147 }
148
149 // canLosslesslyBitCastTo - Return true if this type can be converted to
150 // 'Ty' without any reinterpretation of bits.  For example, i8* to i32*.
151 //
152 bool Type::canLosslesslyBitCastTo(const Type *Ty) const {
153   // Identity cast means no change so return true
154   if (this == Ty) 
155     return true;
156   
157   // They are not convertible unless they are at least first class types
158   if (!this->isFirstClassType() || !Ty->isFirstClassType())
159     return false;
160
161   // Vector -> Vector conversions are always lossless if the two vector types
162   // have the same size, otherwise not.
163   if (const VectorType *thisPTy = dyn_cast<VectorType>(this))
164     if (const VectorType *thatPTy = dyn_cast<VectorType>(Ty))
165       return thisPTy->getBitWidth() == thatPTy->getBitWidth();
166
167   // At this point we have only various mismatches of the first class types
168   // remaining and ptr->ptr. Just select the lossless conversions. Everything
169   // else is not lossless.
170   if (isa<PointerType>(this))
171     return isa<PointerType>(Ty);
172   return false;  // Other types have no identity values
173 }
174
175 unsigned Type::getPrimitiveSizeInBits() const {
176   switch (getTypeID()) {
177   case Type::FloatTyID: return 32;
178   case Type::DoubleTyID: return 64;
179   case Type::X86_FP80TyID: return 80;
180   case Type::FP128TyID: return 128;
181   case Type::PPC_FP128TyID: return 128;
182   case Type::IntegerTyID: return cast<IntegerType>(this)->getBitWidth();
183   case Type::VectorTyID:  return cast<VectorType>(this)->getBitWidth();
184   default: return 0;
185   }
186 }
187
188 /// getScalarSizeInBits - If this is a vector type, return the
189 /// getPrimitiveSizeInBits value for the element type. Otherwise return the
190 /// getPrimitiveSizeInBits value for this type.
191 unsigned Type::getScalarSizeInBits() const {
192   return getScalarType()->getPrimitiveSizeInBits();
193 }
194
195 /// getFPMantissaWidth - Return the width of the mantissa of this type.  This
196 /// is only valid on floating point types.  If the FP type does not
197 /// have a stable mantissa (e.g. ppc long double), this method returns -1.
198 int Type::getFPMantissaWidth() const {
199   if (const VectorType *VTy = dyn_cast<VectorType>(this))
200     return VTy->getElementType()->getFPMantissaWidth();
201   assert(isFloatingPoint() && "Not a floating point type!");
202   if (ID == FloatTyID) return 24;
203   if (ID == DoubleTyID) return 53;
204   if (ID == X86_FP80TyID) return 64;
205   if (ID == FP128TyID) return 113;
206   assert(ID == PPC_FP128TyID && "unknown fp type");
207   return -1;
208 }
209
210 /// isSizedDerivedType - Derived types like structures and arrays are sized
211 /// iff all of the members of the type are sized as well.  Since asking for
212 /// their size is relatively uncommon, move this operation out of line.
213 bool Type::isSizedDerivedType() const {
214   if (isa<IntegerType>(this))
215     return true;
216
217   if (const ArrayType *ATy = dyn_cast<ArrayType>(this))
218     return ATy->getElementType()->isSized();
219
220   if (const VectorType *PTy = dyn_cast<VectorType>(this))
221     return PTy->getElementType()->isSized();
222
223   if (!isa<StructType>(this)) 
224     return false;
225
226   // Okay, our struct is sized if all of the elements are...
227   for (subtype_iterator I = subtype_begin(), E = subtype_end(); I != E; ++I)
228     if (!(*I)->isSized()) 
229       return false;
230
231   return true;
232 }
233
234 /// getForwardedTypeInternal - This method is used to implement the union-find
235 /// algorithm for when a type is being forwarded to another type.
236 const Type *Type::getForwardedTypeInternal() const {
237   assert(ForwardType && "This type is not being forwarded to another type!");
238
239   // Check to see if the forwarded type has been forwarded on.  If so, collapse
240   // the forwarding links.
241   const Type *RealForwardedType = ForwardType->getForwardedType();
242   if (!RealForwardedType)
243     return ForwardType;  // No it's not forwarded again
244
245   // Yes, it is forwarded again.  First thing, add the reference to the new
246   // forward type.
247   if (RealForwardedType->isAbstract())
248     cast<DerivedType>(RealForwardedType)->addRef();
249
250   // Now drop the old reference.  This could cause ForwardType to get deleted.
251   cast<DerivedType>(ForwardType)->dropRef();
252
253   // Return the updated type.
254   ForwardType = RealForwardedType;
255   return ForwardType;
256 }
257
258 void Type::refineAbstractType(const DerivedType *OldTy, const Type *NewTy) {
259   llvm_unreachable("Attempting to refine a derived type!");
260 }
261 void Type::typeBecameConcrete(const DerivedType *AbsTy) {
262   llvm_unreachable("DerivedType is already a concrete type!");
263 }
264
265
266 std::string Type::getDescription() const {
267   LLVMContextImpl *pImpl = getContext().pImpl;
268   TypePrinting &Map =
269     isAbstract() ?
270       pImpl->AbstractTypeDescriptions :
271       pImpl->ConcreteTypeDescriptions;
272   
273   std::string DescStr;
274   raw_string_ostream DescOS(DescStr);
275   Map.print(this, DescOS);
276   return DescOS.str();
277 }
278
279
280 bool StructType::indexValid(const Value *V) const {
281   // Structure indexes require 32-bit integer constants.
282   if (V->getType() == Type::getInt32Ty(V->getContext()))
283     if (const ConstantInt *CU = dyn_cast<ConstantInt>(V))
284       return indexValid(CU->getZExtValue());
285   return false;
286 }
287
288 bool StructType::indexValid(unsigned V) const {
289   return V < NumContainedTys;
290 }
291
292 // getTypeAtIndex - Given an index value into the type, return the type of the
293 // element.  For a structure type, this must be a constant value...
294 //
295 const Type *StructType::getTypeAtIndex(const Value *V) const {
296   unsigned Idx = (unsigned)cast<ConstantInt>(V)->getZExtValue();
297   return getTypeAtIndex(Idx);
298 }
299
300 const Type *StructType::getTypeAtIndex(unsigned Idx) const {
301   assert(indexValid(Idx) && "Invalid structure index!");
302   return ContainedTys[Idx];
303 }
304
305 //===----------------------------------------------------------------------===//
306 //                          Primitive 'Type' data
307 //===----------------------------------------------------------------------===//
308
309 const Type *Type::getVoidTy(LLVMContext &C) {
310   return &C.pImpl->VoidTy;
311 }
312
313 const Type *Type::getLabelTy(LLVMContext &C) {
314   return &C.pImpl->LabelTy;
315 }
316
317 const Type *Type::getFloatTy(LLVMContext &C) {
318   return &C.pImpl->FloatTy;
319 }
320
321 const Type *Type::getDoubleTy(LLVMContext &C) {
322   return &C.pImpl->DoubleTy;
323 }
324
325 const Type *Type::getMetadataTy(LLVMContext &C) {
326   return &C.pImpl->MetadataTy;
327 }
328
329 const Type *Type::getX86_FP80Ty(LLVMContext &C) {
330   return &C.pImpl->X86_FP80Ty;
331 }
332
333 const Type *Type::getFP128Ty(LLVMContext &C) {
334   return &C.pImpl->FP128Ty;
335 }
336
337 const Type *Type::getPPC_FP128Ty(LLVMContext &C) {
338   return &C.pImpl->PPC_FP128Ty;
339 }
340
341 const IntegerType *Type::getInt1Ty(LLVMContext &C) {
342   return &C.pImpl->Int1Ty;
343 }
344
345 const IntegerType *Type::getInt8Ty(LLVMContext &C) {
346   return &C.pImpl->Int8Ty;
347 }
348
349 const IntegerType *Type::getInt16Ty(LLVMContext &C) {
350   return &C.pImpl->Int16Ty;
351 }
352
353 const IntegerType *Type::getInt32Ty(LLVMContext &C) {
354   return &C.pImpl->Int32Ty;
355 }
356
357 const IntegerType *Type::getInt64Ty(LLVMContext &C) {
358   return &C.pImpl->Int64Ty;
359 }
360
361 //===----------------------------------------------------------------------===//
362 //                          Derived Type Constructors
363 //===----------------------------------------------------------------------===//
364
365 /// isValidReturnType - Return true if the specified type is valid as a return
366 /// type.
367 bool FunctionType::isValidReturnType(const Type *RetTy) {
368   return RetTy->getTypeID() != LabelTyID &&
369          RetTy->getTypeID() != MetadataTyID;
370 }
371
372 /// isValidArgumentType - Return true if the specified type is valid as an
373 /// argument type.
374 bool FunctionType::isValidArgumentType(const Type *ArgTy) {
375   return ArgTy->isFirstClassType() || isa<OpaqueType>(ArgTy);
376 }
377
378 FunctionType::FunctionType(const Type *Result,
379                            const std::vector<const Type*> &Params,
380                            bool IsVarArgs)
381   : DerivedType(Result->getContext(), FunctionTyID), isVarArgs(IsVarArgs) {
382   ContainedTys = reinterpret_cast<PATypeHandle*>(this+1);
383   NumContainedTys = Params.size() + 1; // + 1 for result type
384   assert(isValidReturnType(Result) && "invalid return type for function");
385
386
387   bool isAbstract = Result->isAbstract();
388   new (&ContainedTys[0]) PATypeHandle(Result, this);
389
390   for (unsigned i = 0; i != Params.size(); ++i) {
391     assert(isValidArgumentType(Params[i]) &&
392            "Not a valid type for function argument!");
393     new (&ContainedTys[i+1]) PATypeHandle(Params[i], this);
394     isAbstract |= Params[i]->isAbstract();
395   }
396
397   // Calculate whether or not this type is abstract
398   setAbstract(isAbstract);
399 }
400
401 StructType::StructType(LLVMContext &C, 
402                        const std::vector<const Type*> &Types, bool isPacked)
403   : CompositeType(C, StructTyID) {
404   ContainedTys = reinterpret_cast<PATypeHandle*>(this + 1);
405   NumContainedTys = Types.size();
406   setSubclassData(isPacked);
407   bool isAbstract = false;
408   for (unsigned i = 0; i < Types.size(); ++i) {
409     assert(Types[i] && "<null> type for structure field!");
410     assert(isValidElementType(Types[i]) &&
411            "Invalid type for structure element!");
412     new (&ContainedTys[i]) PATypeHandle(Types[i], this);
413     isAbstract |= Types[i]->isAbstract();
414   }
415
416   // Calculate whether or not this type is abstract
417   setAbstract(isAbstract);
418 }
419
420 ArrayType::ArrayType(const Type *ElType, uint64_t NumEl)
421   : SequentialType(ArrayTyID, ElType) {
422   NumElements = NumEl;
423
424   // Calculate whether or not this type is abstract
425   setAbstract(ElType->isAbstract());
426 }
427
428 VectorType::VectorType(const Type *ElType, unsigned NumEl)
429   : SequentialType(VectorTyID, ElType) {
430   NumElements = NumEl;
431   setAbstract(ElType->isAbstract());
432   assert(NumEl > 0 && "NumEl of a VectorType must be greater than 0");
433   assert(isValidElementType(ElType) &&
434          "Elements of a VectorType must be a primitive type");
435
436 }
437
438
439 PointerType::PointerType(const Type *E, unsigned AddrSpace)
440   : SequentialType(PointerTyID, E) {
441   AddressSpace = AddrSpace;
442   // Calculate whether or not this type is abstract
443   setAbstract(E->isAbstract());
444 }
445
446 OpaqueType::OpaqueType(LLVMContext &C) : DerivedType(C, OpaqueTyID) {
447   setAbstract(true);
448 #ifdef DEBUG_MERGE_TYPES
449   DEBUG(errs() << "Derived new type: " << *this << "\n");
450 #endif
451 }
452
453 void PATypeHolder::destroy() {
454   Ty = 0;
455 }
456
457 // dropAllTypeUses - When this (abstract) type is resolved to be equal to
458 // another (more concrete) type, we must eliminate all references to other
459 // types, to avoid some circular reference problems.
460 void DerivedType::dropAllTypeUses() {
461   if (NumContainedTys != 0) {
462     // The type must stay abstract.  To do this, we insert a pointer to a type
463     // that will never get resolved, thus will always be abstract.
464     static Type *AlwaysOpaqueTy = 0;
465     static PATypeHolder* Holder = 0;
466     Type *tmp = AlwaysOpaqueTy;
467     if (llvm_is_multithreaded()) {
468       sys::MemoryFence();
469       if (!tmp) {
470         llvm_acquire_global_lock();
471         tmp = AlwaysOpaqueTy;
472         if (!tmp) {
473           tmp = OpaqueType::get(getContext());
474           PATypeHolder* tmp2 = new PATypeHolder(tmp);
475           sys::MemoryFence();
476           AlwaysOpaqueTy = tmp;
477           Holder = tmp2;
478         }
479       
480         llvm_release_global_lock();
481       }
482     } else if (!AlwaysOpaqueTy) {
483       AlwaysOpaqueTy = OpaqueType::get(getContext());
484       Holder = new PATypeHolder(AlwaysOpaqueTy);
485     } 
486         
487     ContainedTys[0] = AlwaysOpaqueTy;
488
489     // Change the rest of the types to be Int32Ty's.  It doesn't matter what we
490     // pick so long as it doesn't point back to this type.  We choose something
491     // concrete to avoid overhead for adding to AbstractTypeUser lists and
492     // stuff.
493     const Type *ConcreteTy = Type::getInt32Ty(getContext());
494     for (unsigned i = 1, e = NumContainedTys; i != e; ++i)
495       ContainedTys[i] = ConcreteTy;
496   }
497 }
498
499
500 namespace {
501
502 /// TypePromotionGraph and graph traits - this is designed to allow us to do
503 /// efficient SCC processing of type graphs.  This is the exact same as
504 /// GraphTraits<Type*>, except that we pretend that concrete types have no
505 /// children to avoid processing them.
506 struct TypePromotionGraph {
507   Type *Ty;
508   TypePromotionGraph(Type *T) : Ty(T) {}
509 };
510
511 }
512
513 namespace llvm {
514   template <> struct GraphTraits<TypePromotionGraph> {
515     typedef Type NodeType;
516     typedef Type::subtype_iterator ChildIteratorType;
517
518     static inline NodeType *getEntryNode(TypePromotionGraph G) { return G.Ty; }
519     static inline ChildIteratorType child_begin(NodeType *N) {
520       if (N->isAbstract())
521         return N->subtype_begin();
522       else           // No need to process children of concrete types.
523         return N->subtype_end();
524     }
525     static inline ChildIteratorType child_end(NodeType *N) {
526       return N->subtype_end();
527     }
528   };
529 }
530
531
532 // PromoteAbstractToConcrete - This is a recursive function that walks a type
533 // graph calculating whether or not a type is abstract.
534 //
535 void Type::PromoteAbstractToConcrete() {
536   if (!isAbstract()) return;
537
538   scc_iterator<TypePromotionGraph> SI = scc_begin(TypePromotionGraph(this));
539   scc_iterator<TypePromotionGraph> SE = scc_end  (TypePromotionGraph(this));
540
541   for (; SI != SE; ++SI) {
542     std::vector<Type*> &SCC = *SI;
543
544     // Concrete types are leaves in the tree.  Since an SCC will either be all
545     // abstract or all concrete, we only need to check one type.
546     if (SCC[0]->isAbstract()) {
547       if (isa<OpaqueType>(SCC[0]))
548         return;     // Not going to be concrete, sorry.
549
550       // If all of the children of all of the types in this SCC are concrete,
551       // then this SCC is now concrete as well.  If not, neither this SCC, nor
552       // any parent SCCs will be concrete, so we might as well just exit.
553       for (unsigned i = 0, e = SCC.size(); i != e; ++i)
554         for (Type::subtype_iterator CI = SCC[i]->subtype_begin(),
555                E = SCC[i]->subtype_end(); CI != E; ++CI)
556           if ((*CI)->isAbstract())
557             // If the child type is in our SCC, it doesn't make the entire SCC
558             // abstract unless there is a non-SCC abstract type.
559             if (std::find(SCC.begin(), SCC.end(), *CI) == SCC.end())
560               return;               // Not going to be concrete, sorry.
561
562       // Okay, we just discovered this whole SCC is now concrete, mark it as
563       // such!
564       for (unsigned i = 0, e = SCC.size(); i != e; ++i) {
565         assert(SCC[i]->isAbstract() && "Why are we processing concrete types?");
566
567         SCC[i]->setAbstract(false);
568       }
569
570       for (unsigned i = 0, e = SCC.size(); i != e; ++i) {
571         assert(!SCC[i]->isAbstract() && "Concrete type became abstract?");
572         // The type just became concrete, notify all users!
573         cast<DerivedType>(SCC[i])->notifyUsesThatTypeBecameConcrete();
574       }
575     }
576   }
577 }
578
579
580 //===----------------------------------------------------------------------===//
581 //                      Type Structural Equality Testing
582 //===----------------------------------------------------------------------===//
583
584 // TypesEqual - Two types are considered structurally equal if they have the
585 // same "shape": Every level and element of the types have identical primitive
586 // ID's, and the graphs have the same edges/nodes in them.  Nodes do not have to
587 // be pointer equals to be equivalent though.  This uses an optimistic algorithm
588 // that assumes that two graphs are the same until proven otherwise.
589 //
590 static bool TypesEqual(const Type *Ty, const Type *Ty2,
591                        std::map<const Type *, const Type *> &EqTypes) {
592   if (Ty == Ty2) return true;
593   if (Ty->getTypeID() != Ty2->getTypeID()) return false;
594   if (isa<OpaqueType>(Ty))
595     return false;  // Two unequal opaque types are never equal
596
597   std::map<const Type*, const Type*>::iterator It = EqTypes.find(Ty);
598   if (It != EqTypes.end())
599     return It->second == Ty2;    // Looping back on a type, check for equality
600
601   // Otherwise, add the mapping to the table to make sure we don't get
602   // recursion on the types...
603   EqTypes.insert(It, std::make_pair(Ty, Ty2));
604
605   // Two really annoying special cases that breaks an otherwise nice simple
606   // algorithm is the fact that arraytypes have sizes that differentiates types,
607   // and that function types can be varargs or not.  Consider this now.
608   //
609   if (const IntegerType *ITy = dyn_cast<IntegerType>(Ty)) {
610     const IntegerType *ITy2 = cast<IntegerType>(Ty2);
611     return ITy->getBitWidth() == ITy2->getBitWidth();
612   } else if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
613     const PointerType *PTy2 = cast<PointerType>(Ty2);
614     return PTy->getAddressSpace() == PTy2->getAddressSpace() &&
615            TypesEqual(PTy->getElementType(), PTy2->getElementType(), EqTypes);
616   } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
617     const StructType *STy2 = cast<StructType>(Ty2);
618     if (STy->getNumElements() != STy2->getNumElements()) return false;
619     if (STy->isPacked() != STy2->isPacked()) return false;
620     for (unsigned i = 0, e = STy2->getNumElements(); i != e; ++i)
621       if (!TypesEqual(STy->getElementType(i), STy2->getElementType(i), EqTypes))
622         return false;
623     return true;
624   } else if (const ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
625     const ArrayType *ATy2 = cast<ArrayType>(Ty2);
626     return ATy->getNumElements() == ATy2->getNumElements() &&
627            TypesEqual(ATy->getElementType(), ATy2->getElementType(), EqTypes);
628   } else if (const VectorType *PTy = dyn_cast<VectorType>(Ty)) {
629     const VectorType *PTy2 = cast<VectorType>(Ty2);
630     return PTy->getNumElements() == PTy2->getNumElements() &&
631            TypesEqual(PTy->getElementType(), PTy2->getElementType(), EqTypes);
632   } else if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
633     const FunctionType *FTy2 = cast<FunctionType>(Ty2);
634     if (FTy->isVarArg() != FTy2->isVarArg() ||
635         FTy->getNumParams() != FTy2->getNumParams() ||
636         !TypesEqual(FTy->getReturnType(), FTy2->getReturnType(), EqTypes))
637       return false;
638     for (unsigned i = 0, e = FTy2->getNumParams(); i != e; ++i) {
639       if (!TypesEqual(FTy->getParamType(i), FTy2->getParamType(i), EqTypes))
640         return false;
641     }
642     return true;
643   } else {
644     llvm_unreachable("Unknown derived type!");
645     return false;
646   }
647 }
648
649 static bool TypesEqual(const Type *Ty, const Type *Ty2) {
650   std::map<const Type *, const Type *> EqTypes;
651   return TypesEqual(Ty, Ty2, EqTypes);
652 }
653
654 // AbstractTypeHasCycleThrough - Return true there is a path from CurTy to
655 // TargetTy in the type graph.  We know that Ty is an abstract type, so if we
656 // ever reach a non-abstract type, we know that we don't need to search the
657 // subgraph.
658 static bool AbstractTypeHasCycleThrough(const Type *TargetTy, const Type *CurTy,
659                                 SmallPtrSet<const Type*, 128> &VisitedTypes) {
660   if (TargetTy == CurTy) return true;
661   if (!CurTy->isAbstract()) return false;
662
663   if (!VisitedTypes.insert(CurTy))
664     return false;  // Already been here.
665
666   for (Type::subtype_iterator I = CurTy->subtype_begin(),
667        E = CurTy->subtype_end(); I != E; ++I)
668     if (AbstractTypeHasCycleThrough(TargetTy, *I, VisitedTypes))
669       return true;
670   return false;
671 }
672
673 static bool ConcreteTypeHasCycleThrough(const Type *TargetTy, const Type *CurTy,
674                                 SmallPtrSet<const Type*, 128> &VisitedTypes) {
675   if (TargetTy == CurTy) return true;
676
677   if (!VisitedTypes.insert(CurTy))
678     return false;  // Already been here.
679
680   for (Type::subtype_iterator I = CurTy->subtype_begin(),
681        E = CurTy->subtype_end(); I != E; ++I)
682     if (ConcreteTypeHasCycleThrough(TargetTy, *I, VisitedTypes))
683       return true;
684   return false;
685 }
686
687 /// TypeHasCycleThroughItself - Return true if the specified type has a cycle
688 /// back to itself.
689 static bool TypeHasCycleThroughItself(const Type *Ty) {
690   SmallPtrSet<const Type*, 128> VisitedTypes;
691
692   if (Ty->isAbstract()) {  // Optimized case for abstract types.
693     for (Type::subtype_iterator I = Ty->subtype_begin(), E = Ty->subtype_end();
694          I != E; ++I)
695       if (AbstractTypeHasCycleThrough(Ty, *I, VisitedTypes))
696         return true;
697   } else {
698     for (Type::subtype_iterator I = Ty->subtype_begin(), E = Ty->subtype_end();
699          I != E; ++I)
700       if (ConcreteTypeHasCycleThrough(Ty, *I, VisitedTypes))
701         return true;
702   }
703   return false;
704 }
705
706 //===----------------------------------------------------------------------===//
707 // Function Type Factory and Value Class...
708 //
709 const IntegerType *IntegerType::get(LLVMContext &C, unsigned NumBits) {
710   assert(NumBits >= MIN_INT_BITS && "bitwidth too small");
711   assert(NumBits <= MAX_INT_BITS && "bitwidth too large");
712
713   // Check for the built-in integer types
714   switch (NumBits) {
715     case  1: return cast<IntegerType>(Type::getInt1Ty(C));
716     case  8: return cast<IntegerType>(Type::getInt8Ty(C));
717     case 16: return cast<IntegerType>(Type::getInt16Ty(C));
718     case 32: return cast<IntegerType>(Type::getInt32Ty(C));
719     case 64: return cast<IntegerType>(Type::getInt64Ty(C));
720     default: 
721       break;
722   }
723
724   LLVMContextImpl *pImpl = C.pImpl;
725   
726   IntegerValType IVT(NumBits);
727   IntegerType *ITy = 0;
728   
729   // First, see if the type is already in the table, for which
730   // a reader lock suffices.
731   sys::SmartScopedLock<true> L(pImpl->TypeMapLock);
732   ITy = pImpl->IntegerTypes.get(IVT);
733     
734   if (!ITy) {
735     // Value not found.  Derive a new type!
736     ITy = new IntegerType(C, NumBits);
737     pImpl->IntegerTypes.add(IVT, ITy);
738   }
739 #ifdef DEBUG_MERGE_TYPES
740   DEBUG(errs() << "Derived new type: " << *ITy << "\n");
741 #endif
742   return ITy;
743 }
744
745 bool IntegerType::isPowerOf2ByteWidth() const {
746   unsigned BitWidth = getBitWidth();
747   return (BitWidth > 7) && isPowerOf2_32(BitWidth);
748 }
749
750 APInt IntegerType::getMask() const {
751   return APInt::getAllOnesValue(getBitWidth());
752 }
753
754 FunctionValType FunctionValType::get(const FunctionType *FT) {
755   // Build up a FunctionValType
756   std::vector<const Type *> ParamTypes;
757   ParamTypes.reserve(FT->getNumParams());
758   for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
759     ParamTypes.push_back(FT->getParamType(i));
760   return FunctionValType(FT->getReturnType(), ParamTypes, FT->isVarArg());
761 }
762
763
764 // FunctionType::get - The factory function for the FunctionType class...
765 FunctionType *FunctionType::get(const Type *ReturnType,
766                                 const std::vector<const Type*> &Params,
767                                 bool isVarArg) {
768   FunctionValType VT(ReturnType, Params, isVarArg);
769   FunctionType *FT = 0;
770   
771   LLVMContextImpl *pImpl = ReturnType->getContext().pImpl;
772   
773   sys::SmartScopedLock<true> L(pImpl->TypeMapLock);
774   FT = pImpl->FunctionTypes.get(VT);
775   
776   if (!FT) {
777     FT = (FunctionType*) operator new(sizeof(FunctionType) +
778                                     sizeof(PATypeHandle)*(Params.size()+1));
779     new (FT) FunctionType(ReturnType, Params, isVarArg);
780     pImpl->FunctionTypes.add(VT, FT);
781   }
782
783 #ifdef DEBUG_MERGE_TYPES
784   DEBUG(errs() << "Derived new type: " << FT << "\n");
785 #endif
786   return FT;
787 }
788
789 ArrayType *ArrayType::get(const Type *ElementType, uint64_t NumElements) {
790   assert(ElementType && "Can't get array of <null> types!");
791   assert(isValidElementType(ElementType) && "Invalid type for array element!");
792
793   ArrayValType AVT(ElementType, NumElements);
794   ArrayType *AT = 0;
795
796   LLVMContextImpl *pImpl = ElementType->getContext().pImpl;
797   
798   sys::SmartScopedLock<true> L(pImpl->TypeMapLock);
799   AT = pImpl->ArrayTypes.get(AVT);
800       
801   if (!AT) {
802     // Value not found.  Derive a new type!
803     pImpl->ArrayTypes.add(AVT, AT = new ArrayType(ElementType, NumElements));
804   }
805 #ifdef DEBUG_MERGE_TYPES
806   DEBUG(errs() << "Derived new type: " << *AT << "\n");
807 #endif
808   return AT;
809 }
810
811 bool ArrayType::isValidElementType(const Type *ElemTy) {
812   return ElemTy->getTypeID() != VoidTyID && ElemTy->getTypeID() != LabelTyID &&
813          ElemTy->getTypeID() != MetadataTyID && !isa<FunctionType>(ElemTy);
814 }
815
816 VectorType *VectorType::get(const Type *ElementType, unsigned NumElements) {
817   assert(ElementType && "Can't get vector of <null> types!");
818
819   VectorValType PVT(ElementType, NumElements);
820   VectorType *PT = 0;
821   
822   LLVMContextImpl *pImpl = ElementType->getContext().pImpl;
823   
824   sys::SmartScopedLock<true> L(pImpl->TypeMapLock);
825   PT = pImpl->VectorTypes.get(PVT);
826     
827   if (!PT) {
828     pImpl->VectorTypes.add(PVT, PT = new VectorType(ElementType, NumElements));
829   }
830 #ifdef DEBUG_MERGE_TYPES
831   DEBUG(errs() << "Derived new type: " << *PT << "\n");
832 #endif
833   return PT;
834 }
835
836 bool VectorType::isValidElementType(const Type *ElemTy) {
837   return ElemTy->isInteger() || ElemTy->isFloatingPoint() ||
838          isa<OpaqueType>(ElemTy);
839 }
840
841 //===----------------------------------------------------------------------===//
842 // Struct Type Factory...
843 //
844
845 StructType *StructType::get(LLVMContext &Context,
846                             const std::vector<const Type*> &ETypes, 
847                             bool isPacked) {
848   StructValType STV(ETypes, isPacked);
849   StructType *ST = 0;
850   
851   LLVMContextImpl *pImpl = Context.pImpl;
852   
853   sys::SmartScopedLock<true> L(pImpl->TypeMapLock);
854   ST = pImpl->StructTypes.get(STV);
855     
856   if (!ST) {
857     // Value not found.  Derive a new type!
858     ST = (StructType*) operator new(sizeof(StructType) +
859                                     sizeof(PATypeHandle) * ETypes.size());
860     new (ST) StructType(Context, ETypes, isPacked);
861     pImpl->StructTypes.add(STV, ST);
862   }
863 #ifdef DEBUG_MERGE_TYPES
864   DEBUG(errs() << "Derived new type: " << *ST << "\n");
865 #endif
866   return ST;
867 }
868
869 StructType *StructType::get(LLVMContext &Context, const Type *type, ...) {
870   va_list ap;
871   std::vector<const llvm::Type*> StructFields;
872   va_start(ap, type);
873   while (type) {
874     StructFields.push_back(type);
875     type = va_arg(ap, llvm::Type*);
876   }
877   return llvm::StructType::get(Context, StructFields);
878 }
879
880 bool StructType::isValidElementType(const Type *ElemTy) {
881   return ElemTy->getTypeID() != VoidTyID && ElemTy->getTypeID() != LabelTyID &&
882          ElemTy->getTypeID() != MetadataTyID && !isa<FunctionType>(ElemTy);
883 }
884
885
886 //===----------------------------------------------------------------------===//
887 // Pointer Type Factory...
888 //
889
890 PointerType *PointerType::get(const Type *ValueType, unsigned AddressSpace) {
891   assert(ValueType && "Can't get a pointer to <null> type!");
892   assert(ValueType->getTypeID() != VoidTyID &&
893          "Pointer to void is not valid, use i8* instead!");
894   assert(isValidElementType(ValueType) && "Invalid type for pointer element!");
895   PointerValType PVT(ValueType, AddressSpace);
896
897   PointerType *PT = 0;
898   
899   LLVMContextImpl *pImpl = ValueType->getContext().pImpl;
900   
901   sys::SmartScopedLock<true> L(pImpl->TypeMapLock);
902   PT = pImpl->PointerTypes.get(PVT);
903   
904   if (!PT) {
905     // Value not found.  Derive a new type!
906     pImpl->PointerTypes.add(PVT, PT = new PointerType(ValueType, AddressSpace));
907   }
908 #ifdef DEBUG_MERGE_TYPES
909   DEBUG(errs() << "Derived new type: " << *PT << "\n");
910 #endif
911   return PT;
912 }
913
914 PointerType *Type::getPointerTo(unsigned addrs) const {
915   return PointerType::get(this, addrs);
916 }
917
918 bool PointerType::isValidElementType(const Type *ElemTy) {
919   return ElemTy->getTypeID() != VoidTyID &&
920          ElemTy->getTypeID() != LabelTyID &&
921          ElemTy->getTypeID() != MetadataTyID;
922 }
923
924
925 //===----------------------------------------------------------------------===//
926 //                     Derived Type Refinement Functions
927 //===----------------------------------------------------------------------===//
928
929 // addAbstractTypeUser - Notify an abstract type that there is a new user of
930 // it.  This function is called primarily by the PATypeHandle class.
931 void Type::addAbstractTypeUser(AbstractTypeUser *U) const {
932   assert(isAbstract() && "addAbstractTypeUser: Current type not abstract!");
933   LLVMContextImpl *pImpl = getContext().pImpl;
934   pImpl->AbstractTypeUsersLock.acquire();
935   AbstractTypeUsers.push_back(U);
936   pImpl->AbstractTypeUsersLock.release();
937 }
938
939
940 // removeAbstractTypeUser - Notify an abstract type that a user of the class
941 // no longer has a handle to the type.  This function is called primarily by
942 // the PATypeHandle class.  When there are no users of the abstract type, it
943 // is annihilated, because there is no way to get a reference to it ever again.
944 //
945 void Type::removeAbstractTypeUser(AbstractTypeUser *U) const {
946   LLVMContextImpl *pImpl = getContext().pImpl;
947   pImpl->AbstractTypeUsersLock.acquire();
948   
949   // Search from back to front because we will notify users from back to
950   // front.  Also, it is likely that there will be a stack like behavior to
951   // users that register and unregister users.
952   //
953   unsigned i;
954   for (i = AbstractTypeUsers.size(); AbstractTypeUsers[i-1] != U; --i)
955     assert(i != 0 && "AbstractTypeUser not in user list!");
956
957   --i;  // Convert to be in range 0 <= i < size()
958   assert(i < AbstractTypeUsers.size() && "Index out of range!");  // Wraparound?
959
960   AbstractTypeUsers.erase(AbstractTypeUsers.begin()+i);
961
962 #ifdef DEBUG_MERGE_TYPES
963   DEBUG(errs() << "  remAbstractTypeUser[" << (void*)this << ", "
964                << *this << "][" << i << "] User = " << U << "\n");
965 #endif
966
967   if (AbstractTypeUsers.empty() && getRefCount() == 0 && isAbstract()) {
968 #ifdef DEBUG_MERGE_TYPES
969     DEBUG(errs() << "DELETEing unused abstract type: <" << *this
970                  << ">[" << (void*)this << "]" << "\n");
971 #endif
972   
973   this->destroy();
974   }
975   
976   pImpl->AbstractTypeUsersLock.release();
977 }
978
979 // unlockedRefineAbstractTypeTo - This function is used when it is discovered
980 // that the 'this' abstract type is actually equivalent to the NewType
981 // specified. This causes all users of 'this' to switch to reference the more 
982 // concrete type NewType and for 'this' to be deleted.  Only used for internal
983 // callers.
984 //
985 void DerivedType::unlockedRefineAbstractTypeTo(const Type *NewType) {
986   assert(isAbstract() && "refineAbstractTypeTo: Current type is not abstract!");
987   assert(this != NewType && "Can't refine to myself!");
988   assert(ForwardType == 0 && "This type has already been refined!");
989
990   LLVMContextImpl *pImpl = getContext().pImpl;
991
992   // The descriptions may be out of date.  Conservatively clear them all!
993   pImpl->AbstractTypeDescriptions.clear();
994
995 #ifdef DEBUG_MERGE_TYPES
996   DEBUG(errs() << "REFINING abstract type [" << (void*)this << " "
997                << *this << "] to [" << (void*)NewType << " "
998                << *NewType << "]!\n");
999 #endif
1000
1001   // Make sure to put the type to be refined to into a holder so that if IT gets
1002   // refined, that we will not continue using a dead reference...
1003   //
1004   PATypeHolder NewTy(NewType);
1005   // Any PATypeHolders referring to this type will now automatically forward to
1006   // the type we are resolved to.
1007   ForwardType = NewType;
1008   if (NewType->isAbstract())
1009     cast<DerivedType>(NewType)->addRef();
1010
1011   // Add a self use of the current type so that we don't delete ourself until
1012   // after the function exits.
1013   //
1014   PATypeHolder CurrentTy(this);
1015
1016   // To make the situation simpler, we ask the subclass to remove this type from
1017   // the type map, and to replace any type uses with uses of non-abstract types.
1018   // This dramatically limits the amount of recursive type trouble we can find
1019   // ourselves in.
1020   dropAllTypeUses();
1021
1022   // Iterate over all of the uses of this type, invoking callback.  Each user
1023   // should remove itself from our use list automatically.  We have to check to
1024   // make sure that NewTy doesn't _become_ 'this'.  If it does, resolving types
1025   // will not cause users to drop off of the use list.  If we resolve to ourself
1026   // we succeed!
1027   //
1028   pImpl->AbstractTypeUsersLock.acquire();
1029   while (!AbstractTypeUsers.empty() && NewTy != this) {
1030     AbstractTypeUser *User = AbstractTypeUsers.back();
1031
1032     unsigned OldSize = AbstractTypeUsers.size(); OldSize=OldSize;
1033 #ifdef DEBUG_MERGE_TYPES
1034     DEBUG(errs() << " REFINING user " << OldSize-1 << "[" << (void*)User
1035                  << "] of abstract type [" << (void*)this << " "
1036                  << *this << "] to [" << (void*)NewTy.get() << " "
1037                  << *NewTy << "]!\n");
1038 #endif
1039     User->refineAbstractType(this, NewTy);
1040
1041     assert(AbstractTypeUsers.size() != OldSize &&
1042            "AbsTyUser did not remove self from user list!");
1043   }
1044   pImpl->AbstractTypeUsersLock.release();
1045
1046   // If we were successful removing all users from the type, 'this' will be
1047   // deleted when the last PATypeHolder is destroyed or updated from this type.
1048   // This may occur on exit of this function, as the CurrentTy object is
1049   // destroyed.
1050 }
1051
1052 // refineAbstractTypeTo - This function is used by external callers to notify
1053 // us that this abstract type is equivalent to another type.
1054 //
1055 void DerivedType::refineAbstractTypeTo(const Type *NewType) {
1056   // All recursive calls will go through unlockedRefineAbstractTypeTo,
1057   // to avoid deadlock problems.
1058   sys::SmartScopedLock<true> L(NewType->getContext().pImpl->TypeMapLock);
1059   unlockedRefineAbstractTypeTo(NewType);
1060 }
1061
1062 // notifyUsesThatTypeBecameConcrete - Notify AbstractTypeUsers of this type that
1063 // the current type has transitioned from being abstract to being concrete.
1064 //
1065 void DerivedType::notifyUsesThatTypeBecameConcrete() {
1066 #ifdef DEBUG_MERGE_TYPES
1067   DEBUG(errs() << "typeIsREFINED type: " << (void*)this << " " << *this <<"\n");
1068 #endif
1069
1070   LLVMContextImpl *pImpl = getContext().pImpl;
1071
1072   pImpl->AbstractTypeUsersLock.acquire();
1073   unsigned OldSize = AbstractTypeUsers.size(); OldSize=OldSize;
1074   while (!AbstractTypeUsers.empty()) {
1075     AbstractTypeUser *ATU = AbstractTypeUsers.back();
1076     ATU->typeBecameConcrete(this);
1077
1078     assert(AbstractTypeUsers.size() < OldSize-- &&
1079            "AbstractTypeUser did not remove itself from the use list!");
1080   }
1081   pImpl->AbstractTypeUsersLock.release();
1082 }
1083
1084 // refineAbstractType - Called when a contained type is found to be more
1085 // concrete - this could potentially change us from an abstract type to a
1086 // concrete type.
1087 //
1088 void FunctionType::refineAbstractType(const DerivedType *OldType,
1089                                       const Type *NewType) {
1090   LLVMContextImpl *pImpl = OldType->getContext().pImpl;
1091   pImpl->FunctionTypes.RefineAbstractType(this, OldType, NewType);
1092 }
1093
1094 void FunctionType::typeBecameConcrete(const DerivedType *AbsTy) {
1095   LLVMContextImpl *pImpl = AbsTy->getContext().pImpl;
1096   pImpl->FunctionTypes.TypeBecameConcrete(this, AbsTy);
1097 }
1098
1099
1100 // refineAbstractType - Called when a contained type is found to be more
1101 // concrete - this could potentially change us from an abstract type to a
1102 // concrete type.
1103 //
1104 void ArrayType::refineAbstractType(const DerivedType *OldType,
1105                                    const Type *NewType) {
1106   LLVMContextImpl *pImpl = OldType->getContext().pImpl;
1107   pImpl->ArrayTypes.RefineAbstractType(this, OldType, NewType);
1108 }
1109
1110 void ArrayType::typeBecameConcrete(const DerivedType *AbsTy) {
1111   LLVMContextImpl *pImpl = AbsTy->getContext().pImpl;
1112   pImpl->ArrayTypes.TypeBecameConcrete(this, AbsTy);
1113 }
1114
1115 // refineAbstractType - Called when a contained type is found to be more
1116 // concrete - this could potentially change us from an abstract type to a
1117 // concrete type.
1118 //
1119 void VectorType::refineAbstractType(const DerivedType *OldType,
1120                                    const Type *NewType) {
1121   LLVMContextImpl *pImpl = OldType->getContext().pImpl;
1122   pImpl->VectorTypes.RefineAbstractType(this, OldType, NewType);
1123 }
1124
1125 void VectorType::typeBecameConcrete(const DerivedType *AbsTy) {
1126   LLVMContextImpl *pImpl = AbsTy->getContext().pImpl;
1127   pImpl->VectorTypes.TypeBecameConcrete(this, AbsTy);
1128 }
1129
1130 // refineAbstractType - Called when a contained type is found to be more
1131 // concrete - this could potentially change us from an abstract type to a
1132 // concrete type.
1133 //
1134 void StructType::refineAbstractType(const DerivedType *OldType,
1135                                     const Type *NewType) {
1136   LLVMContextImpl *pImpl = OldType->getContext().pImpl;
1137   pImpl->StructTypes.RefineAbstractType(this, OldType, NewType);
1138 }
1139
1140 void StructType::typeBecameConcrete(const DerivedType *AbsTy) {
1141   LLVMContextImpl *pImpl = AbsTy->getContext().pImpl;
1142   pImpl->StructTypes.TypeBecameConcrete(this, AbsTy);
1143 }
1144
1145 // refineAbstractType - Called when a contained type is found to be more
1146 // concrete - this could potentially change us from an abstract type to a
1147 // concrete type.
1148 //
1149 void PointerType::refineAbstractType(const DerivedType *OldType,
1150                                      const Type *NewType) {
1151   LLVMContextImpl *pImpl = OldType->getContext().pImpl;
1152   pImpl->PointerTypes.RefineAbstractType(this, OldType, NewType);
1153 }
1154
1155 void PointerType::typeBecameConcrete(const DerivedType *AbsTy) {
1156   LLVMContextImpl *pImpl = AbsTy->getContext().pImpl;
1157   pImpl->PointerTypes.TypeBecameConcrete(this, AbsTy);
1158 }
1159
1160 bool SequentialType::indexValid(const Value *V) const {
1161   if (isa<IntegerType>(V->getType())) 
1162     return true;
1163   return false;
1164 }
1165
1166 namespace llvm {
1167 raw_ostream &operator<<(raw_ostream &OS, const Type &T) {
1168   T.print(OS);
1169   return OS;
1170 }
1171 }