summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-05-24 22:17:36 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-05-24 22:17:36 +0000
commit74fd80e8fc5866f12818b3b54c6099efde871527 (patch)
treef61fa14b3b8e50be0b6064ed614a0719a09a1c1a
parent8a120b10bdfa13698b8d5b78fd1d19dbda590898 (diff)
downloadbcm5719-llvm-74fd80e8fc5866f12818b3b54c6099efde871527.tar.gz
bcm5719-llvm-74fd80e8fc5866f12818b3b54c6099efde871527.zip
Don't put TGParser scratch results in the output.
Only fully expanded Records should go into RecordKeeper. llvm-svn: 157431
-rw-r--r--llvm/include/llvm/TableGen/Record.h10
-rw-r--r--llvm/lib/TableGen/TGParser.cpp4
-rw-r--r--llvm/test/TableGen/ForeachLoop.td1
3 files changed, 9 insertions, 6 deletions
diff --git a/llvm/include/llvm/TableGen/Record.h b/llvm/include/llvm/TableGen/Record.h
index 3aea1aeaead..a8256b77357 100644
--- a/llvm/include/llvm/TableGen/Record.h
+++ b/llvm/include/llvm/TableGen/Record.h
@@ -1558,12 +1558,14 @@ public:
return I == Defs.end() ? 0 : I->second;
}
void addClass(Record *R) {
- assert(getClass(R->getNameInitAsString()) == 0 && "Class already exists!");
- Classes.insert(std::make_pair(R->getNameInitAsString(), R));
+ bool Ins = Classes.insert(std::make_pair(R->getName(), R)).second;
+ (void)Ins;
+ assert(Ins && "Class already exists");
}
void addDef(Record *R) {
- assert(getDef(R->getNameInitAsString()) == 0 && "Def already exists!");
- Defs.insert(std::make_pair(R->getNameInitAsString(), R));
+ bool Ins = Defs.insert(std::make_pair(R->getName(), R)).second;
+ (void)Ins;
+ assert(Ins && "Record already exists");
}
/// removeClass - Remove, but do not delete, the specified record.
diff --git a/llvm/lib/TableGen/TGParser.cpp b/llvm/lib/TableGen/TGParser.cpp
index 68d9ef4c092..b23f4100136 100644
--- a/llvm/lib/TableGen/TGParser.cpp
+++ b/llvm/lib/TableGen/TGParser.cpp
@@ -1903,7 +1903,7 @@ bool TGParser::ParseDef(MultiClass *CurMultiClass) {
// Parse ObjectName and make a record for it.
Record *CurRec = new Record(ParseObjectName(CurMultiClass), DefLoc, Records);
- if (!CurMultiClass) {
+ if (!CurMultiClass && Loops.empty()) {
// Top-level def definition.
// Ensure redefinition doesn't happen.
@@ -1913,7 +1913,7 @@ bool TGParser::ParseDef(MultiClass *CurMultiClass) {
return true;
}
Records.addDef(CurRec);
- } else {
+ } else if (CurMultiClass) {
// Otherwise, a def inside a multiclass, add it to the multiclass.
for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size(); i != e; ++i)
if (CurMultiClass->DefPrototypes[i]->getNameInit()
diff --git a/llvm/test/TableGen/ForeachLoop.td b/llvm/test/TableGen/ForeachLoop.td
index e2defe9cfea..342609643cc 100644
--- a/llvm/test/TableGen/ForeachLoop.td
+++ b/llvm/test/TableGen/ForeachLoop.td
@@ -9,6 +9,7 @@ class Register<string name, int idx> {
foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in
def R#i : Register<"R"#i, i>;
+// CHECK-NOT: !strconcat
// CHECK: def R0
// CHECK: string Name = "R0";
OpenPOWER on IntegriCloud