| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 130294
|
|
|
|
|
|
| |
This needs review.
llvm-svn: 127638
|
|
|
|
|
|
|
|
| |
When ExactBECount is a constant, use it for MaxBECount.
When MaxBECount cannot be computed, replace it with ExactBECount.
Fixes PR9424.
llvm-svn: 127342
|
|
|
|
|
|
|
| |
This fixes a FIXME in scev-aa.ll (allowing a new no-alias result) and
generally makes things more precise.
llvm-svn: 125449
|
|
|
|
|
|
|
|
|
|
|
| |
unsigned overflow (e.g. "gep P, -1"), and while they can have
signed wrap in theoretical situations, modelling an AddRec as
not having signed wrap is going enough for any case we can
think of today. In the future if this isn't enough, we can
revisit this. Modeling them as having NUW isn't causing any
known problems either FWIW.
llvm-svn: 125410
|
|
|
|
|
|
| |
robust against smarter optimizations, using the power of FileCheck.
llvm-svn: 124081
|
|
|
|
| |
llvm-svn: 124062
|
|
|
|
|
|
|
| |
The PassManager did not implement the transitivity of requiredTransitive. This
was unnoticed since 2006.
llvm-svn: 123942
|
|
|
|
| |
llvm-svn: 123842
|
|
|
|
|
|
|
|
|
|
|
| |
by indvars through the scev expander.
trunc(add x, y) --> add(trunc x, y). Currently SCEV largely folds the other way
which is probably wrong, but preserved to minimize churn. Instcombine doesn't
do this fold either, demonstrating a missed optz'n opportunity on code doing
add+trunc+add.
llvm-svn: 123838
|
|
|
|
| |
llvm-svn: 123832
|
|
|
|
| |
llvm-svn: 123227
|
|
|
|
| |
llvm-svn: 123143
|
|
|
|
|
|
|
| |
with GEP instructions are always NUW, because PHIs cannot wrap
the end of the address space.
llvm-svn: 123105
|
|
|
|
|
|
| |
that have the bit set.
llvm-svn: 123104
|
|
|
|
| |
llvm-svn: 112889
|
|
|
|
|
|
|
| |
make any assumptions about when the two conditions will agree on when
to permit the loop to exit. This fixes PR7845.
llvm-svn: 110758
|
|
|
|
|
|
|
| |
nsw and nuw flags from IR Instructions. On further consideration,
this isn't valid.
llvm-svn: 107298
|
|
|
|
| |
llvm-svn: 107258
|
|
|
|
|
|
| |
constant operands.
llvm-svn: 106537
|
|
|
|
|
|
|
|
| |
assuming that loops are in canonical form, as ScalarEvolution doesn't
depend on LoopSimplify itself. Also, with indirectbr not all loops can
be simplified. This fixes PR7416.
llvm-svn: 106389
|
|
|
|
|
|
| |
optimizations. There is still some nondeterminism remaining.
llvm-svn: 106306
|
|
|
|
| |
llvm-svn: 106304
|
|
|
|
|
|
| |
green. Dan, please revert this once the real problem is fixed.
llvm-svn: 105732
|
|
|
|
|
|
|
|
|
|
|
| |
scrounging through SCEVUnknown contents and SCEVNAryExpr operands;
instead just do a simple deterministic comparison of the precomputed
hash data.
Also, since this is more precise, it eliminates the need for the slow
N^2 duplicate detection code.
llvm-svn: 105540
|
|
|
|
| |
llvm-svn: 102387
|
|
|
|
|
|
|
| |
Also, generalize ScalarEvolutions's min and max recognition to handle
some new forms of min and max that this change makes more common.
llvm-svn: 102234
|
|
|
|
|
|
| |
assertion failures in extreme cases.
llvm-svn: 102042
|
|
|
|
|
|
|
| |
have preheaders or dedicated exit blocks, as clients may not otherwise
need to run LoopSimplify.
llvm-svn: 101030
|
|
|
|
|
|
| |
They are lots of trouble, and they don't matter. This fixes PR6559.
llvm-svn: 98103
|
|
|
|
|
|
|
|
| |
true or false as its exit condition. These are usually eliminated by
SimplifyCFG, but the may be left around during a pass which wishes
to preserve the CFG.
llvm-svn: 96683
|
|
|
|
| |
llvm-svn: 94574
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
have trouble with an intermediate add overflowing. Also, be more conservative
about the case where the induction variable in an SLT loop exit can step past
the RHS of the SLT and overflow in a single step.
Make getSignedRange more aggressive, to recover for some common cases which
the above fixes pessimized.
This addresses rdar://7561161.
llvm-svn: 94512
|
|
|
|
|
|
| |
so that unnamed blocks are handled.
llvm-svn: 93059
|
|
|
|
| |
llvm-svn: 90185
|
|
|
|
|
|
|
| |
only missing the one form (in this testcase). Dan, do you
consider this example to be important?
llvm-svn: 89953
|
|
|
|
|
|
| |
depend on target data to supply it within the test
llvm-svn: 85900
|
|
|
|
| |
llvm-svn: 85241
|
|
|
|
|
|
|
|
| |
where the induction variable has a non-unit stride, such as {0,+,2}, and
there are expressions such as {1,+,2} inside the loop formed with
or or add nsw operators.
llvm-svn: 82151
|
|
|
|
|
|
|
|
| |
input filename so that opt doesn't print the input filename in the
output so that grep lines in the tests don't unintentionally match
strings in the input filename.
llvm-svn: 81537
|
|
|
|
| |
llvm-svn: 81257
|
|
|
|
|
|
| |
of using llvm-as, now that opt supports this.
llvm-svn: 81226
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a simple AliasAnalysis implementation which works by making
ScalarEvolution queries. ScalarEvolution has a more complete understanding
of arithmetic than BasicAA's collection of ad-hoc checks, so it handles
some cases that BasicAA misses, for example p[i] and p[i+1] within the
same iteration of a loop.
This is currently experimental. It may be that the main use for this pass
will be to help find cases where BasicAA can be profitably extended, or
to help in the development of the overall AliasAnalysis infrastructure,
however it's also possible that it could grow up to become a directly
useful pass.
llvm-svn: 80098
|
|
|
|
|
|
| |
depend on TargetData information.
llvm-svn: 79491
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
using formatted_raw_ostream's PadToColumn.
Before:
bb1: ; preds = %bb
%2 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
%3 = getelementptr double* %p, i64 %2 ; <double*> [#uses=1]
%4 = load double* %3, align 8 ; <double> [#uses=1]
%5 = fmul double %4, 1.100000e+00 ; <double> [#uses=1]
%6 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
%7 = getelementptr double* %p, i64 %6 ; <double*> [#uses=1]
After:
bb1: ; preds = %bb
%2 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
%3 = getelementptr double* %p, i64 %2 ; <double*> [#uses=1]
%4 = load double* %3, align 8 ; <double> [#uses=1]
%5 = fmul double %4, 1.100000e+00 ; <double> [#uses=1]
%6 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
%7 = getelementptr double* %p, i64 %6 ; <double*> [#uses=1]
Several tests required whitespace adjustments.
llvm-svn: 78816
|
|
|
|
|
|
|
| |
after their associated opcodes rather than before. This makes them
a little easier to read.
llvm-svn: 77194
|
|
|
|
|
|
|
| |
the step value as unsigned, the start value and the addrec
itself still need to be treated as signed.
llvm-svn: 77078
|
|
|
|
|
|
| |
analyzing add recurrences.
llvm-svn: 77034
|
|
|
|
|
|
|
|
| |
(x pred y) with more thorough code that does more complete canonicalization
before resorting to range checks. This helps it find more cases where
the canonicalized expressions match.
llvm-svn: 76671
|
|
|
|
| |
llvm-svn: 76526
|