| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
the vtlist for emitnode.
llvm-svn: 97429
|
|
|
|
|
|
|
|
| |
specifies whether there is an output flag or not. Use this
instead of redundantly encoding the chain/flag results in the
output vtlist.
llvm-svn: 97419
|
|
|
|
|
|
| |
is just a silly wrapper around MorphNodeTo.
llvm-svn: 97416
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 97415
|
|
|
|
|
|
| |
it will populate.
llvm-svn: 97363
|
|
|
|
|
|
| |
because I have to go on another detour first.
llvm-svn: 97362
|
|
|
|
|
|
| |
the opcode name. This gives the optimizer more semantic info.
llvm-svn: 97346
|
|
|
|
|
|
|
|
| |
with getType() == MVT::i32 etc. Teach it that two different
integer constants are contradictory. This cuts 1K off the X86
table, down to 98k
llvm-svn: 97314
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
predicates. For example if we have:
Scope:
CheckType i32
ABC
CheckType f32
DEF
CheckType i32
GHI
Then we know that we can transform this into:
Scope:
CheckType i32
Scope
ABC
GHI
CheckType f32
DEF
This reorders the check for the 'GHI' predicate above
the check for the 'DEF' predidate. However it is safe to do this
in this situation because we know that a node cannot have both an
i32 and f32 type.
We're now doing more factoring that the old isel did.
llvm-svn: 97312
|
|
|
|
|
|
|
|
|
| |
as deeply into the pattern as we can get away with. In pratice, this
means "all the way to to the emitter code, but not across
ComplexPatterns". This substantially increases the amount of factoring
we get.
llvm-svn: 97305
|
|
|
|
| |
llvm-svn: 97217
|
|
|
|
| |
llvm-svn: 97216
|
|
|
|
|
|
|
| |
that we never return a tombstone value, which (thankfully) triggers an
assert in densemap.
llvm-svn: 97214
|
|
|
|
|
|
|
|
|
| |
instead of to have a chained series of scope nodes. This makes
the generated table smaller, improves the efficiency of the
interpreter, and make the factoring optimization much more
reasonable to implement.
llvm-svn: 97160
|
|
|
|
| |
llvm-svn: 97125
|
|
|
|
| |
llvm-svn: 97123
|
|
|
|
| |
llvm-svn: 97096
|
|
|
|
|
|
|
| |
reflect what it does. Switch the sense of the Next and the Check
arms to be more logical. No functionality change.
llvm-svn: 97093
|
|
|
|
|
|
| |
x86 table by 1200 bytes.
llvm-svn: 97053
|
|
|
|
|
|
|
|
| |
the new isel: fold movechild+record+moveparent into a
single recordchild N node. This shrinks the X86 table
from 125443 to 117502 bytes.
llvm-svn: 97031
|
|
|
|
|
|
|
| |
Also add an easy macro at the top of DAGISelEmitter.cpp to enable
it. Lets see if I can avoid accidentally turning it on :)
llvm-svn: 97029
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 97021
|
|
|
|
|
|
|
| |
has one of the list of acceptable opcodes for a complex
pattern. This fixes 4 regtest failures.
llvm-svn: 96814
|
|
|
|
|
|
|
| |
of the matched pattern to use the newly created node results. Onto
the "making it actually work" phase!
llvm-svn: 96724
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 96663
|
|
|
|
|
|
|
| |
building the tree to represent them but not emitting
table entries for them yet.
llvm-svn: 96617
|
|
|
|
|
|
| |
relationship, this is a linear list relationship.
llvm-svn: 96561
|
|
|
|
|
|
| |
field to MatcherNode.
llvm-svn: 96560
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
variables. Use the fancy OpNo variable instead of i,
which has the right index including chains.
llvm-svn: 96436
|
|
|
|
| |
llvm-svn: 96433
|
|
|
|
|
|
|
| |
for evaluating complex patterns. Some cleanup has to happen before
this can be used though.
llvm-svn: 96419
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
build if enabled, it will fail with constness issues. I'll resolve
these next.
llvm-svn: 96336
|
|
|
|
|
|
| |
(isprofitable|islegal)tofold checks.
llvm-svn: 96331
|
|
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
|