31 struct SubClassReference;
32 struct SubMultiClassReference;
36 std::vector<unsigned>
Bits;
57 std::vector<std::vector<LetRecord> > LetStack;
58 std::map<std::string, MultiClass*> MultiClasses;
62 typedef std::vector<ForeachLoop> LoopVector;
86 Lex(SrcMgr), CurMultiClass(0), Records(records) {}
106 const std::vector<unsigned> &BitList,
Init *V);
107 bool SetValue(
Record *TheRec,
SMLoc Loc,
const std::string &ValName,
108 const std::vector<unsigned> &BitList,
Init *V) {
111 bool AddSubClass(Record *Rec, SubClassReference &SubClass);
113 SubMultiClassReference &SubMultiClass);
119 IterRecord(VarInit *Var, Init *Val) : IterVar(Var), IterValue(Val) {}
124 typedef std::vector<IterRecord> IterSet;
126 bool ProcessForeachDefs(Record *CurRec, SMLoc Loc);
127 bool ProcessForeachDefs(Record *CurRec, SMLoc Loc, IterSet &IterVals);
133 bool ParseMultiClass();
134 Record *InstantiateMulticlassDef(
MultiClass &MC,
137 SMRange DefmPrefixRange);
142 const std::vector<Init *> &TArgs,
143 std::vector<Init *> &TemplateVals,
148 SMLoc DefmPrefixLoc);
152 bool ParseTopLevelLet(
MultiClass *CurMultiClass);
153 std::vector<LetRecord> ParseLetList();
155 bool ParseObjectBody(Record *CurRec);
156 bool ParseBody(Record *CurRec);
157 bool ParseBodyItem(Record *CurRec);
159 bool ParseTemplateArgList(Record *CurRec);
160 Init *ParseDeclaration(Record *CurRec,
bool ParsingTemplateArgs);
161 VarInit *ParseForeachDeclaration(ListInit *&ForeachListValue);
163 SubClassReference ParseSubClassReference(Record *CurRec,
bool isDefm);
164 SubMultiClassReference ParseSubMultiClassReference(
MultiClass *CurMC);
166 Init *ParseIDValue(Record *CurRec, IDParseMode Mode = ParseValueMode);
167 Init *ParseIDValue(Record *CurRec,
const std::string &
Name, SMLoc NameLoc,
168 IDParseMode Mode = ParseValueMode);
169 Init *ParseSimpleValue(Record *CurRec, RecTy *ItemType = 0,
170 IDParseMode Mode = ParseValueMode);
171 Init *ParseValue(Record *CurRec, RecTy *ItemType = 0,
172 IDParseMode Mode = ParseValueMode);
173 std::vector<Init*> ParseValueList(Record *CurRec, Record *ArgsRec = 0,
175 std::vector<std::pair<llvm::Init*, std::string> > ParseDagArgList(Record *);
176 bool ParseOptionalRangeList(std::vector<unsigned> &Ranges);
177 bool ParseOptionalBitList(std::vector<unsigned> &Ranges);
178 std::vector<unsigned> ParseRangeList();
179 bool ParseRangePiece(std::vector<unsigned> &Ranges);
181 Init *ParseOperation(Record *CurRec);
182 RecTy *ParseOperatorType();
183 Init *ParseObjectName(
MultiClass *CurMultiClass);
184 Record *ParseClassID();
186 bool ApplyLetStack(Record *CurRec);
const DependenciesMapTy & getDependencies() const
ForeachLoop(VarInit *IVar, ListInit *LValue)
const TGLexer::DependenciesMapTy & getDependencies() const
LetRecord(const std::string &N, const std::vector< unsigned > &B, Init *V, SMLoc L)
std::vector< unsigned > Bits
bool Error(SMLoc L, const Twine &Msg) const
static StringInit * get(StringRef)
std::map< std::string, SMLoc > DependenciesMapTy
TGParser(SourceMgr &SrcMgr, RecordKeeper &records)
LLVM Value Representation.
Represents a location in source code.
bool TokError(const Twine &Msg) const
void PrintError(ArrayRef< SMLoc > ErrorLoc, const Twine &Msg)
TGLexer - TableGen Lexer class.