[llvm-commits] [llvm] r99722 - /llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp
Chris Lattner
sabre at nondot.org
Sat Mar 27 11:49:33 PDT 2010
Author: lattner
Date: Sat Mar 27 13:49:33 2010
New Revision: 99722
URL: http://llvm.org/viewvc/llvm-project?rev=99722&view=rev
Log:
fix a bug in my recent patch that increased opcode size to 2 bytes:
the index comments nested under OPC_SwitchOpcode were off by one.
This fixes the comments.
Modified:
llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp
Modified: llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp?rev=99722&r1=99721&r2=99722&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp Sat Mar 27 13:49:33 2010
@@ -280,10 +280,14 @@
// For each case we emit the size, then the opcode, then the matcher.
for (unsigned i = 0, e = NumCases; i != e; ++i) {
const Matcher *Child;
- if (const SwitchOpcodeMatcher *SOM = dyn_cast<SwitchOpcodeMatcher>(N))
+ unsigned IdxSize;
+ if (const SwitchOpcodeMatcher *SOM = dyn_cast<SwitchOpcodeMatcher>(N)) {
Child = SOM->getCaseMatcher(i);
- else
+ IdxSize = 2; // size of opcode in table is 2 bytes.
+ } else {
Child = cast<SwitchTypeMatcher>(N)->getCaseMatcher(i);
+ IdxSize = 1; // size of type in table is 1 byte.
+ }
// We need to encode the opcode and the offset of the case code before
// emitting the case code. Handle this by buffering the output into a
@@ -299,7 +303,8 @@
TmpBuf.clear();
raw_svector_ostream OS(TmpBuf);
formatted_raw_ostream FOS(OS);
- ChildSize = EmitMatcherList(Child, Indent+1, CurrentIdx+VBRSize+1, FOS);
+ ChildSize = EmitMatcherList(Child, Indent+1, CurrentIdx+VBRSize+IdxSize,
+ FOS);
} while (GetVBRSize(ChildSize) != VBRSize);
assert(ChildSize != 0 && "Should not have a zero-sized child!");
@@ -315,14 +320,13 @@
CurrentIdx += EmitVBRValue(ChildSize, OS);
OS << ' ';
- if (const SwitchOpcodeMatcher *SOM = dyn_cast<SwitchOpcodeMatcher>(N)) {
+ if (const SwitchOpcodeMatcher *SOM = dyn_cast<SwitchOpcodeMatcher>(N))
OS << "TARGET_OPCODE(" << SOM->getCaseOpcode(i).getEnumName() << "),";
- CurrentIdx += 2;
- } else {
+ else
OS << getEnumName(cast<SwitchTypeMatcher>(N)->getCaseType(i)) << ',';
- ++CurrentIdx;
- }
-
+
+ CurrentIdx += IdxSize;
+
if (!OmitComments)
OS << "// ->" << CurrentIdx+ChildSize;
OS << '\n';
More information about the llvm-commits
mailing list