History log of /external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
dce4a407a24b04eebc6a376f8e62b41aaa7b071f 29-May-2014 Stephen Hines <srhines@google.com> Update LLVM for 3.5 rebase (r209712).

Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
36b56886974eae4f9c5ebc96befd3e7bfe5de338 24-Apr-2014 Stephen Hines <srhines@google.com> Update to LLVM 3.5a.

Change-Id: Ifadecab779f128e62e430c2b4f6ddd84953ed617
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4d4bbaf997c16f9e79503bd640306d784efd090e 25-Oct-2013 Andrew Trick <atrick@apple.com> Fix SCEVExpander: don't try to expand quadratic recurrences outside a loop.

Partial fix for PR17459: wrong code at -O3 on x86_64-linux-gnu
(affecting trunk and 3.3)

When SCEV expands a recurrence outside of a loop it attempts to scale
by the stride of the recurrence. Chained recurrences don't work that
way. We could compute binomial coefficients, but would hve to
guarantee that the chained AddRec's are in a perfectly reduced form.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193438 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d084153a8fd8ee058fd4c39d4f15d3f988566d95 24-Oct-2013 Juergen Ributzka <juergen@apple.com> Fix a bug in LinearFunctionTestReplace that created invalid loop exit checks.

Reviewed by Andy

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193303 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
577ac566c45670cd8ef03e202cb92258c643574d 24-Oct-2013 Andrew Trick <atrick@apple.com> Clarify comments in genLoopLimit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193292 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
14807bd8c801f976c999e5a6699f31ee9642021a 10-Sep-2013 Matt Arsenault <Matthew.Arsenault@amd.com> Teach ScalarEvolution about pointer address spaces

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190425 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
16404cc817e8b8d3fbfbc9051394eb59d7c5ffb4 13-Jul-2013 Andrew Trick <atrick@apple.com> LFTR improvement to avoid truncation.

This is a reimplemntation of the patch originally in r186107.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186215 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
807e6c71a8d13531ec359006e3b6526ae70064a8 13-Jul-2013 Andrew Trick <atrick@apple.com> Cleanup LFTR logic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186214 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7137909128e6447c556b2713a60cd8e62f823612 13-Jul-2013 Andrew Trick <atrick@apple.com> Cleanup: rename a variable to make the logic easier to follow.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186213 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6f0ec20e8fa23e9588205ea0eaba8f3021abe1ac 12-Jul-2013 Chandler Carruth <chandlerc@gmail.com> Revert "indvars: Improve LFTR by eliminating truncation when comparing
against a constant."

This reverts commit r186107. It didn't handle wrapping arithmetic in the
loop correctly and thus caused the following C program to count from
0 to UINT64_MAX instead of from 0 to 255 as intended:

#include <stdio.h>
int main() {
unsigned char first = 0, last = 255;
do { printf("%d\n", first); } while (first++ != last);
}

Full test case and instructions to reproduce with just the -indvars pass
sent to the original review thread rather than to r186107's commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186152 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
53b28f86236fc548143656929f39f38d9dc83e06 11-Jul-2013 Andrew Trick <atrick@apple.com> indvars: Improve LFTR by eliminating truncation when comparing against a constant.

Patch by Michele Scandale!

Adds a special handling of the case where, during the loop exit
condition rewriting, the exit value is a constant of bitwidth lower
than the type of the induction variable: instead of introducing a
trunc operation in order to match correctly the operand types, it
allows to convert the constant value to an equivalent constant,
depending on the initial value of the induction variable and the trip
count, in order have an equivalent comparison between the induction
variable and the new constant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186107 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5a57dbef33ec2d336de2a2e9da4e477a4969fe57 04-Jun-2013 David Majnemer <david.majnemer@gmail.com> IndVarSimplify: check if loop invariant expansion can trap

IndVarSimplify is willing to move divide instructions outside of their
loop bodies if they are invariant of the loop. However, it may not be
safe to expand them if we do not know if they can trap.

Instead, check to see if it is not safe to expand the instruction and
skip the expansion.

This fixes PR16041.

Testcase by Rafael Ávila de Espíndola.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183239 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
eb9a42e8ab5ffb5a8f02c2f78876ed03dd883416 19-Mar-2013 Arnaud A. de Grandmaison <arnaud.adegm@gmail.com> IndVarSimplify: do not recompute an IV value outside of the loop if :

- it is trivially known to be used inside the loop in a way that can not be optimized away
- there is no use outside of the loop which can take advantage of the computation hoisting

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177432 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
0b8c9a80f20772c3793201ab5b251d3520b9cea3 02-Jan-2013 Chandler Carruth <chandlerc@gmail.com> Move all of the header files which are involved in modelling the LLVM IR
into their new header subdirectory: include/llvm/IR. This matches the
directory structure of lib, and begins to correct a long standing point
of file layout clutter in LLVM.

There are still more header files to move here, but I wanted to handle
them in separate commits to make tracking what files make sense at each
layer easier.

The only really questionable files here are the target intrinsic
tablegen files. But that's a battle I'd rather not fight today.

I've updated both CMake and Makefile build systems (I think, and my
tests think, but I may have missed something).

I've also re-sorted the includes throughout the project. I'll be
committing updates to Clang, DragonEgg, and Polly momentarily.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171366 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d04a8d4b33ff316ca4cf961e06c9e312eff8e64f 03-Dec-2012 Chandler Carruth <chandlerc@gmail.com> Use the new script to sort the includes of every file under lib.

Sooooo many of these had incorrect or strange main module includes.
I have manually inspected all of these, and fixed the main module
include to be the nearest plausible thing I could find. If you own or
care about any of these source files, I encourage you to take some time
and check that these edits were sensible. I can't have broken anything
(I strictly added headers, and reordered them, never removed), but they
may not be the headers you'd really like to identify as containing the
API being implemented.

Many forward declarations and missing includes were added to a header
files to allow them to parse cleanly when included first. The main
module rule does in fact have its merits. =]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ece6c6bb6329748b92403c06ac87f45c43485911 01-Nov-2012 Chandler Carruth <chandlerc@gmail.com> Revert the series of commits starting with r166578 which introduced the
getIntPtrType support for multiple address spaces via a pointer type,
and also introduced a crasher bug in the constant folder reported in
PR14233.

These commits also contained several problems that should really be
addressed before they are re-committed. I have avoided reverting various
cleanups to the DataLayout APIs that are reasonable to have moving
forward in order to reduce the amount of churn, and minimize the number
of commits that were reverted. I've also manually updated merge
conflicts and manually arranged for the getIntPtrType function to stay
in DataLayout and to be defined in a plausible way after this revert.

Thanks to Duncan for working through this exact strategy with me, and
Nick Lewycky for tracking down the really annoying crasher this
triggered. (Test case to follow in its own commit.)

After discussing with Duncan extensively, and based on a note from
Micah, I'm going to continue to back out some more of the more
problematic patches in this series in order to ensure we go into the
LLVM 3.2 branch with a reasonable story here. I'll send a note to
llvmdev explaining what's going on and why.

Summary of reverted revisions:

r166634: Fix a compiler warning with an unused variable.
r166607: Add some cleanup to the DataLayout changes requested by
Chandler.
r166596: Revert "Back out r166591, not sure why this made it through
since I cancelled the command. Bleh, sorry about this!
r166591: Delete a directory that wasn't supposed to be checked in yet.
r166578: Add in support for getIntPtrType to get the pointer type based
on the address space.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167221 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
e669c930a61dd56891df2f9822966ecb173c8072 29-Oct-2012 Ulrich Weigand <ulrich.weigand@de.ibm.com> In various places throughout the code generator, there were special
checks to avoid performing compile-time arithmetic on PPCDoubleDouble.

Now that APFloat supports arithmetic on PPCDoubleDouble, those checks
are no longer needed, and we can treat the type like any other.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166958 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
aa76e9e2cf50af190de90bc778b7f7e42ef9ceff 24-Oct-2012 Micah Villmow <villmow@gmail.com> Add in support for getIntPtrType to get the pointer type based on the address space.
This checkin also adds in some tests that utilize these paths and updates some of the
clients.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7182126b0f3100cfddfbe6939be1a7eaeaf9fd57 19-Oct-2012 Benjamin Kramer <benny.kra@googlemail.com> Indvars: Don't recursively delete instruction during BB iteration.

This can invalidate the iterators leading to use after frees and crashes.
Fixes PR12536.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166291 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3574eca1b02600bac4e625297f4ecf745f4c4f32 08-Oct-2012 Micah Villmow <villmow@gmail.com> Move TargetData to DataLayout.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165402 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
eb51e95e61bd93cb764e14cdd5f0271e237e4673 04-Oct-2012 Jakub Staszak <kubastaszak@gmail.com> Add a comment to the commit r165187.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165238 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
395c1502a7e6380ec2210ee4be1fdb3128c10528 04-Oct-2012 Jakub Staszak <kubastaszak@gmail.com> Fix PR13967.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165187 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
8e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6 29-Aug-2012 Benjamin Kramer <benny.kra@googlemail.com> Make MemoryBuiltins aware of TargetLibraryInfo.

This disables malloc-specific optimization when -fno-builtin (or -ffreestanding)
is specified. This has been a problem for a long time but became more severe
with the recent memory builtin improvements.

Since the memory builtin functions are used everywhere, this required passing
TLI in many places. This means that functions that now have an optional TLI
argument, like RecursivelyDeleteTriviallyDeadFunctions, won't remove dead
mallocs anymore if the TLI argument is missing. I've updated most passes to do
the right thing.

Fixes PR13694 and probably others.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162841 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7f496a628eb93d60eed39340fcc5e89479eda488 18-Jul-2012 Andrew Trick <atrick@apple.com> indvars: drive by heuristics fix.

Minor oversight noticed by inspection. Sorry no unit test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160422 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4781d8ee1cd586bf7a569f80e1e49694c93eddd8 18-Jul-2012 Andrew Trick <atrick@apple.com> indvars: Linear function test replace should avoid reusing undef.

Fixes PR13371: indvars pass incorrectly substitutes 'undef' values.

I do not like this fix. It's needed until/unless the meaning of undef
changes. It attempts to be complete according to the IR spec, but I
don't have much confidence in the implementation given the difficulty
testing undefined behavior. Worse, this invalidates some of my
hard-fought work on indvars and LSR to optimize pointer induction
variables. It results benchmark regressions, which I'll track
internally. On x86_64 no LTO I see:

-3% huffbench
-3% 400.perlbench
-8% fhourstones

My only suggestion for recovering is to change the meaning of
undef. If we could trust an arbitrary instruction to produce a some
real value that can be manipulated (e.g. incremented) according to
non-undef rules, then this case could be easily handled with SCEV.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160421 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c5480c634c9de552f9f65c899bd55cc8f1f89e68 24-Mar-2012 Andrew Trick <atrick@apple.com> More IndVarSimplify cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153362 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
db0d666578388026278c17f848095b396b7ea27d 22-Mar-2012 Andrew Trick <atrick@apple.com> Remove -enable-iv-rewrite, which has been unsupported since 3.0.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153260 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
75ae20366fd1b480f4cc38400bb075c43c9f4f7f 16-Mar-2012 Andrew Trick <atrick@apple.com> LSR fix: Add isSimplifiedLoopNest to IVUsers analysis.

Only record IVUsers that are dominated by simplified loop
headers. Otherwise SCEVExpander will crash while looking for a
preheader.

I previously tried to work around this in LSR itself, but that was
insufficient. This way, LSR can continue to run if some uses are not
in simple loops, as long as we don't attempt to analyze those users.

Fixes <rdar://problem/11049788> Segmentation fault: 11 in LoopStrengthReduce

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152892 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b0934ab7d811e23bf530371976b8b35f3242169c 19-Feb-2012 Ahmed Charles <ace2001ac@gmail.com> Remove dead code. Improve llvm_unreachable text. Simplify some control flow.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150918 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5fef01db01592903d3a22701b598fb6a69265c53 29-Jan-2012 Nick Lewycky <nicholas@mxc.ca> Fix typo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149185 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b5c26ef9da16052597d59a412eaae32098aa1be0 20-Jan-2012 Andrew Trick <atrick@apple.com> SCEVExpander fixes. Affects LSR and indvars.

LSR has gradually been improved to more aggressively reuse existing code, particularly existing phi cycles. This exposed problems with the SCEVExpander's sloppy treatment of its insertion point. I applied some rigor to the insertion point problem that will hopefully avoid an endless bug cycle in this area. Changes:

- Always used properlyDominates to check safe code hoisting.

- The insertion point provided to SCEV is now considered a lower bound. This is usually a block terminator or the use itself. Under no cirumstance may SCEVExpander insert below this point.

- LSR is reponsible for finding a "canonical" insertion point across expansion of different expressions.

- Robust logic to determine whether IV increments are in "expanded" form and/or can be safely hoisted above some insertion point.

Fixes PR11783: SCEVExpander assert.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148535 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
86d34100cf164f6ba5c0c2344b7dff86cc0a0980 12-Dec-2011 Andrew Trick <atrick@apple.com> Indvars: guard against exponential behavior in isHighCostExpansion.

This should always be done as a matter of principal. I don't have a
case that exposes the problem. I just noticed this recently while
scanning the code and realized I meant to fix it long ago.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146438 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1608769abeb1430dc34f31ffac0d9850f99ae36a 05-Dec-2011 Nadav Rotem <nadav.rotem@intel.com> Add support for vectors of pointers.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145801 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ecb35ece5c42d89057da3c2c7bc2e95f08b1dbef 29-Nov-2011 Andrew Trick <atrick@apple.com> SCEV fix. In general, Add/Mul expressions should not inherit NSW/NUW.

This reverts r139450, fixes r139453, and adds much needed comments and a
unit test.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145367 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
0861f5793a1834f02b522fb86fb037cd592c134f 27-Nov-2011 Benjamin Kramer <benny.kra@googlemail.com> Move code into anonymous namespaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145154 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d3714b60b5adf15376a8803e6622c74694884b28 02-Nov-2011 Andrew Trick <atrick@apple.com> Rewrite LinearFunctionTestReplace to handle pointer-type IVs.

