aboutsummaryrefslogtreecommitdiff
path: root/utils/TableGen/DAGISelMatcherGen.cpp
AgeCommit message (Collapse)Author
2010-03-01enhance RecordNode and RecordChild comments to indicate whatChris Lattner
slot they're recording into, no functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97433 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-01Emit redundant opcode checks for andimm and orimm tests at rootChris Lattner
so that we get grouping at the top level. Add an optimization to reorder type check & record nodes after opcode checks. We prefer to expose tree shape matching which improves grouping and will enhance the next optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97432 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-01inline the node transforms and node predicates into the generatedChris Lattner
dispatcher method. This eliminates the dependence of the new isel's generated code on the old isel's predicates, however some random hand written isel code still uses them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97431 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-28enhance the EmitNode/MorphNodeTo operands to take a bit thatChris Lattner
specifies whether there is an output flag or not. Use this instead of redundantly encoding the chain/flag results in the output vtlist. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97419 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-28enhance the new isel to use SelectNodeTo for most patterns,Chris Lattner
even some the old isel didn't. There are several parts of this that make me feel dirty, but it's no worse than the old isel. I'll clean up the parts I can do without ripping out the old one next. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97415 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-28enhance EmitNodeMatcher to keep track of the recorded slot numbersChris Lattner
it will populate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97363 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-28add infrastructure to support forming selectnodeto. Not used yetChris Lattner
because I have to go on another detour first. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97362 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-27change CheckOpcodeMatcher to hold the SDNodeInfo instead ofChris Lattner
the opcode name. This gives the optimizer more semantic info. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97346 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-25rename fooMatcherNode to fooMatcher.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97096 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-25add a fixme for an experiment that defeated me for the time being.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97081 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-24The new isel was not properly handling patterns that coveredChris Lattner
internal nodes with flag results. Record these with a new OPC_MarkFlagResults opcode and use this to update the interior nodes' flag results properly. This fixes CodeGen/X86/i256-add.ll with the new isel. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97021 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-22Change ComplexPattern handling to push the node being matched asChris Lattner
well as the operands produced when the pattern is matched. This allows CheckSame to work correctly when matching replicated names involving ComplexPatterns. This fixes a bunch of MSP430 failures, we're down to 13 failures, two of which are due to a sched bug. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96824 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-22add a new CheckMultiOpcode opcode for checking that a nodeChris Lattner
has one of the list of acceptable opcodes for a complex pattern. This fixes 4 regtest failures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96814 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-22When matching patterns that have a complex pattern as their root, make Chris Lattner
sure to only run the complex pattern on nodes where the target opts in. This patch only handles targets with one opcode specified so far, but fixes 16 failures, only 34 left. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96813 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-21fix most of the failures in the x86 suite by handling multiple Chris Lattner
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96767 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-21Always emit register class id references as i32 likeChris Lattner
DAGISelEmitter does. This fixes 11 arm failures (8 left). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96757 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-21implement the last known missing feature: updating uses of results Chris Lattner
of the matched pattern to use the newly created node results. Onto the "making it actually work" phase! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96724 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-21Lots of improvements to the new dagisel emitter. This gets it toChris Lattner
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96716 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-19I confused myself, temporaries will be recorded right along with other inputs.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96639 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-19introduce a new ResultVal and start keeping track of temporary values.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96636 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18add support for referencing registers and immediates,Chris Lattner
building the tree to represent them but not emitting table entries for them yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96617 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18start sketching out the structure of code for result emission generation.Chris Lattner
Nothing real here yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96575 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18rename the child field to 'next'. This is not a parent/child Chris Lattner
relationship, this is a linear list relationship. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96561 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18eliminate the MatcherNodeWithChild class, give the 'child'Chris Lattner
field to MatcherNode. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96560 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17Emulate the current isel's "IsChainCompatible" logic for now.Chris Lattner
I'd like to eventually rip it out, but for now producing the same selections as the old matcher is more important. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96458 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17properly record chain inputs to complex patterns,Chris Lattner
resolving a fixme. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96457 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17Prep work to handle input chains of matched patterns and checking forChris Lattner
'ischaincompatible' when a pattern has more than one input chain. Need to do some commenting and cleanup now that I understand how this works. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96443 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17record input chains.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96437 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17prefix captured value names with $ so they look likeChris Lattner
variables. Use the fancy OpNo variable instead of i, which has the right index including chains. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96436 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17improve comments on OPC_Record to say what we're recording a node.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96433 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17make the new isel generator plop out a CheckComplexPattern functionChris Lattner
for evaluating complex patterns. Some cleanup has to happen before this can be used though. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96419 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-17fix inverted condition.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96416 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16complex patterns don't get 'record' nodes, they implicitlyChris Lattner
record all their results. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96412 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16fix rdar://7653908, a crash on a case where we would fold a loadChris Lattner
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96408 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16simplify this code. In the new world order there is noChris Lattner
need to scan the entire subtree of the pattern anymore. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96369 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16convert the new matcher to check intermediate nodes for a singleChris Lattner
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96368 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16remove now dead code and fixme.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96333 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16add support for the new isel matcher to generate Chris Lattner
(isprofitable|islegal)tofold checks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96331 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-15Check in the first big step of rewriting DAGISelEmitter to Chris Lattner
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96215 91177308-0d34-0410-b5e6-96231b3b80d8