diff options
Diffstat (limited to 'lib/TableGen')
| -rw-r--r-- | lib/TableGen/Record.cpp | 39 | 
1 files changed, 16 insertions, 23 deletions
| diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp index 33d3de5daf33..09f9759ce7da 100644 --- a/lib/TableGen/Record.cpp +++ b/lib/TableGen/Record.cpp @@ -219,7 +219,6 @@ ProfileBitsInit(FoldingSetNodeID &ID, ArrayRef<Init *> Range) {  BitsInit *BitsInit::get(ArrayRef<Init *> Range) {    static FoldingSet<BitsInit> ThePool; -  static std::vector<BitsInit*> TheActualPool;    FoldingSetNodeID ID;    ProfileBitsInit(ID, Range); @@ -234,7 +233,6 @@ BitsInit *BitsInit::get(ArrayRef<Init *> Range) {    std::uninitialized_copy(Range.begin(), Range.end(),                            I->getTrailingObjects<Init *>());    ThePool.InsertNode(I, IP); -  TheActualPool.push_back(I);    return I;  } @@ -456,7 +454,6 @@ static void ProfileListInit(FoldingSetNodeID &ID,  ListInit *ListInit::get(ArrayRef<Init *> Range, RecTy *EltTy) {    static FoldingSet<ListInit> ThePool; -  static std::vector<ListInit*> TheActualPool;    FoldingSetNodeID ID;    ProfileListInit(ID, Range, EltTy); @@ -471,7 +468,6 @@ ListInit *ListInit::get(ArrayRef<Init *> Range, RecTy *EltTy) {    std::uninitialized_copy(Range.begin(), Range.end(),                            I->getTrailingObjects<Init *>());    ThePool.InsertNode(I, IP); -  TheActualPool.push_back(I);    return I;  } @@ -606,7 +602,6 @@ ProfileUnOpInit(FoldingSetNodeID &ID, unsigned Opcode, Init *Op, RecTy *Type) {  UnOpInit *UnOpInit::get(UnaryOp Opc, Init *LHS, RecTy *Type) {    static FoldingSet<UnOpInit> ThePool; -  static std::vector<UnOpInit*> TheActualPool;    FoldingSetNodeID ID;    ProfileUnOpInit(ID, Opc, LHS, Type); @@ -617,7 +612,6 @@ UnOpInit *UnOpInit::get(UnaryOp Opc, Init *LHS, RecTy *Type) {    UnOpInit *I = new(Allocator) UnOpInit(Opc, LHS, Type);    ThePool.InsertNode(I, IP); -  TheActualPool.push_back(I);    return I;  } @@ -752,7 +746,6 @@ ProfileBinOpInit(FoldingSetNodeID &ID, unsigned Opcode, Init *LHS, Init *RHS,  BinOpInit *BinOpInit::get(BinaryOp Opc, Init *LHS,                            Init *RHS, RecTy *Type) {    static FoldingSet<BinOpInit> ThePool; -  static std::vector<BinOpInit*> TheActualPool;    FoldingSetNodeID ID;    ProfileBinOpInit(ID, Opc, LHS, RHS, Type); @@ -763,7 +756,6 @@ BinOpInit *BinOpInit::get(BinaryOp Opc, Init *LHS,    BinOpInit *I = new(Allocator) BinOpInit(Opc, LHS, RHS, Type);    ThePool.InsertNode(I, IP); -  TheActualPool.push_back(I);    return I;  } @@ -910,7 +902,6 @@ ProfileTernOpInit(FoldingSetNodeID &ID, unsigned Opcode, Init *LHS, Init *MHS,  TernOpInit *TernOpInit::get(TernaryOp Opc, Init *LHS, Init *MHS, Init *RHS,                              RecTy *Type) {    static FoldingSet<TernOpInit> ThePool; -  static std::vector<TernOpInit*> TheActualPool;    FoldingSetNodeID ID;    ProfileTernOpInit(ID, Opc, LHS, MHS, RHS, Type); @@ -921,7 +912,6 @@ TernOpInit *TernOpInit::get(TernaryOp Opc, Init *LHS, Init *MHS, Init *RHS,    TernOpInit *I = new(Allocator) TernOpInit(Opc, LHS, MHS, RHS, Type);    ThePool.InsertNode(I, IP); -  TheActualPool.push_back(I);    return I;  } @@ -1503,7 +1493,6 @@ DagInit *  DagInit::get(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange,               ArrayRef<StringInit *> NameRange) {    static FoldingSet<DagInit> ThePool; -  static std::vector<DagInit*> TheActualPool;    FoldingSetNodeID ID;    ProfileDagInit(ID, V, VN, ArgRange, NameRange); @@ -1512,9 +1501,13 @@ DagInit::get(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange,    if (DagInit *I = ThePool.FindNodeOrInsertPos(ID, IP))      return I; -  DagInit *I = new(Allocator) DagInit(V, VN, ArgRange, NameRange); +  void *Mem = Allocator.Allocate(totalSizeToAlloc<Init *, StringInit *>(ArgRange.size(), NameRange.size()), alignof(BitsInit)); +  DagInit *I = new(Mem) DagInit(V, VN, ArgRange.size(), NameRange.size()); +  std::uninitialized_copy(ArgRange.begin(), ArgRange.end(), +                          I->getTrailingObjects<Init *>()); +  std::uninitialized_copy(NameRange.begin(), NameRange.end(), +                          I->getTrailingObjects<StringInit *>());    ThePool.InsertNode(I, IP); -  TheActualPool.push_back(I);    return I;  } @@ -1533,7 +1526,7 @@ DagInit::get(Init *V, StringInit *VN,  }  void DagInit::Profile(FoldingSetNodeID &ID) const { -  ProfileDagInit(ID, Val, ValName, Args, ArgNames); +  ProfileDagInit(ID, Val, ValName, makeArrayRef(getTrailingObjects<Init *>(), NumArgs), makeArrayRef(getTrailingObjects<StringInit *>(), NumArgNames));  }  Init *DagInit::convertInitializerTo(RecTy *Ty) const { @@ -1545,9 +1538,9 @@ Init *DagInit::convertInitializerTo(RecTy *Ty) const {  Init *DagInit::resolveReferences(Record &R, const RecordVal *RV) const {    SmallVector<Init*, 8> NewArgs; -  NewArgs.reserve(Args.size()); +  NewArgs.reserve(arg_size());    bool ArgsChanged = false; -  for (const Init *Arg : Args) { +  for (const Init *Arg : args()) {      Init *NewArg = Arg->resolveReferences(R, RV);      NewArgs.push_back(NewArg);      ArgsChanged |= NewArg != Arg; @@ -1555,7 +1548,7 @@ Init *DagInit::resolveReferences(Record &R, const RecordVal *RV) const {    Init *Op = Val->resolveReferences(R, RV);    if (Op != Val || ArgsChanged) -    return DagInit::get(Op, ValName, NewArgs, ArgNames); +    return DagInit::get(Op, ValName, NewArgs, getArgNames());    return const_cast<DagInit *>(this);  } @@ -1564,12 +1557,12 @@ std::string DagInit::getAsString() const {    std::string Result = "(" + Val->getAsString();    if (ValName)      Result += ":" + ValName->getAsUnquotedString(); -  if (!Args.empty()) { -    Result += " " + Args[0]->getAsString(); -    if (ArgNames[0]) Result += ":$" + ArgNames[0]->getAsUnquotedString(); -    for (unsigned i = 1, e = Args.size(); i != e; ++i) { -      Result += ", " + Args[i]->getAsString(); -      if (ArgNames[i]) Result += ":$" + ArgNames[i]->getAsUnquotedString(); +  if (!arg_empty()) { +    Result += " " + getArg(0)->getAsString(); +    if (getArgName(0)) Result += ":$" + getArgName(0)->getAsUnquotedString(); +    for (unsigned i = 1, e = getNumArgs(); i != e; ++i) { +      Result += ", " + getArg(i)->getAsString(); +      if (getArgName(i)) Result += ":$" + getArgName(i)->getAsUnquotedString();      }    }    return Result + ")"; | 