We've been hitting asserts in this code due to the many supported
combintions of modes (iv-rewrite/no-iv-rewrite) and IV types. This
second rewrite of the code attempts to deal with these cases systematically.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143546 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
94dffd2bb013ef7d2052ef56eac75cdf5d89d43b 02-Nov-2011 Chandler Carruth <chandlerc@gmail.com> Add parentheses to disambiguate the precedence of these operations and
silence -Wparentheses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143534 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3129da8d1a15a263a9af10b618478344db9eeddf 02-Nov-2011 Andrew Trick <atrick@apple.com> Broaden an assert to handle enable-iv-rewrite=true following r143183.

Narrowest possible fix for PR11279.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143522 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6f2dd7ebcf5225bb98594c3504ded9a46c7ed11a 28-Oct-2011 Andrew Trick <atrick@apple.com> LFTR should avoid a type mismatch with null pointer IVs.

Fixes rdar://10359193 Indvar LinearFunctionTestReplace assertion


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143183 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
8ecde6cbf87cfa3184cec5a4eedb70b06dbb4a85 27-Oct-2011 Eli Friedman <eli.friedman@gmail.com> It is not safe to sink an alloca into a stacksave/stackrestore pair, so don't do that. <rdar://problem/10352360>



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
513b1f47c1ddef0638bd63399bf64965e592c2bf 15-Oct-2011 Andrew Trick <atrick@apple.com> Fix indvars randomness by removing iteration over a map.

I rewrote the algorithm a while back so it doesn't require map lookup,
but neglected to change the data structure. This was caught by
llvm-gcc self host, not because there's anything special about
llvm-gcc, but because it is the only test for nondeterminism we
currently have. Unit tests don't work well for everything; we should
always try to have a nondeterminism stress test running.

Fixes PR11133: llvm-gcc self host .o mismatch after enable-iv-rewrite=false


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142036 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
204494149b6f846e8f173f525b129f5508076049 11-Oct-2011 Andrew Trick <atrick@apple.com> Move replaceCongruentIVs into SCEVExapander and bias toward "expanded"
IVs.

Indvars previously chose randomly between congruent IVs. Now it will
bias the decision toward IVs that SCEVExpander likes to create. This
was not done to fix any problem, it's just a welcome side effect of
factoring code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141633 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
909ef7db3dad5247648e1e89a34f1382815442b8 28-Sep-2011 Andrew Trick <atrick@apple.com> indvars should hoist [sz]ext because licm is not rerun.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140670 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b0598b14aa011a18e6a760e448741f62018fb4a3 15-Sep-2011 Andrew Trick <atrick@apple.com> Reapply r139759. Disable IV rewriting by default. See PR10916.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139842 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
effb64715490e7680964a723d56a0e793a13f04b 13-Sep-2011 Andrew Trick <atrick@apple.com> [indvars] Revert r139579 until 401.bzip -arch i386 miscompilation is fixed. PR10920.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139583 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
dd9d758a315e69798c8e36ed5c8b4a23e4585274 13-Sep-2011 Andrew Trick <atrick@apple.com> Disable IV rewriting by default. See PR10916.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139579 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
94f2c23d24b3ca682ea192f1d9a4e2c2e0f4eeb3 13-Sep-2011 Andrew Trick <atrick@apple.com> [indvars] Fix bugs in floating point IV range checks noticed by inspection.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139574 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f21bdf4f429223bcd76bf0198295a7ddbe7a1fdf 12-Sep-2011 Andrew Trick <atrick@apple.com> Rename -disable-iv-rewrite to -enable-iv-rewrite=false in preparation for default change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139517 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
20151da8c38287b9fa181e9fef93f70bc2cd9fd2 10-Sep-2011 Andrew Trick <atrick@apple.com> [disable-iv-rewrite] Allow WidenIV to handle NSW/NUW operations
better.

Don't immediately give up when an add operation can't be trivially
sign/zero-extended within a loop. If it has NSW/NUW flags, generate a
new expression with sign extended (non-recurrent) operand. As before,
if SCEV says that all sign extends are loop invariant, then we can
widen the operation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139453 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
39d7802224532c075f4c781c3e51ffed83d17420 09-Sep-2011 Andrew Trick <atrick@apple.com> Comment formatting.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
75ebc0ec2019f391648d3bc3bac6f6da11cfbabd 06-Sep-2011 Andrew Trick <atrick@apple.com> Add -verify-indvars for imperfect SCEV trip count verification after indvars.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139169 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2b18881185b123e5f163eb7b32b3452fc3f339d8 26-Aug-2011 Bill Wendling <isanbard@gmail.com> Don't sink landingpad instructions during ind-var simplification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138651 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b05fdd6babada25da2ec3ba54bb462c2ecfc42a8 24-Aug-2011 Bill Wendling <isanbard@gmail.com> Use getFirstInsertionPt instead of getFirstNonPHI so that it skips to the proper
insertion place.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138473 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bddb7f82103deb226baa6793f41c5961661167e7 10-Aug-2011 Andrew Trick <atrick@apple.com> Cleanup. Make ScalarEvolution an explicit argument of the
SimplifyIndVar utility since it is required.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137202 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4b4bb71bcdfd8c17cd4acb6116fc9a56c5fecd47 10-Aug-2011 Andrew Trick <atrick@apple.com> Added a SimplifyIndVar utility to simplify induction variable users
based on ScalarEvolution without changing the induction variable phis.

This utility is the main tool of IndVarSimplifyPass, but the pass also
restructures induction variables in strange ways that are sensitive to
pass ordering. This provides a way for other loop passes to simplify
new uses of induction variables created during transformation. The
utility may be used by any pass that preserves ScalarEvolution. Soon
LoopUnroll will use it.

The net effect in this checkin is to cleanup the IndVarSimplify pass
by factoring out the SimplifyIndVar algorithm into a standalone utility.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137197 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
06988bcf6a5c74e81cf7e76f06a686aa822ec00a 06-Aug-2011 Andrew Trick <atrick@apple.com> Made SCEV's UDiv expressions more canonical. When dividing a
recurrence, the initial values low bits can sometimes be ignored.

To take advantage of this, added FoldIVUser to IndVarSimplify to fold
an IV operand into a udiv/lshr if the operator doesn't affect the
result.

-indvars -disable-iv-rewrite now transforms

i = phi i4
i1 = i0 + 1
idx = i1 >> (2 or more)
i4 = i + 4

into

i = phi i4
idx = i0 >> ...
i4 = i + 4


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137013 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a305fe75450348677a228f7d0f1cc53b2504b562 21-Jul-2011 Andrew Trick <atrick@apple.com> Cleanup: make std::pair usage slightly less indecipherable without actually naming variables!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135684 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c30a38f34bdfecb99ce49e3ffa479039c9bf0209 21-Jul-2011 Chris Lattner <sabre@nondot.org> move tier out of an anonymous namespace, it doesn't make sense
to for it to be an an anon namespace and be in a header.

Eliminate some extraenous uses of tie.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135669 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
626f52d43df67c29b156f524551327d741ef80bf 20-Jul-2011 Jay Foad <jay.foad@gmail.com> Fix a GCC warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135581 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
86c98145b268a0d10e062792f98bc8eea6b639b4 20-Jul-2011 Andrew Trick <atrick@apple.com> indvars: Added getInsertPointForUses to find a valid place to truncate the IV.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
13bcf2e68a88cb87378c9773effa5b79b3091d75 20-Jul-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: Add NarrowIVDefUse to cache def-use
info. Holding Use* pointers is bad form even though it happened to
work in this case.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135566 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f22d95749a876975329f6de3a233031171af26a6 20-Jul-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite fix: derived GEP IVs


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135558 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
41e0d4e788eb473ea2ac9f086f51fd7e11882430 18-Jul-2011 Andrew Trick <atrick@apple.com> Compiler warning.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135426 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fc933c073e9357a791c0f6b307355ed735e3557f 18-Jul-2011 Andrew Trick <atrick@apple.com> indvars: LinearFunctionTestReplace for non-canonical IVs.

For -disable-iv-rewrite, perform LFTR without generating a new
"canonical" induction variable. Instead find the "best" existing
induction variable for use in the loop exit test and compute the final
value of that IV for use in the new loop exit test. In short,
convert to a simple eq/ne exit test as long as it's cheap to do so.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135420 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f6a0dbaaf4f68f8e948a818135b9272776b8a52f 18-Jul-2011 Andrew Trick <atrick@apple.com> indvars: Added verification that LFTR and other indvars goodness does
not interfere with BackedgeTakenCount computation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135412 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5241b79ebc3ec10469dab49a24e4ed3a8b4c3fa5 18-Jul-2011 Andrew Trick <atrick@apple.com> indvars: Added isHighCostExpansion. Avoid generating extra ops in the
preheader for the sole purpose of LFTR, since LFTR itself is usually not
a clear optimization.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135409 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
db125cfaf57cc83e7dd7453de2d509bc8efd0e5e 18-Jul-2011 Chris Lattner <sabre@nondot.org> land David Blaikie's patch to de-constify Type, with a few tweaks.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5614769d557600fda3cf73b481581fe32fbff258 16-Jul-2011 Andrew Trick <atrick@apple.com> indvars: fix a pass-sensitivity issue that would hit the SCEVExpander
assertion I added in r135333. Check for the existence of a preheader
before expanding a recurrence.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135335 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6f684b0becc4c1b2ece3ec6dcecf30b19343128d 16-Jul-2011 Andrew Trick <atrick@apple.com> indvars: remove ExprToIVMap because it won't be needed by LFTR.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135334 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1a54bb28c79d5fc5b1c4e7fb0273ccb6a92c74e0 12-Jul-2011 Andrew Trick <atrick@apple.com> indvars: Code reorganization in preparation for
LinearFunctionTestReplace rewrite. No functionality.

I've been wanting to group the indvar subphases into sections and
order them by their logical sequence. My next checkin adds functions
related to LFTR, and doing the reorg now should help reviewers. Since,
most of the code in IndVarSimplify.cpp has recently been replaced or
will be replaced soon, obscuring blame should not be an issue. This
seems like an ideal time to shuffle the code around.

I'm happy to take more suggestions for cleaning up the code. Or if
you've been wanting to cleanup anything in this file yourself, now is
a good time.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134941 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
17f91d21a764603b9c482338e929390565f3bb72 06-Jul-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: ExprToMap lives in Pass data, so be more
careful about referencing values.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134537 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
037d1c0c7e01cefeff7e538682c9a1e536e14030 06-Jul-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: Added SimplifyCongruentIVs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134530 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c5ecbdc1896f1cc089372feef3191ace2f840898 05-Jul-2011 Devang Patel <dpatel@apple.com> Preserve debug loc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134441 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
e0dc2faaa0105c9d1cc56f0b70e93d532a6f8c4c 05-Jul-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: avoid multiple IVs in weird cases.

Putting back the helper that I removed on 7/1 to do this right.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134423 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4b02915386046fa882a95553a7457ae7d05e9f27 02-Jul-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: bug fix involving weird geps and related cleanup.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134306 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6e0ce24e0ca8b0dc05872b9b4cec3a18972bee40 30-Jun-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: handle cloning binary operators that cannot overflow.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134177 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
60ac719c85366da04852c204aea5aa86d66dbb07 30-Jun-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: handle an edge case involving identity phis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134124 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cc359d9fa28a871b18d93da76fd9cf516499e39f 30-Jun-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: insert new trunc instructions carefully.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134112 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
11745d4c0276ccb5c64f83d6954b54c8ff2aec98 29-Jun-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: just because SCEV ignores casts doesn't
mean they can be removed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134054 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
99a92f67c7ee0d428e18f35c91311a2baba6c03e 28-Jun-2011 Andrew Trick <atrick@apple.com> cleanup: misleading comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134010 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5e7645be4c9dd2193add44d30b5fef8036d7a3ce 28-Jun-2011 Andrew Trick <atrick@apple.com> SCEVExpander: give new insts a name that identifies the reponsible pass.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133992 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
56caa098085977c14cfab39d92c7dfa15dde0d90 28-Jun-2011 Andrew Trick <atrick@apple.com> indvars --disable-iv-rewrite: sever ties with IVUsers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133988 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
15832f61775040995bb8aa6056176425bc2c9088 28-Jun-2011 Andrew Trick <atrick@apple.com> indvars --disable-iv-rewrite: Defer evaluating s/zext until SCEV
evaluates all other IV exprs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133982 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
156d460c758463eb407590cba2371857daf27d8a 28-Jun-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: run RLEV after SimplifyIVUsers for
a bit more control over the order SCEVs are evaluated.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133959 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a098bf1239ca1769c93de52324d2b73adedad7b8 22-Jun-2011 Devang Patel <dpatel@apple.com> Set debug loc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133636 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4417e537b65c14b378aeca75b2773582dd102f63 21-Jun-2011 Andrew Trick <atrick@apple.com> IVUsers no longer needs to record the phis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133518 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2fabd464ae9fd33f068066e3fc3d0caa7ea2279d 21-Jun-2011 Andrew Trick <atrick@apple.com> indvars -disable-iv-rewrite: Adds support for eliminating identity
ops.

This is a rewrite of the IV simplification algorithm used by
-disable-iv-rewrite. To avoid perturbing the default mode, I
temporarily split the driver and created SimplifyIVUsersNoRewrite. The
idea is to avoid doing opcode/pattern matching inside
IndVarSimplify. SCEV already does it. We want to optimize with the
full generality of SCEV, but optimize def-use chains top down on-demand rather
than rewriting the entire expression bottom-up. This was easy to do
for operations that SCEV can prove are identity function. So we're now
eliminating bitmasks and zero extends this way.

A result of this rewrite is that indvars -disable-iv-rewrite no longer
requires IVUsers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133502 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fcdc9a44e59ff2846c6f929e91c90ee34e6ba5d5 26-May-2011 Andrew Trick <atrick@apple.com> indvars: incremental fixes for -disable-iv-rewrite and testcases.

