aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-10-30 19:47:49 +0000
committerChris Lattner <sabre@nondot.org>2010-10-30 19:47:49 +0000
commit8cf8bcc40c977713e51fb85fb9f24a0ecfbde24b (patch)
treef770ed84c61823a5d1aaacdd171f8a59cddf3de7
parent0f899c78e18e39a8ccd08386aaa493a1b9a712a3 (diff)
downloadexternal_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.html2
-rw-r--r--utils/TableGen/AsmMatcherEmitter.cpp10
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;";