coins.alias.alias2
Class AliasAnalHir2

java.lang.Object
  extended bycoins.alias.AliasAnalHir1
      extended bycoins.alias.alias2.AliasAnalHir2
All Implemented Interfaces:
AliasAnal

public class AliasAnalHir2
extends AliasAnalHir1

Alias analysis level 2 implementation.

Alias analysis level 2 is a flow-sensitive intraprocedural analysis.

This class drives the alias analysis and also implements AliasAnal interface.

Flow sensitive analysis is performed only for structured subprograms, which don't contain unstructed jumps (jumps that do not correpond to C's break/continue). If the subprogram is unstructured, the analysis is reverted to that of level 1 (flow-insensitive analysis).

Two modes (Optimistic and Pessimistic), or options, for the analysis are available, each of which uses different assumptions about aliasing.

Handling of source languages other than C is not supported in this version.


Field Summary
protected static int AREA_INCLUDES
           
protected static int AREA_OVERLAPS
           
(package private)  java.util.Map fElemToMask
           
(package private)  TagVector2 fExternOpt
          TagVector2 that corresponds to the area visible from the outside of the current subprogram.
(package private)  AliasFactory2 fFactory
          Factory object used to create other objects.
(package private)  TagVector2 fGlobals
          TagVector2 that corresponds to global variables.
(package private)  java.util.Map fHIRToLoc
          Map that maps HIR nodes to TagVectors.
(package private)  boolean fIsOptimistic
          Alias analysis option.
(package private)  TagVector2[] fLocalRootVects
           
(package private)  java.util.Map fmallocToLoc
           
(package private)  TagVector2[] fPointsTo
          The points-to graph represented as an array of TagVector2s.
protected  java.util.Set fPredefined
          Set of predefined functions.
(package private)  java.util.Map fSubscriptToMask
           
(package private)  int fTagBitCount
          Number of bit-allocated memory objects.
protected  AliasUtil fUtil
          AliasUtil object used to access utility methods.
(package private)  java.util.Map fVarToLoc
           
 HirRoot hirRoot
          The HirRoot object shared by every module in the program.
 IoRoot ioRoot
          The IoRoot object shared by every module in the program.
protected static int MAY_ALIAS
           
protected static int MUST_ALIAS
           
protected static int NOT_ALIAS
           
protected static java.lang.String PREDEFINED
           
 
Fields inherited from class coins.alias.AliasAnalHir1
fDbgLevel
 
Fields inherited from interface coins.alias.AliasAnal
CATEGORY_NAME
 
Constructor Summary
AliasAnalHir2(boolean pIsOptimistic, HirRoot pHirRoot)
          Creats a new instance of AliasAnalHir2 that performs alias analysis with the specified assumptions (pIsOptimistic) about aliasing.
AliasAnalHir2(HirRoot pHirRoot)
          Creates a new instance of AliasAnalHir2 that performs alias analysis based on some set of assumptions about aliasing.
 
Method Summary
protected  int areAliased(Exp pExp, Exp pExp0)
          Returns one of the codes (MUST_ALIAS, MAY_ALIAS, NOT_ALIAS).
 AliasGroup getAliasGroupFor(Exp pExp)
          Returns the set of lvalue nodes the specified argument may be aliased to.
 boolean isLvalue(Exp pExp)
          Returns true if the specified argument is lvalue.
(package private)  boolean jumpCheck(SubpDefinition pSubpDef)
           
 boolean mayAlias(Exp pExp, Exp pExp0)
          Returns true if the two arguments may refer to the overlapping area in memory.
 boolean mustAlias(Exp pExp, Exp pExp0)
          Returns true if the two arguments definitely refer to the overlapping area in memory.
(package private)  void prepare(SubpDefinition pSubpDef)
          Instantiates TagVector2s and assigns TagVector2 objects to Var, malloced area, and external area.
 void prepareForAliasAnalHir(SubpDefinition pSubpDef)
          Performs alias analysis for the given SubpDefinition argument so that may/mustAlias methods for nodes contained in the SubpDefinition are ready.
 void printAliasPairs(SubpDefinition pSubpDef)
          Prints out alias pairs in IoRoot.printOut object.
 
Methods inherited from class coins.alias.AliasAnalHir1
dbg, printAliasPairsDetail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

AREA_INCLUDES

protected static final int AREA_INCLUDES
See Also:
Constant Field Values

AREA_OVERLAPS

protected static final int AREA_OVERLAPS
See Also:
Constant Field Values

MUST_ALIAS

protected static final int MUST_ALIAS
See Also:
Constant Field Values

NOT_ALIAS

protected static final int NOT_ALIAS
See Also:
Constant Field Values

MAY_ALIAS

protected static final int MAY_ALIAS
See Also:
Constant Field Values

PREDEFINED

protected static final java.lang.String PREDEFINED
See Also:
Constant Field Values

fPredefined

protected java.util.Set fPredefined
Set of predefined functions.


fHIRToLoc

java.util.Map fHIRToLoc
Map that maps HIR nodes to TagVectors.


fLocalRootVects

TagVector2[] fLocalRootVects

fTagBitCount

int fTagBitCount
Number of bit-allocated memory objects. This determines the length of the TagVector2.


fPointsTo

TagVector2[] fPointsTo
The points-to graph represented as an array of TagVector2s.


fGlobals

TagVector2 fGlobals
TagVector2 that corresponds to global variables.


fExternOpt

