summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/DAGISelMatcherEmitter.cpp
Commit message (Collapse)AuthorAgeFilesLines
* SDAG: Make SelectCodeCommon return voidJustin Bogner2016-05-101-2/+3
| | | | | | | | | | | This means SelectCode unconditionally returns nullptr now. I'll follow up with a change to make that return void as well, but it seems best to keep that one very mechanical. This is part of the work to have Select return void instead of an SDNode *, which is in turn part of llvm.org/pr26808. llvm-svn: 269136
* SDAG: Remove OPC_MarkGlueResults and associated logic. NFCJustin Bogner2016-05-051-10/+0
| | | | | | | | | This opcode never happens in practice, and yet the logic we have in place to handle it would be undefined behaviour if we ever executed it. Remove it rather than trying to refactor code that's never reached. llvm-svn: 268692
* [CodeGen] Add some space optimized forms of EmitNode and MorphNodeTo that ↵Craig Topper2016-05-031-5/+12
| | | | | | | | implicitly indicate the number of result VTs. This shaves about 16K off the X86 matching table taking it down to about 470K. Overall this reduces the llc binary size with all in-tree targets by about 40K. llvm-svn: 268365
* [CodeGen] Add OPC_MoveChild0-OPC_MoveChild7 opcodes to isel matching tables ↵Craig Topper2016-05-021-3/+10
| | | | | | to optimize table size. Shaves about 12K off the X86 matcher table. llvm-svn: 268209
* [CodeGen] Add space-optimized EmitMergeInputChains1_2 to the DAG isel ↵Craig Topper2016-03-071-2/+2
| | | | | | matching tables. Shaves about 5100 bytes from the X86 matcher table. NFC llvm-svn: 262815
* [TableGen][DAGISel] Dedup predicates with same code to run. NFCI.Ahmed Bougacha2015-08-271-4/+25
| | | | | | | | | | | I locally hit the 255 limit, but a lot of these are redundant: each predicate coming from a different record was allocated a new number, even when we already emitted the same code for another predicate. Instead, re-use numbers and emit the predicate code only once. This reduces the total text size of *DAGISel.cpp.o by ~1%. llvm-svn: 246208
* [TableGen] Remove dead code. NFC.Ahmed Bougacha2015-08-271-7/+0
| | | | | | The only user of this was removed in r129670. llvm-svn: 246176
* Teach raw_ostream to accept SmallString.Yaron Keren2015-03-101-2/+2
| | | | | | | | | | | | | | Saves adding .str() call to any raw_ostream << SmallString usage and a small step towards making .str() consistent in the ADTs by removing one of the SmallString::str() use cases, discussion at http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20141013/240026.html I'll update the Phabricator patch http://reviews.llvm.org/D6372 for review of the Twine SmallString support, it's more complex than this one. llvm-svn: 231763
* Use unique_ptr to handle ownership of TreePatterns in ↵David Blaikie2014-11-131-1/+1
| | | | | | | | | CodeGenDAGPatterns::PatternFragments We might be able to use unique_ptr to handle ownership of the TreePatternNodes too - looking into that next. llvm-svn: 221928
* [C++11] More 'nullptr' conversion. In some cases just using a boolean check ↵Craig Topper2014-04-151-2/+2
| | | | | | instead of comparing to nullptr. llvm-svn: 206254
* [C++11] Add 'override' keyword to virtual methods that override their base ↵Craig Topper2014-03-091-7/+7
| | | | | | class. llvm-svn: 203378
* Add CheckChildInteger to ISelMatcher operations. Removes nearly 2000 bytes ↵Craig Topper2014-02-051-0/+9
| | | | | | from X86 matcher table. llvm-svn: 200821
* Couple minor formatting fixes to the XXXGenDAGISel.inc files.Craig Topper2014-01-301-2/+1
| | | | llvm-svn: 200459
* Add OPC_CheckChildSame0-3 to the DAG isel matcher. This replaces sequences ↵Craig Topper2013-10-051-0/+7
| | | | | | of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon. llvm-svn: 192026
* Revert r191940 to see if it fixes the build bots.Craig Topper2013-10-041-7/+0
| | | | llvm-svn: 191941
* Add OPC_CheckChildSame0-3 to the DAG isel matcher. This replaces sequences ↵Craig Topper2013-10-041-0/+7
| | | | | | of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon. llvm-svn: 191940
* Add missing index comments to the left side of the DAG ISel matcher table ↵Craig Topper2013-09-221-2/+6
| | | | | | for each individual case of SwitchOpcode/Type. llvm-svn: 191181
* Fix commentsEli Bendersky2013-02-051-1/+1
| | | | llvm-svn: 174390
* Sort the #include lines for utils/...Chandler Carruth2012-12-041-1/+1
| | | | | | | I've tried to find main moudle headers where possible, but the TableGen stuff may warrant someone else looking at it. llvm-svn: 169251
* Add 'virtual' keywoards to output file for overridden functions.Craig Topper2012-09-161-5/+6
| | | | llvm-svn: 164002
* TblGen: Tweak to pretty-print DAGISel.inc a bit better.Jim Grosbach2012-07-181-2/+2
| | | | llvm-svn: 160463
* Convert assert(0) to llvm_unreachableCraig Topper2012-02-051-6/+5
| | | | llvm-svn: 149814
* Move TableGen's parser and entry point into a libraryPeter Collingbourne2011-10-011-1/+1
| | | | | | This is the first step towards splitting LLVM and Clang's tblgen executables. llvm-svn: 140951
* Rework our internal representation of node predicates to expose moreChris Lattner2011-04-171-27/+19
| | | | | | | | structure and fix some fixmes. We now have a TreePredicateFn class that handles all of the decoding of these things. This is an internal cleanup that has no impact on the code generated by tblgen. llvm-svn: 129670
* Teach TableGen to pre-calculate register enum values when creating theJim Grosbach2011-03-111-23/+16
| | | | | | | | | | | CodeGenRegister entries. Use this information to more intelligently build the literal register entires in the DAGISel matcher table. Specifically, use a single-byte OPC_EmitRegister entry for registers with a value of less than 256 and OPC_EmitRegister2 entry for registers with a larger value. rdar://9066491 llvm-svn: 127456
* trailing whitespace.Jim Grosbach2011-03-011-79/+79
| | | | llvm-svn: 126733
* Generalize the register matching code in DAGISel a bit.Jim Grosbach2011-03-011-19/+39
| | | | llvm-svn: 126731
* flags -> glue for selectiondagChris Lattner2010-12-231-4/+4
| | | | llvm-svn: 122509
* sdisel flag -> glue.Chris Lattner2010-12-231-2/+2
| | | | llvm-svn: 122507
* continue renaming flag -> glue.Chris Lattner2010-12-231-5/+5
| | | | llvm-svn: 122506
* Rework passing parent pointers into complexpatterns, I forgotChris Lattner2010-09-211-2/+3
| | | | | | | | that complex patterns are matched after the entire pattern has a structural match, therefore the NodeStack isn't in a useful state when the actual call to the matcher happens. llvm-svn: 114489
* just like they can opt into getting the root of the pattern beingChris Lattner2010-09-211-1/+6
| | | | | | | matched, allow ComplexPatterns to opt into getting the parent node of the operand being matched. llvm-svn: 114472
* fix a long standing wart: all the ComplexPattern's were beingChris Lattner2010-09-211-1/+7
| | | | | | | | | | | passed the root of the match, even though only a few patterns actually needed this (one in X86, several in ARM [which should be refactored anyway], and some in CellSPU that I don't feel like detangling). Instead of requiring all ComplexPatterns to take the dead root, have targets opt into getting the root by putting SDNPWantRoot on the ComplexPattern. llvm-svn: 114471
* Moar words!Eric Christopher2010-08-061-1/+1
| | | | llvm-svn: 110422
* generate better code in CheckComplexPatternChris Lattner2010-06-141-2/+3
| | | | llvm-svn: 105970
* print the complexity of the pattern being matched in theChris Lattner2010-03-291-9/+10
| | | | | | comment in the generated table. llvm-svn: 99794
* add an optimized form of OPC_EmitMergeInputChains for the 1, 0 and Chris Lattner2010-03-281-0/+7
| | | | | | | 1, 1 cases which are by-far the most frequent. This shrinks the X86 isel table from 77014 -> 74657 bytes. llvm-svn: 99740
* fix a bug in my recent patch that increased opcode size to 2 bytes:Chris Lattner2010-03-271-9/+13
| | | | | | | the index comments nested under OPC_SwitchOpcode were off by one. This fixes the comments. llvm-svn: 99722
* Change tblgen to emit FOOISD opcode names as twoChris Lattner2010-03-251-10/+11
| | | | | | | | | | | | | | 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
* add plumbing for handling multiple result nodes Chris Lattner2010-03-241-0/+2
| | | | | | in some more places. llvm-svn: 99366
* so hey, it turns out that the histogram was completely wrong, becauseChris Lattner2010-03-041-10/+32
| | | | | | | we sometimes emit nodes multiple times to string buffers to size them. Compute the histogram correctly. llvm-svn: 97708
* change the new isel matcher to emit ComplexPattern matchesChris Lattner2010-03-041-6/+8
| | | | | | | | | | as the very last thing before node emission. This should dramatically reduce the number of times we do 'MatchAddress' on X86, speeding up compile time. This also improves comments in the tables and shrinks the table a bit, now down to 80506 bytes for x86. llvm-svn: 97703
* enhance comment output to specify what recorded slotChris Lattner2010-03-041-2/+5
| | | | | | numbers a ComplexPat will match into. llvm-svn: 97696
* introduce a new SwitchTypeMatcher node (which is analogous toChris Lattner2010-03-031-10/+35
| | | | | | | | SwitchOpcodeMatcher) and have DAGISelMatcherOpt form it. This speeds up selection, particularly for X86 which has lots of variants of instructions with only type differences. llvm-svn: 97645
* Rewrite chain handling validation and input TokenFactor handlingChris Lattner2010-03-021-5/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | stuff now that we don't care about emulating the old broken behavior of the old isel. This eliminates the 'CheckChainCompatible' check (along with IsChainCompatible) which did an incorrect and inefficient scan *up* the chain nodes which happened as the pattern was being formed and does the validation at the end in HandleMergeInputChains when it forms a structural pattern. This scans "down" the graph, which means that it is quickly bounded by nodes already selected. This also handles token factors that get "trapped" in the dag. Removing the CheckChainCompatible nodes also shrinks the generated tables by about 6K for X86 (down to 83K). There are two pieces remaining before I can nuke PreprocessRMW: 1. I xfailed a test because we're now producing worse code in a case that has nothing to do with the change: it turns out that our use of MorphNodeTo will leave dead nodes in the graph which (depending on how the graph is walked) end up causing bogus uses of chains and blocking matches. This is really bad for other reasons, so I'll fix this in a follow-up patch. 2. CheckFoldableChainNode needs to be improved to handle the TF. llvm-svn: 97539
* add some missing \n'sChris Lattner2010-03-021-11/+19
| | | | llvm-svn: 97527
* fixme resolved.Chris Lattner2010-03-011-3/+0
| | | | llvm-svn: 97517
* remove a little hack I did for the old isel, not neededChris Lattner2010-03-011-4/+0
| | | | | | now that it is gone. llvm-svn: 97516
* Missed a \n in previous commit.Torok Edwin2010-03-011-0/+1
| | | | llvm-svn: 97472
* Add command-line flag to tblgen to turn off generating comments for the newTorok Edwin2010-03-011-57/+117
| | | | | | | isel (defaults it to generate comments). This reduces the size of the generated source file. llvm-svn: 97470
OpenPOWER on IntegriCloud