#
b47f8010 |
| 11-Mar-2016 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Make the AnalysisManager parameter to run methods a reference.
This was originally a pointer to support pass managers which didn't use AnalysisManagers. However, that doesn't realistically come
[PM] Make the AnalysisManager parameter to run methods a reference.
This was originally a pointer to support pass managers which didn't use AnalysisManagers. However, that doesn't realistically come up much and the complexity of supporting it doesn't really make sense.
In fact, *many* parts of the pass manager were just assuming the pointer was never null already. This at least makes it much more explicit and clear.
llvm-svn: 263219
show more ...
|
#
b4faf13c |
| 11-Mar-2016 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Implement the final conclusion as to how the analysis IDs should work in the face of the limitations of DLLs and templated static variables.
This requires passes that use the AnalysisBase mixin
[PM] Implement the final conclusion as to how the analysis IDs should work in the face of the limitations of DLLs and templated static variables.
This requires passes that use the AnalysisBase mixin provide a static variable themselves. So as to keep their APIs clean, I've made these private and befriended the CRTP base class (which is the common practice).
I've added documentation to AnalysisBase for why this is necessary and at what point we can go back to the much simpler system.
This is clearly a better pattern than the extern template as it caught *numerous* places where the template magic hadn't been applied and things were "just working" but would eventually have broken mysteriously.
llvm-svn: 263216
show more ...
|
#
97d19bd9 |
| 09-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Slightly generalize getRangeViaFactoring
Building on the previous change, this generalizes ScalarEvolution::getRangeViaFactoring to work with {Ext(C?A:B)+k0,+,Ext(C?A:B)+k1} where Ext can be
[SCEV] Slightly generalize getRangeViaFactoring
Building on the previous change, this generalizes ScalarEvolution::getRangeViaFactoring to work with {Ext(C?A:B)+k0,+,Ext(C?A:B)+k1} where Ext can be a zero extend, sign extend or truncate operation, and k0 and k1 are constants.
llvm-svn: 262979
show more ...
|
#
d3488c60 |
| 09-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Slightly generalize getRangeViaFactoring
This change generalizes ScalarEvolution::getRangeViaFactoring to work with {Ext(C?A:B),+,Ext(C?A:B)} where Ext can be a zero extend, sign extend or tr
[SCEV] Slightly generalize getRangeViaFactoring
This change generalizes ScalarEvolution::getRangeViaFactoring to work with {Ext(C?A:B),+,Ext(C?A:B)} where Ext can be a zero extend, sign extend or truncate operation.
llvm-svn: 262978
show more ...
|
#
724f5cf2 |
| 03-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Prove no-overflow via constant ranges
Exploit ScalarEvolution::getRange's newly acquired smartness (since r262438) by using that to infer nsw and nuw when possible.
llvm-svn: 262639
|
#
11ef606f |
| 03-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Be less eager about demoting zexts to sexts
After r262438 we can have provably positive NSW SCEV expressions whose zero extensions cannot be simplified (since r262438 makes SCEV better at com
[SCEV] Be less eager about demoting zexts to sexts
After r262438 we can have provably positive NSW SCEV expressions whose zero extensions cannot be simplified (since r262438 makes SCEV better at computing constant ranges). This means demoting sexts of positive add recurrences eagerly can result in an unsimplified zero extension where we could have had a simplified sign extension. This change fixes the issue by teaching SCEV to demote sext of a positive SCEV expression to a zext only if the sext could not be simplified.
llvm-svn: 262638
show more ...
|
Revision tags: llvmorg-3.8.0 |
|
#
dcd3a88e |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Minor naming, braces cleanup; NFC
llvm-svn: 262459
|
#
6b017a11 |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
Add a comment with a rational for the unusual code structure
llvm-svn: 262454
|
#
eca1b53b |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
Qualify getRangeForAffineAR with this-> for MSVC
llvm-svn: 262453
|
#
1168f93c |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
Perturb code in an attempt to appease MSVC
For some reason MSVC seems to think I'm calling getConstant() from a static context. Try to avoid this issue by explicitly specifying 'this->' (though I'm
Perturb code in an attempt to appease MSVC
For some reason MSVC seems to think I'm calling getConstant() from a static context. Try to avoid this issue by explicitly specifying 'this->' (though I'm not confident that this will actually work).
llvm-svn: 262451
show more ...
|
#
62a1c339 |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
More code permutation to appease MSVC
llvm-svn: 262449
|
#
9e5ebf14 |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
Remove "auto" to appease the MSVC bots
llvm-svn: 262448
|
#
bf730984 |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Make getRange smarter around selects
Have ScalarEvolution::getRange re-consider cases like "{C?A:B,+,C?P:Q}" by factoring out "C" and computing RangeOf{A,+,P} union RangeOf({B,+,Q}) instead.
[SCEV] Make getRange smarter around selects
Have ScalarEvolution::getRange re-consider cases like "{C?A:B,+,C?P:Q}" by factoring out "C" and computing RangeOf{A,+,P} union RangeOf({B,+,Q}) instead.
The latter can be easier to compute precisely in cases like "{C?0:N,+,C?1:-1}" N is the backedge taken count of the loop; since in such cases the latter form simplifies to [0,N+1) union [0,N+1).
llvm-svn: 262438
show more ...
|
#
b765b633 |
| 02-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Extract out a getRangeForAffineAR; NFC
Pure code-motion change. Will be used later in making getRange more clever.
llvm-svn: 262437
|
#
f1e9cae0 |
| 01-Mar-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Minor cleanup: rename method, C++11'ify; NFC
llvm-svn: 262374
|
#
df0cd726 |
| 28-Feb-2016 |
NAKAMURA Takumi <geek4civic@gmail.com> |
[PM] Appease mingw32's auto-import DLL build with minimal tweaks, with fix for clang.
char AnalysisBase::ID should be declared as extern and defined in one module.
llvm-svn: 262188
|
#
ca04a1f7 |
| 28-Feb-2016 |
NAKAMURA Takumi <geek4civic@gmail.com> |
Revert r262185, "[PM] Appease mingw32's auto-import DLL build with minimal tweaks."
I'll rework soon.
llvm-svn: 262186
|
#
de40e743 |
| 28-Feb-2016 |
NAKAMURA Takumi <geek4civic@gmail.com> |
[PM] Appease mingw32's auto-import DLL build with minimal tweaks.
char AnalysisBase::ID should be declared as extern and defined in one module.
llvm-svn: 262185
|
#
3a634355 |
| 26-Feb-2016 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Introduce CRTP mixin base classes to help define passes and analyses in the new pass manager.
These just handle really basic stuff: turning a type name into a string statically that is nice to
[PM] Introduce CRTP mixin base classes to help define passes and analyses in the new pass manager.
These just handle really basic stuff: turning a type name into a string statically that is nice to print in logs, and getting a static unique ID for each analysis.
Sadly, the format of passes in anonymous namespaces makes using their names in tests really annoying so I've customized the names of the no-op passes to keep tests sane to read.
This is the first of a few simplifying refactorings for the new pass manager that should reduce boilerplate and confusion.
llvm-svn: 262004
show more ...
|
Revision tags: llvmorg-3.8.0-rc3 |
|
#
5079f626 |
| 22-Feb-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[ConstantRange] Rename a method and add more doc
Rename makeNoWrapRegion to a more obvious makeGuaranteedNoWrapRegion, and add a comment about the counter-intuitive aspects of the function. This is
[ConstantRange] Rename a method and add more doc
Rename makeNoWrapRegion to a more obvious makeGuaranteedNoWrapRegion, and add a comment about the counter-intuitive aspects of the function. This is to help prevent cases like PR26628.
llvm-svn: 261532
show more ...
|
#
934fcf4d |
| 21-Feb-2016 |
Tobias Grosser <tobias@grosser.es> |
ScalerEvolution: Only erase temporary values if they actually have been added
This addresses post-review comments from Sanjoy Das for r261485.
llvm-svn: 261486
|
#
11332e5e |
| 21-Feb-2016 |
Tobias Grosser <tobias@grosser.es> |
ScalarEvolution: Do not keep temporary PHI values in ValueExprMap
Before this patch simplified SCEV expressions for PHI nodes were only returned the very first time getSCEV() was called, but later c
ScalarEvolution: Do not keep temporary PHI values in ValueExprMap
Before this patch simplified SCEV expressions for PHI nodes were only returned the very first time getSCEV() was called, but later calls to getSCEV always returned the non-simplified value, which had "temporarily" been stored in the ValueExprMap, but was never removed and consequently blocked the caching of the simplified PHI expression.
llvm-svn: 261485
show more ...
|
#
807d33da |
| 20-Feb-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Don't spell `SCEV *` variables as `Scev`; NFC
It reads odd since most other places name a `SCEV *` as `S`. Pure renaming change.
llvm-svn: 261393
|
#
c42f7cc3 |
| 20-Feb-2016 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SCEV] Don't use std::make_pair; NFC
`{A, B}` reads cleaner than `std::make_pair(A, B)`.
llvm-svn: 261392
|
#
ea63a7f5 |
| 08-Feb-2016 |
Silviu Baranga <silviu.baranga@arm.com> |
[SCEV][LAA] Re-commit r260085 and r260086, this time with a fix for the memory sanitizer issue. The PredicatedScalarEvolution's copy constructor wasn't copying the Generation value, and was leaving i
[SCEV][LAA] Re-commit r260085 and r260086, this time with a fix for the memory sanitizer issue. The PredicatedScalarEvolution's copy constructor wasn't copying the Generation value, and was leaving it un-initialized.
Original commit message:
[SCEV][LAA] Add no wrap SCEV predicates and use use them to improve strided pointer detection
Summary: This change adds no wrap SCEV predicates with: - support for runtime checking - support for expression rewriting: (sext ({x,+,y}) -> {sext(x),+,sext(y)} (zext ({x,+,y}) -> {zext(x),+,sext(y)}
Note that we are sign extending the increment of the SCEV, even for the zext case. This is needed to cover the fairly common case where y would be a (small) negative integer. In order to do this, this change adds two new flags: nusw and nssw that are applicable to AddRecExprs and permit the transformations above.
We also change isStridedPtr in LAA to be able to make use of these predicates. With this feature we should now always be able to work around overflow issues in the dependence analysis.
Reviewers: mzolotukhin, sanjoy, anemet
Subscribers: mzolotukhin, sanjoy, llvm-commits, rengolin, jmolloy, hfinkel
Differential Revision: http://reviews.llvm.org/D15412
llvm-svn: 260112
show more ...
|