History log of /llvm-project/llvm/lib/Analysis/CaptureTracking.cpp (Results 76 – 100 of 115)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
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


12345