diff options
author | Chris Lattner <sabre@nondot.org> | 2010-10-30 19:47:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-10-30 19:47:49 +0000 |
commit | 8cf8bcc40c977713e51fb85fb9f24a0ecfbde24b (patch) | |
tree | f770ed84c61823a5d1aaacdd171f8a59cddf3de7 | |
parent | 0f899c78e18e39a8ccd08386aaa493a1b9a712a3 (diff) | |
download | external_llvm-8cf8bcc40c977713e51fb85fb9f24a0ecfbde24b.zip external_llvm-8cf8bcc40c977713e51fb85fb9f24a0ecfbde24b.tar.gz external_llvm-8cf8bcc40c977713e51fb85fb9f24a0ecfbde24b.tar.bz2 |
fix typos and some serious bugs in feature handling (but not for
cases that are currently exercised). Thanks to Frits van Bommel for
the great review!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117840 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/CodeGenerator.html | 2 | ||||
-rw-r--r-- | utils/TableGen/AsmMatcherEmitter.cpp | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/docs/CodeGenerator.html b/docs/CodeGenerator.html index 60d54e5..0a77617 100644 --- a/docs/CodeGenerator.html +++ b/docs/CodeGenerator.html @@ -1909,7 +1909,7 @@ description.</p> <div class="doc_text"> -<p>The first phase of alias processing is simple instruction mneomonic +<p>The first phase of alias processing is simple instruction mnemonic remapping for classes of instructions which are allowed with two different mnemonics. This phase is a simple and unconditionally remapping from one input mnemonic to one output mnemonic. It isn't possible for this form of alias to diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index 999c137..80f5e08 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/utils/TableGen/AsmMatcherEmitter.cpp @@ -1571,21 +1571,25 @@ static bool EmitMnemonicAliases(raw_ostream &OS) { // We can't have two aliases from the same mnemonic with no predicate. PrintError(ToVec[AliasWithNoPredicate]->getLoc(), "two MnemonicAliases with the same 'from' mnemonic!"); - PrintError(R->getLoc(), "this is the other MnemonicAliases."); - throw std::string("ERROR: Invalid MnemonicAliases definitions!"); + PrintError(R->getLoc(), "this is the other MnemonicAlias."); + throw std::string("ERROR: Invalid MnemonicAlias definitions!"); } AliasWithNoPredicate = i; continue; } + if (!MatchCode.empty()) + MatchCode += "else "; MatchCode += "if ((Features & " + FeatureMask + ") == "+FeatureMask+")\n"; MatchCode += " Mnemonic = \"" +R->getValueAsString("ToMnemonic")+"\";\n"; } if (AliasWithNoPredicate != -1) { Record *R = ToVec[AliasWithNoPredicate]; - MatchCode += "Mnemonic = \"" + R->getValueAsString("ToMnemonic") + "\";"; + if (!MatchCode.empty()) + MatchCode += "else\n "; + MatchCode += "Mnemonic = \"" + R->getValueAsString("ToMnemonic")+"\";\n"; } MatchCode += "return;"; |