diff options
author | Chris Lattner <sabre@nondot.org> | 2006-07-18 17:43:54 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-07-18 17:43:54 +0000 |
commit | e7a589df09ed4d1f0853fb586609b00357a34ac2 (patch) | |
tree | e97a9cfe1dbae9da8613d3f1a86918a3b47045d2 /utils/TableGen/AsmWriterEmitter.cpp | |
parent | b51ecd4dd93b8eccf2cba3d541cff0f7cdbf7e1c (diff) | |
download | llvm-e7a589df09ed4d1f0853fb586609b00357a34ac2.tar.gz llvm-e7a589df09ed4d1f0853fb586609b00357a34ac2.tar.bz2 llvm-e7a589df09ed4d1f0853fb586609b00357a34ac2.tar.xz |
Emit switches with 1/2 cases as unconditional code or an if/then/else for
tidyness.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29181 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/AsmWriterEmitter.cpp')
-rw-r--r-- | utils/TableGen/AsmWriterEmitter.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index f84ebbfad4..9802c3aaf5 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -560,18 +560,32 @@ void AsmWriterEmitter::run(std::ostream &O) { BitsLeft -= NumBits; O << "\n // Fragment " << i << " encoded into " << NumBits - << " bits for " << Commands.size() << " unique commands.\n" - << " switch ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " - << ((1 << NumBits)-1) << ") {\n" - << " default: // unreachable.\n"; + << " bits for " << Commands.size() << " unique commands.\n"; - // Print out all the cases. - for (unsigned i = 0, e = Commands.size(); i != e; ++i) { - O << " case " << i << ":\n"; - O << Commands[i]; - O << " break;\n"; + if (Commands.size() == 1) { + // Only one possibility, just emit it. + O << Commands[0]; + } else if (Commands.size() == 2) { + // Emit two possibilitys with if/else. + O << " if ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " + << ((1 << NumBits)-1) << ") {\n" + << Commands[1] + << " } else {\n" + << Commands[0] + << " }\n\n"; + } else { + O << " switch ((Bits >> " << (BitsLeft+AsmStrBits) << ") & " + << ((1 << NumBits)-1) << ") {\n" + << " default: // unreachable.\n"; + + // Print out all the cases. + for (unsigned i = 0, e = Commands.size(); i != e; ++i) { + O << " case " << i << ":\n"; + O << Commands[i]; + O << " break;\n"; + } + O << " }\n\n"; } - O << " }\n\n"; } // Okay, go through and strip out the operand information that we just |