[llvm-branch-commits] [llvm-branch] r90363 - in /llvm/branches/Apple/Zoidberg: include/llvm/Target/TargetData.h lib/Target/TargetData.cpp

Bill Wendling isanbard at gmail.com
Wed Dec 2 16:18:06 PST 2009


Author: void
Date: Wed Dec  2 18:18:06 2009
New Revision: 90363

URL: http://llvm.org/viewvc/llvm-project?rev=90363&view=rev
Log:
$ svn merge -c 90362 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r90362 into '.':
U    include/llvm/Target/TargetData.h
U    lib/Target/TargetData.cpp


Modified:
    llvm/branches/Apple/Zoidberg/include/llvm/Target/TargetData.h
    llvm/branches/Apple/Zoidberg/lib/Target/TargetData.cpp

Modified: llvm/branches/Apple/Zoidberg/include/llvm/Target/TargetData.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Zoidberg/include/llvm/Target/TargetData.h?rev=90363&r1=90362&r2=90363&view=diff

==============================================================================
--- llvm/branches/Apple/Zoidberg/include/llvm/Target/TargetData.h (original)
+++ llvm/branches/Apple/Zoidberg/include/llvm/Target/TargetData.h Wed Dec  2 18:18:06 2009
@@ -30,7 +30,6 @@
 class IntegerType;
 class StructType;
 class StructLayout;
-class StructLayoutMap;
 class GlobalVariable;
 class LLVMContext;
 
@@ -86,7 +85,7 @@
   static const TargetAlignElem InvalidAlignmentElem;
 
   // The StructType -> StructLayout map.
