summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bytecode/Writer/SlotCalculator.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bytecode/Writer/SlotCalculator.h')
-rw-r--r--llvm/lib/Bytecode/Writer/SlotCalculator.h138
1 files changed, 0 insertions, 138 deletions
diff --git a/llvm/lib/Bytecode/Writer/SlotCalculator.h b/llvm/lib/Bytecode/Writer/SlotCalculator.h
deleted file mode 100644
index 343800cf6c8..00000000000
--- a/llvm/lib/Bytecode/Writer/SlotCalculator.h
+++ /dev/null
@@ -1,138 +0,0 @@
-//===-- Analysis/SlotCalculator.h - Calculate value slots -------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This class calculates the slots that values will land in. This is useful for
-// when writing bytecode or assembly out, because you have to know these things.
-//
-// Specifically, this class calculates the "type plane numbering" that you see
-// for a function if you strip out all of the symbols in it. For assembly
-// writing, this is used when a symbol does not have a name. For bytecode
-// writing, this is always used, and the symbol table is added on later.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_ANALYSIS_SLOTCALCULATOR_H
-#define LLVM_ANALYSIS_SLOTCALCULATOR_H
-
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SmallVector.h"
-#include <vector>
-
-namespace llvm {
-
-class Value;
-class Type;
-class Module;
-class Function;
-class SymbolTable;
-class TypeSymbolTable;
-class ValueSymbolTable;
-class ConstantArray;
-
-struct ModuleLevelDenseMapKeyInfo {
- static inline unsigned getEmptyKey() { return ~0U; }
- static inline unsigned getTombstoneKey() { return ~1U; }
- static unsigned getHashValue(unsigned Val) { return Val ^ Val >> 4; }
- static bool isPod() { return true; }
-};
-
-
-class SlotCalculator {
- const Module *TheModule;
-public:
- typedef std::vector<const Type*> TypeList;
- typedef SmallVector<const Value*, 16> TypePlane;
-private:
- std::vector<TypePlane> Table;
- TypeList Types;
- typedef DenseMap<const Value*, unsigned> NodeMapType;
- NodeMapType NodeMap;
-
- typedef DenseMap<const Type*, unsigned> TypeMapType;
- TypeMapType TypeMap;
-
- /// 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.
- ///
- DenseMap<unsigned,unsigned,ModuleLevelDenseMapKeyInfo> ModuleLevel;
- unsigned NumModuleTypes;
-
- SlotCalculator(const SlotCalculator &); // DO NOT IMPLEMENT
- void operator=(const SlotCalculator &); // DO NOT IMPLEMENT
-public:
- SlotCalculator(const Module *M);
-
- /// getSlot - Return the slot number of the specified value in it's type
- /// plane.
- ///
- unsigned getSlot(const Value *V) const {
- NodeMapType::const_iterator I = NodeMap.find(V);
- assert(I != NodeMap.end() && "Value not in slotcalculator!");
- return I->second;
- }
-
- unsigned getTypeSlot(const Type* T) const {
- TypeMapType::const_iterator I = TypeMap.find(T);
- assert(I != TypeMap.end() && "Type not in slotcalc!");
- return I->second;
- }
-
- inline unsigned getNumPlanes() const { return Table.size(); }
- inline unsigned getNumTypes() const { return Types.size(); }
-
- TypePlane &getPlane(unsigned Plane) {
- // Okay we are just returning an entry out of the main Table. Make sure the
- // plane exists and return it.
- if (Plane >= Table.size())
- Table.resize(Plane+1);
- return Table[Plane];
- }
-
- TypeList& getTypes() { return Types; }
-
- /// 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(); }
-
-private:
- void CreateSlotIfNeeded(const Value *V);
- void CreateFunctionValueSlot(const Value *V);
- unsigned getOrCreateTypeSlot(const Type *T);
-
- // processModule - Process all of the module level function declarations and
- // types that are available.
- //
- void processModule();
-
- // processSymbolTable - Insert all of the values in the specified symbol table
- // into the values table...
- //
- void processTypeSymbolTable(const TypeSymbolTable *ST);
- void processValueSymbolTable(const ValueSymbolTable *ST);
-
- // insertPrimitives - helper for constructors to insert primitive types.
- void insertPrimitives();
-};
-
-} // End llvm namespace
-
-#endif
OpenPOWER on IntegriCloud