summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/DAGISelMatcherGen.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* fix most of the failures in the x86 suite by handling multiple Chris Lattner2010-02-211-8/+36
| | | | | | | | | | result nodes correctly. Note that this includes a horrible hack in DAGISelHeader which cannot be fixed reasonably without eliminating (parallel) from input patterns. That, in turn, can't be done until we support writing multiple result patterns for the X86and_flag and related multiple-result nodes. llvm-svn: 96767
* Always emit register class id references as i32 likeChris Lattner2010-02-211-1/+1
| | | | | | | DAGISelEmitter does. This fixes 11 arm failures (8 left). llvm-svn: 96757
* implement the last known missing feature: updating uses of results Chris Lattner2010-02-211-4/+4
| | | | | | | of the matched pattern to use the newly created node results. Onto the "making it actually work" phase! llvm-svn: 96724
* Lots of improvements to the new dagisel emitter. This gets it toChris Lattner2010-02-211-89/+335
| | | | | | | | | | | | | | | | | | | the point where it is to the 95% feature complete mark, it just needs result updating to be done (then testing, optimization etc). More specificallly, this adds support for chain and flag handling on the result nodes, support for sdnodexforms, support for variadic nodes, memrefs, pinned physreg inputs, and probably lots of other stuff. In the old DAGISelEmitter, this deletes the dead code related to OperatorMap, cleans up a variety of dead stuff handling "implicit remapping" from things like globaladdr -> targetglobaladdr (which is no longer used because globaladdr always needs to be legalized), and some minor formatting fixes. llvm-svn: 96716
* I confused myself, temporaries will be recorded right along with other inputs.Chris Lattner2010-02-191-31/+7
| | | | llvm-svn: 96639
* introduce a new ResultVal and start keeping track of temporary values.Chris Lattner2010-02-191-12/+60
| | | | llvm-svn: 96636
* add support for referencing registers and immediates,Chris Lattner2010-02-181-0/+32
| | | | | | | building the tree to represent them but not emitting table entries for them yet. llvm-svn: 96617
* start sketching out the structure of code for result emission generation.Chris Lattner2010-02-181-8/+113
| | | | | | Nothing real here yet. llvm-svn: 96575
* rename the child field to 'next'. This is not a parent/child Chris Lattner2010-02-181-3/+3
| | | | | | relationship, this is a linear list relationship. llvm-svn: 96561
* eliminate the MatcherNodeWithChild class, give the 'child'Chris Lattner2010-02-181-7/+7
| | | | | | field to MatcherNode. llvm-svn: 96560
* Emulate the current isel's "IsChainCompatible" logic for now.Chris Lattner2010-02-171-4/+17
| | | | | | | I'd like to eventually rip it out, but for now producing the same selections as the old matcher is more important. llvm-svn: 96458
* properly record chain inputs to complex patterns,Chris Lattner2010-02-171-6/+13
| | | | | | resolving a fixme. llvm-svn: 96457
* Prep work to handle input chains of matched patterns and checking forChris Lattner2010-02-171-4/+28
| | | | | | | 'ischaincompatible' when a pattern has more than one input chain. Need to do some commenting and cleanup now that I understand how this works. llvm-svn: 96443
* record input chains.Chris Lattner2010-02-171-0/+9
| | | | llvm-svn: 96437
* prefix captured value names with $ so they look likeChris Lattner2010-02-171-3/+2
| | | | | | | variables. Use the fancy OpNo variable instead of i, which has the right index including chains. llvm-svn: 96436
* improve comments on OPC_Record to say what we're recording a node.Chris Lattner2010-02-171-1/+1
| | | | llvm-svn: 96433
* make the new isel generator plop out a CheckComplexPattern functionChris Lattner2010-02-171-3/+9
| | | | | | | for evaluating complex patterns. Some cleanup has to happen before this can be used though. llvm-svn: 96419
* fix inverted condition.Chris Lattner2010-02-171-1/+3
| | | | llvm-svn: 96416
* complex patterns don't get 'record' nodes, they implicitlyChris Lattner2010-02-161-1/+20
| | | | | | record all their results. llvm-svn: 96412
* fix rdar://7653908, a crash on a case where we would fold a loadChris Lattner2010-02-161-1/+0
| | | | | | | | | | into a roundss intrinsic, producing a cyclic dag. The root cause of this is badness handling ComplexPattern nodes in the old dagisel that I noticed through inspection. Eliminate a copy of the of the code that handled ComplexPatterns by making EmitChildMatchCode call into EmitMatchCode. llvm-svn: 96408
* simplify this code. In the new world order there is noChris Lattner2010-02-161-27/+24
| | | | | | need to scan the entire subtree of the pattern anymore. llvm-svn: 96369
* convert the new matcher to check intermediate nodes for a singleChris Lattner2010-02-161-4/+2
| | | | | | | | | use and only call IsProfitableToFold/IsLegalToFold on the load being folded, like the old dagiselemitter does. This substantially simplifies the code and improves opportunities for sharing. llvm-svn: 96368
* remove now dead code and fixme.Chris Lattner2010-02-161-2/+0
| | | | llvm-svn: 96333
* add support for the new isel matcher to generate Chris Lattner2010-02-161-10/+53
| | | | | | (isprofitable|islegal)tofold checks. llvm-svn: 96331
* Check in the first big step of rewriting DAGISelEmitter to Chris Lattner2010-02-151-0/+287
produce a table based matcher instead of gobs of C++ Code. Though it's not done yet, the shrinkage seems promising, the table for the X86 ISel is 75K and still has a lot of optimization to come (compare to the ~1.5M of .o generated the old way, much of which will go away). The code is currently disabled by default (the #if 0 in DAGISelEmitter.cpp). When enabled it generates a dead SelectCode2 function in the DAGISel Header which will eventually replace SelectCode. There is still a lot of stuff left to do, which are documented with a trail of FIXMEs. llvm-svn: 96215
OpenPOWER on IntegriCloud