Use a proper worklist for use-def traversal without holding onto an
iterator. Now that we process all IV uses, we need complete logic for
resusing existing derived IV defs. See HoistStep.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132103 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
03d3d3b361800f28c75d3386978d22e6d57744b7 25-May-2011 Andrew Trick <atrick@apple.com> indvars: fixed IV cloning in -disable-iv-rewrite mode with associated
cleanup and overdue test cases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132038 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f85092c25525f75eef6982ffa40c9b48b87da987 20-May-2011 Andrew Trick <atrick@apple.com> indvars: Prototyping Sign/ZeroExtend elimination without canonical IVs.

No functionality enabled by default. Use -disable-iv-rewrite.
Extended IVUsers to keep track of the phi that represents the users' IV.
Added the WidenIV transform to replace a narrow IV with a wide IV
by doing a one-for-one replacement of IV users instead of expanding the
SCEV expressions. [sz]exts are removed and truncs are inserted.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131744 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
074397d75e0bf919995f9cf0005fa6fda1c0400c 20-May-2011 Andrew Trick <atrick@apple.com> indvars: minor cleanup in preparation for sign/zero extend elimination.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131716 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
14ba1ff133bc891869eef9ebb28095062ed71e77 13-May-2011 Andrew Trick <atrick@apple.com> Convert SimplifyIVUsers into a worklist instead of a single pass over
the users.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131277 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
aeee4616dd12d58fd8d040ab00277747f0312321 12-May-2011 Andrew Trick <atrick@apple.com> indvars: Added SimplifyIVUsers.

Interleave IV simplifications. Currently involves EliminateComparison
and EliminateRemainder. Next I'll add EliminateExtend.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131210 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
37da40875873d70b83dc08b2803052bec9b68886 04-May-2011 Andrew Trick <atrick@apple.com> indvars: Added DisableIVRewrite and WidenIVs.

This adds functionality to remove size/zero extension during indvars
without generating a canonical IV and rewriting all IV users. It's
disabled by default so should have no effect on codegen. Work in progress.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130829 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4dfdf242c1917e98f407818eb5b68ae0b4678f26 04-May-2011 Andrew Trick <atrick@apple.com> indvars: Added canExpandBackEdgeTakenCount.

Only create a canonical IV for backedge taken count if it will
actually be used by LinearFunctionTestReplace. And some related
cleanup, preparing to reduce dependence on canonical IVs.
No significant effect on x86 or arm in the test-suite.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130799 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
88e92cf16b92ec609e2700bcf4d184d0c3cac202 28-Apr-2011 Andrew Trick <atrick@apple.com> Reapply r130340: Fix for PR9730.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130408 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a7707ae19ab5f47d9dffb1d8e07a090e948a1a39 28-Apr-2011 Andrew Trick <atrick@apple.com> Reverting r130340 in the unlikely event that it's responsible for a llvm-gcc stage2 compiler error.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130350 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
685f07fac2754f98f5273f3a9a32da27027c2172 28-Apr-2011 Andrew Trick <atrick@apple.com> Fixes PR9730: indvars: An asserting value handle still pointed to this value

Modified LinearFunctionTestReplace to push the condition on the dead
list instead of eagerly deleting it. This can cause unnecessary
IV rewrites, which should have no effect on codegen and will not be an
issue once we stop generating canonical IVs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130340 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3ecfc861b4365f341c5c969b40e1afccde676e6f 30-Mar-2011 Jay Foad <jay.foad@gmail.com> Remove PHINode::reserveOperandSpace(). Instead, add a parameter to
PHINode::Create() giving the (known or expected) number of operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128537 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d8b4fb4aab4d6fedb2b14bed1b846451b17bde7c 30-Mar-2011 Jay Foad <jay.foad@gmail.com> (Almost) always call reserveOperandSpace() on newly created PHINodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128535 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f3e6774880762674dc845b25dbf01ad212f21d03 18-Mar-2011 Andrew Trick <atrick@apple.com> Remove TargetData and ValueTracking includes. I didn't mean for them to sneak in my last checkin.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127842 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b12a754cce0c1d5542af605203a47820edba454d 18-Mar-2011 Andrew Trick <atrick@apple.com> Added isValidRewrite() to check the result of ScalarEvolutionExpander.

SCEV may generate expressions composed of multiple pointers, which can
lead to invalid GEP expansion. Until we can teach SCEV to follow strict
pointer rules, make sure no bad GEPs creep into IR.
Fixes rdar://problem/9038671.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127839 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ead71d59a7685fbbbb92162556680abd9001d37b 18-Mar-2011 Andrew Trick <atrick@apple.com> whitespace


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127837 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f1859891b7bef1ac8d5cea100f152aeb5783c3b3 09-Jan-2011 Chris Lattner <sabre@nondot.org> reduce indentation. Print <nuw> and <nsw> when dumping SCEV AddRec's
that have the bit set.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123104 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
17ead4ff4baceb2c5503f233d0288d363ae44165 17-Nov-2010 Dan Gohman <gohman@apple.com> Move SCEV::isLoopInvariant and hasComputableLoopEvolution to be member
functions of ScalarEvolution, in preparation for memoization and
other optimizations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119562 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
081c34b725980f995be9080eaec24cd3dfaaf065 19-Oct-2010 Owen Anderson <resistor@mac.com> Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which
must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize
the pass's dependencies.

Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the
CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
before parsing commandline arguments.

I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems
with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass
registration/creation, please send the testcase to me directly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116820 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2ab36d350293c77fc8941ce1023e4899df7e3a82 12-Oct-2010 Owen Anderson <resistor@mac.com> Begin adding static dependence information to passes, which will allow us to
perform initialization without static constructors AND without explicit initialization
by the client. For the moment, passes are required to initialize both their
(potential) dependencies and any passes they preserve. I hope to be able to relax
the latter requirement in the future.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116334 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ce665bd2e2b581ab0858d1afe359192bac96b868 08-Oct-2010 Owen Anderson <resistor@mac.com> Now with fewer extraneous semicolons!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115996 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ea4894a7fcfb8946d1f7b1301aef98f7f6c9f251 18-Sep-2010 Gabor Greif <ggreif@gmail.com> do not rely on the implicit-dereference semantics of dyn_cast_or_null

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114277 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
90c579de5a383cee278acc3f7e7b9d0a656e6a35 06-Aug-2010 Owen Anderson <resistor@mac.com> Reapply r110396, with fixes to appease the Linux buildbot gods.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110460 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1f74590e9d1b9cf0f1f81a156efea73f76546e05 06-Aug-2010 Owen Anderson <resistor@mac.com> Revert r110396 to fix buildbots.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110410 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9ccaf53ada99c63737547c0235baeb8454b04e80 06-Aug-2010 Owen Anderson <resistor@mac.com> Don't use PassInfo* as a type identifier for passes. Instead, use the address of the static
ID member as the sole unique type identifier. Clean up APIs related to this change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110396 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
96f1d8ebdd33b3f9bdb3b1163f36072c68599f42 22-Jul-2010 Gabor Greif <ggreif@gmail.com> mass elimination of reliance on automatic iterator dereferencing

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109103 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d13db2c59cc94162d6cf0a04187d408bfef6d4a7 22-Jul-2010 Owen Anderson <resistor@mac.com> Fix batch of converting RegisterPass<> to INTIALIZE_PASS().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109045 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
43ef3fbae12c7924a25df4563d86084973db9c67 20-Jul-2010 Dan Gohman <gohman@apple.com> Remember that the induction variable is always a PHINode and
use getIncomingValueForBlock instead of
LoopInfo::getCanonicalInductionVariableIncrement.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108865 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7656018c2268285907cfdc106071462a01a73878 09-Jul-2010 Gabor Greif <ggreif@gmail.com> cache result of operator*

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107976 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a52838285b6dce66821f0b272cb3479af8c3edb2 18-Jun-2010 Dan Gohman <gohman@apple.com> Disable indvars on loops when LoopSimplify form is not available.
This fixes PR7333.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106267 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
deff621abdd48bd70434bd4d7ef30f08ddba1cd8 04-May-2010 Dan Gohman <gohman@apple.com> Use getConstant instead of getIntegerSCEV. The two are basically the
same, now that getConstant has overloads consistent with ConstantInt::get.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102965 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a590b79ee227b93c59f60ce1f54cae7a9ebec7c1 13-Apr-2010 Dan Gohman <gohman@apple.com> Teach IndVarSimplify how to eliminate remainder operators where the
numerator is an induction variable. For example, with code like this:

for (i=0;i<n;++i)
x[i%n] = 0;

IndVarSimplify will now recognize that i is always less than n inside
the loop, and eliminate the remainder.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101113 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ca9b7037e28759c200fe5ca98190cabd121a1bba 12-Apr-2010 Dan Gohman <gohman@apple.com> Suppress LinearFunctionTestReplace when the computed backedge-taken
expression is a UDiv and it doesn't appear that the UDiv came from
the user's source.

ScalarEvolution has recently figured out how to compute a tripcount
expression for the inner loop in
SingleSource/Benchmarks/Shootout/sieve.c, using a udiv. Emitting a
udiv instruction dramatically slows down the enclosing loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101068 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d890f29ca6b467203db9fa63aa558eff86046c84 12-Apr-2010 Dan Gohman <gohman@apple.com> Move the EliminateIVUsers call back out to its original location. Now that
a ScalarEvolution bug with overflow handling is fixed, the normal analysis
code will automatically decline to operate on the icmp instructions which
are responsible for the loop exit.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101032 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
dd842e34c8e133e3d36418c0d351034db52a05a7 12-Apr-2010 Dan Gohman <gohman@apple.com> Use RecursivelyDeleteTriviallyDeadInstructions in EliminateIVComparisons,
instead of deleting just the user. This makes it more consistent with
other code in IndVarSimplify, and theoretically can eliminate more users
earlier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101027 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
931e345e76e75391d2a7c96530e305f802b5429d 12-Apr-2010 Dan Gohman <gohman@apple.com> Re-apply r101000, with a fix: Don't eliminate an icmp which is part of
the loop exit test. This usually doesn't come up for a variety of
reasons, but it isn't impossible, so make IndVarSimplify handle it
conservatively.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101008 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ac3b9cdf151264091bc92a87adeafc665bf183a4 12-Apr-2010 Dan Gohman <gohman@apple.com> Revert 101000, which is breaking self-host builds.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3fddbb337dd5d8de5317df62e8027a6dcd778e73 12-Apr-2010 Dan Gohman <gohman@apple.com> Teach IndVarSimplify how to eliminate comparisons involving induction
variables. For example, with code like this:

for (i=0;i<n;++i)
if (i<n)
x[i] = 0;

IndVarSimplify will now recognize that i is always less than n inside
the loop, and eliminate the if.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101000 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3948d0b8b0a71fabf25fceba1858b2b6a60d3d00 11-Apr-2010 Dan Gohman <gohman@apple.com> Rename isLoopGuardedByCond to isLoopEntryGuardedByCond, to emphasise
that it's only testing for the entry condition, not full loop-invariant
conditions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
448db1cdef5872713ef77beffacf502ae3450cd7 08-Apr-2010 Dan Gohman <gohman@apple.com> Generalize IVUsers to track arbitrary expressions rather than expressions
explicitly split into stride-and-offset pairs. Also, add the
ability to track multiple post-increment loops on the same expression.

This refines the concept of "normalizing" SCEV expressions used for
to post-increment uses, and introduces a dedicated utility routine for
normalizing and denormalizing expressions.

This fixes the expansion of expressions which are post-increment users
of more than one loop at a time. More broadly, this takes LSR another
step closer to being able to reason about more than one loop at a time.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100699 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d52c072777b9c9a9df9041b8b6cd199df7e43394 03-Apr-2010 Chris Lattner <sabre@nondot.org> require that the branch being controlled by the IV
exits the loop. With this information we can guarantee
the iteration count of the loop is bounded by the
compare. I think this xforms is finally safe now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100285 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
96fd76638b6be492c5e470c3b9d5ca12628be5a9 03-Apr-2010 Chris Lattner <sabre@nondot.org> add integer overflow check for the fp induction variable
checker. Amusingly, we already had tests that we should
have rejects because they would be miscompiled in the
testsuite.

The remaining issue with this is that we don't check that
the branch causes us to exit the loop if it fails, so we
don't actually know if we remain in bounds.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100284 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bbb91498da1a4dc77332bf93d7c13060f0c63a70 03-Apr-2010 Chris Lattner <sabre@nondot.org> add a comment and fix some consistency issues, converting
to a signed vs unsigned value depending on the sign of the
constant fp means that we can't distinguish between a
truly negative number and a positive number so large the
32nd bit is set. So, do don't this!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100283 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
43b85273ee11536c81b14dca0114cd8b9407db8e 03-Apr-2010 Chris Lattner <sabre@nondot.org> fix PR6761, a miscompilation due to the fp->int IV conversion
stuff. More bugs remain though.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100282 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a40e4a0c8abbfe55d25a77e4e98508e43ed1c3ae 03-Apr-2010 Chris Lattner <sabre@nondot.org> just eliminate the uitofp checks. This code isn't doing
the required validity checks in the first place, and supporting
a condition large enough to require the 32'nd bit isn't worth it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100280 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c91961e31b2a1cae655928e20b83cb6a457fdcd4 03-Apr-2010 Chris Lattner <sabre@nondot.org> rename PH -> PN to be consistent with WeakPN and the rest
of llvm.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100276 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
70c0d4f7eb9c14bccc8a585be4086712e46bfbdb 03-Apr-2010 Chris Lattner <sabre@nondot.org> improve comment and drop a dead check. If PH had
no uses, it would have been deleted by
RecursivelyDeleteTriviallyDeadInstructions


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100275 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9698c1985f8b4f461a01a908be60f9fd14a342ec 03-Apr-2010 Chris Lattner <sabre@nondot.org> strength reduce a ridiculous use of APInt.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100274 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ca703bd56ba1f717b3735c6889334c319ca005b1 03-Apr-2010 Chris Lattner <sabre@nondot.org> rename stuff improve comment grammar.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100273 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fa405af58a69301026917a47053c9eb28596c55f 03-Apr-2010 Chris Lattner <sabre@nondot.org> simplify some code and resolve a fixme.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100272 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c4f7e8061de19172d4c3f70a80447505b792e450 03-Apr-2010 Chris Lattner <sabre@nondot.org> There is no guarantee that the increment and the branch
are in the same block. Insert the new increment in the
correct location.

