#
cc39b675 |
| 24-Jul-2014 |
Hal Finkel <hfinkel@anl.gov> |
AA metadata refactoring (introduce AAMDNodes)
In order to enable the preservation of noalias function parameter information after inlining, and the representation of block-level __restrict__ pointer
AA metadata refactoring (introduce AAMDNodes)
In order to enable the preservation of noalias function parameter information after inlining, and the representation of block-level __restrict__ pointer information (etc.), additional kinds of aliasing metadata will be introduced. This metadata needs to be carried around in AliasAnalysis::Location objects (and MMOs at the SDAG level), and so we need to generalize the current scheme (which is hard-coded to just one TBAA MDNode*).
This commit introduces only the necessary refactoring to allow for the introduction of other aliasing metadata types, but does not actually introduce any (that will come in a follow-up commit). What it does introduce is a new AAMDNodes structure to hold all of the aliasing metadata nodes associated with a particular memory-accessing instruction, and uses that structure instead of the raw MDNode* in AliasAnalysis::Location, etc.
No functionality change intended.
llvm-svn: 213859
show more ...
|
Revision tags: llvmorg-3.5.0-rc1 |
|
#
c782aa5a |
| 21-Jul-2014 |
Hal Finkel <hfinkel@anl.gov> |
Move isIdentifiedFunctionLocal from BasicAA to AA
The ability to identify function locals will exist outside of BasicAA (for example, logic for inferring noalias function arguments will need this),
Move isIdentifiedFunctionLocal from BasicAA to AA
The ability to identify function locals will exist outside of BasicAA (for example, logic for inferring noalias function arguments will need this), so make this concept generally accessible without code duplication.
No functionality change.
llvm-svn: 213514
show more ...
|
#
354e23b0 |
| 17-Jul-2014 |
Hal Finkel <hfinkel@anl.gov> |
Improve BasicAA CS-CS queries (redux)
This reverts, "r213024 - Revert r212572 "improve BasicAA CS-CS queries", it causes PR20303." with a fix for the bug in pr20303. As it turned out, the relevant c
Improve BasicAA CS-CS queries (redux)
This reverts, "r213024 - Revert r212572 "improve BasicAA CS-CS queries", it causes PR20303." with a fix for the bug in pr20303. As it turned out, the relevant code was both wrong and over-conservative (because, as with the code it replaced, it would return the overall ModRef mask even if just Ref had been implied by the argument aliasing results). Hopefully, this correctly fixes both problems.
Thanks to Nick Lewycky for reducing the test case for pr20303 (which I've cleaned up a little and added in DSE's test directory). The BasicAA test has also been updated to check for this error.
Original commit message:
BasicAA contains knowledge of certain intrinsics, such as memcpy and memset, and uses that information to form more-accurate answers to CallSite vs. Loc ModRef queries. Unfortunately, it did not use this information when answering CallSite vs. CallSite queries.
Generically, when an intrinsic takes one or more pointers and the intrinsic is marked only to read/write from its arguments, the offset/size is unknown. As a result, the generic code that answers CallSite vs. CallSite (and CallSite vs. Loc) queries in AA uses UnknownSize when forming Locs from an intrinsic's arguments. While BasicAA's CallSite vs. Loc override could use more-accurate size information for some intrinsics, it did not do the same for CallSite vs. CallSite queries.
This change refactors the intrinsic-specific logic in BasicAA into a generic AA query function: getArgLocation, which is overridden by BasicAA to supply the intrinsic-specific knowledge, and used by AA's generic implementation. This allows the intrinsic-specific knowledge to be used by both CallSite vs. Loc and CallSite vs. CallSite queries, and simplifies the BasicAA implementation.
Currently, only one function, Mac's memset_pattern16, is handled by BasicAA (all the rest are intrinsics). As a side-effect of this refactoring, BasicAA's getModRefBehavior override now also returns OnlyAccessesArgumentPointees for this function (which is an improvement).
llvm-svn: 213219
show more ...
|
#
70f4db88 |
| 15-Jul-2014 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Teach GetUnderlyingObject / BasicAA about addrspacecast
llvm-svn: 213025
|
#
7a63c3b3 |
| 15-Jul-2014 |
Nick Lewycky <nicholas@mxc.ca> |
Revert r212572 "improve BasicAA CS-CS queries", it causes PR20303.
llvm-svn: 213024
|
#
8ae0f8d6 |
| 08-Jul-2014 |
Hal Finkel <hfinkel@anl.gov> |
Improve BasicAA CS-CS queries
BasicAA contains knowledge of certain intrinsics, such as memcpy and memset, and uses that information to form more-accurate answers to CallSite vs. Loc ModRef queries.
Improve BasicAA CS-CS queries
BasicAA contains knowledge of certain intrinsics, such as memcpy and memset, and uses that information to form more-accurate answers to CallSite vs. Loc ModRef queries. Unfortunately, it did not use this information when answering CallSite vs. CallSite queries.
Generically, when an intrinsic takes one or more pointers and the intrinsic is marked only to read/write from its arguments, the offset/size is unknown. As a result, the generic code that answers CallSite vs. CallSite (and CallSite vs. Loc) queries in AA uses UnknownSize when forming Locs from an intrinsic's arguments. While BasicAA's CallSite vs. Loc override could use more-accurate size information for some intrinsics, it did not do the same for CallSite vs. CallSite queries.
This change refactors the intrinsic-specific logic in BasicAA into a generic AA query function: getArgLocation, which is overridden by BasicAA to supply the intrinsic-specific knowledge, and used by AA's generic implementation. This allows the intrinsic-specific knowledge to be used by both CallSite vs. Loc and CallSite vs. CallSite queries, and simplifies the BasicAA implementation.
Currently, only one function, Mac's memset_pattern16, is handled by BasicAA (all the rest are intrinsics). As a side-effect of this refactoring, BasicAA's getModRefBehavior override now also returns OnlyAccessesArgumentPointees for this function (which is an improvement).
llvm-svn: 212572
show more ...
|
Revision tags: llvmorg-3.4.2, llvmorg-3.4.2-rc1, llvmorg-3.4.1, llvmorg-3.4.1-rc2 |
|
#
147644d4 |
| 18-Apr-2014 |
Benjamin Kramer <benny.kra@googlemail.com> |
Remove a couple of redundant copies of SmallVector::operator==.
No functionality change.
llvm-svn: 206635
|
#
9f008867 |
| 15-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
[C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr.
llvm-svn: 206243
|
Revision tags: llvmorg-3.4.1-rc1 |
|
#
1a444489 |
| 26-Mar-2014 |
Arnold Schwaighofer <aschwaighofer@apple.com> |
PR15967 Fix in basicaa for faulty returning no alias.
This commit consist of two parts. The first part fix the PR15967. The wrong conclusion was made when the MaxLookup limit was reached. The fix in
PR15967 Fix in basicaa for faulty returning no alias.
This commit consist of two parts. The first part fix the PR15967. The wrong conclusion was made when the MaxLookup limit was reached. The fix introduce a out parameter (MaxLookupReached) to DecomposeGEPExpression that the function aliasGEP can act upon. The second part is introducing the constant MaxLookupSearchDepth to make sure that DecomposeGEPExpression and GetUnderlyingObject use the same search depth. This is a small cleanup to clarify the original algorithm.
Patch by Karl-Johan Karlsson!
llvm-svn: 204859
show more ...
|
#
e9ba759c |
| 05-Mar-2014 |
Craig Topper <craig.topper@gmail.com> |
[C++11] Add 'override' keyword to virtual methods that override their base class.
llvm-svn: 202945
|
#
03eb0de9 |
| 04-Mar-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[Modules] Move GetElementPtrTypeIterator into the IR library. As its name might indicate, it is an iterator over the types in an instruction in the IR.... You see where this is going.
Another step o
[Modules] Move GetElementPtrTypeIterator into the IR library. As its name might indicate, it is an iterator over the types in an instruction in the IR.... You see where this is going.
Another step of modularizing the support library.
llvm-svn: 202815
show more ...
|
#
5f57f462 |
| 21-Feb-2014 |
Rafael Espindola <rafael.espindola@gmail.com> |
Rename a few more DataLayout variables from TD to DL.
llvm-svn: 201870
|
#
7c68bebb |
| 18-Feb-2014 |
Rafael Espindola <rafael.espindola@gmail.com> |
Rename some member variables from TD to DL.
TargetData was renamed DataLayout back in r165242.
llvm-svn: 201581
|
#
cb402911 |
| 24-Jan-2014 |
Alp Toker <alp@nuanti.com> |
Fix known typos
Sweep the codebase for common typos. Includes some changes to visible function names that were misspelt.
llvm-svn: 200018
|
#
e3ac0997 |
| 16-Jan-2014 |
Arnold Schwaighofer <aschwaighofer@apple.com> |
BasicAA: We need to check both access sizes when comparing a gep and an underlying object of unknown size.
Fixes PR18460.
llvm-svn: 199351
|
#
73523021 |
| 13-Jan-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Split DominatorTree into a concrete analysis result object which can be used by both the new pass manager and the old.
This removes it from any of the virtual mess of the pass interfaces and le
[PM] Split DominatorTree into a concrete analysis result object which can be used by both the new pass manager and the old.
This removes it from any of the virtual mess of the pass interfaces and lets it derive cleanly from the DominatorTreeBase<> template. In turn, tons of boilerplate interface can be nuked and it turns into a very straightforward extension of the base DominatorTree interface.
The old analysis pass is now a simple wrapper. The names and style of this split should match the split between CallGraph and CallGraphWrapperPass. All of the users of DominatorTree have been updated to match using many of the same tricks as with CallGraph. The goal is that the common type remains the resulting DominatorTree rather than the pass. This will make subsequent work toward the new pass manager significantly easier.
Also in numerous places things became cleaner because I switched from re-running the pass (!!! mid way through some other passes run!!!) to directly recomputing the domtree.
llvm-svn: 199104
show more ...
|
#
5ad5f15c |
| 13-Jan-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[cleanup] Move the Dominators.h and Verifier.h headers into the IR directory. These passes are already defined in the IR library, and it doesn't make any sense to have the headers in Analysis.
Long
[cleanup] Move the Dominators.h and Verifier.h headers into the IR directory. These passes are already defined in the IR library, and it doesn't make any sense to have the headers in Analysis.
Long term, I think there is going to be a much better way to divide these matters. The dominators code should be fully separated into the abstract graph algorithm and have that put in Support where it becomes obvious that evn Clang's CFGBlock's can use it. Then the verifier can manually construct dominance information from the Support-driven interface while the Analysis library can provide a pass which both caches, reconstructs, and supports a nice update API.
But those are very long term, and so I don't want to leave the really confusing structure until that day arrives.
llvm-svn: 199082
show more ...
|
#
8a8cd2ba |
| 07-Jan-2014 |
Chandler Carruth <chandlerc@gmail.com> |
Re-sort all of the includes with ./utils/sort_includes.py so that subsequent changes are easier to review. About to fix some layering issues, and wanted to separate out the necessary churn.
Also com
Re-sort all of the includes with ./utils/sort_includes.py so that subsequent changes are easier to review. About to fix some layering issues, and wanted to separate out the necessary churn.
Also comment and sink the include of "Windows.h" in three .inc files to match the usage in Memory.inc.
llvm-svn: 198685
show more ...
|
#
833a82ec |
| 03-Jan-2014 |
Arnold Schwaighofer <aschwaighofer@apple.com> |
BasicAA: Use reachabilty instead of dominance for checking value equality in phi cycles
This allows the value equality check to work even if we don't have a dominator tree. Also add some more commen
BasicAA: Use reachabilty instead of dominance for checking value equality in phi cycles
This allows the value equality check to work even if we don't have a dominator tree. Also add some more comments.
I was worried about compile time impacts and did not implement reachability but used the dominance check in the initial patch. The trade-off was that the dominator tree was required. The llvm utility function isPotentiallyReachable cuts off the recursive search after 32 visits. Testing did not show any compile time regressions showing my worries unjustfied.
No compile time or performance regressions at O3 -flto -mavx on test-suite + externals.
Addresses review comments from r198290.
llvm-svn: 198400
show more ...
|
#
0d10a9d5 |
| 02-Jan-2014 |
Arnold Schwaighofer <aschwaighofer@apple.com> |
BasicAA: Fix value equality and phi cycles
When there are cycles in the value graph we have to be careful interpreting "Value*" identity as "value" equivalence. We interpret the value of a phi node
BasicAA: Fix value equality and phi cycles
When there are cycles in the value graph we have to be careful interpreting "Value*" identity as "value" equivalence. We interpret the value of a phi node as the value of its operands. When we check for value equivalence now we make sure that the "Value*" dominates all cycles (phis).
%0 = phi [%noaliasval, %addr2] %l = load %ptr %addr1 = gep @a, 0, %l %addr2 = gep @a, 0, (%l + 1) store %ptr ...
Before this patch we would return NoAlias for (%0, %addr1) which is wrong because the value of the load is from different iterations of the loop.
Tested on x86_64 -mavx at O3 and O3 -flto with no performance or compile time regressions.
PR18068 radar://15653794
llvm-svn: 198290
show more ...
|
Revision tags: llvmorg-3.4.0, llvmorg-3.4.0-rc3, llvmorg-3.4.0-rc2, llvmorg-3.4.0-rc1 |
|
#
a8fe22ba |
| 16-Nov-2013 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Use correct size for address space in BasicAA.
The tests just hit this with a different sized address space since I haven't figured out how to use this to break it.
I thought I committed this a lon
Use correct size for address space in BasicAA.
The tests just hit this with a different sized address space since I haven't figured out how to use this to break it.
I thought I committed this a long time ago, and I'm not sure why missing this hasn't caused any problems.
llvm-svn: 194903
show more ...
|
#
2e1890e1 |
| 27-Oct-2013 |
Shuxin Yang <shuxin.llvm@gmail.com> |
Revert r193251 : Use address-taken to disambiguate global variable and indirect memops.
llvm-svn: 193489
|
#
e4fb3759 |
| 23-Oct-2013 |
Shuxin Yang <shuxin.llvm@gmail.com> |
Use address-taken to disambiguate global variable and indirect memops.
Major steps include: 1). introduces a not-addr-taken bit-field in GlobalVariable 2). GlobalOpt pass sets "not-address-taken"
Use address-taken to disambiguate global variable and indirect memops.
Major steps include: 1). introduces a not-addr-taken bit-field in GlobalVariable 2). GlobalOpt pass sets "not-address-taken" if it proves a global varirable dosen't have its address taken. 3). AA use this info for disambiguation.
llvm-svn: 193251
show more ...
|
#
fa25272d |
| 27-Sep-2013 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Use type helper functions
llvm-svn: 191574
|
#
07f383f8 |
| 24-Aug-2013 |
Jakub Staszak <kubastaszak@gmail.com> |
Remove trailing spaces.
llvm-svn: 189173
|