| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
tracking down that this was breaking llvm-gcc bootstrap on Linux.
llvm-svn: 54394
|
| |
|
|
|
|
| |
instead of having it call getIterationCount again.
llvm-svn: 54380
|
| |
|
|
|
|
| |
looks bogus. Please see PR2629 for details on why this is breaking things.
llvm-svn: 54372
|
| |
|
|
| |
llvm-svn: 54266
|
| |
|
|
|
|
| |
CodeGen & Clang work coming next.
llvm-svn: 54161
|
| |
|
|
|
|
|
|
| |
partially unroll a loop when fully unrolling would not fit under the threshold.
Patch by Mikael Lepistö.
llvm-svn: 54160
|
| |
|
|
| |
llvm-svn: 54144
|
| |
|
|
|
|
|
|
| |
loaded.
This fixes PR2599.
llvm-svn: 54133
|
| |
|
|
| |
llvm-svn: 54128
|
| |
|
|
|
|
|
| |
command-line option, and disable it by default. It introduced performance
regressions because CodeGen is currently not able to remat such loads.
llvm-svn: 53997
|
| |
|
|
|
|
|
|
|
|
|
| |
case for this.
This allows instructions like loads from global variables declared to
be constant to be moved out of loops."
Patch by Stefanus Du Toit!
llvm-svn: 53945
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Remove the GetResultInst instruction. It is still accepted in LLVM assembly
and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove
support for return instructions with multiple values. These are auto-upgraded
to use InsertValueInst instructions.
The IRBuilder still accepts multiple-value returns, and auto-upgrades them
to InsertValueInst instructions.
llvm-svn: 53941
|
| |
|
|
|
|
|
|
|
| |
leads into a cycle involving a different PHI, LSR got stuck running
around that cycle looking for the original PHI. To avoid this, keep
track of visited PHIs and stop searching if we see one more than once.
This fixes PR2570.
llvm-svn: 53879
|
| |
|
|
| |
llvm-svn: 53771
|
| |
|
|
|
|
| |
bootstrap passes with this change.
llvm-svn: 53762
|
| |
|
|
| |
llvm-svn: 53730
|
| |
|
|
| |
llvm-svn: 53715
|
| |
|
|
| |
llvm-svn: 53705
|
| |
|
|
|
|
| |
could cause problems for memdep when it breaks critical edges.
llvm-svn: 53691
|
| |
|
|
|
|
|
| |
FindInsertedValue, it now performs a number of simple transformations that
should result in the same effect when applied iteratively.
llvm-svn: 53673
|
| |
|
|
| |
llvm-svn: 53666
|
| |
|
|
| |
llvm-svn: 53627
|
| |
|
|
| |
llvm-svn: 53616
|
| |
|
|
|
|
| |
where possible. This allows local PRE to be more aggressive.
llvm-svn: 53615
|
| |
|
|
| |
llvm-svn: 53564
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
disproving a condition. This actually compiles the existing testcase
(udiv_select_to_select_shift) to:
define i64 @test(i64 %X, i1 %Cond) {
entry:
%divisor1.t = lshr i64 %X, 3 ; <i64> [#uses=1]
%quotient2 = lshr i64 %X, 3 ; <i64> [#uses=1]
%sum = add i64 %divisor1.t, %quotient2 ; <i64> [#uses=1]
ret i64 %sum
}
instead of:
define i64 @test(i64 %X, i1 %Cond) {
entry:
%quotient1.v = select i1 %Cond, i64 3, i64 4 ; <i64> [#uses=1]
%quotient1 = lshr i64 %X, %quotient1.v ; <i64> [#uses=1]
%quotient2 = lshr i64 %X, 3 ; <i64> [#uses=1]
%sum = add i64 %quotient1, %quotient2 ; <i64> [#uses=1]
ret i64 %sum
}
llvm-svn: 53534
|
| |
|
|
|
|
|
| |
Remove dead code analyzing urem. 'urem' of power-of-2 is canonicalized to an
'and' instruction.
llvm-svn: 53506
|
| |
|
|
| |
llvm-svn: 53470
|
| |
|
|
| |
llvm-svn: 53454
|
| |
|
|
| |
llvm-svn: 53452
|
| |
|
|
|
|
| |
similar.
llvm-svn: 53451
|
| |
|
|
| |
llvm-svn: 53449
|
| |
|
|
| |
llvm-svn: 53448
|
| |
|
|
| |
llvm-svn: 53447
|
| |
|
|
|
|
|
|
| |
the min/max values for an integer type, compare against the min/max
values we can prove contain the input. This might be a tighter bound,
so this is general goodness.
llvm-svn: 53446
|
| |
|
|
|
|
| |
handle them in some code.
llvm-svn: 53445
|
| |
|
|
|
|
|
| |
was using the algorithm for folding unsigned comparisons which is
completely wrong. This has been broken since the signless types change.
llvm-svn: 53444
|
| |
|
|
|
|
|
|
|
|
|
| |
true)
This cause a regression in InstCombine/JavaCompare, which was doing the right
thing on accident. To handle the missed case, generalize the comparisons based
on masked bits a little bit to handle comparisons against the max value. For
example, we can now xform (slt i32 (and X, 4), 4) -> (setne i32 (and X, 4), 4)
llvm-svn: 53443
|
| |
|
|
| |
llvm-svn: 53393
|
| |
|
|
| |
llvm-svn: 53283
|
| |
|
|
| |
llvm-svn: 53282
|
| |
|
|
| |
llvm-svn: 53276
|
| |
|
|
| |
llvm-svn: 53271
|
| |
|
|
|
|
| |
not split the loop.
llvm-svn: 53265
|
| |
|
|
|
|
|
|
|
| |
into phis. This is actually the same bug as PR2262 /
2008-04-29-VolatileLoadDontMerge.ll, but I missed checking the first
predecessor for multiple successors. Testcase here:
InstCombine/2008-07-08-VolatileLoadMerge.ll
llvm-svn: 53240
|
| |
|
|
|
|
|
| |
1. LSR runOnLoop is always returning false regardless if any transformation is made.
2. AddUsersIfInteresting can create new instructions that are added to DeadInsts. But there is a later early exit which prevents them from being freed.
llvm-svn: 53193
|
| |
|
|
| |
llvm-svn: 53177
|
| |
|
|
| |
llvm-svn: 53151
|
| |
|
|
|
|
| |
there won't be a value number match. This speeds up GVN on a case where there are very few redundancies by ~25%.
llvm-svn: 53108
|
| |
|
|
|
|
|
|
| |
not handle all cases and keeps invalid dom info around some cases, which misleads other passes down stream.
Right now, dom info is recaluclated in the end if the loop is switched.
llvm-svn: 53106
|