Also, more cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100271 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
07aa76ad939e053c1992a03cbcb16aff74f26651 03-Apr-2010 Chris Lattner <sabre@nondot.org> first half of a pass through IndVarSimplify::HandleFloatingPointIV,
this cleans up a bunch of code and also fixes several crashes and
miscompiles. More to come unfortunately, this optimization
is quite broken.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100270 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d7bfd0028b273f2e3935e8c7ff95db6fa2b21789 02-Apr-2010 Dan Gohman <gohman@apple.com> Manually notify ScalarEvolution before making an operand replacement, since
it can't currently observe such changes automatically.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100186 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
87a10f5b2fc26e418a7bde45136843aac4c7a7e6 23-Mar-2010 Bill Wendling <isanbard@gmail.com> Skip debugging intrinsics when sinking unused invariants.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99324 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
472fdf7090bb00af3a3f9dcbe22263120a527533 20-Mar-2010 Dan Gohman <gohman@apple.com> Clear the SCEVExpander's insertion point after making deletions,
so that the SCEVExpander doesn't retain a dangling pointer as its
insert position. The dangling pointer in this case wasn't ever used
to insert new instructions, but it was causing trouble with
SCEVExpander's code for automatically advancing its insert position
past debug intrinsics.

This fixes use-after-free errors that valgrind noticed in
test/Transforms/IndVarSimplify/2007-06-06-DeleteDanglesPtr.ll and
test/Transforms/IndVarSimplify/exit_value_tests.ll.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99036 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7b9f6b1b21bc0b06f3c72beae51e9db631319503 15-Mar-2010 Devang Patel <dpatel@apple.com> Skip debug info intrinsics.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98584 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bbf81d88116d23fb0776412b5916f7d0b8b3ca7e 10-Mar-2010 Dan Gohman <gohman@apple.com> Add a DominatorTree argument to isLCSSA so that it doesn't have to
compute a set of reachable blocks for itself each time it is called, which
is fairly frequently.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98179 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3f46a3abeedba8d517b4182de34c821d752db058 01-Mar-2010 Dan Gohman <gohman@apple.com> Spelling fixes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97453 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
85669637139089eaed8def1583ac04266c9654e2 25-Feb-2010 Dan Gohman <gohman@apple.com> Make LoopSimplify change conditional branches in loop exiting blocks
which branch on undef to branch on a boolean constant for the edge
exiting the loop. This helps ScalarEvolution compute trip counts for
loops.

Teach ScalarEvolution to recognize single-value PHIs, when safe, and
ForgetSymbolicName to forget such single-value PHI nodes as apprpriate
in ForgetSymbolicName.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97126 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
454d26dc43207ec537d843229db6f5e6a302e23d 22-Feb-2010 Dan Gohman <gohman@apple.com> Remove unused variables and parameters.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96780 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2444080ca4f1f63d647272650aae874360c604cd 22-Feb-2010 Dan Gohman <gohman@apple.com> This cast<Instruction> is unnecessary.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96771 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
45a2d7d44ae697e28df383d31455145fb754ac58 19-Feb-2010 Dale Johannesen <dalej@apple.com> recommit 96626, evidence that it broke things appears
to be spurious



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96662 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
efd9e9505167a398ba3c4924b09a47bd4d688e51 19-Feb-2010 Dale Johannesen <dalej@apple.com> Revert 96626, which causes build failure on ppc Darwin.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96653 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
aa11defd1c66dbde0c757c99791c4ae4d740fc3e 19-Feb-2010 Dan Gohman <gohman@apple.com> Indvars needs to explicitly notify ScalarEvolution when it is replacing
a loop exit value, so that if a loop gets deleted, ScalarEvolution
isn't stick holding on to dangling SCEVAddRecExprs for that loop. This
fixes PR6339.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96626 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
814f2b2d1927a5397c0e923588527277b9f67d6b 18-Feb-2010 Dan Gohman <gohman@apple.com> Hoist this loop-invariant logic out of the loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96614 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1df9859c40492511b8aa4321eb76496005d3b75b 16-Feb-2010 Duncan Sands <baldrick@free.fr> There are two ways of checking for a given type, for example isa<PointerType>(T)
and T->isPointerTy(). Convert most instances of the first form to the second form.
Requested by Chris.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96344 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
572645cf84060c0fc25cb91d38cb9079918b3a88 12-Feb-2010 Dan Gohman <gohman@apple.com> Reapply the new LoopStrengthReduction code, with compile time and
bug fixes, and with improved heuristics for analyzing foreign-loop
addrecs.

This change also flattens IVUsers, eliminating the stride-oriented
groupings, which makes it easier to work with.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f451cb870efcf9e0302d25ed05f4cac6bb494e42 10-Feb-2010 Dan Gohman <gohman@apple.com> Fix "the the" and similar typos.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a10756ee657a4d43a48cca5c166919093930ed6b 21-Jan-2010 Dan Gohman <gohman@apple.com> Re-implement the main strength-reduction portion of LoopStrengthReduction.
This new version is much more aggressive about doing "full" reduction in
cases where it reduces register pressure, and also more aggressive about
rewriting induction variables to count down (or up) to zero when doing so
reduces register pressure.

It currently uses fairly simplistic algorithms for finding reuse
opportunities, but it introduces a new framework allows it to combine
multiple strategies at once to form hybrid solutions, instead of doing
all full-reduction or all base+index.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94061 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9fff2187a21f765ed87a25c48552a6942450f3e2 05-Jan-2010 Dan Gohman <gohman@apple.com> Set Changed properly after calling DeleteDeadPHIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92735 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f67ef318aa29e7cc0c7de76349881959936d9eee 05-Jan-2010 David Greene <greened@obbligato.org> Change errs() to dbgs().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92609 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
92329c7fbe572892c17aa2d2542a10e3ea16132f 18-Dec-2009 Dan Gohman <gohman@apple.com> Add Loop contains utility methods for testing whether a loop
contains another loop, or an instruction. The loop form is
substantially more efficient on large loops than the typical
code it replaces.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91654 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
03e896bd6073efc4523d8bcd0239d6ed62126db7 05-Nov-2009 Dan Gohman <gohman@apple.com> Update various Loop optimization passes to cope with the possibility that
LoopSimplify form may not be available.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86175 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4c7279ac726e338400626fca5a09b5533426eb6a 31-Oct-2009 Dan Gohman <gohman@apple.com> Rename forgetLoopBackedgeTakenCount to forgetLoop, because it
clears out more information than just the stored backedge taken count.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85664 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
50b6e33584f4e4cf75c7795b1f1a90731861c825 27-Oct-2009 Devang Patel <dpatel@apple.com> Factor out redundancy from clone() implementations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85327 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6776064d190701c5bae4d5403939eed2e480d1cd 27-Sep-2009 Nick Lewycky <nicholas@mxc.ca> Instruction::clone does not need to take an LLVMContext&. Remove that and
update all the callers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82889 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3e8b6631e67e01e4960a7ba4668a50c596607473 02-Sep-2009 Chris Lattner <sabre@nondot.org> eliminate VISIBILITY_HIDDEN from Transforms/Scalar. PR4861


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80766 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
76f497a351c562f366b5e93c27d3f1652fb48ff4 25-Aug-2009 Dan Gohman <gohman@apple.com> Special-case static allocas in IndVarSimplify's loop invariant
sinking code, since they are special. If the loop preheader happens
to be the entry block of a function, don't sink static allocas
out of it. This fixes PR4775.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80010 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bdff548e4dd577a72094d57b282de4e765643b96 23-Aug-2009 Chris Lattner <sabre@nondot.org> eliminate the "Value" printing methods that print to a std::ostream.
This required converting a bunch of stuff off DOUT and other cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79819 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
873257723084bad749c1cc13a2d35b35c229942e 17-Aug-2009 Dan Gohman <gohman@apple.com> Fix debug output to include a newline after printing a Value, now
that Value's operator<< doesn't include one.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79240 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1d0be15f89cb5056e20e2d24faa8d6afb1573bca 13-Aug-2009 Owen Anderson <resistor@mac.com> Push LLVMContexts through the IntegerType APIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78948 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9e9a0d5fc26878e51a58a8b57900fcbf952c2691 31-Jul-2009 Owen Anderson <resistor@mac.com> Move more code back to 2.5 APIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77635 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
460f656475738d1a95a6be95346908ce1597df25 26-Jul-2009 Daniel Dunbar <daniel@zuster.org> Remove Value::getName{Start,End}, the last of the old Name APIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77152 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
eed707b1e6097aac2bb6b3d47271f6300ace7f2e 25-Jul-2009 Owen Anderson <resistor@mac.com> Revert the ConstantInt constructors back to their 2.5 forms where possible, thanks to contexts-on-types. More to come.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77011 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
e922c0201916e0b980ab3cfe91e1413e68d55647 22-Jul-2009 Owen Anderson <resistor@mac.com> Get rid of the Pass+Context magic.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76702 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
0c77db32dd8ae10b5a26d60718dbe03dc2745888 16-Jul-2009 Eli Friedman <eli.friedman@gmail.com> Switch invars away from using isTrapping when it really shouldn't be
using it.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75852 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5668cf77a77493ec9f2a9b33f08125e885c8e4cf 15-Jul-2009 Dan Gohman <gohman@apple.com> Fix indentation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75723 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1b65253da688a0ff0c41b5af185708707fa931c9 14-Jul-2009 Dan Gohman <gohman@apple.com> Require IVUsers after LCSSA, since LCSSA does not preserve IVUsers.
This results in the pass manager running IVUsers only once for
indvars, instead of twice.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75633 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
65d1e2b6e74fcd370093cbe518ebc15cbc445ad4 14-Jul-2009 Dan Gohman <gohman@apple.com> Fix indvars to not assume that a loop with a single unique exit
block has a single unique exiting block.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75579 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
333c40096561218bc3597cf153c0a3895274414c 10-Jul-2009 Owen Anderson <resistor@mac.com> This started as a small change, I swear. Unfortunately, lots of things call the [I|F]CmpInst constructors. Who knew!?


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75200 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
0bba49cebc50c7bd4662a4807bcb3ee7f42cb470 07-Jul-2009 Dan Gohman <gohman@apple.com> Change all SCEV* to SCEV *.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74918 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d672ecb0178c6247a5eaa5b0fb0c3b23cd25bd7c 03-Jul-2009 Owen Anderson <resistor@mac.com> Convert the first batch of passes to use LLVMContext.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74748 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
62476cceee2dabb65d8370ce33aeb89ae706ebb1 02-Jul-2009 Dan Gohman <gohman@apple.com> Request LCSSA after LoopSimplify. This fixes a problem in which the
PassManager was scheduling LCSSA before LoopSimplify, which does not
preserve LCSSA.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74661 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
de53dc03f5c1549f3176e979bbeeac965dfa5cbc 27-Jun-2009 Dan Gohman <gohman@apple.com> When a value is used multiple times within a single PHI, instructions
inserted to replace that value must dominate all of of the basic
blocks associated with the uses of the value in the PHI, not just
one of them.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74376 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
667d787c0a21cf3f5dfcde03ca471162ba35b614 27-Jun-2009 Dan Gohman <gohman@apple.com> Incorporate the insertion point into the key of SCEVExpander's CSE map.
This helps it avoid reusing an instruction that doesn't dominate all
of the users, in cases where the original instruction was inserted
before all of the users were known. This may result in redundant
expansions of sub-expressions that depend on loop-unpredictable values
in some cases, however this isn't very common, and it primarily impacts
IndVarSimplify, so GVN can be expected to clean these up.

This eliminates the need for IndVarSimplify's FixUsesBeforeDefs,
which fixes several bugs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74352 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
32a81a3f6d75c5343e7df65ce5d228f2128ca943 24-Jun-2009 Dan Gohman <gohman@apple.com> When inserting code into a loop preheader, insert it before the
terminator, instead of after the last phi. This fixes a bug
exposed by ScalarEvolution analyzing more kinds of loops.
This fixes PR4436.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74072 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
40a5a1b39ee1cd40ff9d04740386b667fb27b340 24-Jun-2009 Dan Gohman <gohman@apple.com> Extend ScalarEvolution's multiple-exit support to compute exact
trip counts in more cases.

Generalize ScalarEvolution's isLoopGuardedByCond code to recognize
And and Or conditions, splitting the code out into an
isNecessaryCond helper function so that it can evaluate Ands and Ors
recursively, and make SCEVExpander be much more aggressive about
hoisting instructions out of loops.

test/CodeGen/X86/pr3495.ll has an additional instruction now, but
it appears to be due to an arbitrary register allocation difference.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74048 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
469f3cdc13851914f3a766cbd8f701cf8431caca 23-Jun-2009 Dan Gohman <gohman@apple.com> Fix a few minor issues that were exposed by the removal of SCEVHandle.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73910 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
372b46cad9f745859f542f9d2216991585ae83f4 22-Jun-2009 Owen Anderson <resistor@mac.com> SCEVHandle is no more!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73906 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
03ad6982c458fd6f982079e11c07419bf17efedc 22-Jun-2009 Dan Gohman <gohman@apple.com> Fix this code to correctly handle loops with multiple exits. Until
now, this hasn't mattered, because ScalarEvolution hasn't been able
to compute trip counts for loops with multiple exits. But it will
soon.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73864 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ea73f3c2e14d84bb4cb07bd6a1a3d7915f3aff83 15-Jun-2009 Dan Gohman <gohman@apple.com> Add another item to the list of things that indvars does.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73355 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4d8414f42033a5e744e8e60d2ca188b424c76168 13-Jun-2009 Dan Gohman <gohman@apple.com> Teach SCEVExpander's visitAddRecExpr to reuse an existing canonical
induction variable when the addrec to be expanded does not require
a wider type. This eliminates the need for IndVarSimplify to
micro-manage SCEV expansions, because SCEVExpander now
automatically expands them in the form that IndVarSimplify considers
to be canonical. (LSR still micro-manages its SCEV expansions,
because it's optimizing for the target, rather than for
other optimizations.)

