diff options
author | Craig Topper <craig.topper@gmail.com> | 2015-12-30 06:00:22 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2015-12-30 06:00:22 +0000 |
commit | 39311c7ed53d4cc7a61be5d5b8c2bf06a60344ac (patch) | |
tree | 9e3aa03be89c6c914c3140f4243a37a6a7a8a9db /llvm/utils/TableGen | |
parent | 77bd2b75813851b8484e667c295bca88431f682f (diff) | |
download | bcm5719-llvm-39311c7ed53d4cc7a61be5d5b8c2bf06a60344ac.tar.gz bcm5719-llvm-39311c7ed53d4cc7a61be5d5b8c2bf06a60344ac.zip |
[TableGen] Remove raw_string_ostream by just emitting the header for the switch the first time we emit a case. If the header was never emitted just print the default at the end. NFC
llvm-svn: 256627
Diffstat (limited to 'llvm/utils/TableGen')
-rw-r--r-- | llvm/utils/TableGen/AsmMatcherEmitter.cpp | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp index a6b5fb39eb3..08c540ddcd1 100644 --- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp +++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp @@ -2119,12 +2119,7 @@ static void emitIsSubclass(CodeGenTarget &Target, OS << " if (A == B)\n"; OS << " return true;\n\n"; - std::string OStr; - raw_string_ostream SS(OStr); - unsigned Count = 0; - SS << " switch (A) {\n"; - SS << " default:\n"; - SS << " return false;\n"; + bool EmittedSwitch = false; for (const auto &A : Infos) { std::vector<StringRef> SuperClasses; for (const auto &B : Infos) { @@ -2134,33 +2129,38 @@ static void emitIsSubclass(CodeGenTarget &Target, if (SuperClasses.empty()) continue; - ++Count; - SS << "\n case " << A.Name << ":\n"; + // If this is the first SuperClass, emit the switch header. + if (!EmittedSwitch) { + OS << " switch (A) {\n" + OS << " default:\n"; + OS << " return false;\n"; + EmittedSwitch = true; + } + + OS << "\n case " << A.Name << ":\n"; if (SuperClasses.size() == 1) { - SS << " return B == " << SuperClasses.back().str() << ";\n"; + OS << " return B == " << SuperClasses.back().str() << ";\n"; continue; } if (!SuperClasses.empty()) { - SS << " switch (B) {\n"; - SS << " default: return false;\n"; + OS << " switch (B) {\n"; + OS << " default: return false;\n"; for (StringRef SC : SuperClasses) - SS << " case " << SC << ": return true;\n"; - SS << " }\n"; + OS << " case " << SC << ": return true;\n"; + OS << " }\n"; } else { // No case statement to emit - SS << " return false;\n"; + OS << " return false;\n"; } } - SS << " }\n"; + OS << " }\n"; - // If there were case statements emitted into the string stream, write them - // to the output stream, otherwise write the default. - if (Count) - OS << SS.str(); - else + // If there were case statements emitted into the string stream write the + // default. + if (!EmittedSwitch) OS << " return false;\n"; OS << "}\n\n"; |