| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 60494
|
| |
|
|
| |
llvm-svn: 60442
|
| |
|
|
| |
llvm-svn: 60431
|
| |
|
|
| |
llvm-svn: 60395
|
| |
|
|
|
|
|
|
|
| |
figuring out the base of the IV. This produces better
code in the example. (Addresses use (IV) instead of
(BASE,IV) - a significant improvement on low-register
machines like x86).
llvm-svn: 60374
|
| |
|
|
|
|
|
|
|
| |
instead of std::sort. This shrinks the release-asserts LSR.o file
by 1100 bytes of code on my system.
We should start using array_pod_sort where possible.
llvm-svn: 60335
|
| |
|
|
|
|
| |
This is a lot cheaper and conceptually simpler.
llvm-svn: 60332
|
| |
|
|
|
|
| |
DeadInsts ivar, just use it directly.
llvm-svn: 60330
|
| |
|
|
|
|
|
|
| |
buggy rewrite, this notifies ScalarEvolution of a pending instruction
about to be removed and then erases it, instead of erasing it then
notifying.
llvm-svn: 60329
|
| |
|
|
|
|
| |
to fail.
llvm-svn: 60233
|
| |
|
|
|
|
|
| |
making it use RecursivelyDeleteTriviallyDeadInstructions to do
the heavy lifting.
llvm-svn: 60195
|
| |
|
|
| |
llvm-svn: 60192
|
| |
|
|
|
|
|
|
|
|
|
| |
LoopPass*.
- Although less precise, this means they can be used in clients
without RTTI (who would otherwise need to include LoopPass.h, which
eventually includes things using dynamic_cast). This was the
simplest solution that presented itself, but I am happy to use a
better one if available.
llvm-svn: 58010
|
| |
|
|
|
|
| |
instruction, not after. This fixes some uses of free'd memory.
llvm-svn: 56908
|
| |
|
|
|
|
|
|
|
| |
cases. See the comment above OptimizeSMax for the full story, and
the testcase for an example. This cancels out a pessimization
commonly attributed to indvars, and will allow us to lift some of
the artificial throttles in indvars, rather than add new ones.
llvm-svn: 56230
|
| |
|
|
| |
llvm-svn: 56011
|
| |
|
|
| |
llvm-svn: 55924
|
| |
|
|
| |
llvm-svn: 55913
|
| |
|
|
| |
llvm-svn: 55779
|
| |
|
|
| |
llvm-svn: 55682
|
| |
|
|
| |
llvm-svn: 55680
|
| |
|
|
| |
llvm-svn: 55678
|
| |
|
|
|
|
| |
if possible.
llvm-svn: 55674
|
| |
|
|
| |
llvm-svn: 55433
|
| |
|
|
| |
llvm-svn: 55424
|
| |
|
|
|
|
| |
the cast operation.
llvm-svn: 55374
|
| |
|
|
| |
llvm-svn: 54878
|
| |
|
|
| |
llvm-svn: 54821
|
| |
|
|
| |
llvm-svn: 54813
|
| |
|
|
|
|
| |
the cast opeation.
llvm-svn: 54786
|
| |
|
|
| |
llvm-svn: 54754
|
| |
|
|
| |
llvm-svn: 54710
|
| |
|
|
|
|
| |
the only use of its iv stride, the stride can be eliminated by moving it to another stride. If the scale is negative, swap the predicate instead of using a inverse predicate.
llvm-svn: 54415
|
| |
|
|
|
|
|
|
|
| |
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: 53564
|
| |
|
|
|
|
|
| |
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: 52648
|
| |
|
|
|
|
| |
with more than two nodes.
llvm-svn: 52617
|
| |
|
|
|
|
| |
function, and make use of it in several places.
llvm-svn: 52463
|
| |
|
|
|
|
|
|
|
| |
when changing the stride of a comparison so that it's slightly
more precise, by having it scan the instruction list to determine
if there is a use of the condition after the point where the
condition will be inserted.
llvm-svn: 52371
|
| |
|
|
|
|
| |
across runs.
llvm-svn: 52361
|
| |
|
|
| |
llvm-svn: 52339
|
| |
|
|
|
|
| |
for it to generate use-before-def IR, such as in this testcase.
llvm-svn: 52258
|
| |
|
|
| |
llvm-svn: 52226
|
| |
|
|
|
|
| |
load and shuffle instructions.
llvm-svn: 51521
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ScalarEvolution::deleteValueFromRecords on it before doing the
replaceAllUsesWith, because ScalarEvolution looks at the instruction's
users to find SCEV references to the instruction's SCEV object in its
internal maps.
Move all of LSR's loop-related state clearing after processing the loop
and before cleaning up dead PHI nodes. This eliminates all of LSR's SCEV
references just before the calls to ScalarEvolution::deleteValueFromRecords
so that when ScalarEvolution drops its own SCEV references, the reference
counts will reach zero and the SCEVs will be deleted immediately.
These changes fix some compiler aborts involving ScalarEvolution holding
onto and reusing SCEV objects for instructions that have been deleted.
No regression test unfortunately; because the symptoms were due to
dangling pointers, reduced testcases ended up being fairly arbitrary.
llvm-svn: 51359
|
| |
|
|
|
|
|
|
| |
replaced is a PHI. This prevents it from inserting uses before defs
in the case that it isn't a PHI and it depends on other instructions
later in the block. This fixes the 447.dealII regression on x86-64.
llvm-svn: 51292
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
use-before-def. The problem comes up in code with multiple PHIs where
one PHI is being rewritten in terms of the other, but the other needs
to be casted first. LLVM rules requre the cast instruction to be
inserted after any PHI instructions, but when instructions were
inserted to replace the second PHI value with a function of the first,
they were ended up going before the cast instruction. Avoid this
problem by remembering the location of the cast instruction, when one
is needed, and inserting the expansion of the new value after it.
This fixes a bug that surfaced in 255.vortex on x86-64 when
instcombine was removed from the middle of the loop optimization
passes.
llvm-svn: 51169
|
| |
|
|
|
|
|
| |
several things that were neither in an anonymous namespace nor static
but not intended to be global.
llvm-svn: 51017
|
| |
|
|
| |
llvm-svn: 49671
|