Also, this uses the new getAnyExtendExpr, which has more clever
expression simplification logic than the IndVarSimplify code it
replaces, and this cleans up some ugly expansions in code such as
the included masked-iv.ll testcase.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73294 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ae3a0be92e33bc716722aa600983fc1535acb122 05-Jun-2009 Dan Gohman <gohman@apple.com> Split the Add, Sub, and Mul instruction opcodes into separate
integer and floating-point opcodes, introducing
FAdd, FSub, and FMul.

For now, the AsmParser, BitcodeReader, and IRBuilder all preserve
backwards compatability, and the Core LLVM APIs preserve backwards
compatibility for IR producers. Most front-ends won't need to change
immediately.

This implements the first step of the plan outlined here:
http://nondot.org/sabre/LLVMNotes/IntegerOverflow.txt


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72897 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
68c9344056e714336a522148e0e468f35035c650 03-Jun-2009 Dan Gohman <gohman@apple.com> Don't attempt to simplify an non-affine IV expression if it can't
be simplified to a loop-invariant value. This fixes PR4315.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72798 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d594e6f0345b3e1e4b640a7099596ca613da16d6 25-May-2009 Dan Gohman <gohman@apple.com> Change ScalarEvolution::getSCEVAtScope to always return the original value
in the case where a loop exit value cannot be computed, instead of only in
some cases while using SCEVCouldNotCompute in others. This simplifies
getSCEVAtScope's callers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3d431384f05c9defc84f36eafe220415cc12ee93 24-May-2009 Torok Edwin <edwintorok@gmail.com> Move Rewriter.clear() earlier, to avoid triggerring the AssertingVH by
one of the RecursivelyDeleteTriviallyDeadInstructions.
Add a comment explaining why the cache needs to be cleared.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72372 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3790fb0c036acaa4db50aff83dd8b3bf51f8af6a 24-May-2009 Torok Edwin <edwintorok@gmail.com> Instead of clearing the rewriter, don't attempt to rewrite dead phi nodes.
Also fix 80 column violation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72371 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
95bdbfa0668cc2b475429fbc6046f364bc01edf7 24-May-2009 Dan Gohman <gohman@apple.com> When rewriting the loop exit test with the canonical induction variable,
leave the original comparison in place if it has other uses, since the
other uses won't be dominated by the new comparison instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72369 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
14fba294e1f2d619fe50b72d5fd88da2b17461dd 24-May-2009 Dan Gohman <gohman@apple.com> When replacing a floating-point comparison with an integer
comparison, use takeName to give the integer comparison a name.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72367 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b679de2a21f5ecbae81b444290d72af93aa5b0b3 24-May-2009 Torok Edwin <edwintorok@gmail.com> The rewriter may hold references to instructions that are deleted because they are trivially dead.
Fix by clearing the rewriter cache before deleting the trivially dead
instructions.
Also make InsertedExpressions use an AssertingVH to catch these
bugs easier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72364 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d6d0294e35c120bd2e78198f54caaa3c0f70f9fe 22-May-2009 Dan Gohman <gohman@apple.com> Teach IndVarSimplify's FixUsesBeforeDefs to handle InvokeInsts by
assuming that the use of the value is in a block dominated by the
"normal" destination. LangRef.html and other documentation sources
don't explicitly guarantee this, but it seems to be assumed in
other places in LLVM at least.

This fixes an assertion failure on the included testcase, which
is derived from the Ada testsuite.

FixUsesBeforeDefs is a temporary measure which I'm looking to
replace with a more capable solution.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72266 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c2c4cbf7b3a0229cf1804ca9d7c18113f75bab46 19-May-2009 Dan Gohman <gohman@apple.com> Remove an irrelevant comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72132 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6bfa57b3b3affa6a91645d9b60d84f4ca85f250f 19-May-2009 Dan Gohman <gohman@apple.com> Trim unneeded #includes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72130 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5be18e84766fb495b0bde3c8244c1df459a18683 19-May-2009 Dan Gohman <gohman@apple.com> Teach SCEVExpander to expand arithmetic involving pointers into GEP
instructions. It attempts to create high-level multi-operand GEPs,
though in cases where this isn't possible it falls back to casting
the pointer to i8* and emitting a GEP with that. Using GEP instructions
instead of ptrtoint+arithmetic+inttoptr helps pointer analyses that
don't use ScalarEvolution, such as BasicAliasAnalysis.

Also, make the AddrModeMatcher more aggressive in handling GEPs.
Previously it assumed that operand 0 of a GEP would require a register
in almost all cases. It now does extra checking and can do more
matching if operand 0 of the GEP is foldable. This fixes a problem
that was exposed by SCEVExpander using GEPs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bae7d6dbeb842b5ed051c50a87bc282f2dec6e1f 14-May-2009 Dale Johannesen <dalej@apple.com> Use abs64 in one more place.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71775 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
81db61a2e6d3c95a2738c3559a108e05e9d7a05a 12-May-2009 Dan Gohman <gohman@apple.com> Factor the code for collecting IV users out of LSR into an IVUsers class,
and generalize it so that it can be used by IndVarSimplify. Implement the
base IndVarSimplify transformation code using IVUsers. This removes
TestOrigIVForWrap and associated code, as ScalarEvolution now has enough
builtin overflow detection and folding logic to handle all the same cases,
and more. Run "opt -iv-users -analyze -disable-output" on your favorite
loop for an example of what IVUsers does.

This lets IndVarSimplify eliminate IV casts and compute trip counts in
more cases. Also, this happens to finally fix the remaining testcases
in PR1301.

Now that IndVarSimplify is being more aggressive, it occasionally runs
into the problem where ScalarEvolutionExpander's code for avoiding
duplicate expansions makes it difficult to ensure that all expanded
instructions dominate all the instructions that will use them. As a
temporary measure, IndVarSimplify now uses a FixUsesBeforeDefs function
to fix up instructions inserted by SCEVExpander. Fortunately, this code
is contained, and can be easily removed once a more comprehensive
solution is available.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71535 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
35738ac150afafe2359268d4b2169498c6c98c5f 05-May-2009 Dan Gohman <gohman@apple.com> Re-apply 70645, converting ScalarEvolution to use
CallbackVH, with fixes. allUsesReplacedWith need to
walk the def-use chains and invalidate all users of a
value that is replaced. SCEVs of users need to be
recalcualted even if the new value is equivalent. Also,
make forgetLoopPHIs walk def-use chains, since any
SCEV that depends on a PHI should be recalculated when
more information about that PHI becomes available.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70927 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f9a77b77c2324b2ca5c644909ebda387daf82fe3 03-May-2009 Dan Gohman <gohman@apple.com> Revert r70645 for now; it's causing a variety of regressions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70661 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
db6fa2964176c34f0e878e101427c28782c93419 02-May-2009 Dan Gohman <gohman@apple.com> Convert ScalarEvolution to use CallbackVH for its internal map. This
makes ScalarEvolution::deleteValueFromRecords, and it's code that
subtly needed to be called before ReplaceAllUsesWith, unnecessary.

It also makes ValueDeletionListener unnecessary.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70645 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d908adf2ec0dc774ac95441e755ce3fea94ce329 28-Apr-2009 Dan Gohman <gohman@apple.com> Remove an obsolete comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70262 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
617d108a639b29015da2dbf0e54f61bd39c3c33c 27-Apr-2009 Dale Johannesen <dalej@apple.com> Fix PR 4086, a bug in FP IV elimination.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70247 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
752ec7da506f5d41c08bd37e195750b57550ce68 23-Apr-2009 Dan Gohman <gohman@apple.com> Change SCEVExpander's expandCodeFor to provide more flexibility
with the persistent insertion point, and change IndVars to make
use of it. This fixes a bug where IndVars was holding on to a
stale insertion point and forcing the SCEVExpander to continue to
use it.

This fixes PR4038.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69892 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9c159499675228990ffa5a169914ce30a455442f 23-Apr-2009 Evan Cheng <evan.cheng@apple.com> Make sure both operands have binary instructions have the same type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69844 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a8d4d7fe47460313e6aaf5cbb73d4bc892202988 23-Apr-2009 Evan Cheng <evan.cheng@apple.com> A few more places where the check of use_empty is needed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69842 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1abe64663e0865cf9bdc23de734df49acea2b0d4 23-Apr-2009 Evan Cheng <evan.cheng@apple.com> Avoid deferencing use_begin() if value does not have a use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69836 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
af79fb5f47b0088c6a8973a7fdbaea96973a429d 21-Apr-2009 Dan Gohman <gohman@apple.com> Introduce encapsulation for ScalarEvolution's TargetData object, and refactor
the code to minimize dependencies on TargetData.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69644 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
890f92b744fb074465bc2b7006ee753a181f62a4 18-Apr-2009 Dan Gohman <gohman@apple.com> Use more const qualifiers with SCEV interfaces.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69450 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2d1be87ee40a4a0241d94448173879d9df2bc5b3 16-Apr-2009 Dan Gohman <gohman@apple.com> Expand GEPs in ScalarEvolution expressions. SCEV expressions can now
have pointer types, though in contrast to C pointer types, SCEV
addition is never implicitly scaled. This not only eliminates the
need for special code like IndVars' EliminatePointerRecurrence
and LSR's own GEP expansion code, it also does a better job because
it lets the normal optimizations handle pointer expressions just
like integer expressions.

Also, since LLVM IR GEPs can't directly index into multi-dimensional
VLAs, moving the GEP analysis out of client code and into the SCEV
framework makes it easier for clients to handle multi-dimensional
VLAs the same way as other arrays.

Some existing regression tests show improved optimization.
test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
the point where if-conversion started kicking in; I turned it off
for this test to preserve the intent of the test.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c671d892ab1d3d8fed18a61f66f3f3a86e73ebd9 16-Apr-2009 Dale Johannesen <dalej@apple.com> Eliminate zext over (iv | const) or (signed iv),
and sext over (iv | const), if a longer iv is
available. Allow expressions to have more than
one zext/sext parent. All from OpenSSL.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69241 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d3325d289736dec93c37f24bffd63cb91b643b87 15-Apr-2009 Dale Johannesen <dalej@apple.com> Eliminate zext over (iv & const) or ((iv+const)&const)
if a longer iv is available. These subscript forms are
not common; they're a bottleneck in OpenSSL.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69215 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
dd1f9e4bf6e7d427fd581728f3d2e431e12e6e71 15-Apr-2009 Dale Johannesen <dalej@apple.com> Enhance induction variable code to remove the
sext around sext(shorter IV + constant), using a
longer IV instead, when it can figure out the
add can't overflow. This comes up a lot in
subscripting; mainly affects 64 bit.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69123 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
46bdfb0e6bb9de86b19562fc52fddefd7014cf73 24-Feb-2009 Dan Gohman <gohman@apple.com> Rename ScalarEvolution's getIterationCount to getBackedgeTakenCount,
to more accurately describe what it does. Expand its doxygen comment
to describe what the backedge-taken count is and how it differs
from the actual iteration count of the loop. Adjust names and
comments in associated code accordingly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65382 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
15cab2817b8f63fec0148609278bc2c1e05abb50 24-Feb-2009 Dan Gohman <gohman@apple.com> Back out the change in 64918 that used sign-extensions when promoting
trip counts that use signed comparisons. It's not obviously the best
approach for preserving trip count information, and at any rate there
isn't anything in the tree right now that makes use of that, so for
now always using zero-extensions is preferable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65347 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
474cecf0e9bca95ab7091a341784550c7eb1e887 23-Feb-2009 Dan Gohman <gohman@apple.com> IndVarSimplify preserves ScalarEvolution. In the
-std-compile-opts sequence, this avoids the need for ScalarEvolution to
be rerun before LoopDeletion.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65318 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f5a309e989b8d2199cb542793e9edf48395d9fed 18-Feb-2009 Dan Gohman <gohman@apple.com> Use a sign-extend instead of a zero-extend when promoting a
trip count value when the original loop iteration condition is
signed and the canonical induction variable won't undergo signed
overflow. This isn't required for correctness; it just preserves
more information about original loop iteration values.

