mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 16:36:40 +00:00
Stub out a new updating interface to AliasAnalysis, allowing stateful analyses to be informed when
a pointer value has potentially become escaping. Implementations can choose to either fall back to conservative responses for that value, or may recompute their analysis to accomodate the change. llvm-svn: 122777
This commit is contained in:
parent
658a5c2101
commit
a52e5dbdfa
@ -464,7 +464,7 @@ analysis results updated to reflect the changes made by these transformations.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The <tt>AliasAnalysis</tt> interface exposes three methods which are used to
|
||||
The <tt>AliasAnalysis</tt> interface exposes four methods which are used to
|
||||
communicate program changes from the clients to the analysis implementations.
|
||||
Various alias analysis implementations should use these methods to ensure that
|
||||
their internal data structures are kept up-to-date as the program changes (for
|
||||
@ -505,6 +505,28 @@ value, then deleting the old value. This method cannot be overridden by alias
|
||||
analysis implementations.
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<div class="doc_subsubsection">The <tt>addEscapingUse</tt> method</div>
|
||||
|
||||
<div class="doc_text">
|
||||
<p>The <tt>addEscapingUse</tt> method is used when the uses of a pointer
|
||||
value have changed in ways that may invalidate precomputed analysis information.
|
||||
Implementations may either use this callback to provide conservative responses
|
||||
for points whose uses have change since analysis time, or may recompute some
|
||||
or all of their internal state to continue providing accurate responses.</p>
|
||||
|
||||
<p>In general, any new use of a pointer value is considered an escaping use,
|
||||
and must be reported through this callback, <em>except</em> for the
|
||||
uses below:</p>
|
||||
|
||||
<ul>
|
||||
<li>A <tt>bitcast</tt> or <tt>getelementptr</tt> of the pointer</li>
|
||||
<li>A <tt>store</tt> through the pointer (but not a <tt>store</tt>
|
||||
<em>of</em> the pointer)</li>
|
||||
<li>A <tt>load</tt> through the pointer</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- ======================================================================= -->
|
||||
<div class="doc_subsection">
|
||||
<a name="implefficiency">Efficiency Issues</a>
|
||||
|
@ -469,6 +469,17 @@ public:
|
||||
///
|
||||
virtual void copyValue(Value *From, Value *To);
|
||||
|
||||
/// addEscapingUse - This method should be used whenever an escaping use is
|
||||
/// added to a pointer value. Analysis implementations may either return
|
||||
/// conservative responses for that value in the future, or may recompute
|
||||
/// some or all internal state to continue providing precise responses.
|
||||
///
|
||||
/// Escaping uses are considered by anything _except_ the following:
|
||||
/// - GEPs or bitcasts of the pointer
|
||||
/// - Loads through the pointer
|
||||
/// - Stores through (but not of) the pointer
|
||||
virtual void addEscapingUse(Use &U);
|
||||
|
||||
/// replaceWithNewValue - This method is the obvious combination of the two
|
||||
/// above, and it provided as a helper to simplify client code.
|
||||
///
|
||||
|
@ -65,6 +65,12 @@ void AliasAnalysis::copyValue(Value *From, Value *To) {
|
||||
AA->copyValue(From, To);
|
||||
}
|
||||
|
||||
void AliasAnalysis::addEscapingUse(Use &U) {
|
||||
assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!");
|
||||
AA->addEscapingUse(U);
|
||||
}
|
||||
|
||||
|
||||
AliasAnalysis::ModRefResult
|
||||
AliasAnalysis::getModRefInfo(ImmutableCallSite CS,
|
||||
const Location &Loc) {
|
||||
|
Loading…
Reference in New Issue
Block a user