| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 27395
|
|
|
|
|
|
|
| |
PR726 by performing consistent signed division, not consistent unsigned
division when evaluating scev's. Do not touch udivs.
llvm-svn: 27326
|
|
|
|
| |
llvm-svn: 25513
|
|
|
|
|
|
|
|
| |
into the LLVMAnalysis library.
This allows LLVMTranform and LLVMTransformUtils to be archives and linked
with LLVMAnalysis.a, which provides any missing definitions.
llvm-svn: 24036
|
|
|
|
| |
llvm-svn: 23507
|
|
|
|
| |
llvm-svn: 22797
|
|
|
|
|
|
| |
a < expression, e.g.: for (i = m; i < n; ++i)
llvm-svn: 22793
|
|
|
|
| |
llvm-svn: 22742
|
|
|
|
| |
llvm-svn: 22736
|
|
|
|
| |
llvm-svn: 21416
|
|
|
|
|
|
| |
but should not require it.
llvm-svn: 21123
|
|
|
|
| |
llvm-svn: 20527
|
|
|
|
| |
llvm-svn: 20339
|
|
|
|
|
|
|
|
| |
If we fold three constants together (c1+c2+c3), make sure to keep
LHSC updated, instead of reusing (in this case), the 1 instead of the
partial sum.
llvm-svn: 20337
|
|
|
|
|
|
|
|
| |
Regression/Transforms/IndVarsSimplify/2005-02-17-TruncateExprCrash.ll
and PR515.
llvm-svn: 20224
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
infinite loops (using the new replaceSymbolicValuesWithConcrete method).
This patch reverts this patch:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20050131/023830.html
... which was an attempted fix for this problem. Unfortunately, that patch
caused test/Regression/Transforms/IndVarsSimplify/exit_value_tests.llx to fail
and slightly castrated the entire analysis. This patch fixes it right.
This patch is dedicated to jeffc, for making me deal with this. :)
llvm-svn: 20146
|
|
|
|
| |
llvm-svn: 19955
|
|
|
|
|
|
|
| |
Make only one print method to avoid overloaded virtual warnings when \
compiled with -Woverloaded-virtual
llvm-svn: 18589
|
|
|
|
|
|
|
| |
All SPEC CFP 95 programs now work, though the JIT isn't loading -lf2c right
so they aren't testing correctly.
llvm-svn: 18499
|
|
|
|
| |
llvm-svn: 17214
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to go in. This patch allows us to compute the trip count of loops controlled
by values loaded from constant arrays. The cannonnical example of this is
strlen when passed a constant argument:
for (int i = 0; "constantstring"[i]; ++i) ;
return i;
In this case, it will compute that the loop executes 14 times, which means
that the exit value of i is 14. Because of this, the loop gets DCE'd and
we are happy. This also applies to anything that does similar things, e.g.
loops like this:
const float Array[] = { 0.1, 2.1, 3.2, 23.21 };
for (int i = 0; Array[i] < 20; ++i)
and is actually fairly general.
The problem with this is that it almost never triggers. The reason is that
we run indvars and the loop optimizer only at compile time, which is before
things like strlen and strcpy have been inlined into the program from libc.
Because of this, it almost never is used (it triggers twice in specint2k).
I'm committing it because it DOES work, may be useful in the future, and
doesn't slow us down at all. If/when we start running the loop optimizer
at link-time (-O4?) this will be very nice indeed :)
llvm-svn: 16926
|
|
|
|
| |
llvm-svn: 16912
|
|
|
|
|
|
| |
Patch contributed by Paolo Invernizzi!
llvm-svn: 16152
|
|
|
|
|
|
|
|
| |
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.
llvm-svn: 16137
|
|
|
|
|
|
|
|
| |
- Replace ConstantPointerRef usage with GlobalValue usage
- Minimize redundant isa<GlobalValue> usage
- Correct isa<Constant> for GlobalValue subclass
llvm-svn: 14942
|
|
|
|
| |
llvm-svn: 14359
|
|
|
|
| |
llvm-svn: 14275
|
|
|
|
| |
llvm-svn: 14270
|
|
|
|
|
|
|
| |
by address. This prevents the resultant SCEV objects from depending on
where in memory other scev objects happen to live.
llvm-svn: 14263
|
|
|
|
|
|
| |
patch was graciously contributed by Vladimir Prus.
llvm-svn: 13185
|
|
|
|
|
|
| |
IndVars pass, not part of SCEV *analysis*.
llvm-svn: 13134
|
|
|
|
| |
llvm-svn: 13064
|
|
|
|
|
|
|
| |
structure to being dynamically computed on demand. This makes updating
loop information MUCH easier.
llvm-svn: 13045
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
operations. This allows us to compile this testcase:
int main() {
int h = 1;
do h = 3 * h + 1; while (h <= 256);
printf("%d\n", h);
return 0;
}
into this:
int %main() {
entry:
call void %__main( )
%tmp.6 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([4 x sbyte]* %.str_1, long 0, long 0), int 364 ) ; <int> [#uses=0]
ret int 0
}
This testcase was taken directly from 256.bzip2, believe it or not.
This code is not as general as I would like. Next up is to refactor it
a bit to handle more cases.
llvm-svn: 13019
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
even if the loop is using expressions that we can't compute as a closed-form.
This allows us to calculate that this function always returns 55:
int test() {
double X;
int Count = 0;
for (X = 100; X > 1; X = sqrt(X), ++Count)
/*empty*/;
return Count;
}
And allows us to compute trip counts for loops like:
int h = 1;
do h = 3 * h + 1; while (h <= 256);
(which occurs in bzip2), and for this function, which occurs after inlining
and other optimizations:
int popcount()
{
int x = 666;
int result = 0;
while (x != 0) {
result = result + (x & 0x1);
x = x >> 1;
}
return result;
}
We still cannot compute the exit values of result or h in the two loops above,
which means we cannot delete the loop, but we are getting closer. Being able to
compute a constant trip count for these two loops will allow us to unroll them
completely though.
llvm-svn: 13017
|
|
|
|
|
|
| |
Debian.)
llvm-svn: 12986
|
|
|
|
| |
llvm-svn: 12958
|
|
|
|
| |
llvm-svn: 12956
|
|
|
|
|
|
| |
insert it once!
llvm-svn: 12955
|
|
|
|
|
|
|
|
|
|
|
| |
at the bottom of the loop instead of the top. This reduces the number of
overlapping live ranges a lot, for example, eliminating a spill in an important
loop in 183.equake with linear scan.
I still need to make the exit comparison of the loop use the post-incremented
version of this variable, but this is an easy first step.
llvm-svn: 12952
|
|
|
|
| |
llvm-svn: 12754
|
|
|
|
| |
llvm-svn: 12670
|
|
|
|
| |
llvm-svn: 12669
|
|
|
|
| |
llvm-svn: 12668
|
|
|
|
| |
llvm-svn: 12639
|
|
|
|
| |
llvm-svn: 12623
|
|
llvm-svn: 12619
|