diff options
Diffstat (limited to 'include/llvm/CodeGen/MachineConstantPool.h')
-rw-r--r-- | include/llvm/CodeGen/MachineConstantPool.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineConstantPool.h b/include/llvm/CodeGen/MachineConstantPool.h new file mode 100644 index 0000000000..06394ffdc1 --- /dev/null +++ b/include/llvm/CodeGen/MachineConstantPool.h @@ -0,0 +1,45 @@ +//===-- CodeGen/MachineConstantPool.h - Abstract Constant Pool --*- C++ -*-===// +// +// The MachineConstantPool class keeps track of constants referenced by a +// function which must be spilled to memory. This is used for constants which +// are unable to be used directly as operands to instructions, which typically +// include floating point and large integer constants. +// +// Instructions reference the address of these constant pool constants through +// the use of MO_ConstantPoolIndex values. When emitting assembly or machine +// code, these virtual address references are converted to refer to the +// address of the function constant pool values. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_MACHINECONSTANTPOOL_H +#define LLVM_CODEGEN_MACHINECONSTANTPOOL_H + +#include <vector> +class Constant; + +class MachineConstantPool { + std::vector<Constant*> Constants; +public: + + /// getConstantPoolIndex - Create a new entry in the constant pool or return + /// an existing one. This should eventually allow sharing of duplicate + /// objects in the constant pool, but this is adequate for now. + /// + unsigned getConstantPoolIndex(Constant *C) { + Constants.push_back(C); + return Constants.size()-1; + } + + const std::vector<Constant*> &getConstants() const { return Constants; } + + /// print - Used by the MachineFunction printer to print information about + /// stack objects. Implemented in MachineFunction.cpp + /// + void print(std::ostream &OS) const; + + /// dump - Call print(std::cerr) to be called from the debugger. + void dump() const; +}; + +#endif |