| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
for some time.
llvm-svn: 268706
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
from TargetLoweringBase and probably other places.
This required changing several places to print VT enums as strings instead of raw ints since the proper method to use to print became ambiguous. This is probably an improvement anyway.
This also appears to save ~8K from an x86 self host build of llc.
llvm-svn: 266562
|
|
|
|
|
|
| |
instead of comparing to nullptr.
llvm-svn: 206254
|
|
|
|
|
|
| |
from X86 matcher table.
llvm-svn: 200821
|
|
|
|
|
|
| |
SwitchOpcodeMatcher/SwitchTypeMatcher.
llvm-svn: 200377
|
|
|
|
|
|
| |
of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon.
llvm-svn: 192026
|
|
|
|
| |
llvm-svn: 191941
|
|
|
|
|
|
| |
of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon.
llvm-svn: 191940
|
|
|
|
| |
llvm-svn: 191356
|
|
|
|
|
|
|
| |
I've tried to find main moudle headers where possible, but the TableGen
stuff may warrant someone else looking at it.
llvm-svn: 169251
|
|
|
|
|
|
| |
http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
llvm-svn: 146960
|
|
|
|
|
|
| |
This is the first step towards splitting LLVM and Clang's tblgen executables.
llvm-svn: 140951
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 122513
|
|
|
|
| |
llvm-svn: 122506
|
|
|
|
| |
llvm-svn: 122337
|
|
|
|
|
|
| |
in some more places.
llvm-svn: 99366
|
|
|
|
| |
llvm-svn: 98918
|
|
|
|
|
|
|
|
| |
for CheckValueTypeMatcher. The isContradictory implementation
helps us factor better, shrinking x86 table from 79144 -> 78896
bytes.
llvm-svn: 97905
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
ComplexPattern at the root be generated multiple times, once
for each opcode they are part of. This encourages factoring
because the opcode checks get treated just like everything
else in the matcher.
llvm-svn: 97439
|
|
|
|
|
|
|
|
|
|
|
|
| |
to a scope where every child starts with a CheckOpcode, but
executes more efficiently. Enhance DAGISelMatcherOpt to
form it.
This also fixes a bug in CheckOpcode: apparently the SDNodeInfo
objects are not pointer comparable, we have to compare the
enum name.
llvm-svn: 97438
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
node is always guaranteed to have a particular type
instead of hacking in ISD::STORE explicitly. This allows
us to use implied types for a broad range of nodes, even
target specific ones.
llvm-svn: 97355
|
|
|
|
|
|
| |
the opcode name. This gives the optimizer more semantic info.
llvm-svn: 97346
|
|
|
|
|
|
| |
dissatisfying hack. TODO: Improve it. :)
llvm-svn: 97317
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|