Revision tags: llvmorg-3.4.2, llvmorg-3.4.2-rc1, llvmorg-3.4.1, llvmorg-3.4.1-rc2, llvmorg-3.4.1-rc1 |
|
#
cdf47884 |
| 09-Mar-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[C++11] Add range based accessors for the Use-Def chain of a Value.
This requires a number of steps. 1) Move value_use_iterator into the Value class as an implementation detail 2) Change it to ac
[C++11] Add range based accessors for the Use-Def chain of a Value.
This requires a number of steps. 1) Move value_use_iterator into the Value class as an implementation detail 2) Change it to actually be a *Use* iterator rather than a *User* iterator. 3) Add an adaptor which is a User iterator that always looks through the Use to the User. 4) Wrap these in Value::use_iterator and Value::user_iterator typedefs. 5) Add the range adaptors as Value::uses() and Value::users(). 6) Update *all* of the callers to correctly distinguish between whether they wanted a use_iterator (and to explicitly dig out the User when needed), or a user_iterator which makes the Use itself totally opaque.
Because #6 requires churning essentially everything that walked the Use-Def chains, I went ahead and added all of the range adaptors and switched them to range-based loops where appropriate. Also because the renaming requires at least churning every line of code, it didn't make any sense to split these up into multiple commits -- all of which would touch all of the same lies of code.
The result is still not quite optimal. The Value::use_iterator is a nice regular iterator, but Value::user_iterator is an iterator over User*s rather than over the User objects themselves. As a consequence, it fits a bit awkwardly into the range-based world and it has the weird extra-dereferencing 'operator->' that so many of our iterators have. I think this could be fixed by providing something which transforms a range of T&s into a range of T*s, but that *can* be separated into another patch, and it isn't yet 100% clear whether this is the right move.
However, this change gets us most of the benefit and cleans up a substantial amount of code around Use and User. =]
llvm-svn: 203364
show more ...
|
#
64e9aa5c |
| 05-Mar-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[C++11] Make this interface accept const Use pointers and use override to ensure we don't mess up any of the overrides. Necessary for cleaning up the Value use iterators and enabling range-based trav
[C++11] Make this interface accept const Use pointers and use override to ensure we don't mess up any of the overrides. Necessary for cleaning up the Value use iterators and enabling range-based traversing of use lists.
llvm-svn: 202958
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
|
#
219b89b9 |
| 04-Mar-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[Modules] Move CallSite into the IR library where it belogs. It is abstracting between a CallInst and an InvokeInst, both of which are IR concepts.
llvm-svn: 202816
|
#
e55a2c2e |
| 14-Jan-2014 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
Make nocapture analysis work with addrspacecast
llvm-svn: 199246
|
Revision tags: llvmorg-3.4.0, llvmorg-3.4.0-rc3, llvmorg-3.4.0-rc2, llvmorg-3.4.0-rc1 |
|
#
d2757ba1 |
| 03-Oct-2013 |
Benjamin Kramer <benny.kra@googlemail.com> |
CaptureTracking: Plug a loophole in the "too many uses" heuristic.
The heuristic was added to avoid spending too much compile time A specially crafted test case (PR17461, PR16474) with many uses on
CaptureTracking: Plug a loophole in the "too many uses" heuristic.
The heuristic was added to avoid spending too much compile time A specially crafted test case (PR17461, PR16474) with many uses on a select or bitcast instruction can still trigger the slow case. Add a check for that case.
This only affects compile time, don't have a good way to test it.
llvm-svn: 191896
show more ...
|
Revision tags: llvmorg-3.3.1-rc1 |
|
#
c2ec0725 |
| 06-Jul-2013 |
Nick Lewycky <nicholas@mxc.ca> |
Extend 'readonly' and 'readnone' to work on function arguments as well as functions. Make the function attributes pass add it to known library functions and when it can deduce it.
llvm-svn: 185735
|
Revision tags: llvmorg-3.3.0, llvmorg-3.3.0-rc3, llvmorg-3.3.0-rc2, llvmorg-3.3.0-rc1 |
|
#
c733bf26 |
| 10-Mar-2013 |
Jakub Staszak <kubastaszak@gmail.com> |
Remove unneeded #includes. Use forward declarations instead.
llvm-svn: 176783
|
Revision tags: llvmorg-3.2.0, llvmorg-3.2.0-rc3, llvmorg-3.2.0-rc2, llvmorg-3.2.0-rc1 |
|
#
7c3b5d94 |
| 08-Oct-2012 |
Nick Lewycky <nicholas@mxc.ca> |
Give CaptureTracker::shouldExplore a base implementation. Most users want to do the same thing. No functionality change.
llvm-svn: 165435
|
Revision tags: llvmorg-3.1.0 |
|
#
8244b1dc |
| 10-May-2012 |
Chad Rosier <mcrosier@apple.com> |
Fix intendation.
llvm-svn: 156589
|
Revision tags: llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
#
173bce3d |
| 17-Jan-2012 |
Jakub Staszak <kubastaszak@gmail.com> |
Move includes to the .cpp file.
llvm-svn: 148342
|
#
4c378a44 |
| 28-Dec-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Change CaptureTracking to pass a Use* instead of a Value* when a value is captured. This allows the tracker to look at the specific use, which may be especially interesting for function calls.
Use t
Change CaptureTracking to pass a Use* instead of a Value* when a value is captured. This allows the tracker to look at the specific use, which may be especially interesting for function calls.
Use this to fix 'nocapture' deduction in FunctionAttrs. The existing one does not iterate until a fixpoint and does not guarantee that it produces the same result regardless of iteration order. The new implementation builds up a graph of how arguments are passed from function to function, and uses a bottom-up walk on the argument-SCCs to assign nocapture. This gets us nocapture more often, and does so rather efficiently and independent of iteration order.
llvm-svn: 147327
show more ...
|
#
063ae589 |
| 21-Nov-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Fix crasher in GVN due to my recent capture tracking changes.
llvm-svn: 145047
|
#
aa2a00db |
| 21-Nov-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Add virtual destructor. Whoops!
llvm-svn: 145044
|
#
6ae03c33 |
| 20-Nov-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Less template, more virtual! Refactoring suggested by Chris in code review.
llvm-svn: 145014
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4 |
|
#
7013a19e |
| 14-Nov-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Refactor capture tracking (which already had a couple flags for whether returns and stores capture) to permit the caller to see each capture point and decide whether to continue looking.
Use this in
Refactor capture tracking (which already had a couple flags for whether returns and stores capture) to permit the caller to see each capture point and decide whether to continue looking.
Use this inside memdep to do an analysis that basicaa won't do. This lets us solve another devirtualization case, fixing PR8908!
llvm-svn: 144580
show more ...
|
Revision tags: llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2, llvmorg-3.0.0-rc1 |
|
#
7c14a558 |
| 11-Apr-2011 |
Jay Foad <jay.foad@gmail.com> |
Don't include Operator.h from InstrTypes.h.
llvm-svn: 129271
|
Revision tags: llvmorg-2.9.0, llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2, llvmorg-2.9.0-rc1 |
|
#
88ff1ece |
| 09-Nov-2010 |
Dan Gohman <gohman@apple.com> |
VAArg doesn't capture its operand.
llvm-svn: 118623
|
Revision tags: llvmorg-2.8.0, llvmorg-2.8.0-rc3, llvmorg-2.8.0-rc2, llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0 |
|
#
7cf60564 |
| 28-Jul-2010 |
Gabor Greif <ggreif@gmail.com> |
simplify
llvm-svn: 109578
|
Revision tags: llvmorg-2.7.0 |
|
#
c78d720f |
| 25-Mar-2010 |
Gabor Greif <ggreif@gmail.com> |
rename use_const_iterator to const_use_iterator for consistency's sake
llvm-svn: 99564
|
#
19d0b47b |
| 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.
llvm-svn: 963
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.
llvm-svn: 96344
show more ...
|
#
220b196c |
| 09-Dec-2009 |
Dan Gohman <gohman@apple.com> |
Reuse the Threshold value to size these containers because it's currently somewhat convenient for them to have the same value.
llvm-svn: 90980
|
#
56a5f19c |
| 09-Dec-2009 |
Dan Gohman <gohman@apple.com> |
Fix a typo in a comment, and adjust SmallSet and SmallVector sizes, that Chris noticed.
llvm-svn: 90910
|
#
2d27b191 |
| 08-Dec-2009 |
Dan Gohman <gohman@apple.com> |
Put a threshold on the number of users PointerMayBeCaptured examines; fall back to a conservative answer if there are more. This works around some several compile time problems resulting from BasicAl
Put a threshold on the number of users PointerMayBeCaptured examines; fall back to a conservative answer if there are more. This works around some several compile time problems resulting from BasicAliasAnalysis calling PointerMayBeCaptured.
The value has been chosen arbitrarily.
This fixes rdar://7438917 and may partially address PR5708.
llvm-svn: 90905
show more ...
|
#
ff203777 |
| 20-Nov-2009 |
Dan Gohman <gohman@apple.com> |
Use stripPointerCasts(). Thanks Duncan!
llvm-svn: 89472
|