Improve comments, add support for remembering the constants strings that
authorChris Lattner <sabre@nondot.org>
Wed, 14 Jan 2004 23:37:43 +0000 (23:37 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 14 Jan 2004 23:37:43 +0000 (23:37 +0000)
are to be emitted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10866 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/SlotCalculator.h
include/llvm/SlotCalculator.h
lib/Bytecode/Writer/SlotCalculator.h

index 60cf516a100ef503850eddd5e8197826fd2626f0..fbd0976c8cbeb385de956647351445b15c6d709f 100644 (file)
@@ -29,32 +29,37 @@ class Value;
 class Module;
 class Function;
 class SymbolTable;
+class ConstantArray;
 
 class SlotCalculator {
   const Module *TheModule;
 
-  // BuildBytecodeInfo - If true, this is the creating information for the
-  // bytecode writer, if false, we are building information for the assembly
-  // emitter.  The assembly emitter doesn't need named objects numbered, among
-  // other differences.
+  /// BuildBytecodeInfo - If true, this is the creating information for the
+  /// bytecode writer, if false, we are building information for the assembly
+  /// emitter.  The assembly emitter doesn't need named objects numbered, among
+  /// other differences.
   bool BuildBytecodeInfo;
 
   typedef std::vector<const Value*> TypePlane;
   std::vector<TypePlane> Table;
-  std::map<const Value *, unsigned> NodeMap;
+  std::map<const Value*, unsigned> NodeMap;
 
-  // ModuleLevel - Used to keep track of which values belong to the module,
-  // and which values belong to the currently incorporated function.
-  //
+  /// ConstantStrings - If we are indexing for a bytecode file, this keeps track
+  /// of all of the constants strings that need to be emitted.
+  std::vector<const ConstantArray*> ConstantStrings;
+
+  /// ModuleLevel - Used to keep track of which values belong to the module,
+  /// and which values belong to the currently incorporated function.
+  ///
   std::vector<unsigned> ModuleLevel;
 
 public:
   SlotCalculator(const Module *M, bool BuildBytecodeInfo);
   // Start out in incorp state
-  SlotCalculator(const Function *M, bool BuildBytecodeInfo);
-  inline ~SlotCalculator() {}
+  SlotCalculator(const Function *F, bool BuildBytecodeInfo);
   
-  // getSlot returns < 0 on error!
+  /// getSlot returns < 0 on error!
+  ///
   int getSlot(const Value *D) const;
 
   inline unsigned getNumPlanes() const { return Table.size(); }
@@ -66,12 +71,20 @@ public:
     return Table[Plane]; 
   }
 
-  // If you'd like to deal with a function, use these two methods to get its
-  // data into the SlotCalculator!
-  //
+  /// incorporateFunction/purgeFunction - If you'd like to deal with a function,
+  /// use these two methods to get its data into the SlotCalculator!
+  ///
   void incorporateFunction(const Function *F);
   void purgeFunction();
 
+  /// string_iterator/string_begin/end - Access the list of module-level
+  /// constant strings that have been incorporated.  This is only applicable to
+  /// bytecode files.
+  typedef std::vector<const ConstantArray*>::const_iterator string_iterator;
+  string_iterator string_begin() const { return ConstantStrings.begin(); }
+  string_iterator string_end() const   { return ConstantStrings.end(); }
+
+
 protected:
   // getOrCreateSlot - Values can be crammed into here at will... if
   // they haven't been inserted already, they get inserted, otherwise
index 60cf516a100ef503850eddd5e8197826fd2626f0..fbd0976c8cbeb385de956647351445b15c6d709f 100644 (file)
@@ -29,32 +29,37 @@ class Value;
 class Module;
 class Function;
 class SymbolTable;
+class ConstantArray;
 
 class SlotCalculator {
   const Module *TheModule;
 
-  // BuildBytecodeInfo - If true, this is the creating information for the
-  // bytecode writer, if false, we are building information for the assembly
-  // emitter.  The assembly emitter doesn't need named objects numbered, among
-  // other differences.
+  /// BuildBytecodeInfo - If true, this is the creating information for the
+  /// bytecode writer, if false, we are building information for the assembly
+  /// emitter.  The assembly emitter doesn't need named objects numbered, among
+  /// other differences.
   bool BuildBytecodeInfo;
 
   typedef std::vector<const Value*> TypePlane;
   std::vector<TypePlane> Table;
-  std::map<const Value *, unsigned> NodeMap;
+  std::map<const Value*, unsigned> NodeMap;
 
-  // ModuleLevel - Used to keep track of which values belong to the module,
-  // and which values belong to the currently incorporated function.
-  //
+  /// ConstantStrings - If we are indexing for a bytecode file, this keeps track
+  /// of all of the constants strings that need to be emitted.
+  std::vector<const ConstantArray*> ConstantStrings;
+
+  /// ModuleLevel - Used to keep track of which values belong to the module,
+  /// and which values belong to the currently incorporated function.
+  ///
   std::vector<unsigned> ModuleLevel;
 
 public:
   SlotCalculator(const Module *M, bool BuildBytecodeInfo);
   // Start out in incorp state
-  SlotCalculator(const Function *M, bool BuildBytecodeInfo);
-  inline ~SlotCalculator() {}
+  SlotCalculator(const Function *F, bool BuildBytecodeInfo);
   
-  // getSlot returns < 0 on error!
+  /// getSlot returns < 0 on error!
+  ///
   int getSlot(const Value *D) const;
 
   inline unsigned getNumPlanes() const { return Table.size(); }
@@ -66,12 +71,20 @@ public:
     return Table[Plane]; 
   }
 
-  // If you'd like to deal with a function, use these two methods to get its
-  // data into the SlotCalculator!
-  //
+  /// incorporateFunction/purgeFunction - If you'd like to deal with a function,
+  /// use these two methods to get its data into the SlotCalculator!
+  ///
   void incorporateFunction(const Function *F);
   void purgeFunction();
 
+  /// string_iterator/string_begin/end - Access the list of module-level
+  /// constant strings that have been incorporated.  This is only applicable to
+  /// bytecode files.
+  typedef std::vector<const ConstantArray*>::const_iterator string_iterator;
+  string_iterator string_begin() const { return ConstantStrings.begin(); }
+  string_iterator string_end() const   { return ConstantStrings.end(); }
+
+
 protected:
   // getOrCreateSlot - Values can be crammed into here at will... if
   // they haven't been inserted already, they get inserted, otherwise
index 60cf516a100ef503850eddd5e8197826fd2626f0..fbd0976c8cbeb385de956647351445b15c6d709f 100644 (file)
@@ -29,32 +29,37 @@ class Value;
 class Module;
 class Function;
 class SymbolTable;
+class ConstantArray;
 
 class SlotCalculator {
   const Module *TheModule;
 
-  // BuildBytecodeInfo - If true, this is the creating information for the
-  // bytecode writer, if false, we are building information for the assembly
-  // emitter.  The assembly emitter doesn't need named objects numbered, among
-  // other differences.
+  /// BuildBytecodeInfo - If true, this is the creating information for the
+  /// bytecode writer, if false, we are building information for the assembly
+  /// emitter.  The assembly emitter doesn't need named objects numbered, among
+  /// other differences.
   bool BuildBytecodeInfo;
 
   typedef std::vector<const Value*> TypePlane;
   std::vector<TypePlane> Table;
-  std::map<const Value *, unsigned> NodeMap;
+  std::map<const Value*, unsigned> NodeMap;
 
-  // ModuleLevel - Used to keep track of which values belong to the module,
-  // and which values belong to the currently incorporated function.
-  //
+  /// ConstantStrings - If we are indexing for a bytecode file, this keeps track
+  /// of all of the constants strings that need to be emitted.
+  std::vector<const ConstantArray*> ConstantStrings;
+
+  /// ModuleLevel - Used to keep track of which values belong to the module,
+  /// and which values belong to the currently incorporated function.
+  ///
   std::vector<unsigned> ModuleLevel;
 
 public:
   SlotCalculator(const Module *M, bool BuildBytecodeInfo);
   // Start out in incorp state
-  SlotCalculator(const Function *M, bool BuildBytecodeInfo);
-  inline ~SlotCalculator() {}
+  SlotCalculator(const Function *F, bool BuildBytecodeInfo);
   
-  // getSlot returns < 0 on error!
+  /// getSlot returns < 0 on error!
+  ///
   int getSlot(const Value *D) const;
 
   inline unsigned getNumPlanes() const { return Table.size(); }
@@ -66,12 +71,20 @@ public:
     return Table[Plane]; 
   }
 
-  // If you'd like to deal with a function, use these two methods to get its
-  // data into the SlotCalculator!
-  //
+  /// incorporateFunction/purgeFunction - If you'd like to deal with a function,
+  /// use these two methods to get its data into the SlotCalculator!
+  ///
   void incorporateFunction(const Function *F);
   void purgeFunction();
 
+  /// string_iterator/string_begin/end - Access the list of module-level
+  /// constant strings that have been incorporated.  This is only applicable to
+  /// bytecode files.
+  typedef std::vector<const ConstantArray*>::const_iterator string_iterator;
+  string_iterator string_begin() const { return ConstantStrings.begin(); }
+  string_iterator string_end() const   { return ConstantStrings.end(); }
+
+
 protected:
   // getOrCreateSlot - Values can be crammed into here at will... if
   // they haven't been inserted already, they get inserted, otherwise