#
7004e4b9 |
| 26-Mar-2012 |
Andrew Trick <atrick@apple.com> |
SCEV fix: Handle loop invariant loads.
Fixes PR11882: NULL dereference in ComputeLoadConstantCompareExitLimit.
llvm-svn: 153480
|
#
e166a854 |
| 24-Jan-2012 |
Chris Lattner <sabre@nondot.org> |
switch SCEV to use the new ConstantFoldLoadThroughGEPIndices function instead of its own hard coded thing, allowing it to handle ConstantDataSequential and fixing some obscure bugs (e.g. it would pr
switch SCEV to use the new ConstantFoldLoadThroughGEPIndices function instead of its own hard coded thing, allowing it to handle ConstantDataSequential and fixing some obscure bugs (e.g. it would previously crash on a CAZ of vector type).
llvm-svn: 148788
show more ...
|
#
46a9f016 |
| 20-Jan-2012 |
David Blaikie <dblaikie@gmail.com> |
More dead code removal (using -Wunreachable-code)
llvm-svn: 148578
|
#
fe4848b5 |
| 20-Jan-2012 |
Benjamin Kramer <benny.kra@googlemail.com> |
Remove obviously invalid early exit that prevented analyzing ConstantAggregateZeros.
Found by the clang static analyzer.
llvm-svn: 148540
|
#
e81211f4 |
| 11-Jan-2012 |
Andrew Trick <atrick@apple.com> |
Clarified the SCEV getSmallConstantTripCount interface with in-your-face comments.
This interface is misleading and dangerous, but it is actually what we need for unrolling.
llvm-svn: 147926
|
#
881a7768 |
| 07-Jan-2012 |
Andrew Trick <atrick@apple.com> |
Expose isNonConstantNegative to users of ScalarEvolution.
llvm-svn: 147700
|
#
43a33066 |
| 02-Dec-2011 |
Chad Rosier <mcrosier@apple.com> |
Fix a few more places where TargetData/TargetLibraryInfo is not being passed. Add FIXMEs to places that are non-trivial to fix.
llvm-svn: 145661
|
#
e6de63df |
| 01-Dec-2011 |
Chad Rosier <mcrosier@apple.com> |
Last bit of TargetLibraryInfo propagation. Also fixed a case for TargetData where it appeared beneficial to pass. More of rdar://10500969
llvm-svn: 145630
|
#
c24b86ff |
| 01-Dec-2011 |
Chad Rosier <mcrosier@apple.com> |
Propagate TargetLibraryInfo throughout ConstantFolding.cpp and InstructionSimplify.cpp. Other fixups as needed. Part of rdar://10500969
llvm-svn: 145559
|
#
d25089f8 |
| 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.
llvm-svn: 145367
|
#
d912a5b2 |
| 29-Nov-2011 |
Andrew Trick <atrick@apple.com> |
Make SCEV print <nsw><nuw> for Add/MulExpr.
llvm-svn: 145364
|
#
b5ba2eef |
| 20-Nov-2011 |
Benjamin Kramer <benny.kra@googlemail.com> |
SCEV: Actually set overflow flags on add expressions.
setFlags doesn't modify its arguments.
llvm-svn: 145007
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4 |
|
#
90c7a108 |
| 16-Nov-2011 |
Andrew Trick <atrick@apple.com> |
Fix SCEV overly optimistic back edge taken count for multi-exit loops.
Fixes PR11375: Different results for 'clang++ huh.cpp'...
llvm-svn: 144746
|
#
d48ab845 |
| 12-Nov-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Don't try to loop on iterators that are potentially invalidated inside the loop. Fixes PR11361!
llvm-svn: 144454
|
#
0485d51a |
| 09-Nov-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Don't forget to check FlagNW when determining whether an AddRecExpr will wrap or not. Patch by Brendon Cahoon!
llvm-svn: 144173
|
Revision tags: llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2 |
|
#
a370f3e3 |
| 25-Oct-2011 |
Duncan Sands <baldrick@free.fr> |
Restore commits 142790 and 142843 - they weren't breaking the build bots. Original commit messages: - Reapply r142781 with fix. Original message:
Enhance SCEV's brute force loop analysis to handl
Restore commits 142790 and 142843 - they weren't breaking the build bots. Original commit messages: - Reapply r142781 with fix. Original message:
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count.
With this, we now constant evaluate: struct ListNode { const struct ListNode *next; int i; }; static const struct ListNode node1 = {0, 1}; static const struct ListNode node2 = {&node1, 2}; static const struct ListNode node3 = {&node2, 3}; int test() { int sum = 0; for (const struct ListNode *n = &node3; n != 0; n = n->next) sum += n->i; return sum; }
- Now that we look at all the header PHIs, we need to consider all the header PHIs when deciding that the loop has stopped evolving. Fixes miscompile in the gcc torture testsuite!
llvm-svn: 142919
show more ...
|
#
805c5b92 |
| 25-Oct-2011 |
Duncan Sands <baldrick@free.fr> |
Speculatively revert commits 142790 and 142843 to see if it fixes the dragonegg and llvm-gcc self-host buildbots. Original commit messages: - Reapply r142781 with fix. Original message:
Enhance S
Speculatively revert commits 142790 and 142843 to see if it fixes the dragonegg and llvm-gcc self-host buildbots. Original commit messages: - Reapply r142781 with fix. Original message:
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count.
With this, we now constant evaluate: struct ListNode { const struct ListNode *next; int i; }; static const struct ListNode node1 = {0, 1}; static const struct ListNode node2 = {&node1, 2}; static const struct ListNode node3 = {&node2, 3}; int test() { int sum = 0; for (const struct ListNode *n = &node3; n != 0; n = n->next) sum += n->i; return sum; }
- Now that we look at all the header PHIs, we need to consider all the header PHIs when deciding that the loop has stopped evolving. Fixes miscompile in the gcc torture testsuite!
llvm-svn: 142916
show more ...
|
#
a58fb48a |
| 24-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Now that we look at all the header PHIs, we need to consider all the header PHIs when deciding that the loop has stopped evolving. Fixes miscompile in the gcc torture testsuite!
llvm-svn: 142843
|
#
9be7f277 |
| 24-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Reapply r142781 with fix. Original message:
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count.
With this, we now constant
Reapply r142781 with fix. Original message:
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count.
With this, we now constant evaluate: struct ListNode { const struct ListNode *next; int i; }; static const struct ListNode node1 = {0, 1}; static const struct ListNode node2 = {&node1, 2}; static const struct ListNode node3 = {&node2, 3}; int test() { int sum = 0; for (const struct ListNode *n = &node3; n != 0; n = n->next) sum += n->i; return sum; }
llvm-svn: 142790
show more ...
|
#
8e904dee |
| 24-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
PHI nodes not in the loop header aren't part of the loop iteration initial state. Furthermore, they might not have two operands. This fixes the underlying issue behind the crashes introduced in r1427
PHI nodes not in the loop header aren't part of the loop iteration initial state. Furthermore, they might not have two operands. This fixes the underlying issue behind the crashes introduced in r142781.
llvm-svn: 142788
show more ...
|
#
9d28c26d |
| 24-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Speculatively revert r142781. Bots are showing Assertion `i_nocapture < OperandTraits<PHINode>::operands(this) && "getOperand() out of range!"' failed. coming out of indvars.
llvm-svn: 142786
|
#
1700007e |
| 23-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count.
With this, we now constant evaluate: struct ListNode { const struct ListNode
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count.
With this, we now constant evaluate: struct ListNode { const struct ListNode *next; int i; }; static const struct ListNode node1 = {0, 1}; static const struct ListNode node2 = {&node1, 2}; static const struct ListNode node3 = {&node2, 3}; int test() { int sum = 0; for (const struct ListNode *n = &node3; n != 0; n = n->next) sum += n->i; return sum; }
llvm-svn: 142781
show more ...
|
#
a6674c7f |
| 22-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Make SCEV's brute force analysis stronger in two ways. Firstly, we should be able to constant fold load instructions where the argument is a constant. Second, we should be able to watch multiple PHI
Make SCEV's brute force analysis stronger in two ways. Firstly, we should be able to constant fold load instructions where the argument is a constant. Second, we should be able to watch multiple PHI nodes through the loop; this patch only supports PHIs in loop headers, more can be done here.
With this patch, we now constant evaluate: static const int arr[] = {1, 2, 3, 4, 5}; int test() { int sum = 0; for (int i = 0; i < 5; ++i) sum += arr[i]; return sum; }
llvm-svn: 142731
show more ...
|
Revision tags: llvmorg-3.0.0-rc1 |
|
#
a447e0f3 |
| 14-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
An instruction's operands aren't necessarily instructions or constants. They could be arguments, for example.
No testcase because this is a bug-fix broken out of a larger optimization patch.
llvm-s
An instruction's operands aren't necessarily instructions or constants. They could be arguments, for example.
No testcase because this is a bug-fix broken out of a larger optimization patch.
llvm-svn: 141951
show more ...
|
#
3e8a576d |
| 05-Oct-2011 |
Andrew Trick <atrick@apple.com> |
Fixes PR11070 - assert in SCEV getConstantEvolvingPHIOperands.
llvm-svn: 141219
|