[llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Reader.h

Chris Lattner lattner at cs.uiuc.edu
Wed Dec 8 22:19:59 PST 2004



Changes in directory llvm/lib/Bytecode/Reader:

Reader.cpp updated: 1.148 -> 1.149
Reader.h updated: 1.19 -> 1.20
---
Log message:

Remove a dead field, make the map go to integer type ID to hash better and
avoid a getType.


---
Diffs of the changes:  (+12 -17)

Index: llvm/lib/Bytecode/Reader/Reader.cpp
diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.148 llvm/lib/Bytecode/Reader/Reader.cpp:1.149
--- llvm/lib/Bytecode/Reader/Reader.cpp:1.148	Wed Dec  8 22:53:17 2004
+++ llvm/lib/Bytecode/Reader/Reader.cpp	Thu Dec  9 00:19:44 2004
@@ -35,14 +35,11 @@
 /// @brief A class for maintaining the slot number definition
 /// as a placeholder for the actual definition for forward constants defs.
 class ConstantPlaceHolder : public ConstantExpr {
-  unsigned ID;
   ConstantPlaceHolder();                       // DO NOT IMPLEMENT
   void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT
 public:
-  ConstantPlaceHolder(const Type *Ty, unsigned id) 
-    : ConstantExpr(Instruction::UserOp1, Constant::getNullValue(Ty), Ty),
-    ID(id) {}
-  unsigned getID() { return ID; }
+  ConstantPlaceHolder(const Type *Ty) 
+    : ConstantExpr(Instruction::UserOp1, Constant::getNullValue(Ty), Ty) {}
 };
 
 }
@@ -494,8 +491,7 @@
       error("Value for slot " + utostr(Slot) + 
             " is expected to be a constant!");
 
-  const Type *Ty = getType(TypeSlot);
-  std::pair<const Type*, unsigned> Key(Ty, Slot);
+  std::pair<unsigned, unsigned> Key(TypeSlot, Slot);
   ConstantRefsType::iterator I = ConstantFwdRefs.lower_bound(Key);
 
   if (I != ConstantFwdRefs.end() && I->first == Key) {
@@ -503,7 +499,7 @@
   } else {
     // Create a placeholder for the constant reference and
     // keep track of the fact that we have a forward ref to recycle it
-    Constant *C = new ConstantPlaceHolder(Ty, Slot);
+    Constant *C = new ConstantPlaceHolder(getType(TypeSlot));
     
     // Keep track of the fact that we have a forward ref to recycle it
     ConstantFwdRefs.insert(I, std::make_pair(Key, C));
@@ -1477,9 +1473,10 @@
 /// referenced constants in the ConstantFwdRefs map. It uses the 
 /// replaceAllUsesWith method of Value class to substitute the placeholder
 /// instance with the actual instance.
-void BytecodeReader::ResolveReferencesToConstant(Constant *NewV, unsigned Slot){
+void BytecodeReader::ResolveReferencesToConstant(Constant *NewV, unsigned Typ,
+                                                 unsigned Slot) {
   ConstantRefsType::iterator I =
-    ConstantFwdRefs.find(std::make_pair(NewV->getType(), Slot));
+    ConstantFwdRefs.find(std::make_pair(Typ, Slot));
   if (I == ConstantFwdRefs.end()) return;   // Never forward referenced?
 
   Value *PH = I->second;   // Get the placeholder...
@@ -1518,7 +1515,7 @@
     // Create the constant, inserting it as needed.
     Constant *C = ConstantArray::get(ATy, Elements);
     unsigned Slot = insertValue(C, Typ, Tab);
-    ResolveReferencesToConstant(C, Slot);
+    ResolveReferencesToConstant(C, Typ, Slot);
     if (Handler) Handler->handleConstantString(cast<ConstantArray>(C));
   }
 }
@@ -1564,7 +1561,7 @@
         if (&Tab != &ModuleValues && Typ < ModuleValues.size() &&
             ModuleValues[Typ])
           Slot += ModuleValues[Typ]->size();
-        ResolveReferencesToConstant(C, Slot);
+        ResolveReferencesToConstant(C, Typ, Slot);
       }
     }
   }
@@ -1572,14 +1569,12 @@
   // After we have finished parsing the constant pool, we had better not have
   // any dangling references left.
   if (!ConstantFwdRefs.empty()) {
-  typedef std::map<std::pair<const Type*,unsigned>, Constant*> ConstantRefsType;
     ConstantRefsType::const_iterator I = ConstantFwdRefs.begin();
-    const Type* missingType = I->first.first;
     Constant* missingConst = I->second;
     error(utostr(ConstantFwdRefs.size()) + 
           " unresolved constant reference exist. First one is '" + 
           missingConst->getName() + "' of type '" + 
-          missingType->getDescription() + "'.");
+          missingConst->getType()->getDescription() + "'.");
   }
 
   checkPastBlockEnd("Constant Pool");


Index: llvm/lib/Bytecode/Reader/Reader.h
diff -u llvm/lib/Bytecode/Reader/Reader.h:1.19 llvm/lib/Bytecode/Reader/Reader.h:1.20
--- llvm/lib/Bytecode/Reader/Reader.h:1.19	Mon Nov 15 15:55:06 2004
+++ llvm/lib/Bytecode/Reader/Reader.h	Thu Dec  9 00:19:44 2004
@@ -102,7 +102,7 @@
   /// This map is needed so that forward references to constants can be looked 
   /// up by Type and slot number when resolving those references.
   /// @brief A mapping of a Type/slot pair to a Constant*.
-  typedef std::map<std::pair<const Type*,unsigned>, Constant*> ConstantRefsType;
+  typedef std::map<std::pair<unsigned,unsigned>, Constant*> ConstantRefsType;
 
   /// For lazy read-in of functions, we need to save the location in the
   /// data stream where the function is located. This structure provides that
@@ -453,7 +453,7 @@
 
   /// @brief Resolve all references to the placeholder (if any) for the 
   /// given constant.
-  void ResolveReferencesToConstant(Constant *C, unsigned Slot);
+  void ResolveReferencesToConstant(Constant *C, unsigned Typ, unsigned Slot);
 
   /// @brief Release our memory.
   void freeState() {






More information about the llvm-commits mailing list