-  mutable StructLayoutMap *LayoutMap;
+  mutable void *LayoutMap;
 
   //! Set/initialize target alignments
   void setAlignment(AlignTypeEnum align_type, unsigned char abi_align,

Modified: llvm/branches/Apple/Zoidberg/lib/Target/TargetData.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Zoidberg/lib/Target/TargetData.cpp?rev=90363&r1=90362&r2=90363&view=diff

==============================================================================
--- llvm/branches/Apple/Zoidberg/lib/Target/TargetData.cpp (original)
+++ llvm/branches/Apple/Zoidberg/lib/Target/TargetData.cpp Wed Dec  2 18:18:06 2009
@@ -325,7 +325,7 @@
 
 typedef DenseMap<const StructType*, StructLayout*> LayoutInfoTy;
 
-namespace llvm {
+namespace {
 
 class StructLayoutMap : public AbstractTypeUser {
   LayoutInfoTy LayoutInfo;
@@ -337,18 +337,12 @@
   virtual void refineAbstractType(const DerivedType *OldTy,
                                   const Type *) {
     const StructType *STy = dyn_cast<const StructType>(OldTy);
-    if (!STy) {
-      OldTy->removeAbstractTypeUser(this);
-      return;
-    }
-
-    StructLayout *SL = LayoutInfo[STy];
-    if (SL) {
-      SL->~StructLayout();
-      free(SL);
-      LayoutInfo[STy] = NULL;
-    }
+    assert(STy && "This can only track struct types.");
 
+    LayoutInfoTy::iterator Iter = LayoutInfo.find(STy);
+    Iter->second->~StructLayout();
+    free(Iter->second);
+    LayoutInfo.erase(Iter);
     OldTy->removeAbstractTypeUser(this);
   }
 
@@ -359,69 +353,46 @@
   ///
   virtual void typeBecameConcrete(const DerivedType *AbsTy) {
     const StructType *STy = dyn_cast<const StructType>(AbsTy);
-    if (!STy) {
-      AbsTy->removeAbstractTypeUser(this);
-      return;
-    }
-
-    StructLayout *SL = LayoutInfo[STy];
-    if (SL) {
-      SL->~StructLayout();
-      free(SL);
-      LayoutInfo[STy] = NULL;
-    }
+    assert(STy && "This can only track struct types.");
 
+    LayoutInfoTy::iterator Iter = LayoutInfo.find(STy);
+    Iter->second->~StructLayout();
+    free(Iter->second);
+    LayoutInfo.erase(Iter);
     AbsTy->removeAbstractTypeUser(this);
   }
 
-  bool insert(const Type *Ty) {
-    if (Ty->isAbstract())
-      Ty->addAbstractTypeUser(this);
-    return true;
-  }
-
 public:
   virtual ~StructLayoutMap() {
     // Remove any layouts.
     for (LayoutInfoTy::iterator
-           I = LayoutInfo.begin(), E = LayoutInfo.end(); I != E; ++I)
-      if (StructLayout *SL = I->second) {
-        SL->~StructLayout();
-        free(SL);
+           I = LayoutInfo.begin(), E = LayoutInfo.end(); I != E; ++I) {
+      const Type *Key = I->first;
+      StructLayout *Value = I->second;
+
+      if (Key && Key->isAbstract())
+        Key->removeAbstractTypeUser(this);
+
+      if (Value) {
+        Value->~StructLayout();
+        free(Value);
       }
+    }
   }
 
-  inline LayoutInfoTy::iterator begin() {
-    return LayoutInfo.begin();
-  }
-  inline LayoutInfoTy::iterator end() {
-    return LayoutInfo.end();
-  }
-  inline LayoutInfoTy::const_iterator begin() const {
-    return LayoutInfo.begin();
-  }
-  inline LayoutInfoTy::const_iterator end() const {
+  LayoutInfoTy::iterator end() {
     return LayoutInfo.end();
   }
 
   LayoutInfoTy::iterator find(const StructType *&Val) {
     return LayoutInfo.find(Val);
   }
-  LayoutInfoTy::const_iterator find(const StructType *&Val) const {
-    return LayoutInfo.find(Val);
-  }
 
-  bool erase(const StructType *&Val) {
-    return LayoutInfo.erase(Val);
-  }
   bool erase(LayoutInfoTy::iterator I) {
     return LayoutInfo.erase(I);
   }
 
-  StructLayout *&operator[](const Type *Key) {
-    const StructType *STy = dyn_cast<const StructType>(Key);
-    assert(STy && "Trying to access the struct layout map with a non-struct!");
-    insert(STy);
+  StructLayout *&operator[](const StructType *STy) {
     return LayoutInfo[STy];
   }
 
@@ -432,14 +403,15 @@
 } // end namespace llvm
 
 TargetData::~TargetData() {
-  delete LayoutMap;
+  delete static_cast<StructLayoutMap*>(LayoutMap);
 }
 
 const StructLayout *TargetData::getStructLayout(const StructType *Ty) const {
   if (!LayoutMap)
     LayoutMap = new StructLayoutMap();
   
-  StructLayout *&SL = (*LayoutMap)[Ty];
+  StructLayoutMap *STM = static_cast<StructLayoutMap*>(LayoutMap);
+  StructLayout *&SL = (*STM)[Ty];
   if (SL) return SL;
 
   // Otherwise, create the struct layout.  Because it is variable length, we 
@@ -453,6 +425,10 @@
   SL = L;
   
   new (L) StructLayout(Ty, *this);
+
+  if (Ty->isAbstract())
+    Ty->addAbstractTypeUser(STM);
+
   return L;
 }
 
@@ -463,14 +439,17 @@
 void TargetData::InvalidateStructLayoutInfo(const StructType *Ty) const {
   if (!LayoutMap) return;  // No cache.
   
-  DenseMap<const StructType*, StructLayout*>::iterator I = LayoutMap->find(Ty);
-  if (I == LayoutMap->end()) return;
+  StructLayoutMap *STM = static_cast<StructLayoutMap*>(LayoutMap);
+  LayoutInfoTy::iterator I = STM->find(Ty);
+  if (I == STM->end()) return;
   
   I->second->~StructLayout();
   free(I->second);
-  LayoutMap->erase(I);
-}
+  STM->erase(I);
 
+  if (Ty->isAbstract())
+    Ty->removeAbstractTypeUser(STM);
+}
 
 std::string TargetData::getStringRepresentation() const {
   std::string Result;





More information about the llvm-branch-commits mailing list