15 #ifndef LLVM_TABLEGEN_RECORD_H
16 #define LLVM_TABLEGEN_RECORD_H
22 #include "llvm/Support/DataTypes.h"
57 class VarListElementInit;
85 virtual void anchor();
455 Init &operator=(const
Init &) LLVM_DELETED_FUNCTION;
456 virtual
void anchor();
523 const std::string &FieldName)
const {
533 return const_cast<Init *
>(
this);
550 I.
print(OS);
return OS;
587 unsigned Elt)
const = 0;
597 virtual void anchor();
626 virtual void anchor();
641 assert(Bit < 1 &&
"Bit index out of range!");
642 return const_cast<BitInit*
>(
this);
652 std::vector<Init*> Bits;
691 assert(Bit < Bits.size() &&
"Bit index out of range!");
712 static IntInit *
get(int64_t V);
728 unsigned Elt)
const {
748 virtual void anchor();
759 return Ty->
convertValue(const_cast<StringInit *>(
this));
769 unsigned Elt)
const {
781 std::vector<Init*> Values;
788 Values(Range.
begin(), Range.
end()) {}
801 unsigned getSize()
const {
return Values.size(); }
803 assert(i < Values.size() &&
"List element index out of range!");
830 inline size_t size ()
const {
return Values.size(); }
831 inline bool empty()
const {
return Values.empty(); }
860 virtual OpInit *
clone(std::vector<Init *> &Operands)
const = 0;
903 assert(Operands.size() == 1 &&
904 "Wrong number of operands for unary operation");
910 assert(i == 0 &&
"Invalid operand id for unary operator");
950 assert(Operands.size() == 2 &&
951 "Wrong number of operands for binary operation");
957 assert((i == 0 || i == 1) &&
"Invalid operand id for binary operator");
985 Init *LHS, *MHS, *RHS;
1004 assert(Operands.size() == 3 &&
1005 "Wrong number of operands for ternary operation");
1012 assert((i == 0 || i == 1 || i == 2) &&
1013 "Invalid operand id for ternary operator");
1016 }
else if (i == 1) {
1064 const std::string &
getName()
const;
1071 unsigned Elt)
const;
1075 const std::string &FieldName)
const;
1098 (isa<IntRecTy>(T->
getType()) ||
1099 (isa<BitsRecTy>(T->
getType()) &&
1100 cast<BitsRecTy>(T->
getType())->getNumBits() > B)) &&
1101 "Illegal VarBitInit expression!");
1114 return Ty->
convertValue(const_cast<VarBitInit *>(
this));
1124 assert(B < 1 &&
"Bit index out of range!");
1137 cast<ListRecTy>(T->
getType())->getElementType()),
1140 "Illegal VarBitInit expression!");
1153 return Ty->
convertValue(const_cast<VarListElementInit *>(
this));
1164 unsigned Elt)
const;
1199 const std::string &FieldName)
const;
1211 unsigned Elt)
const {
1221 std::string FieldName;
1225 assert(
getType() &&
"FieldInit with non-record type!");
1239 return Ty->
convertValue(const_cast<FieldInit *>(
this));
1246 unsigned Elt)
const;
1261 std::string ValName;
1262 std::vector<Init*> Args;
1263 std::vector<std::string> ArgNames;
1269 Args(ArgRange.
begin(), ArgRange.
end()),
1270 ArgNames(NameRange.
begin(), NameRange.
end()) {}
1279 static DagInit *
get(
Init *V,
const std::string &VN,
1282 static DagInit *
get(
Init *V,
const std::string &VN,
1284 std::pair<Init*, std::string> > &args);
1294 const std::string &
getName()
const {
return ValName; }
1298 assert(Num < Args.size() &&
"Arg number out of range!");
1302 assert(Num < ArgNames.size() &&
"Arg number out of range!");
1303 return ArgNames[Num];
1316 inline size_t arg_size ()
const {
return Args.size(); }
1322 inline size_t name_size ()
const {
return ArgNames.size(); }
1330 unsigned Elt)
const {
1348 const std::string &
getName()
const;
1372 RV.
print(OS <<
" ");
1377 static unsigned LastID;
1385 std::vector<Init *> TemplateArgs;
1386 std::vector<RecordVal> Values;
1387 std::vector<Record *> SuperClasses;
1388 std::vector<SMRange> SuperClassRanges;
1405 TrackedRecords(records), TheInit(0), IsAnonymous(Anonymous) {
1409 bool Anonymous =
false) :
1410 ID(LastID++), Name(N), Locs(locs.
begin(), locs.
end()),
1411 TrackedRecords(records), TheInit(0), IsAnonymous(Anonymous) {
1418 ID(LastID++), Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs),
1419 Values(O.Values), SuperClasses(O.SuperClasses),
1420 SuperClassRanges(O.SuperClassRanges), TrackedRecords(O.TrackedRecords),
1421 TheInit(O.TheInit), IsAnonymous(O.IsAnonymous) { }
1431 const std::string &
getName()
const;
1440 void setName(
const std::string &Name);
1448 return TemplateArgs;
1450 const std::vector<RecordVal> &
getValues()
const {
return Values; }
1455 for (
unsigned i = 0, e = TemplateArgs.size(); i != e; ++i)
1456 if (TemplateArgs[i] == Name)
return true;
1464 for (
unsigned i = 0, e = Values.size(); i != e; ++i)
1465 if (Values[i].
getNameInit() == Name)
return &Values[i];
1472 for (
unsigned i = 0, e = Values.size(); i != e; ++i)
1473 if (Values[i].
getNameInit() == Name)
return &Values[i];
1481 assert(!
isTemplateArg(Name) &&
"Template arg already defined!");
1482 TemplateArgs.push_back(Name);
1490 Values.push_back(RV);
1491 if (Values.size() > 1)
1497 std::swap(Values[Values.size() - 2], Values[Values.size() - 1]);
1501 for (
unsigned i = 0, e = Values.size(); i != e; ++i)
1503 Values.erase(Values.begin()+i);
1514 for (
unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
1515 if (SuperClasses[i] == R)
1521 for (
unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
1528 assert(!
isSubClassOf(R) &&
"Already subclassing record!");
1529 SuperClasses.push_back(R);
1530 SuperClassRanges.push_back(Range);
1544 return TrackedRecords;
1634 raw_ostream &
operator<<(raw_ostream &OS,
const Record &R);
1644 Rec(Name, Loc, Records) {}
1648 std::map<std::string, Record*> Classes, Defs;
1652 for (std::map<std::string, Record*>::iterator
I = Classes.begin(),
1653 E = Classes.end();
I != E; ++
I)
1655 for (std::map<std::string, Record*>::iterator
I = Defs.begin(),
1656 E = Defs.end();
I != E; ++
I)
1660 const std::map<std::string, Record*> &
getClasses()
const {
return Classes; }
1661 const std::map<std::string, Record*> &
getDefs()
const {
return Defs; }
1664 std::map<std::string, Record*>::const_iterator
I = Classes.find(Name);
1665 return I == Classes.end() ? 0 : I->second;
1668 std::map<std::string, Record*>::const_iterator
I = Defs.find(Name);
1669 return I == Defs.end() ? 0 : I->second;
1672 bool Ins = Classes.insert(std::make_pair(R->
getName(), R)).second;
1674 assert(Ins &&
"Class already exists");
1677 bool Ins = Defs.insert(std::make_pair(R->
getName(), R)).second;
1679 assert(Ins &&
"Record already exists");
1685 assert(Classes.count(Name) &&
"Class does not exist!");
1686 Classes.erase(Name);
1691 assert(Defs.count(Name) &&
"Def does not exist!");
1701 std::vector<Record*>
1735 static size_t min(
size_t a,
size_t b) {
return a < b ? a : b; }
1746 const char *Start = Rec.
data();
1747 const char *Curr = Start;
1749 for (
size_t I = 0, E = Rec.
size();
I != E; ++
I, ++Len) {
1751 if (isDigit != isDigitPart) {
1752 Parts.push_back(std::make_pair(isDigitPart,
StringRef(Start, Len)));
1759 Parts.push_back(std::make_pair(isDigitPart,
StringRef(Start, Len)));
1765 assert (i <
Parts.size() &&
"Invalid idx!");
1774 size_t LHSNumParts = LHSParts.
size();
1775 size_t RHSNumParts = RHSParts.
size();
1776 assert (LHSNumParts && RHSNumParts &&
"Expected at least one part!");
1778 if (LHSNumParts != RHSNumParts)
1779 return LHSNumParts < RHSNumParts;
1782 for (
size_t I = 0, E = LHSNumParts;
I < E;
I+=2) {
1783 std::pair<bool, StringRef> LHSPart = LHSParts.
getPart(
I);
1784 std::pair<bool, StringRef> RHSPart = RHSParts.
getPart(
I);
1786 assert (LHSPart.first ==
false && RHSPart.first ==
false &&
1787 "Expected both parts to be alpha.");
1788 if (
int Res = LHSPart.second.compare(RHSPart.second))
1791 for (
size_t I = 1, E = LHSNumParts;
I < E;
I+=2) {
1792 std::pair<bool, StringRef> LHSPart = LHSParts.
getPart(
I);
1793 std::pair<bool, StringRef> RHSPart = RHSParts.
getPart(
I);
1795 assert (LHSPart.first ==
true && RHSPart.first ==
true &&
1796 "Expected both parts to be numeric.");
1797 if (LHSPart.second.size() != RHSPart.second.size())
1798 return LHSPart.second.size() < RHSPart.second.size();
1800 unsigned LHSVal, RHSVal;
1802 bool LHSFailed = LHSPart.second.getAsInteger(10, LHSVal); (void)LHSFailed;
1803 assert(!LHSFailed &&
"Unable to convert LHS to integer.");
1804 bool RHSFailed = RHSPart.second.getAsInteger(10, RHSVal); (void)RHSFailed;
1805 assert(!RHSFailed &&
"Unable to convert RHS to integer.");
1807 if (LHSVal != RHSVal)
1808 return LHSVal < RHSVal;
1810 return LHSNumParts < RHSNumParts;
1814 raw_ostream &
operator<<(raw_ostream &OS,
const RecordKeeper &RK);
1819 Init *
Name,
const std::string &Scoper);
1824 const std::string &
Name,
const std::string &Scoper);
void addTemplateArg(StringRef Name)
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
static BinOpInit * get(BinaryOp opc, Init *lhs, Init *rhs, RecTy *Type)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
RecordVal * getValue(const Init *Name)
virtual Init * convertValue(VarBitInit *VB)
virtual Init * convertValue(ListInit *LI)
virtual Init * convertValue(ListInit *LI)
void print(raw_ostream &OS) const
virtual Init * getBit(unsigned Bit) const
COFF::RelocationTypeX86 Type
static bool classof(const Init *I)
const_iterator end(StringRef path)
Get end iterator over path.
bool operator()(const Record *Rec1, const Record *Rec2) const
virtual Init * convertValue(FieldInit *FI)
RecTyKind
Subclass discriminator (for dyn_cast<> et al.)
virtual Init * convertValue(IntInit *II)
virtual OpInit * clone(std::vector< Init * > &Operands) const
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual bool isComplete() const
MultiClass(const std::string &Name, SMLoc Loc, RecordKeeper &Records)
virtual Init * convertValue(VarBitInit *VB)
const std::string & getValue() const
void Profile(FoldingSetNodeID &ID) const
virtual Init * convertInitializerTo(RecTy *Ty) const
unsigned getNumBits() const
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
unsigned getNumArgs() const
virtual Init * getOperand(int i) const
bool getValueAsBit(StringRef FieldName) const
virtual Init * convertValue(VarInit *VI)
TypedInit(InitKind K, RecTy *T)
virtual Init * convertValue(IntInit *II)
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
const std::string & getArgName(unsigned Num) const
virtual Init * getBit(unsigned Bit) const
size_t size() const
size - Get the string size.
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
virtual Init * convertValue(DefInit *DI)
virtual Init * convertValue(BitInit *BI)
virtual Init * convertValue(DefInit *DI)
static bool classof(const RecTy *RT)
virtual Init * getBit(unsigned Bit) const
Record * getElementAsRecord(unsigned i) const
virtual RecTy * getFieldType(const std::string &FieldName) const
const RecordVal * getValue(StringRef Name) const
virtual Init * getBit(unsigned Bit) const
static bool classof(const Init *I)
virtual Init * convertValue(UnOpInit *UI)
virtual Init * convertValue(IntInit *II)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
std::string getNameInitAsString() const
static UnOpInit * get(UnaryOp opc, Init *lhs, RecTy *Type)
static bool classof(const Init *I)
static size_t min(size_t a, size_t b)
virtual Init * getOperand(int i) const
Init * getValueInit(StringRef FieldName) const
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual Init * convertValue(DagInit *DI)
virtual Init * convertValue(BitsInit *BI)
const std::vector< Init * > & getTemplateArgs() const
virtual Init * convertValue(UnOpInit *UI)
virtual std::string getAsUnquotedString() const
virtual bool baseClassOf(const RecTy *) const
virtual Init * convertValue(FieldInit *FI)
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
static bool classof(const RecTy *RT)
virtual RecTy * getFieldType(const std::string &FieldName) const
virtual Init * getFieldInit(Record &R, const RecordVal *RV, const std::string &FieldName) const
std::string str() const
str - Get the contents as an std::string.
virtual std::string getAsString() const
void Profile(FoldingSetNodeID &ID) const
const_iterator begin(StringRef path)
Get begin iterator over path.
virtual Init * Fold(Record *CurRec, MultiClass *CurMultiClass) const
BinaryOp getOpcode() const
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
Record * getValueAsDef(StringRef FieldName) const
Init * getElement(unsigned i) const
virtual Init * convertValue(StringInit *SI)
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual Init * convertValue(TernOpInit *UI)
bool allInComplete() const
virtual Init * Fold(Record *CurRec, MultiClass *CurMultiClass) const
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
virtual Init * convertValue(TernOpInit *UI)
static bool classof(const Init *I)
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
void removeValue(StringRef Name)
virtual RecTy * getFieldType(const std::string &FieldName) const
virtual Init * getBit(unsigned B) const
std::string getValueAsString(StringRef FieldName) const
Init * getOperator() const
virtual bool isComplete() const
virtual std::string getAsString() const
std::pair< bool, StringRef > getPart(size_t i)
virtual Init * convertValue(VarBitInit *VB)
virtual Init * convertValue(ListInit *LI)
virtual Init * convertValue(StringInit *SI)
virtual std::string getAsUnquotedString() const
virtual Init * convertValue(VarBitInit *VB)
LoopInfoBase< BlockT, LoopT > * LI
void print(raw_ostream &OS) const
print - Print out this value.
virtual Init * convertValue(StringInit *SI)
virtual Init * convertValue(ListInit *LI)
const std::string & getName() const
virtual Init * convertValue(FieldInit *FI)
virtual Init * convertValue(FieldInit *FI)
virtual Init * convertValue(VarInit *VI)
static bool classof(const Init *I)
virtual Init * convertValue(UnsetInit *UI)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
virtual Init * convertValue(ListInit *LI)
virtual Init * convertValue(DefInit *DI)
virtual int getNumOperands() const =0
static bool classof(const Init *I)
void addSuperClass(Record *R, SMRange Range)
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
static bool classof(const Init *I)
static bool classof(const RecTy *RT)
static bool classof(const Init *I)
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const =0
virtual Init * convertValue(TernOpInit *UI)
virtual Init * convertValue(FieldInit *FI)
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
InitKind
Discriminator enum (for isa<>, dyn_cast<>, et al.)
ArrayRef< SMRange > getSuperClassRanges() const
virtual Init * convertValue(VarInit *VI)
#define llvm_unreachable(msg)
virtual Init * convertValue(StringInit *SI)
std::vector< std::string >::const_iterator const_name_iterator
static StringRecTy * get()
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual OpInit * clone(std::vector< Init * > &Operands) const
virtual Init * convertInitializerTo(RecTy *Ty) const
Init * getOperand() const
virtual Init * convertValue(StringInit *SI)
const_name_iterator name_end() const
virtual Init * convertValue(VarInit *VI)
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual Init * convertInitializerTo(RecTy *Ty) const
Record * getClass(const std::string &Name) const
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
virtual bool baseClassOf(const RecTy *) const
ID
LLVM Calling Convention Representation.
void print(raw_ostream &OS, bool PrintSem=true) const
const std::map< std::string, Record * > & getClasses() const
virtual Init * convertValue(TernOpInit *BO)
BitsInit * getValueAsBitsInit(StringRef FieldName) const
RecordVal(Init *N, RecTy *T, unsigned P)
virtual Init * convertValue(BitInit *BI)
virtual Init * convertValue(IntInit *II)
virtual Init * convertValue(BitsInit *BI)
const_iterator begin() const
virtual Init * convertValue(BinOpInit *UI)
virtual Init * convertValue(UnsetInit *UI)
ListInit * getValueAsListInit(StringRef FieldName) const
virtual OpInit * clone(std::vector< Init * > &Operands) const =0
const char * data() const
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
const std::string getNameInitAsString() const
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual Init * convertValue(DagInit *CI)
const_arg_iterator arg_end() const
std::vector< Record * > RecordVector
static bool classof(const RecTy *RT)
Record(Init *N, ArrayRef< SMLoc > locs, RecordKeeper &records, bool Anonymous=false)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
Init * getArg(unsigned Num) const
static bool classof(const Init *I)
void Profile(FoldingSetNodeID &ID) const
virtual bool isComplete() const
static bool classof(const RecTy *RT)
static bool classof(const RecTy *RT)
static bool classof(const Init *I)
virtual Init * convertValue(FieldInit *FI)
virtual Init * convertValue(VarInit *VI)
virtual Init * convertValue(BitInit *BI)
virtual std::string getAsString() const
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual unsigned getBitNum() const
const std::string & getName() const
virtual Init * getBit(unsigned Bit) const =0
DagInit * getValueAsDag(StringRef FieldName) const
virtual Init * convertValue(StringInit *SI)
virtual Init * convertValue(TypedInit *TI)
virtual Init * convertValue(ListInit *LI)
std::vector< std::string > getValueAsListOfStrings(StringRef FieldName) const
const std::string & getName() const
virtual std::string getAsString() const
virtual bool baseClassOf(const RecTy *) const
virtual Init * convertInitListSlice(const std::vector< unsigned > &Elements) const
void resolveReferencesTo(const RecordVal *RV)
std::string getNameInitAsString() const
virtual Init * convertInitializerTo(RecTy *Ty) const =0
virtual unsigned getBitNum() const
virtual RecTy * getFieldType(const std::string &FieldName) const
virtual Init * convertValue(BinOpInit *UI)
Record * getDef(const std::string &Name) const
bool operator()(const Record *Rec1, const Record *Rec2) const
virtual Init * convertValue(DefInit *DI)
virtual Init * convertValue(FieldInit *FI)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
virtual Init * convertInitializerTo(RecTy *Ty) const
std::vector< Record * > getAllDerivedDefinitions(const std::string &ClassName) const
virtual Init * convertValue(VarBitInit *VB)
virtual Init * convertValue(UnsetInit *UI)
virtual bool baseClassOf(const RecTy *) const
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual Init * convertValue(DagInit *DI)
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual Init * getBit(unsigned Bit) const
virtual Init * convertValue(StringInit *SI)
RecordVector DefPrototypes
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual Init * convertValue(UnOpInit *UI)
virtual Init * getBit(unsigned Bit) const
TypedInit * getVariable() const
virtual std::string getAsString() const
virtual Init * convertValue(TernOpInit *UI)
virtual Init * getBit(unsigned Bit) const
SmallVector< std::pair< bool, StringRef >, 4 > Parts
virtual Init * convertInitializerBitRange(const std::vector< unsigned > &Bits) const
virtual Init * convertValue(FieldInit *FI)
virtual Init * convertValue(IntInit *II)
const RecordVal * getValue(const Init *Name) const
virtual Init * convertValue(UnsetInit *UI)
virtual Init * convertValue(TernOpInit *UI)
virtual Init * convertInitializerTo(RecTy *Ty) const
for(unsigned i=0, e=MI->getNumOperands();i!=e;++i)
static bool classof(const Init *I)
virtual bool isComplete() const
virtual bool typeIsConvertibleTo(const RecTy *RHS) const =0
virtual Init * convertValue(DefInit *DI)
std::vector< int64_t > getValueAsListOfInts(StringRef FieldName) const
virtual Init * convertValue(BinOpInit *UI)
virtual Init * convertValue(BitsInit *BI)
virtual Init * getOperand(int i) const
RecTyKind getRecTyKind() const
static BitInit * get(bool V)
bool isTemplateArg(StringRef Name) const
const std::vector< Record * > & getSuperClasses() const
static bool classof(const Init *I)
virtual Init * convertInitializerTo(RecTy *Ty) const
bool isValueUnset(StringRef FieldName) const
Return true if the named field is unset.
ArrayRef< Init * > getValues() const
DefInit * getDefInit()
get the corresponding DefInit.
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual Init * convertValue(BitInit *BI)
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
std::vector< Record * > getValueAsListOfDefs(StringRef FieldName) const
virtual Init * convertValue(IntInit *II)
virtual Init * convertValue(ListInit *LI)
virtual Init * convertValue(DagInit *DI)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
Init * QualifyName(Record &CurRec, MultiClass *CurMultiClass, Init *Name, const std::string &Scoper)
virtual Init * convertValue(DagInit *DI)
const Init * getNameInit() const
static bool classof(const Init *I)
int64_t getValueAsInt(StringRef FieldName) const
virtual Init * convertValue(VarBitInit *VB)
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
virtual Init * convertInitializerBitRange(const std::vector< unsigned > &Bits) const
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
virtual Init * Fold(Record *CurRec, MultiClass *CurMultiClass) const =0
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual Init * convertValue(DagInit *DI)
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual std::string getAsString() const
getAsString - Convert this value to a string form.
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual Init * Fold(Record *CurRec, MultiClass *CurMultiClass) const
virtual Init * convertValue(TernOpInit *UI)
void addTemplateArg(Init *Name)
virtual Init * convertValue(VarInit *VI)
bool operator()(const Record *Rec1, const Record *Rec2) const
static bool classof(const Init *I)
virtual Init * convertValue(BitsInit *BI)
virtual std::string getAsString() const
ArrayRef< SMLoc > getLoc() const
virtual Init * getFieldInit(Record &R, const RecordVal *RV, const std::string &FieldName) const
RecordVal * getValue(StringRef Name)
static StringInit * get(StringRef)
virtual Init * getBitVar() const
static bool classof(const RecTy *RT)
Init * getNameInit() const
const_iterator end() const
virtual Init * convertValue(BinOpInit *UI)
const std::vector< RecordVal > & getValues() const
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
#define LLVM_DELETED_FUNCTION
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
static unsigned getNewUID()
unsigned getElementNum() const
virtual Init * convertValue(BinOpInit *UI)
virtual Init * convertValue(UnsetInit *UI)
bool isTemplateArg(Init *Name) const
virtual Init * convertInitListSlice(const std::vector< unsigned > &Elements) const
virtual Init * convertValue(UnOpInit *UI)
const_arg_iterator arg_begin() const
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
bool isSubClassOf(StringRef Name) const
void removeValue(Init *Name)
static bool classof(const Init *I)
virtual Init * convertInitListSlice(const std::vector< unsigned > &Elements) const
static bool ascii_isdigit(char x)
RecTy * getElementType() const
RecordKeeper & getRecords() const
virtual Init * convertValue(DagInit *DI)
virtual Init * convertValue(BitInit *BI)
unsigned getNumBits() const
virtual Init * getBitVar() const
void removeDef(const std::string &Name)
virtual Init * convertValue(UnOpInit *UI)
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
virtual Init * convertValue(UnsetInit *UI)
bool isSubClassOf(const Record *R) const
std::vector< Init * >::const_iterator const_iterator
virtual Init * getFieldInit(Record &R, const RecordVal *RV, const std::string &FieldName) const
virtual Init * convertInitializerBitRange(const std::vector< unsigned > &Bits) const
virtual Init * convertValue(VarBitInit *VB)
void addValue(const RecordVal &RV)
static TernOpInit * get(TernaryOp opc, Init *lhs, Init *mhs, Init *rhs, RecTy *Type)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
virtual OpInit * clone(std::vector< Init * > &Operands) const
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
RecTy * resolveTypes(RecTy *T1, RecTy *T2)
virtual Init * convertValue(UnsetInit *UI)
virtual Init * convertValue(BinOpInit *UI)
static ListInit * get(ArrayRef< Init * > Range, RecTy *EltTy)
const std::map< std::string, Record * > & getDefs() const
void removeClass(const std::string &Name)
virtual Init * convertValue(BitInit *BI)
virtual Init * getBit(unsigned Bit) const
UnaryOp getOpcode() const
virtual Init * resolveListElementReference(Record &R, const RecordVal *RV, unsigned Elt) const
virtual Init * getBit(unsigned Bit) const
raw_ostream & operator<<(raw_ostream &OS, const APInt &I)
Record * getRecord() const
bool getValueAsBitOrUnset(StringRef FieldName, bool &Unset) const
RecordParts(StringRef Rec)
virtual Init * getBit(unsigned Bit) const
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
OpInit(InitKind K, RecTy *Type)
virtual Init * convertValue(UnOpInit *UI)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
const std::string & getName() const
virtual Init * getBit(unsigned Bit) const
Init * getNameInit() const
LLVM Value Representation.
Record(const std::string &N, ArrayRef< SMLoc > locs, RecordKeeper &records, bool Anonymous=false)
virtual Init * resolveReferences(Record &R, const RecordVal *RV) const
virtual std::string getAsString() const =0
getAsString - Convert this value to a string form.
virtual Init * getOperand(int i) const =0
virtual Init * convertValue(VarInit *VI)
virtual Init * convertValue(VarInit *VI)
virtual Init * convertValue(DefInit *DI)
TernaryOp getOpcode() const
unsigned getPrefix() const
virtual int getNumOperands() const
virtual Init * convertValue(StringInit *SI)
virtual Init * convertValue(VarBitInit *VB)
virtual Init * convertValue(UnsetInit *UI)
static bool classof(const Init *I)
virtual bool baseClassOf(const RecTy *) const
virtual Init * convertInitializerTo(RecTy *Ty) const
virtual std::string getAsString() const =0
Represents a location in source code.
ListRecTy * getListTy()
getListTy - Returns the type representing list<this>.
virtual Init * convertValue(DagInit *DI)
virtual Init * getBit(unsigned Bit) const
const_name_iterator name_begin() const
virtual bool baseClassOf(const RecTy *) const
virtual Init * convertValue(BitsInit *BI)
virtual Init * convertValue(TernOpInit *BO)
virtual Init * convertValue(DefInit *DI)
bool operator()(const Record *LHS, const Record *RHS) const
virtual bool typeIsConvertibleTo(const RecTy *RHS) const
virtual int getNumOperands() const
virtual Init * convertInitializerBitRange(const std::vector< unsigned > &Bits) const
static bool classof(const Init *I)
std::vector< Init * >::const_iterator const_arg_iterator
bool empty() const
empty - Check if the string is empty.
virtual std::string getAsString() const
virtual int getNumOperands() const