| 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: 54350
|
| |
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
that says "unconditional loads from this argument are safe", we now keep track
of the safety per set of indices from which loads happen. This prevents
ArgPromotion from promoting loads that aren't really valid. As an added effect,
this will now disregard the the type of the indices passed to a GEP, so
"load GEP %A, i32 1" and "load GEP %A, i64 1" will result in a single argument,
not two.
This fixes PR2598, for which a testcase has been added as well.
llvm-svn: 54159
|
| |
|
|
| |
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: 53761
|
| |
|
|
| |
llvm-svn: 53760
|
| |
|
|
| |
llvm-svn: 53757
|
| |
|
|
| |
llvm-svn: 53735
|
| |
|
|
|
|
| |
more than once.
llvm-svn: 53731
|
| |
|
|
| |
llvm-svn: 53730
|
| |
|
|
| |
llvm-svn: 53716
|
| |
|
|
| |
llvm-svn: 53715
|
| |
|
|
| |
llvm-svn: 53712
|
| |
|
|
| |
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
|
| |
|
|
|
|
| |
again canonicalizes {i32} into i32 and {} into void.
llvm-svn: 53610
|
| |
|
|
|
|
|
|
|
|
|
| |
return value as a whole in deadargelim is really not needed now that we simply
rebuild the old return value and actually prevents some canonicalization from
taking place.
This revert stops deadargelim from changing {i32} into i32 for now, but I'll
fix that next.
llvm-svn: 53609
|
| |
|
|
|
|
|
|
|
|
|
|
| |
return values that are still (partially) live. Instead of updating all uses of
a call instruction after removing some elements, it now just rebuilds the
original struct (With undef gaps where the unused values were) and leaves it to
instcombine to clean this up.
The added testcase still fails currently, but this is due to instcombine which
isn't good enough yet. I will fix that part next.
llvm-svn: 53608
|
| |
|
|
| |
llvm-svn: 53607
|
| |
|
|
|
|
|
|
|
|
|
| |
only the liveness of partial return values (for functions returning a struct).
This is more explicit to prevent unwanted changes in the return value.
In particular, deadargelim now canonicalizes a function returning {i32} to
returning i32 and {} to void, if the struct returned is not used in its
entirety, but only the single element is used.
llvm-svn: 53606
|
| |
|
|
|
|
|
| |
and return values live for those functions. This doesn't change anything yet,
but prepares for the coming commits.
llvm-svn: 53601
|
| |
|
|
| |
llvm-svn: 53600
|
| |
|
|
|
|
| |
RetOrArg::getDescription() as const.
llvm-svn: 53599
|
| |
|
|
| |
llvm-svn: 53598
|
| |
|
|
| |
llvm-svn: 53592
|
| |
|
|
|
|
| |
method, to slightly simplify control flow.
llvm-svn: 53591
|
| |
|
|
| |
llvm-svn: 53564
|
| |
|
|
| |
llvm-svn: 53557
|
| |
|
|
| |
llvm-svn: 53549
|
| |
|
|
|
|
|
| |
a hack around the fact that we don't represent the CFG correctly for sj/lj.
It fixes PR2486.
llvm-svn: 53540
|
| |
|
|
| |
llvm-svn: 53538
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|