TagVector2 fExternOpt
TagVector2 that corresponds to the area visible from the outside of the current subprogram.


hirRoot

public final HirRoot hirRoot
The HirRoot object shared by every module in the program.


ioRoot

public final IoRoot ioRoot
The IoRoot object shared by every module in the program.


fIsOptimistic

final boolean fIsOptimistic
Alias analysis option. This determines the set of assumptions on which the alias analysis is based.

See Also:
AliasAnalHir2(boolean, HirRoot)

fFactory

final AliasFactory2 fFactory
Factory object used to create other objects.


fUtil

protected final AliasUtil fUtil
AliasUtil object used to access utility methods.


fVarToLoc

java.util.Map fVarToLoc

fSubscriptToMask

java.util.Map fSubscriptToMask

fElemToMask

java.util.Map fElemToMask

fmallocToLoc

java.util.Map fmallocToLoc
Constructor Detail

AliasAnalHir2

public AliasAnalHir2(HirRoot pHirRoot)
Creates a new instance of AliasAnalHir2 that performs alias analysis based on some set of assumptions about aliasing. Two sets of assumptions (Pessimistic and Optimistic) are available, and which one to use is determined from the command line, and defaults to Pessimistic.

Parameters:
pHirRoot - the HirRoot object shared by every module in the program.
See Also:
AliasAnalHir2(boolean, HirRoot)

AliasAnalHir2

public AliasAnalHir2(boolean pIsOptimistic,
                     HirRoot pHirRoot)
Creats a new instance of AliasAnalHir2 that performs alias analysis with the specified assumptions (pIsOptimistic) about aliasing. The difference between optimistic and pessimistic assumptions are:
  1. Whether inconsistent object access (access by an object whose type differs from that of the stored object) may happen
  2. .
  3. Whether parameters may initially pointing to objects that are elements of the same array object.

Method Detail

prepareForAliasAnalHir

public void prepareForAliasAnalHir(SubpDefinition pSubpDef)

Performs alias analysis for the given SubpDefinition argument so that may/mustAlias methods for nodes contained in the SubpDefinition are ready.

This method may be called only once in the lifetime of this analysis object; for analyses of different SubpDefinitions, the AliasAnalHir2 object has to be newly created.

Specified by:
prepareForAliasAnalHir in interface AliasAnal
Overrides:
prepareForAliasAnalHir in class AliasAnalHir1
Parameters:
pSubpDef - the SubpDefinition instance nodes contained in which are to be analyzed for aliasing.

jumpCheck

boolean jumpCheck(SubpDefinition pSubpDef)

prepare

void prepare(SubpDefinition pSubpDef)
Instantiates TagVector2s and assigns TagVector2 objects to Var, malloced area, and external area.

Parameters:
pSubpDef - SubpDefinition instance to analyze.

areAliased

protected int areAliased(Exp pExp,
                         Exp pExp0)
Returns one of the codes (MUST_ALIAS, MAY_ALIAS, NOT_ALIAS).

Overrides:
areAliased in class AliasAnalHir1

getAliasGroupFor

public AliasGroup getAliasGroupFor(Exp pExp)
Returns the set of lvalue nodes the specified argument may be aliased to. Each AliasGroup object for different argument (pExp) is distinct from one another, so it can be safely modified without affecting others.

Specified by:
getAliasGroupFor in interface AliasAnal
Overrides:
getAliasGroupFor in class AliasAnalHir1
Parameters:
pExp - the lvalue node to check for aliasing.
Returns:
the set of lvalue nodes the specified argument may be aliased to.

printAliasPairs

public void printAliasPairs(SubpDefinition pSubpDef)
Prints out alias pairs in IoRoot.printOut object. For debugging.

Specified by:
printAliasPairs in interface AliasAnal
Overrides:
printAliasPairs in class AliasAnalHir1
Parameters:
pSubpDef - the SubpDefinition object aliasing relation between nodes contained in which are to be printed.

mayAlias

public boolean mayAlias(Exp pExp,
                        Exp pExp0)

Returns true if the two arguments may refer to the overlapping area in memory. A CONTENTS node with uninitialized pointer value operand (undefined behavior in C) does not represent an object that inhabits the memory space, so it is not aliased even to itself.

This method has to be called after the prepareForAliasAnalHir method has been called.

Specified by:
mayAlias in interface AliasAnal
Overrides:
mayAlias in class AliasAnalHir1
Throws:
java.lang.IllegalArgumentException - if either of the arguments is not lvalue.

mustAlias

public boolean mustAlias(Exp pExp,
                         Exp pExp0)

Returns true if the two arguments definitely refer to the overlapping area in memory.

This method has to be called after the prepareForAliasAnalHir method has been called.

Specified by:
mustAlias in interface AliasAnal
Overrides:
mustAlias in class AliasAnalHir1
Throws:
java.lang.IllegalArgumentException - if either of the arguments is not lvalue.

isLvalue

public boolean isLvalue(Exp pExp)

Returns true if the specified argument is lvalue. As is the case for the query methods (mayAlias etc.) that is specified in the AliasAnal interface, this method also has to be called after the prepareForAliasAnalHir method for the corresponding SubpDefinition object has been called.

This method has to be called after the prepareForAliasAnalHir method has been called.

Specified by:
isLvalue in interface AliasAnal
Overrides:
isLvalue in class AliasAnalHir1
Returns:
true if the specified argument is lvalue.