diff options
author | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-03-09 12:24:30 +0000 |
---|---|---|
committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-03-09 12:24:30 +0000 |
commit | 8aa9d5839dbb4d457616a935eb2167ceb0087dfa (patch) | |
tree | e5febda9150690cc52ae82ecb324b0447fb0c781 /llvm/lib/TableGen/Record.cpp | |
parent | 2435855abe6ccb1cd874f0e5e699815a2697b73d (diff) | |
download | bcm5719-llvm-8aa9d5839dbb4d457616a935eb2167ceb0087dfa.tar.gz bcm5719-llvm-8aa9d5839dbb4d457616a935eb2167ceb0087dfa.zip |
TableGen: Allow arbitrary list values as ranges of foreach
The changes to FieldInit are required to make field references (Def.field)
work inside a ForeachDeclaration: previously, Def.field wasn't resolved
immediately when Def was already a fully resolved DefInit.
Change-Id: I9875baec2fc5aac8c2b249e45b9cf18c65ae699b
llvm-svn: 327120
Diffstat (limited to 'llvm/lib/TableGen/Record.cpp')
-rw-r--r-- | llvm/lib/TableGen/Record.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp index 9fd8b94e4af..2fbe4cc493f 100644 --- a/llvm/lib/TableGen/Record.cpp +++ b/llvm/lib/TableGen/Record.cpp @@ -1633,16 +1633,17 @@ Init *FieldInit::getBit(unsigned Bit) const { Init *FieldInit::resolveReferences(Resolver &R) const { Init *NewRec = Rec->resolveReferences(R); + if (NewRec != Rec) + return FieldInit::get(NewRec, FieldName)->Fold(); + return const_cast<FieldInit *>(this); +} - if (DefInit *DI = dyn_cast<DefInit>(NewRec)) { +Init *FieldInit::Fold() const { + if (DefInit *DI = dyn_cast<DefInit>(Rec)) { Init *FieldVal = DI->getDef()->getValue(FieldName)->getValue(); - Init *BVR = FieldVal->resolveReferences(R); - if (BVR->isComplete()) - return BVR; + if (FieldVal->isComplete()) + return FieldVal; } - - if (NewRec != Rec) - return FieldInit::get(NewRec, FieldName); return const_cast<FieldInit *>(this); } |