| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 97366
|
| |
|
|
|
|
| |
argument of createGVNPass and set it automatically for -O3.
llvm-svn: 97245
|
| |
|
|
| |
llvm-svn: 97235
|
| |
|
|
| |
llvm-svn: 97036
|
| |
|
|
|
|
| |
the DominatorTree. ...", in hopes of restoring poor old PPC bootstrap.
llvm-svn: 97027
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
argument is non-null, pass it along to PHITranslateSubExpr so that it can
prefer using existing values that dominate the PredBB, instead of just
blindly picking the first equivalent value that it finds on a uselist.
Also when the DominatorTree is specified, have PHITranslateValue filter
out any result that does not dominate the PredBB. This is basically just
refactoring the check that used to be in GetAvailablePHITranslatedSubExpr
and also in GVN.
Despite my initial expectations, this change does not affect the results
of GVN for any testcases that I could find, but it should help compile time.
Before this change, if PHITranslateSubExpr picked a value that does not
dominate, PHITranslateWithInsertion would then insert a new value, which GVN
would later determine to be redundant and would replace. By picking a good
value to begin with, we save GVN the extra work of inserting and then
replacing a new value.
llvm-svn: 97010
|
| |
|
|
|
|
| |
I don't have a small testcase for this.
llvm-svn: 96890
|
| |
|
|
|
|
| |
failures from ValueTable::verifyRemoved() when using -debug.
llvm-svn: 96805
|
| |
|
|
| |
llvm-svn: 96387
|
| |
|
|
| |
llvm-svn: 96378
|
| |
|
|
|
|
| |
terminator's list of successors.
llvm-svn: 96377
|
| |
|
|
|
|
|
| |
and T->isPointerTy(). Convert most instances of the first form to the second form.
Requested by Chris.
llvm-svn: 96344
|
| |
|
|
| |
llvm-svn: 95828
|
| |
|
|
| |
llvm-svn: 95170
|
| |
|
|
|
|
|
|
|
| |
disabled by default. This divides the existing load PRE code into 2 phases:
first it checks that it is safe to move the load to each of the predecessors
where it is unavailable, and then if it is safe, the code is changed to move
the load. Radar 7571861.
llvm-svn: 95007
|
| |
|
|
|
|
|
| |
unconditionally. Besides checking the offset, also check that the underlying
object is aligned as much as the load itself.
llvm-svn: 94875
|
| |
|
|
|
|
|
| |
indices are safe if the result is known to be within the bounds of the
underlying object.
llvm-svn: 94829
|
| |
|
|
|
|
| |
already checked that TmpBB->getSinglePredecessor() is non-null.
llvm-svn: 94451
|
| |
|
|
| |
llvm-svn: 93693
|
| |
|
|
|
|
| |
non-zero trip count. Use SmallVector's pop_back_val().
llvm-svn: 92734
|
| |
|
|
| |
llvm-svn: 92613
|
| |
|
|
|
|
|
| |
non-templated IRBuilderBase class. Move that large CreateGlobalString
out of line, eliminating the need to #include GlobalVariable.h in IRBuilder.h
llvm-svn: 92227
|
| |
|
|
|
|
|
|
|
|
| |
result
instead of stored. This reduces memdep memory usage, and also eliminates a bunch of
weakvh's. This speeds up gvn on gcc.c-torture/20001226-1.c from 23.9s to 8.45s (2.8x)
on a different machine than earlier.
llvm-svn: 91885
|
| |
|
|
|
|
|
|
|
|
|
| |
load to avoid even messing around with SSAUpdate at all. In this case (which
is very common, we can just use the input value directly).
This speeds up GVN time on gcc.c-torture/20001226-1.c from 36.4s to 16.3s,
which still isn't great, but substantially better and this is a simple speedup
that applies to lots of different cases.
llvm-svn: 91851
|
| |
|
|
| |
llvm-svn: 91849
|
| |
|
|
| |
llvm-svn: 91666
|
| |
|
|
|
|
|
|
| |
isPodLike type trait. This is a generally useful type trait for
more than just DenseMap, and we really care about whether something
acts like a pod, not whether it really is a pod.
llvm-svn: 91421
|
| |
|
|
|
|
|
|
| |
value size. This only manifested when memdep inprecisely returns clobber,
which is do to a caching issue in the PR5744 testcase. We can 'efficiently
emulate' this by using '-no-aa'
llvm-svn: 91004
|
| |
|
|
| |
llvm-svn: 90999
|
| |
|
|
|
|
|
| |
clobbers to forward pieces of large stores to small loads, we need to consider
the properly phi translated pointer in the store block.
llvm-svn: 90978
|
| |
|
|
|
|
| |
implicitly constant folds.
llvm-svn: 90977
|
| |
|
|
|
|
| |
to require the load ty/ptr to be passed in, no functionality change.
llvm-svn: 90960
|
| |
|
|
|
|
| |
and pointer instead of the load. No functionality change.
llvm-svn: 90959
|
| |
|
|
|
|
| |
own small class. No functionality change.
llvm-svn: 90956
|
| |
|
|
| |
llvm-svn: 90929
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
phi translation of complex expressions like &A[i+1]. This has the
following benefits:
1. The phi translation logic is all contained in its own class with
a strong interface and verification that it is self consistent.
2. The logic is more correct than before. Previously, if intermediate
expressions got PHI translated, we'd miss the update and scan for
the wrong pointers in predecessor blocks. @phi_trans2 is a testcase
for this.
3. We have a lot less code in memdep.
We can handle phi translation across blocks of things like @phi_trans3,
which is pretty insane :).
This patch should fix the miscompiles of 255.vortex, and I tested it
with a bootstrap of llvm-gcc, llvm-test and dejagnu of course.
llvm-svn: 90926
|
| |
|
|
|
|
|
| |
because clang lowers nontrivial automatic struct/array inits to memcpy from
a global array.
llvm-svn: 90698
|
| |
|
|
| |
llvm-svn: 90697
|
| |
|
|
|
|
|
|
|
|
|
| |
short x(short *A) {
memset(A, 1, sizeof(*A)*100);
return A[42];
}
to 'return 257' instead of doing the load.
llvm-svn: 90695
|
| |
|
|
| |
llvm-svn: 90408
|
| |
|
|
|
|
|
|
| |
GVN,
per Chris' comments. Adjust testcases to match.
llvm-svn: 90304
|
| |
|
|
| |
llvm-svn: 90299
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
handle cases like this:
void test(int N, double* G) {
long j;
for (j = 1; j < N - 1; j++)
G[j+1] = G[j] + G[j+1];
}
where G[1] isn't live into the loop.
llvm-svn: 90041
|
| |
|
|
|
|
| |
inserted instructions. No functionality change until someone starts using it.
llvm-svn: 90039
|
| |
|
|
|
|
|
| |
to inform GVN about the newly inserted values. This fixes
PR5631.
llvm-svn: 90022
|
| |
|
|
|
|
|
| |
fixes PR5630 and sets the stage for the next phase of goodness (testcase
pending).
llvm-svn: 90019
|
| |
|
|
|
|
|
| |
where it is not available. It's unclear how to get this inserted
computation into GVN's scalar availability sets, Owen, help? :)
llvm-svn: 89997
|
| |
|
|
|
|
|
| |
translation done by memdep, and reenable gep translation
again.
llvm-svn: 89992
|
| |
|
|
| |
llvm-svn: 88742
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch forbids implicit conversion of DenseMap::const_iterator to
DenseMap::iterator which was possible because DenseMapIterator inherited
(publicly) from DenseMapConstIterator. Conversion the other way around is now
allowed as one may expect.
The template DenseMapConstIterator is removed and the template parameter
IsConst which specifies whether the iterator is constant is added to
DenseMapIterator.
Actually IsConst parameter is not necessary since the constness can be
determined from KeyT but this is not relevant to the fix and can be addressed
later.
Patch by Victor Zverovich!
llvm-svn: 86636
|