harpoon.Analysis.PA2
Class WPPointerAnalysis

java.lang.Object
  extended by harpoon.Analysis.PA2.PointerAnalysis
      extended by harpoon.Analysis.PA2.WPPointerAnalysis

public class WPPointerAnalysis
extends PointerAnalysis

WPPointerAnalysis is a whole-program pointer analysis. "Whole-program" = every time the analysis is queried to analyze a specific method m, it will analyze all the transitive callees of m (the analysis results for the callees are used by the intre-procedural analysis). Therefore, the analysis of the main method of the application implies the analysis of all the methods from the program, which leads to a precise result, but may take a very long time.

Version:
$Id: WPPointerAnalysis.java,v 1.13 2006/01/09 05:13:12 salcianu Exp $
Author:
Alexandru Salcianu <salcianu@alum.mit.edu>

Constructor Summary
WPPointerAnalysis(CachingCodeFactory hcf, CallGraph cg, Linker linker, ClassHierarchy classHierarchy, Collection<HMethod> roots, int fpMaxIter)
           
 
Method Summary
protected  void finalize()
           
 CallGraph getCallGraph()
           
 CachingCodeFactory getCodeFactory()
           
 FullAnalysisResult getFullResult(HMethod hm, AnalysisPolicy ap)
          Similar to getInterProcResult but returns all information the pointer analysis is able to infer about hm.
 InterProcAnalysisResult getInterProcResult(HMethod hm, AnalysisPolicy ap)
          The simplified analysis result for the end of the method hm.
 NodeRepository getNodeRep()
           
 boolean hasAnalyzedCALL(CALL cs, HMethod callee)
          Checks whether the call cs to callee has been analyzed or not.
 
Methods inherited from class harpoon.Analysis.PA2.PointerAnalysis
isAnalyzable, notifyAnalyzedCALL
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WPPointerAnalysis

public WPPointerAnalysis(CachingCodeFactory hcf,
                         CallGraph cg,
                         Linker linker,
                         ClassHierarchy classHierarchy,
                         Collection<HMethod> roots,
                         int fpMaxIter)
Method Detail

getCallGraph

public CallGraph getCallGraph()
Specified by:
getCallGraph in class PointerAnalysis
Returns:
Call graph used by this PointerAnalysis to interpret the virtual calls in the inter-procedural analysis.

getCodeFactory

public CachingCodeFactory getCodeFactory()
Specified by:
getCodeFactory in class PointerAnalysis
Returns:
Code factory used to generate the code of the analyzed methods.

getNodeRep

public NodeRepository getNodeRep()
Specified by:
getNodeRep in class PointerAnalysis
Returns:
NodeRepository object that maps between nodes and the instructions they were introduced for: e.g., will give the inside node for a specific NEW instruction.

getInterProcResult

public InterProcAnalysisResult getInterProcResult(HMethod hm,
                                                  AnalysisPolicy ap)
Description copied from class: PointerAnalysis
The simplified analysis result for the end of the method hm. This result is used in the inter-procedural analysis. In addition, it seems to be enough for certain optimizations (i.e., stack-allocation).

Specified by:
getInterProcResult in class PointerAnalysis
Parameters:
hm - Method to analyze.
ap - Analysis policy (e.g., flow sensitivity or not?) This is only a HINT: different analysis implementations may ignore certain elements of the analysis policy. If null, the analysis will return whatever is the best analysis result it already has computed (null if no such result).
See Also:
InterProcAnalysisResult

getFullResult

public FullAnalysisResult getFullResult(HMethod hm,
                                        AnalysisPolicy ap)
Description copied from class: PointerAnalysis
Similar to getInterProcResult but returns all information the pointer analysis is able to infer about hm.

Specified by:
getFullResult in class PointerAnalysis
See Also:
PointerAnalysis#InterProcAnalysisResult

hasAnalyzedCALL

public boolean hasAnalyzedCALL(CALL cs,
                               HMethod callee)
Description copied from class: PointerAnalysis
Checks whether the call cs to callee has been analyzed or not. Why is this important? For speed reasons, the pointer analysis may have decided to ignore certain calls. However, analysis clients must be aware of this; e.g., this information is important if we perform inlining in order to enhance stack-allocation.

Overrides:
hasAnalyzedCALL in class PointerAnalysis

finalize

protected void finalize()
Overrides:
finalize in class Object