+
//===- Record.h - Classes to represent Table Records ------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
#define RECORD_H
#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/FoldingSet.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/DataTypes.h"
/// BitsInit - { a, b, c } - Represents an initializer for a BitsRecTy value.
/// It contains a vector of bits, whose size is determined by the type.
///
-class BitsInit : public Init {
+class BitsInit : public Init, public FoldingSetNode {
std::vector<const Init*> Bits;
- BitsInit(unsigned Size) : Bits(Size) {}
-
BitsInit(ArrayRef<const Init *> Range) : Bits(Range.begin(), Range.end()) {}
BitsInit(const BitsInit &Other); // Do not define.
public:
static const BitsInit *get(ArrayRef<const Init *> Range);
+ void Profile(FoldingSetNodeID &ID) const;
+
unsigned getNumBits() const { return Bits.size(); }
const Init *getBit(unsigned Bit) const {
/// ListInit - [AL, AH, CL] - Represent a list of defs
///
-class ListInit : public TypedInit {
+class ListInit : public TypedInit, public FoldingSetNode {
std::vector<const Init*> Values;
public:
typedef std::vector<const Init*>::const_iterator const_iterator;
- explicit ListInit(std::vector<const Init*> &Vs, RecTy *EltTy)
- : TypedInit(ListRecTy::get(EltTy)) {
- Values.swap(Vs);
- }
+private:
explicit ListInit(ArrayRef<const Init *> Range, RecTy *EltTy)
: TypedInit(ListRecTy::get(EltTy)), Values(Range.begin(), Range.end()) {}
public:
static const ListInit *get(ArrayRef<const Init *> Range, RecTy *EltTy);
+ void Profile(FoldingSetNodeID &ID) const;
+
unsigned getSize() const { return Values.size(); }
const Init *getElement(unsigned i) const {
assert(i < Values.size() && "List element index out of range!");