| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
some other way when it comes to be necessary.
llvm-svn: 97972
|
| |
|
|
|
|
|
|
|
|
|
| |
needs to be majorly refactored, but this spot bugfix allows
things like:
def vmrghw_shuffle : PatFrag<(ops node:$lhs, node:$rhs),
(vector_shuffle (v4i32 node:$lhs), node:$rhs), [{
...
llvm-svn: 97952
|
| |
|
|
| |
llvm-svn: 97912
|
| |
|
|
| |
llvm-svn: 97911
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now it will factor things like this:
CheckType i32
...
CheckOpcode ISD::AND
CheckType i64
...
into:
SwitchType:
i32: ...
i64:
CheckOpcode ISD::AND
...
This shrinks hte table by a few bytes, nothing spectacular.
llvm-svn: 97908
|
| |
|
|
|
|
|
|
| |
for CheckValueTypeMatcher. The isContradictory implementation
helps us factor better, shrinking x86 table from 79144 -> 78896
bytes.
llvm-svn: 97905
|
| |
|
|
| |
llvm-svn: 97796
|
| |
|
|
|
|
| |
As in 'llvmc -O2 -O2 test.c'.
llvm-svn: 97787
|
| |
|
|
|
|
| |
that somehow got through my testing.
llvm-svn: 97728
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
IF(condition(value)):
If the value satisfies the condition, the line is processed by lit; otherwise
it is skipped. A test with no unignored directives is resolved as Unsupported.
The test suite is responsible for defining conditions; conditions are unary
functions over strings. I've defined two conditions in the LLVM test suite,
TARGET (with values like those in TARGETS_TO_BUILD) and BINDING (with values
like those in llvm_bindings). So for example you can write:
IF(BINDING(ocaml)): RUN: %blah %s -o -
and the RUN line will only execute if LLVM was configured with the ocaml
bindings.
llvm-svn: 97726
|
| |
|
|
|
|
|
| |
we sometimes emit nodes multiple times to string buffers to size them.
Compute the histogram correctly.
llvm-svn: 97708
|
| |
|
|
| |
llvm-svn: 97705
|
| |
|
|
|
|
|
|
| |
sequence, just emit instruction predicates right before them. This
exposes yet more factoring opportunitites, shrinking the X86 table
to 79144 bytes.
llvm-svn: 97704
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
numbers a ComplexPat will match into.
llvm-svn: 97696
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 97644
|
| |
|
|
| |
llvm-svn: 97623
|
| |
|
|
|
|
| |
to itself, even though this isn't wildly useful.
llvm-svn: 97574
|
| |
|
|
| |
llvm-svn: 97556
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 97527
|
| |
|
|
| |
llvm-svn: 97517
|
| |
|
|
|
|
| |
now that it is gone.
llvm-svn: 97516
|
| |
|
|
| |
llvm-svn: 97515
|
| |
|
|
|
|
|
|
| |
EmitMergeInputChainsMatcher node up into EmitResultCode. This
doesn't have much of an effect on the generated code, the X86
table is exactly the same size.
llvm-svn: 97514
|
| |
|
|
|
|
|
|
| |
(set GPR, somecomplexpattern)
if somecomplexpattern doesn't declare what it can match.
llvm-svn: 97513
|
| |
|
|
| |
llvm-svn: 97510
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ordered correctly. Previously it would get in trouble when
two patterns were too similar and give them nondet ordering.
We force this by using the record ID order as a fallback.
The testsuite diff is due to alpha patterns being ordered
slightly differently, the change is a semantic noop afaict:
< lda $0,-100($16)
---
> subq $16,100,$0
llvm-svn: 97509
|
| |
|
|
| |
llvm-svn: 97508
|
| |
|
|
| |
llvm-svn: 97504
|
| |
|
|
| |
llvm-svn: 97486
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
with a release-asserts build on x86-64-darwin10:
LLC Size:
Old: 15,426,852
New: 12,759,140 (down 2.7M)
LLI Size:
Old: 9,926,876
New: 8,864,292 (down 1.1M)
X86ISelDAGToDAG.o size:
Old: 1,401,232
New: 162,868 (down 1.3M)
Time to build X86ISelDAGToDAG.o:
Old: 67.147u 2.060s 1:09.78
New: 4.234u 0.387s 0:04.77
llvm-svn: 97475
|
| |
|
|
| |
llvm-svn: 97472
|
| |
|
|
|
|
|
| |
isel (defaults it to generate comments).
This reduces the size of the generated source file.
llvm-svn: 97470
|
| |
|
|
| |
llvm-svn: 97457
|
| |
|
|
|
|
|
| |
structural matching code to be factored and shared this
shrinks the X86 isel table from 86537 to 83890 bytes.
llvm-svn: 97442
|
| |
|
|
|
|
|
|
| |
This allows formation of OpcodeSwitch for top level patterns, in
particular on X86. This saves about 1K of data space in the x86
table and makes the dispatch much more efficient.
llvm-svn: 97440
|
| |
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
pair. This encourages MorphNodeTo formation, this gets us 200
more MorphNodeTo's on X86 and shrinks the table a bit.
llvm-svn: 97434
|
| |
|
|
|
|
| |
slot they're recording into, no functionality change.
llvm-svn: 97433
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 97432
|
| |
|
|
|
|
|
|
| |
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.
llvm-svn: 97431
|
| |
|
|
|
|
| |
the vtlist for emitnode.
llvm-svn: 97429
|
| |
|
|
|
|
| |
warnings in release-assert builds if there were no cases.
llvm-svn: 97428
|
| |
|
|
|
|
| |
immediate sizes into the opcode.
llvm-svn: 97423
|
| |
|
|
|
|
|
|
| |
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
|