diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-03-25 06:33:05 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-03-25 06:33:05 +0000 |
| commit | 552dddc51c086664b0685bb6b9dcc9654167f1eb (patch) | |
| tree | 2d674d181fa3773fcc2d9e2f23e62f62cfb9635a /llvm/utils/TableGen/DAGISelMatcherEmitter.cpp | |
| parent | 32a5c4a4e636fa4f417abd6ca81bfe582c4df787 (diff) | |
| download | bcm5719-llvm-552dddc51c086664b0685bb6b9dcc9654167f1eb.tar.gz bcm5719-llvm-552dddc51c086664b0685bb6b9dcc9654167f1eb.zip | |
Change tblgen to emit FOOISD opcode names as two
bytes instead of one byte. This is important because
we're running up to too many opcodes to fit in a byte
and it is aggrevated by FIRST_TARGET_MEMORY_OPCODE
making the numbering sparse. This just bites the
bullet and bloats out the table. In practice, this
increases the size of the x86 isel table from 74.5K
to 76K. I think we'll cope :)
This fixes rdar://7791648
llvm-svn: 99494
Diffstat (limited to 'llvm/utils/TableGen/DAGISelMatcherEmitter.cpp')
| -rw-r--r-- | llvm/utils/TableGen/DAGISelMatcherEmitter.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp b/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp index 704fe944220..22a3430f98a 100644 --- a/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp +++ b/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp @@ -255,9 +255,9 @@ EmitMatcher(const Matcher *N, unsigned Indent, unsigned CurrentIdx, } case Matcher::CheckOpcode: - OS << "OPC_CheckOpcode, " - << cast<CheckOpcodeMatcher>(N)->getOpcode().getEnumName() << ",\n"; - return 2; + OS << "OPC_CheckOpcode, TARGET_OPCODE(" + << cast<CheckOpcodeMatcher>(N)->getOpcode().getEnumName() << "),\n"; + return 3; case Matcher::SwitchOpcode: case Matcher::SwitchType: { @@ -315,16 +315,17 @@ EmitMatcher(const Matcher *N, unsigned Indent, unsigned CurrentIdx, CurrentIdx += EmitVBRValue(ChildSize, OS); OS << ' '; - if (const SwitchOpcodeMatcher *SOM = dyn_cast<SwitchOpcodeMatcher>(N)) - OS << SOM->getCaseOpcode(i).getEnumName(); - else - OS << getEnumName(cast<SwitchTypeMatcher>(N)->getCaseType(i)); - OS << ','; + if (const SwitchOpcodeMatcher *SOM = dyn_cast<SwitchOpcodeMatcher>(N)) { + OS << "TARGET_OPCODE(" << SOM->getCaseOpcode(i).getEnumName() << "),"; + CurrentIdx += 2; + } else { + OS << getEnumName(cast<SwitchTypeMatcher>(N)->getCaseType(i)) << ','; + ++CurrentIdx; + } if (!OmitComments) - OS << "// ->" << CurrentIdx+ChildSize+1; + OS << "// ->" << CurrentIdx+ChildSize; OS << '\n'; - ++CurrentIdx; OS << TmpBuf.str(); CurrentIdx += ChildSize; } |

