From 7851e1b32803a9b0d373e74bb85145368779b177 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 14 Jan 2004 23:37:43 +0000 Subject: [PATCH] Improve comments, add support for remembering the constants strings that 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 | 41 +++++++++++++++++--------- include/llvm/SlotCalculator.h | 41 +++++++++++++++++--------- lib/Bytecode/Writer/SlotCalculator.h | 41 +++++++++++++++++--------- 3 files changed, 81 insertions(+), 42 deletions(-) diff --git a/include/llvm/Analysis/SlotCalculator.h b/include/llvm/Analysis/SlotCalculator.h index 60cf516a100..fbd0976c8cb 100644 --- a/include/llvm/Analysis/SlotCalculator.h +++ b/include/llvm/Analysis/SlotCalculator.h @@ -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 TypePlane; std::vector Table; - std::map NodeMap; + std::map 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 ConstantStrings; + + /// ModuleLevel - Used to keep track of which values belong to the module, + /// and which values belong to the currently incorporated function. + /// std::vector 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_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 diff --git a/include/llvm/SlotCalculator.h b/include/llvm/SlotCalculator.h index 60cf516a100..fbd0976c8cb 100644 --- a/include/llvm/SlotCalculator.h +++ b/include/llvm/SlotCalculator.h @@ -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 TypePlane; std::vector Table; - std::map NodeMap; + std::map 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 ConstantStrings; + + /// ModuleLevel - Used to keep track of which values belong to the module, + /// and which values belong to the currently incorporated function. + /// std::vector 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_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 diff --git a/lib/Bytecode/Writer/SlotCalculator.h b/lib/Bytecode/Writer/SlotCalculator.h index 60cf516a100..fbd0976c8cb 100644 --- a/lib/Bytecode/Writer/SlotCalculator.h +++ b/lib/Bytecode/Writer/SlotCalculator.h @@ -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 TypePlane; std::vector Table; - std::map NodeMap; + std::map 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 ConstantStrings; + + /// ModuleLevel - Used to keep track of which values belong to the module, + /// and which values belong to the currently incorporated function. + /// std::vector 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_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