Add a getTruncateOrSignExtend method to ScalarEvolution,
following getTruncateOrZeroExtend.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64918 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cad24c9abc834db5cf8f92019f99370507d8d07a 18-Feb-2009 Dan Gohman <gohman@apple.com> Simplify by using dyn_cast instead of isa and cast.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64917 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d2067fd730b2b266f5c244d5871a244b534e10ea 18-Feb-2009 Dan Gohman <gohman@apple.com> Fix a corner case in the new indvars promotion logic: if there
are multiple IV's in a loop, some of them may under go signed
or unsigned wrapping even if the IV that's used in the loop
exit condition doesn't. Restrict sign-extension-elimination
and zero-extension-elimination to only those that operate on
the original loop-controlling IV.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64866 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
60f8a63e2502d57e879bf52a4a48505b74fa9716 17-Feb-2009 Dan Gohman <gohman@apple.com> Add a method to ScalarEvolution for telling it when a loop has been
modified in a way that may effect the trip count calculation. Change
IndVars to use this method when it rewrites pointer or floating-point
induction variables instead of using a doInitialization method to
sneak these changes in before ScalarEvolution has a chance to see
the loop. This eliminates the need for LoopPass to depend on
ScalarEvolution.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64810 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cafb81337bdf2574049533f5b8a6bc1ed92f1f3e 17-Feb-2009 Dan Gohman <gohman@apple.com> Delete trailing whitespace.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64784 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a575871884b247b0946290876ac7d4657b384cf9 17-Feb-2009 Dan Gohman <gohman@apple.com> Fix 80-column violation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64766 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1a5e936c53acda949afd8fa21b5a837b1d9fede9 17-Feb-2009 Dan Gohman <gohman@apple.com> Simplify; fix some 80-column violations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64702 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ebcd4af3878449009e18fbcf77d449985e018877 16-Feb-2009 Dan Gohman <gohman@apple.com> Delete this long-commented-out code. The situation it seems to have
been written for is no longer relevant with the elimination of
signed and unsigned types.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64625 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
aa03649af255fbbb049f393a2cf7d533da86d951 14-Feb-2009 Dan Gohman <gohman@apple.com> Extend the IndVarSimplify support for promoting induction variables:
- Test for signed and unsigned wrapping conditions, instead of just
testing for non-negative induction ranges.
- Handle loops with GT comparisons, in addition to LT comparisons.
- Support more cases of induction variables that don't start at 0.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64532 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f108e2eaaa788272a3ced1eef1bbb84f0d03b60c 14-Feb-2009 Dan Gohman <gohman@apple.com> Clarify debug output.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64531 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cd3eb9b09882087761c811d349c2b3be4e5c8a34 14-Feb-2009 Dan Gohman <gohman@apple.com> Simplify some code. hasComputableLoopEvolution is overkill in this case.
No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64530 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c2390b14c91764cba6e4394d05e58e387a7dfb19 12-Feb-2009 Dan Gohman <gohman@apple.com> Teach IndVarSimplify to optimize code using the C "int" type for
loop induction on LP64 targets. When the induction variable is
used in addressing, IndVars now is usually able to inserst a
64-bit induction variable and eliminates the sign-extending cast.
This is also useful for code using C "short" types for
induction variables on targets with 32-bit addressing.

Inserting a wider induction variable is easy; the tricky part is
determining when trunc(sext(i)) expressions are no-ops. This
requires range analysis of the loop trip count. A common case is
when the original loop iteration starts at 0 and exits when the
induction variable is signed-less-than a fixed value; this case
is now handled.

This replaces IndVarSimplify's OptimizeCanonicalIVType. It was
doing the same optimization, but it was limited to loops with
constant trip counts, because it was running after the loop
rewrite, and the information about the original induction
variable is lost by that point.

