From e18e2bb916ec5ad59047955f5faf16de670ff9cb Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 30 Dec 2015 06:00:22 +0000 Subject: [PATCH] [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256627 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/AsmMatcherEmitter.cpp | 40 ++++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index a6b5fb39eb3..08c540ddcd1 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/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 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"; -- 2.34.1