| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
and vaarg instructions.
llvm-svn: 118845
|
| |
|
|
| |
llvm-svn: 118788
|
| |
|
|
|
|
| |
execute. Make Sink's predicate more precise.
llvm-svn: 118787
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
references. For example, this allows gvn to eliminate the load in
this example:
void foo(int n, int* p, int *q) {
p[0] = 0;
p[1] = 1;
if (n) {
*q = p[0];
}
}
llvm-svn: 118714
|
| |
|
|
|
|
| |
instructions instead of hard-coding operand numbers.
llvm-svn: 118698
|
| |
|
|
| |
llvm-svn: 118618
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
propagation. Instruction simplification
needs to be guaranteed never to be run on an unreachable block. However, earlier block simplifications may have
changed the CFG to make block that were reachable when we began our iteration unreachable by the time we try to
simplify them. (Note that this also means that our depth-first iterators were potentially being invalidated).
This should not have a large impact on code quality, since later runs of instcombine should pick up these simplifications.
Fixes PR8506.
llvm-svn: 117709
|
| |
|
|
|
|
| |
basic logic, added initial platform support.
llvm-svn: 117667
|
| |
|
|
|
|
| |
uint64_t, plus fixes for places I missed before.
llvm-svn: 116875
|
| |
|
|
| |
llvm-svn: 116858
|
| |
|
|
|
|
|
| |
they do not also require them. This allows us to reduce inter-pass linkage
dependencies.
llvm-svn: 116854
|
| |
|
|
|
|
| |
use uint64_t.
llvm-svn: 116839
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
exposes an initializeMyPassFunction(), which
must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize
the pass's dependencies.
Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the
CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
before parsing commandline arguments.
I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems
with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass
registration/creation, please send the testcase to me directly.
llvm-svn: 116820
|
| |
|
|
| |
llvm-svn: 116815
|
| |
|
|
| |
llvm-svn: 116743
|
| |
|
|
| |
llvm-svn: 116670
|
| |
|
|
|
|
|
|
| |
when the call slot
forwarding is implemented with a load/store pair rather than a memcpy.
llvm-svn: 116637
|
| |
|
|
| |
llvm-svn: 116387
|
| |
|
|
|
|
|
|
|
| |
perform initialization without static constructors AND without explicit initialization
by the client. For the moment, passes are required to initialize both their
(potential) dependencies and any passes they preserve. I hope to be able to relax
the latter requirement in the future.
llvm-svn: 116334
|
| |
|
|
|
|
|
|
|
|
| |
formulae which become illegal as a result of the offset updating don't
escape.
This is for rdar://8529692. No testcase yet, because the given cases
hit use-list ordering differences.
llvm-svn: 116093
|
| |
|
|
| |
llvm-svn: 116034
|
| |
|
|
|
|
|
| |
one user. This code will be restructured soon and FormulaSorter
is getting in the way.
llvm-svn: 116012
|
| |
|
|
| |
llvm-svn: 116011
|
| |
|
|
|
|
| |
not just base registers.
llvm-svn: 116010
|
| |
|
|
| |
llvm-svn: 116009
|
| |
|
|
|
|
| |
the old use to the new one.
llvm-svn: 116008
|
| |
|
|
|
|
|
|
| |
This doesn't usually matter, because the other heuristics usually
succeed regardless, but it's good to keep the register use
bookkeeping consistent.
llvm-svn: 116005
|
| |
|
|
| |
llvm-svn: 116004
|
| |
|
|
| |
llvm-svn: 115996
|
| |
|
|
|
|
|
| |
initialization functions that initialize the set of passes implemented in
that library. Add C bindings for these functions as well.
llvm-svn: 115927
|
| |
|
|
|
|
|
|
|
| |
default, rip out the remainder.
Anyone interested in more general PRE would be better served by implementing it separately, to get real
anticipation calculation, etc.
llvm-svn: 115337
|
| |
|
|
|
|
|
|
| |
memcpy alignment is the minimum of the incoming alignments.
Fixes PR 8266.
llvm-svn: 115305
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The x86_mmx type is used for MMX intrinsics, parameters and
return values where these use MMX registers, and is also
supported in load, store, and bitcast.
Only the above operations generate MMX instructions, and optimizations
do not operate on or produce MMX intrinsics.
MMX-sized vectors <2 x i32> etc. are lowered to XMM or split into
smaller pieces. Optimizations may occur on these forms and the
result casted back to x86_mmx, provided the result feeds into a
previous existing x86_mmx operation.
The point of all this is prevent optimizations from introducing
MMX operations, which is unsafe due to the EMMS problem.
llvm-svn: 115243
|
| |
|
|
|
|
|
|
|
| |
consider PHI nodes to be negligible for
code size (making this transform code size neutral), and it allows us to hoist values out of loops, which is always
a good thing.
llvm-svn: 115205
|
| |
|
|
|
|
| |
The bug that broke i386 linux has been fixed in r115191.
llvm-svn: 115204
|
| |
|
|
|
|
| |
the very unlikely case that someone passes an integer > i64 to strchr.
llvm-svn: 115144
|
| |
|
|
| |
llvm-svn: 115116
|
| |
|
|
| |
llvm-svn: 115111
|
| |
|
|
| |
llvm-svn: 115095
|
| |
|
|
| |
llvm-svn: 115091
|
| |
|
|
|
|
|
|
|
|
| |
still having predecessor, if it is part of a self-loop.
Because of this, we cannot use the Simplify* APIs, as they can assert-fail on unreachable code. Since it's not easy to determine
if a given threading will cause a block to become unreachable, simply defer simplifying simplification to later InstCombine and/or
DCE passes.
llvm-svn: 115082
|
| |
|
|
| |
llvm-svn: 115053
|
| |
|
|
| |
llvm-svn: 114999
|
| |
|
|
|
|
|
|
|
|
|
| |
tends to cause high
register pressure and thus excess spills, which we don't currently recover from well. This should
be re-evaluated in the future if our ability to generate good spills/splits improves.
Partial fix for <rdar://problem/7635585>.
llvm-svn: 114919
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
passes now"
This reverts revision 114633. It was breaking llvm-gcc-i386-linux-selfhost.
It seems there is a downstream bug that is exposed by
-cgp-critical-edge-splitting=0. When that bug is fixed, this patch can go back
in.
Note that the changes to tailcallfp2.ll are not reverted. They were good are
required.
llvm-svn: 114859
|
| |
|
|
| |
llvm-svn: 114841
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
post-dominated the block it was being hoisted to.
Splitting critical edges at the merge point only addressed part of the issue; it is also possible for non-post-domination
to occur when the path from the load to the merge has branches in it. Unfortunately, full anticipation analysis is
time-consuming, so for now approximate it. This is strictly more conservative than real anticipation, so we will miss
some cases that real PRE would allow, but we also no longer insert loads into paths where they didn't exist before. :-)
This is a very slight net positive on SPEC for me (0.5% on average). Most of the benchmarks are largely unaffected, but
when it pays off it pays off decently: 181.mcf improves by 4.5% on my machine.
llvm-svn: 114785
|
| |
|
|
|
|
|
|
|
| |
of the source, not the original alignment since it may no longer
be valid.
Fixes rdar://8400094
llvm-svn: 114781
|
| |
|
|
|
|
| |
break critical edges on demand.
llvm-svn: 114633
|
| |
|
|
|
|
|
|
| |
truncates are free only in the case where the extended type is legal but the
load type is not. If both types are illegal, such as when they are too big,
the load may not be legalized into an extended load.
llvm-svn: 114568
|