Rename ScalarEvolution's executesAtLeastOnce to
isLoopGuardedByCond, generalize it to be able to test for
ICMP_NE conditions, and move it to be a public function so that
IndVars can use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64407 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
794a7dbce030f93315b1305f83a374232f09bba5 26-Nov-2008 Evan Cheng <evan.cheng@apple.com> Revert r60042. IndVarSimplify should check if APFloat is PPCDoubleDouble first before trying to convert it to an integer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60072 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9bef70609cdee0bf7e641a02a56890610a5a7125 18-Nov-2008 Bill Wendling <isanbard@gmail.com> Cast to remove warning about comparing signed and unsigned.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59518 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
13877bf6c20621541ff71583c626bda68ef09219 18-Nov-2008 Devang Patel <dpatel@apple.com> Give SIToFPInst preference over UIToFPInst because it is faster on platforms that are widely used.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59476 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cd40233429fce385ae4b22301ce705273a6951a1 18-Nov-2008 Devang Patel <dpatel@apple.com> While handling floating point IVs lift restrictions on initial value and increment value.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59471 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
84e3515974407a606289c6e762a0419723b7918f 17-Nov-2008 Devang Patel <dpatel@apple.com> Handle floating point ivs during doInitialization().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59466 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1a6111f32dcc1f4b0bc5993a09af4adb65a23b3f 16-Nov-2008 Chris Lattner <sabre@nondot.org> eliminate some std::set's.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59409 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
58d43d4a41b21085c063bdd21a2abb68056e2a6f 03-Nov-2008 Devang Patel <dpatel@apple.com> Turn floating point IVs into integer IVs where possible.
This allows SCEV users to effectively calculate trip count.
LSR later on transforms back integer IVs to floating point IVs
later on to avoid int-to-float casts inside the loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58625 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
394f0441e06dafca29f0752cf400990a5b8fe4b1 23-Oct-2008 Daniel Dunbar <daniel@zuster.org> Change create*Pass factory functions to return Pass* instead of
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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58010 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
36a5bf8fd8b32fe749c207f8809ae7d4f66eeb03 10-Sep-2008 Devang Patel <dpatel@apple.com> fix white spaces.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56056 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d22a849282c45bbf7eb1734c274294d81e49e3a8 09-Sep-2008 Devang Patel <dpatel@apple.com> if loop induction variable is always sign or zero extended then
extend the type of induction variable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56017 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bcc11d2a712b2eb432447ef585be0a33ca58ee2a 05-Sep-2008 Devang Patel <dpatel@apple.com> Remove unused map.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55861 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ae73dc1448d25b02cabc7c64c86c64371453dda8 04-Sep-2008 Dan Gohman <gohman@apple.com> Tidy up several unbeseeming casts from pointer to intptr_t.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5a6c448a7ec2292649f73a813136ae709a23c8e0 06-Aug-2008 Dan Gohman <gohman@apple.com> Pass the computed iteration count value to RewriteLoopExitValues
instead of having it call getIterationCount again.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54380 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9b78763fce4cb418e7a2e672efb84bac25559b79 22-Jun-2008 Dan Gohman <gohman@apple.com> Use Loop::block_iterator.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52616 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
900872186d57468038726a01290f5cd49a45537c 13-Jun-2008 Wojciech Matyjewicz <wmatyjewicz@fastmail.fm> Use recently added getTruncateOrZeroExtend method to make the code shorter.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52251 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
02dea8b39f3acad5de1df36273444d149145e7fc 23-May-2008 Dan Gohman <gohman@apple.com> Tidy up BasicBlock::getFirstNonPHI, and change a bunch of places to
use it instead of duplicating its functionality.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51499 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7cbd8a3e92221437048b484d5ef9c0a22d0f8c58 16-May-2008 Gabor Greif <ggreif@gmail.com> API change for {BinaryOperator|CmpInst|CastInst}::create*() --> Create. Legacy interfaces will be in place for some time. (Merge from use-diet branch.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51200 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
844731a7f1909f55935e3514c9e713a62d67662e 13-May-2008 Dan Gohman <gohman@apple.com> Clean up the use of static and anonymous namespaces. This turned up
several things that were neither in an anonymous namespace nor static
but not intended to be global.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51017 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
051a950000e21935165db56695e35bade668193b 06-Apr-2008 Gabor Greif <ggreif@gmail.com> API changes for class Use size reduction, wave 1.
Specifically, introduction of XXX::Create methods
for Users that have a potentially variable number of
Uses.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49277 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4ee451de366474b9c228b4e5fa573795a715216d 29-Dec-2007 Chris Lattner <sabre@nondot.org> Remove attribution from file headers, per discussion on llvmdev.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45418 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
246b2564d3bbbafe06ebf6a67745cd24141b5cb4 22-Oct-2007 Dan Gohman <gohman@apple.com> Move the SCEV object factors from being static members of the individual
SCEV subclasses to being non-static member functions of the ScalarEvolution
class.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43224 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bc533cd1286ebb393c37a2a8b03079bfc9655585 10-Sep-2007 Devang Patel <dpatel@apple.com> Require SCEV before LCSSA.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41798 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b8f74793b9d161bc666fe27fc92fe112b6ec169b 04-Sep-2007 David Greene <greened@obbligato.org> Update GEP constructors to use an iterator interface to fix
GLIBCXX_DEBUG issues.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41697 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b7211a2ce13a0365e0e1dd2f27adda2ee3d1288b 21-Aug-2007 Devang Patel <dpatel@apple.com> Use SmallVector instead of std::vector.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41207 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
0d7d3656f3d10c510353d69472de4c0c0691b2e6 27-Jun-2007 Zhou Sheng <zhousheng00@gmail.com> Fix a bug.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37751 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5cec4db6ae13a41d04d86f37e347fc5b5997c948 19-Jun-2007 Dan Gohman <gohman@apple.com> Rename ScalarEvolution::deleteInstructionFromRecords to
deleteValueFromRecords and loosen the types to all it to accept
Value* instead of just Instruction*, since this is what
ScalarEvolution uses internally anyway. This allows more flexibility
for future uses.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37657 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
e19dd875987f8327cd93a502d4a05fc1f37064ee 15-Jun-2007 Dan Gohman <gohman@apple.com> Use SCEVConstant::get instead of SCEVUnknown::get to create an
integer constant SCEV.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37596 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d19534add90a2a894af61523b830887097bb780b 15-Jun-2007 Dan Gohman <gohman@apple.com> Add a SCEV class and supporting code for sign-extend expressions.

This created an ambiguity for expandInTy to decide when to use
sign-extension or zero-extension, but it turns out that most of its callers
don't actually need a type conversion, now that LLVM types don't have
explicit signedness. Drop expandInTy in favor of plain expand, and change
the few places that actually need a type conversion to do it themselves.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37591 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5adcefb04d70c3cb493c28bdc48da554f6960cb4 06-Jun-2007 Nick Lewycky <nicholas@mxc.ca> Inform ScalarEvolutions that we're deleting Values.
This is the obviously correct part of the fix for PR1487.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37457 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ecd94c804a563f2a86572dcf1d2e81f397e19daa 06-May-2007 Nick Lewycky <nicholas@mxc.ca> Fix typo in comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36873 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1997473cf72957d0e70322e2fe6fe2ab141c58a6 03-May-2007 Devang Patel <dpatel@apple.com> Drop 'const'


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36662 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3e15bf33e024b9df9e89351a165acfdb1dde51ed 02-May-2007 Devang Patel <dpatel@apple.com> Use 'static const char' instead of 'static const int'.
Due to darwin gcc bug, one version of darwin linker coalesces
static const int, which defauts PassID based pass identification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36652 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
794fd75c67a2cdc128d67342c6d88a504d186896 01-May-2007 Devang Patel <dpatel@apple.com> Do not use typeinfo to identify pass in pass manager.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36632 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5ee99979065d75605d150d7e567e4351024aae8f 07-Mar-2007 Devang Patel <dpatel@apple.com> Now IndVarSimplify is a LoopPass.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35003 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9f3d73886612fd06812fb63cf8e6fa10db9b17e7 04-Mar-2007 Chris Lattner <sabre@nondot.org> make better use of LCSSA information in RewriteLoopExitValues. Before, we
would scan the entire loop body, then scan all users of instructions in the
loop, looking for users outside the loop. Now, since we know that the
loop is in LCSSA form, we know that any users outside the loop will be LCSSA
phi nodes. Just scan them.

This speeds up indvars significantly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34898 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9caed5440d59dac4b388152fe8b993dc0491e5e9 04-Mar-2007 Chris Lattner <sabre@nondot.org> Implement PR1179/PR1232 and test/Transforms/IndVarsSimplify/loop_evaluate_[234].ll

This makes -indvars require and use LCSSA, updating it as appropriate.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34896 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c9838f25d53d3dd7d38949ef6c28f2505a110f45 03-Mar-2007 Chris Lattner <sabre@nondot.org> Make RewriteLoopExitValues far less nested by using continue in the loop


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34891 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cae5754619433aed7be74abbf1c0551a82d369cb 02-Mar-2007 Reid Spencer <rspencer@reidspencer.com> Prefer non-virtual calls to ConstantInt::isZero over virtual calls to
Constant::isNullValue() in situations where it is possible.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34821 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6934a04a8c15e9971cd1ea4d5c8df2d7afdd5be5 11-Feb-2007 Chris Lattner <sabre@nondot.org> Simplify code by using value::takename


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34176 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9133fe28954d498fc4de13064c7d65bd811de02c 06-Feb-2007 Reid Spencer <rspencer@reidspencer.com> Apply the VISIBILITY_HIDDEN field to the remaining anonymous classes in
the Transforms library. This reduces debug library size by 132 KB, debug
binary size by 376 KB, and reduces link time for llvm tools slightly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33939 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fbbe92f5fdcdde9a8eb331c90fff0a3bfb539e2b 31-Jan-2007 Chris Lattner <sabre@nondot.org> remove temporary vectors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33715 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
55eb1c47de30a6b4e8707b6392e878e32a6583e9 31-Jan-2007 Chris Lattner <sabre@nondot.org> eliminate temporary vectors


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33693 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
42a75517250017a52afb03a0ade03cbd49559fe5 15-Jan-2007 Chris Lattner <sabre@nondot.org> rename Type::isIntegral to Type::isInteger, eliminating the old Type::isInteger.
rename Type::getIntegralTypeMask to Type::getIntegerTypeMask.

This makes naming much more consistent. For example, there are now no longer any
instances of IntegerType that are not considered isInteger! :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33225 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4d5f508318b2f666ed50a2ed5e49e4aa343a92d6 15-Jan-2007 Chris Lattner <sabre@nondot.org> Eliminate calls to isInteger, generalizing code and tightening checks as needed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33218 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ef60b2c4ed67017a46442903c898bc24ed9a6c91 12-Jan-2007 Chris Lattner <sabre@nondot.org> simplify some code


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33150 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a54b7cbd452b3adb2f51346140d996b29c2cdb30 12-Jan-2007 Reid Spencer <rspencer@reidspencer.com> For PR1064:
Implement the arbitrary bit-width integer feature. The feature allows
integers of any bitwidth (up to 64) to be defined instead of just 1, 8,
16, 32, and 64 bit integers.

This change does several things:
1. Introduces a new Derived Type, IntegerType, to represent the number of
bits in an integer. The Type classes SubclassData field is used to
store the number of bits. This allows 2^23 bits in an integer type.
2. Removes the five integer Type::TypeID values for the 1, 8, 16, 32 and
64-bit integers. These are replaced with just IntegerType which is not
a primitive any more.
3. Adjust the rest of LLVM to account for this change.

Note that while this incremental change lays the foundation for arbitrary
bit-width integers, LLVM has not yet been converted to actually deal with
them in any significant way. Most optimization passes, for example, will
still only deal with the byte-width integer types. Future increments
will rectify this situation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33113 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
abaa8ca433a52dc522f6137c01a9552ebec44bb5 08-Jan-2007 Reid Spencer <rspencer@reidspencer.com> Comparison of primitive type sizes should now be done in bits, not bytes.
This patch converts getPrimitiveSize to getPrimitiveSizeInBits where it is
appropriate to do so (comparison of integer primitive types).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33012 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ee4f13a9046c380725cdeab62d57722db375c473 07-Jan-2007 Chris Lattner <sabre@nondot.org> add -debug output for -indvars.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32971 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c5b206b6be61d0d933b98b6af5e22f42edd48ad1 31-Dec-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
This patch replaces signed integer types with signless ones:
1. [US]Byte -> Int8
2. [U]Short -> Int16
3. [U]Int -> Int32
4. [U]Long -> Int64.
5. Removal of isSigned, isUnsigned, getSignedVersion, getUnsignedVersion
and other methods related to signedness. In a few places this warranted
identifying the signedness information from other sources.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32785 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
e4d87aa2de6e52952dca73716386db09aad5a8fd 23-Dec-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
This patch removes the SetCC instructions and replaces them with the ICmp
and FCmp instructions. The SetCondInst instruction has been removed and
been replaced with ICmpInst and FCmpInst.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32751 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
0e5f499638c8d277b9dc4a4385712177c53b5681 19-Dec-2006 Chris Lattner <sabre@nondot.org> Switch over Transforms/Scalar to use the STATISTIC macro. For each statistic
converted, we lose a static initializer. This also allows GCC to emit warnings
about unused statistics.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32690 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ac0b6ae358944ae8b2b5a11dc08f52c3ed89f2da 06-Dec-2006 Chris Lattner <sabre@nondot.org> Detemplatize the Statistic class. The only type it is instantiated with
is 'unsigned'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32279 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3da59db637a887474c1b1346c1f3ccf53b6c4663 27-Nov-2006 Reid Spencer <rspencer@reidspencer.com> For PR950:
The long awaited CAST patch. This introduces 12 new instructions into LLVM
to replace the cast instruction. Corresponding changes throughout LLVM are
provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the
exception of 175.vpr which fails only on a slight floating point output
difference.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31931 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9ba46c13bf3d49a5b697227c88ef987951e6b50d 21-Sep-2006 Chris Lattner <sabre@nondot.org> Fix Transforms/IndVarsSimplify/2006-09-20-LFTR-Crash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30555 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7f8897f22e88271cfa114998a4d6088e7c8e8e11 28-Aug-2006 Chris Lattner <sabre@nondot.org> eliminate RegisterOpt. It does the same thing as RegisterPass.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
eb705914924865201f8b8018977d94594b258142 26-Aug-2006 Owen Anderson <resistor@mac.com> Add an assertion to check that we're really preserving LCSSA.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29886 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ac123227109303be313c3c4625b152246969e781 25-Aug-2006 Owen Anderson <resistor@mac.com> Reapply the indvars patch, since nothing blew up last night.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29874 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b397d81f0339614ff73908ee9ee49bdead1643ad 25-Aug-2006 Owen Anderson <resistor@mac.com> Revert my previous patch. Since there are some major changes that went in today,
I'm going to wait to put this in HEAD until tomorrow, so as not to clutter the nightly
tester.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29868 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
8a24749cb83acc25742a96d3e60413df283f50dd 25-Aug-2006 Owen Anderson <resistor@mac.com> Specify that indvars actually preserve LCSSA. This has been done for a while, but I
forgot to put in the analysis usage.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29867 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
47a53ac726ceb1ac11bc1326be3fbe095f726b0d 18-Aug-2006 Reid Spencer <rspencer@reidspencer.com> Fix a grammaro in a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29765 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c1be492f94da7e53eef408c346b25c551c6bdf07 14-Jul-2006 Owen Anderson <resistor@mac.com> Hopefully the final attempt at making IndVars preserve LCSSA.

This should fix PR 831.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29141 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
262041892d7f821a86ea96c0282ff1e53aac1888 13-Jul-2006 Chris Lattner <sabre@nondot.org> Revert this patch temporarily until PR831 is fixed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29134 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bcfb913df0def0cb9f866e7811229768334144f3 12-Jul-2006 Owen Anderson <resistor@mac.com> IndVars now (correctly) preserves LCSSA form.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29126 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4a8aadd1f5f9b67248ddb6780d9275b2fb0744e0 11-Jul-2006 Owen Anderson <resistor@mac.com> Revert my indvars changes because they were breaking things. Unfortunately this
didn't start showing up until after the recent instcombine fixes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29102 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f9b238e93de0137510d4369015801e372ab0f879 27-Jun-2006 Owen Anderson <resistor@mac.com> De-pessimize the handling of LCSSA Phi nodes in IndVarSimplify. Hopefully this
will make Shootout-C/nestedloop faster.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28924 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
eb83f4e6cd00c50989f14ba41857f6b9e42b9e5e 17-Jun-2006 Chris Lattner <sabre@nondot.org> Fix IndVarsSimplify/2006-06-16-Indvar-LCSSA-Crash.ll, a case where a
"LCSSA" phi node causes indvars to break dominance properties. This fixes
causes indvars to avoid inserting aggressive code in this case, instead
indvars should be fixed to be more aggressive in the face of lcssa phi's.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28850 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1730078d5f553d7516a06e098e6c2089dc8bef9c 18-Nov-2005 Chris Lattner <sabre@nondot.org> Fix a crash building 176.gcc due to my recent patch, which only fixed
half the problem.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24414 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ceda605fd7d0e3532a22743538c6d118fe5e40c1 17-Nov-2005 Chris Lattner <sabre@nondot.org> This was checking the wrong GEP expression. Fixing this fixes a gccas crash
compiling mysql reported by Ted Kremenek.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24402 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cda9ca5a4fed09ea3788b572dbddabf2a5a7a5d9 10-Aug-2005 Chris Lattner <sabre@nondot.org> Allow indvar simplify to canonicalize ANY affine IV, not just affine IVs with
constant stride. This implements Transforms/IndVarsSimplify/variable-stride-ivs.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22744 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
36f891bdf6cf38fcc655a0930ca18664e18518d4 30-Jul-2005 Nate Begeman <natebegeman@mac.com> Break SCEVExpander out of IndVarSimplify into its own .h/.cpp file so that
other passes may use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22557 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4bd09d70cceb3851f7eb1c2f98338b3071d405f3 15-Jun-2005 Chris Lattner <sabre@nondot.org> Fix PR582. The rewriter can move casts around, which invalidated the
BB iterator. This fixes Transforms/IndVarsSimplify/2005-06-15-InstMoveCrash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22221 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fd93908ae8b9684fe71c239e3c6cfe13ff6a2663 22-Apr-2005 Misha Brukman <brukman+llvm@gmail.com> Remove trailing whitespace


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21427 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
8a7980b5eae56a741cced6993a98d94d2c617318 14-Feb-2005 Chris Lattner <sabre@nondot.org> Fix the second bug attached to PR504.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20181 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f6249261a9467cb93c4ccf5ae24798e2977db5a0 12-Feb-2005 Chris Lattner <sabre@nondot.org> Fix for testcase Transforms/IndVarsSimplify/2005-02-11-InvokeCrash.ll
and PR504.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20129 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1fca5ff62bb2ecb5bfc8974f4dbfc56e9d3ca721 27-Oct-2004 Chris Lattner <sabre@nondot.org> Convert 'struct' to 'class' in various places to adhere to the coding standards
and work better with VC++. Patch contributed by Morten Ofstad!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17281 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
989cbd58fb769e920fbf15b6a0fe0888aed553c9 12-Oct-2004 Chris Lattner <sabre@nondot.org> Fix a REALLY obscure bug in my previous checkin, which was splicing the END
marker from one ilist into the middle of another basic block!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a4b9c7841f94b6a3a2ba6c562b5dc4f4de02c637 12-Oct-2004 Chris Lattner <sabre@nondot.org> Handle a common case more carefully. In particular, instead of transforming
pointer recurrences into expressions from this:

%P_addr.0.i.0 = phi sbyte* [ getelementptr ([8 x sbyte]* %.str_1, int 0, int 0), %entry ], [ %inc.0.i, %no_exit.i ]
%inc.0.i = getelementptr sbyte* %P_addr.0.i.0, int 1 ; <sbyte*> [#uses=2]

into this:

%inc.0.i = getelementptr sbyte* getelementptr ([8 x sbyte]* %.str_1, int 0, int 0), int %inc.0.i.rec

Actually create something nice, like this:

%inc.0.i = getelementptr [8 x sbyte]* %.str_1, int 0, int %inc.0.i.rec


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16924 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4b5015604908e9296800991a7c538a255356428f 20-Sep-2004 Chris Lattner <sabre@nondot.org> Prototype these functions more accurately


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16432 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2da5c3dda6f5b9c4ec6d55008d33327764364bd4 15-Sep-2004 Reid Spencer <rspencer@reidspencer.com> Convert code to compile with vc7.1.

Patch contributed by Paolo Invernizzi. Thanks Paolo!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16368 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
551ccae044b0ff658fe629dd67edd5ffe75d10e8 02-Sep-2004 Reid Spencer <rspencer@reidspencer.com> Changes For Bug 352
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/.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16137 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
595ee7ec26432e4804f1e71817d9cf9b1f86318d 26-Jul-2004 Chris Lattner <sabre@nondot.org> Throttle back indvar substitution from creating multiplies in loops. This is bad bad bad.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15227 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a25502acd7c0d56cbd20da37f25830d81be834c5 24-Jun-2004 Chris Lattner <sabre@nondot.org> Two fixes. First, stop using the ugly shouldSubstituteIndVar method.

Second, disable substitution of quadratic addrec expressions to avoid putting
multiplies in loops!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14358 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c5c5e6afe584ffbd2bf2ce755e65bc89f170053a 20-Jun-2004 Chris Lattner <sabre@nondot.org> Make use of BinaryOperator::create* methods to shrinkify code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14262 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2b994c7206b3872d908468fc926ba8db483cf0a3 19-Jun-2004 Chris Lattner <sabre@nondot.org> Fix a nasty bug, noticed by Reid


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14249 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4a7553e2da506a718f59869c03c5ce113eb40f7a 23-Apr-2004 Chris Lattner <sabre@nondot.org> Move the scev expansion code into this pass, where it belongs. There is
still room for cleanup, but at least the code modification is out of the
analysis now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13135 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b4782d13d1444d9d18c0a681292cf0d0a32cf3ef 22-Apr-2004 Chris Lattner <sabre@nondot.org> Disable a previous patch that was causing indvars to loop infinitely :(


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13108 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fcb81f5f4cbac61851b7dec403961cf88e614aa1 22-Apr-2004 Chris Lattner <sabre@nondot.org> Fix an extremely serious thinko I made in revision 1.60 of this file.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13106 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1363e85df74627530ceede53280613c62a4cdbe3 22-Apr-2004 Chris Lattner <sabre@nondot.org> Implement a todo, rewriting all possible scev expressions inside of the
loop. This eliminates the extra add from the previous case, but it's
not clear that this will be a performance win overall. Tommorows test
results will tell. :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13103 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5d461d20aea308471f2a31b718a274bfee28b60c 22-Apr-2004 Chris Lattner <sabre@nondot.org> Implement a fixme. The helps loops that have induction variables of different
types in them. Instead of creating an induction variable for all types, it
creates a single induction variable and casts to the other sizes. This generates
this code:

no_exit: ; preds = %entry, %no_exit
%indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=4]
*** %j.0.0 = cast uint %indvar to short ; <short> [#uses=1]
%indvar = cast uint %indvar to int ; <int> [#uses=1]
%tmp.7 = getelementptr short* %P, uint %indvar ; <short*> [#uses=1]
store short %j.0.0, short* %tmp.7
%inc.0 = add int %indvar, 1 ; <int> [#uses=2]
%tmp.2 = setlt int %inc.0, %N ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1 ; <uint> [#uses=1]
br bool %tmp.2, label %no_exit, label %loopexit

instead of:

no_exit: ; preds = %entry, %no_exit
%indvar = phi ushort [ %indvar.next, %no_exit ], [ 0, %entry ] ; <ushort> [#uses=2]
*** %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=3]
%indvar = cast uint %indvar to int ; <int> [#uses=1]
%indvar = cast ushort %indvar to short ; <short> [#uses=1]
%tmp.7 = getelementptr short* %P, uint %indvar ; <short*> [#uses=1]
store short %indvar, short* %tmp.7
%inc.0 = add int %indvar, 1 ; <int> [#uses=2]
%tmp.2 = setlt int %inc.0, %N ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1
*** %indvar.next = add ushort %indvar, 1
br bool %tmp.2, label %no_exit, label %loopexit

This is an improvement in register pressure, but probably doesn't happen that
often.

The more important fix will be to get rid of the redundant add.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13101 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f1ab4b4eac5603d19c20f4a508f93a118a52bdd5 19-Apr-2004 Chris Lattner <sabre@nondot.org> Change the ExitBlocks list from being explicitly contained in the Loop
structure to being dynamically computed on demand. This makes updating
loop information MUCH easier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13045 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
20aa098ba694aa7e3f5fb5a52d22dba7c1e857ae 17-Apr-2004 Chris Lattner <sabre@nondot.org> If the loop executes a constant number of times, try a bit harder to replace
exit values.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13018 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f50af088f19f525f3d1026eb61db77e0037a9f43 17-Apr-2004 Chris Lattner <sabre@nondot.org> Even if there are not any induction variables in the loop, if we can compute
the trip count for the loop, insert one so that we can canonicalize the exit
condition.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13015 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
006118fe8c73d8009d7952b84cabd50882ed0033 16-Apr-2004 Chris Lattner <sabre@nondot.org> Fix some of the strange CBE-only failures that happened last night.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12980 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d244057a48660c3cd30d219118ece3f947947790 15-Apr-2004 Chris Lattner <sabre@nondot.org> Fix a bug in the previous checkin: if the exit block is not the same as
the back-edge block, we must check the preincremented value.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12968 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
59fdaeeae8f183e18bb6ad5c382ca23e28e6aaf6 15-Apr-2004 Chris Lattner <sabre@nondot.org> Change the canonical induction variable that we insert.
Instead of producing code like this:

Loop:
X = phi 0, X2
...

X2 = X + 1
if (X != N-1) goto Loop

We now generate code that looks like this:

Loop:
X = phi 0, X2
...

X2 = X + 1
if (X2 != N) goto Loop

This has two big advantages:
1. The trip count of the loop is now explicit in the code, allowing
the direct implementation of Loop::getTripCount()
2. This reduces register pressure in the loop, and allows X and X2 to be
put into the same register.

As a consequence of the second point, the code we generate for loops went
from:

.LBB2: # no_exit.1
...
mov %EDI, %ESI
inc %EDI
cmp %ESI, 2
mov %ESI, %EDI
jne .LBB2 # PC rel: no_exit.1

To:

.LBB2: # no_exit.1
...
inc %ESI
cmp %ESI, 3
jne .LBB2 # PC rel: no_exit.1

... which has two fewer moves, and uses one less register.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12961 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
40bf8b48cdb9961898dba1bc67320be1e49e3da1 02-Apr-2004 Chris Lattner <sabre@nondot.org> Rewrite the indvars pass to use the ScalarEvolution analysis.

This also implements some new features for the indvars pass, including
linear function test replacement, exit value substitution, and it works with
a much more general class of induction variables and loops.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12620 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
329c1c6c949d07e3fe9722ec633b4258217fd99d 08-Jan-2004 Chris Lattner <sabre@nondot.org> Improve encapsulation in the Loop and LoopInfo classes by eliminating the
getSubLoops/getTopLevelLoops methods, replacing them with iterator-based
accessors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10714 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
15cad759fe2048ac5eb137c6bb0ab7287538677e 23-Dec-2003 Chris Lattner <sabre@nondot.org> More minor non-functional changes. This now computes the exit condition, though
it doesn't do anything with it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10590 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
500597a1c39e91a3020587318ed61e737b6c613a 22-Dec-2003 Chris Lattner <sabre@nondot.org> Don't mind me, I'm just refactoring away. This patch makes room for LFTR, but
contains no functionality changes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10583 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
18b3c97bc773b24a66eb779e85da1820b0f16b31 22-Dec-2003 Chris Lattner <sabre@nondot.org> Implement IndVarsSimplify/pointer-indvars.ll, transforming pointer
arithmetic into "array subscripts"


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10580 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3324e718bc9ac2ede08a14c325848b576849542b 22-Dec-2003 Chris Lattner <sabre@nondot.org> Fix PR194


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10573 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
47df12d80db90e125e9f2ff764286ee11665476d 18-Dec-2003 John Criswell <criswell@uiuc.edu> Reverted back to previous revision - this was previously merged
according to the CVS log messages.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10517 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d000e1dc2f08892aaa8c1bfd96f85f24b9d66cbb 18-Dec-2003 John Criswell <criswell@uiuc.edu> Merged in RELEASE_11.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10516 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
9e45d2e0e8d750ccca58fac3782ab9f821176cf8 15-Dec-2003 Chris Lattner <sabre@nondot.org> Fix for PR185 & IndVarsSimplify/2003-12-15-Crash.llx


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10473 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
88369d214f320e888cb0bcb98db10ff8f47602a2 10-Dec-2003 Chris Lattner <sabre@nondot.org> Fix bug: IndVarsSimplify/2003-12-10-RemoveInstrCrash.llx


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10385 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
ba4f3f6a419326df190599421fa149c90235cb72 10-Dec-2003 Chris Lattner <sabre@nondot.org> Finegrainify namespacification
Reorder #includes
Implement: IndVarsSimplify/2003-12-10-IndVarDeadCode.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10376 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
d0fde30ce850b78371fd1386338350591f9ff494 11-Nov-2003 Brian Gaeke <gaeke@uiuc.edu> Put all LLVM code into the llvm namespace, as per bug 109.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9903 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
b576c94c15af9a440f69d9d03c2afead7971118c 20-Oct-2003 John Criswell <criswell@uiuc.edu> Added LLVM project notice to the top of every C++ source file.
Header files will be on the way.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9298 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
98bf436e2e2ab463d79c54a42a46b12028905330 12-Oct-2003 Chris Lattner <sabre@nondot.org> Rename loop preheaders pass to loop simplify


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9061 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cf00c4ab3ba308d45d98c5ccab87362cf802facb 10-Oct-2003 Misha Brukman <brukman+llvm@gmail.com> Fix spelling.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9027 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
332ae7f501e36d88b1dfdff4f18485ef07663085 23-Sep-2003 Chris Lattner <sabre@nondot.org> Fix bug: IndVarsSimplify/2003-09-23-NotAtTop.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8689 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a497748fb1a982d85ddef50894abb299c5df5ff2 12-Sep-2003 Chris Lattner <sabre@nondot.org> Make sure to cannonicalize loops before running indvar simplify


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8502 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3adf51d022348b06a1adeef7649fa35928ad9358 10-Sep-2003 Chris Lattner <sabre@nondot.org> Spelling fixes. I think that "cannonical" is ok, but "canonical" appears to
be the canonical form for the word


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8430 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c01ccfd503057b60053c5e8bf4175062de7c3740 10-Sep-2003 Chris Lattner <sabre@nondot.org> Fix up file header


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8428 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6806f5614d2ec260fda954c951d33f58e77ed610 02-Aug-2003 Chris Lattner <sabre@nondot.org> DEBUG got moved to Support/Debug.h


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7492 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
e408e25132b8de8c757db1e3ddcd70432dfeb24d 23-Apr-2003 Chris Lattner <sabre@nondot.org> Remove unnecesary &*'s


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5872 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
cb2610ea037a17115ef3a01a6bdaab4e3cfdca27 21-Oct-2002 Chris Lattner <sabre@nondot.org> - Rename AnalysisUsage::preservesAll to getPreservesAll & preservesCFG to
setPreservesCFG to be less confusing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4255 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a92f696b74a99325026ebbdbffd2a44317e0c10b 02-Oct-2002 Chris Lattner <sabre@nondot.org> Updates to work with recent Statistic's changes:

* Renamed StatisticReporter.h/cpp to Statistic.h/cpp
* Broke constructor to take two const char * arguments instead of one, so
that indendation can be taken care of automatically.
* Sort the list by pass name when printing
* Make sure to print all statistics as a group, instead of randomly when
the statistics dtors are called.
* Updated ProgrammersManual with new semantics.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
2a7c23ef9156a97f426a3fe8d1f5935b75d076d1 10-Sep-2002 Chris Lattner <sabre@nondot.org> Simplify code (somtimes dramatically), by using the new "auto-insert" feature
of instruction constructors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3656 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5e76140536ba66fadeced1cd892f79616f407e3c 10-Sep-2002 Chris Lattner <sabre@nondot.org> * Clean up code a little bit
* Fix bug: test/Regression/Transforms/IndVarsSimplify/2002-09-09-PointerIndVar.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3644 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5f0eb8da62308126d5b61e3eee5bee75b9dc5194 08-Aug-2002 Chris Lattner <sabre@nondot.org> - Cleaned up the interface to AnalysisUsage to take analysis class names
instead of ::ID's.
- Pass::getAnalysis<> now no longer takes an optional argument


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3265 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a59cbb2043c08f3cfb8fb379f0d336e21e070be8 27-Jul-2002 Chris Lattner <sabre@nondot.org> * Standardize how analysis results/passes as printed with the print() virtual
methods
* Eliminate AnalysisID: Now it is just a typedef for const PassInfo*
* Simplify how AnalysisID's are initialized
* Eliminate Analysis/Writer.cpp/.h: incorporate printing functionality into
the analyses themselves.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3116 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
a6275ccdf5e1aa208afde56c498e2b13e16442f0 26-Jul-2002 Chris Lattner <sabre@nondot.org> * Add support for different "PassType's"
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Add support for different "PassType's"
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Remove getPassName implementations from various subclasses


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3113 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f629309f74cf1a64aa7fd1cd5784fd7db9a8f59e 23-Jul-2002 Chris Lattner <sabre@nondot.org> *** empty log message ***


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3e009942ed6d5b075377ea8eb34c2daa8d8c5f77 30-Jun-2002 Chris Lattner <sabre@nondot.org> *** empty log message ***


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2813 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
5ba99bd124dc18302f527d6e2b0efd0fa866bc9e 25-Jun-2002 Anand Shukla <ashukla@cs.uiuc.edu> changes to make it compatible with 64bit gcc


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2792 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
7e70829632f82de15db187845666aaca6e04b792 25-Jun-2002 Chris Lattner <sabre@nondot.org> MEGAPATCH checkin.

For details, See: docs/2002-06-25-MegaPatchInfo.txt


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f016ea4ff80c56c467247a90567dd07bddb590f3 22-May-2002 Chris Lattner <sabre@nondot.org> Use the new DEBUG(x) macro to allow debugging code to be enabled on the commandline


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2713 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3dec1f272219ee1f8e1499929cdf53f5bc3c2272 10-May-2002 Chris Lattner <sabre@nondot.org> Add support for printing out statistics information when -stats is added to
the command line


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2601 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
022103b3f33febb7e54b8fdf2c9bc461eea78cba 07-May-2002 Chris Lattner <sabre@nondot.org> Merge all individual .h files into a single Scalar.h file


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2537 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
c6f3ae5c66c8e0dab6a2bd9601d0e253ef9ba794 29-Apr-2002 Chris Lattner <sabre@nondot.org> Eliminate duplicate or unneccesary #include's


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2397 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
96c466b06ab0c830b07329c1b16037f585ccbe40 29-Apr-2002 Chris Lattner <sabre@nondot.org> Add new optional getPassName() virtual function that a Pass can override
to make debugging output a lot nicer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2395 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
97e52e43361e77963145b95a576db11b4d14d309 28-Apr-2002 Chris Lattner <sabre@nondot.org> Tighten up the AnalysisUsage of lots of passes, primarily to correctly indicate whether or not they invalidate the CFGA


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2386 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
31bcdb822fe9133b1973de51519d34e5813a6184 28-Apr-2002 Chris Lattner <sabre@nondot.org> Split ConstantVals.h into Constant.h and Constants.h


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2378 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1b7f7dc4b45a900fae2e9b062d588a995935727a 28-Apr-2002 Chris Lattner <sabre@nondot.org> Eliminate the cfg namespace, moving LoopInfo, Dominators, Interval* classes
to the global namespace


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2370 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
f57b845547302d24ecb6a9e79d7bc386f761a6c9 27-Apr-2002 Chris Lattner <sabre@nondot.org> * Rename MethodPass class to FunctionPass
- Rename runOnMethod to runOnFunction
* Transform getAnalysisUsageInfo into getAnalysisUsage
- Method is now const
- It now takes one AnalysisUsage object to fill in instead of 3 vectors
to fill in
- Pass's now specify which other passes they _preserve_ not which ones
they modify (be conservative!)
- A pass can specify that it preserves all analyses (because it never
modifies the underlying program)
* s/Method/Function/g in other random places as well


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2333 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
1a18b7cf805fc6bfc6dc44fb66799ad577d57213 27-Apr-2002 Chris Lattner <sabre@nondot.org> Change Constant::getNullConstant to Constant::getNullValue


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2323 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
237e6d10f24863cf48821b601b4164794e89d847 09-Apr-2002 Chris Lattner <sabre@nondot.org> s/Method/Function
Remove extraneous #includes of llvm/Assembly/Writer


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2178 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
bd0ef77cde9c9e82f2b4ad33e4982c46274d6540 26-Feb-2002 Chris Lattner <sabre@nondot.org> Change over to use new style pass mechanism, now passes only expose small
creation functions in their public header file, unless they can help it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1816 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
455889aa79e3463a4b0f2161e3d9d72a683268b6 12-Feb-2002 Chris Lattner <sabre@nondot.org> * Pull BasicBlock::pred_* and BasicBlock::succ_* out of BasicBlock.h and into
llvm/Support/CFG.h
* Make pred & succ iterators for intervals global functions
* Add #includes that are now neccesary because BasicBlock.h doesn't include
InstrTypes.h anymore


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1750 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
221d688a5ef21a22c2368c9fff0e92d7966c95e5 12-Feb-2002 Chris Lattner <sabre@nondot.org> Method.h no longer includes BasicBlock.h
Method::inst_* is now in llvm/Support/InstIterator.h
GraphTraits specializations for BasicBlock and Methods are now in llvm/Support/CFG.h


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1746 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
fcc93d2c0aece88c79648be3b76f98ee9e29e826 31-Jan-2002 Chris Lattner <sabre@nondot.org> MethodPass's are now guaranteed to not be run on external methods!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1611 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
793c6b80d3e322c3fefb3c7314b054c7880d1691 31-Jan-2002 Chris Lattner <sabre@nondot.org> Convert xforms over to new pass structure.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1605 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
697954c15da58bd8b186dbafdedd8b06db770201 20-Jan-2002 Chris Lattner <sabre@nondot.org> Changes to build successfully with GCC 3.02


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1503 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
4753bf21a4310a20ee1454e9dce48c87a06e8d27 05-Dec-2001 Chris Lattner <sabre@nondot.org> Actually return true when a change has been made


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1425 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
3bf915f2a296472a6bead0502c88bf74e90ec19b 04-Dec-2001 Chris Lattner <sabre@nondot.org> Fix bugs, don't do external methods which causes segv.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1414 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
394437ff7eaccfe1de92fe14d0022ca0addf3e41 04-Dec-2001 Chris Lattner <sabre@nondot.org> Implement induction variable simplification


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1411 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
6148c02591bd83da7b957589c4bbf6f9720d503f 03-Dec-2001 Chris Lattner <sabre@nondot.org> Initial checkin of indvar stuff


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1404 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp