coins.alias.alias2
クラス AliasAnalHir2

java.lang.Object
  |
  +--coins.alias.AliasAnalHir1
        |
        +--coins.alias.alias2.AliasAnalHir2
すべての実装インタフェース:
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.


フィールドの概要
protected static int AREA_INCLUDES
           
protected static int AREA_OVERLAPS
           
(パッケージプライベート)  java.util.Map fElemToMask
           
(パッケージプライベート)  TagVector2 fExternOpt
          TagVector2 that corresponds to the area visible from the outside of the current subprogram.
(パッケージプライベート)  AliasFactory2 fFactory
          Factory object used to create other objects.
(パッケージプライベート)  TagVector2 fGlobals
          TagVector2 that corresponds to global variables.
(パッケージプライベート)  java.util.Map fHIRToLoc
          Map that maps HIR nodes to TagVectors.
(パッケージプライベート)  boolean fIsOptimistic
          Alias analysis option.
(パッケージプライベート)  TagVector2[] fLocalRootVects
           
(パッケージプライベート)  java.util.Map fmallocToLoc
           
(パッケージプライベート)  TagVector2[] fPointsTo
          The points-to graph represented as an array of TagVector2s.
protected  java.util.Set fPredefined
          Set of predefined functions.
(パッケージプライベート)  java.util.Map fSubscriptToMask
           
(パッケージプライベート)  int fTagBitCount
          Number of bit-allocated memory objects.
protected  AliasUtil fUtil
          AliasUtil object used to access utility methods.
(パッケージプライベート)  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
           
 
クラス coins.alias.AliasAnalHir1 から継承したフィールド
fDbgLevel
 
インタフェース coins.alias.AliasAnal から継承したフィールド
CATEGORY_NAME
 
コンストラクタの概要
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.
 
メソッドの概要
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.
(パッケージプライベート)  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.
(パッケージプライベート)  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.
 
クラス coins.alias.AliasAnalHir1 から継承したメソッド
dbg, printAliasPairsDetail
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

AREA_INCLUDES

protected static final int AREA_INCLUDES
関連項目:
定数フィールド値

AREA_OVERLAPS

protected static final int AREA_OVERLAPS
関連項目:
定数フィールド値

MUST_ALIAS

protected static final int MUST_ALIAS
関連項目:
定数フィールド値

NOT_ALIAS

protected static final int NOT_ALIAS
関連項目:
定数フィールド値

MAY_ALIAS

protected static final int MAY_ALIAS
関連項目:
定数フィールド値

PREDEFINED

protected static final java.lang.String PREDEFINED
関連項目:
定数フィールド値

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.

関連項目:
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
コンストラクタの詳細

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.

パラメータ:
pHirRoot - the HirRoot object shared by every module in the program.
関連項目:
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.

メソッドの詳細

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.

定義:
インタフェース AliasAnal 内の prepareForAliasAnalHir
オーバーライド:
クラス AliasAnalHir1 内の prepareForAliasAnalHir
パラメータ:
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.

パラメータ:
pSubpDef - SubpDefinition instance to analyze.

areAliased

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

オーバーライド:
クラス AliasAnalHir1 内の areAliased

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.

定義:
インタフェース AliasAnal 内の getAliasGroupFor
オーバーライド:
クラス AliasAnalHir1 内の getAliasGroupFor
パラメータ:
pExp - the lvalue node to check for aliasing.
戻り値:
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.

定義:
インタフェース AliasAnal 内の printAliasPairs
オーバーライド:
クラス AliasAnalHir1 内の printAliasPairs
パラメータ:
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.

定義:
インタフェース AliasAnal 内の mayAlias
オーバーライド:
クラス AliasAnalHir1 内の mayAlias
例外:
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.

定義:
インタフェース AliasAnal 内の mustAlias
オーバーライド:
クラス AliasAnalHir1 内の mustAlias
例外:
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.

定義:
インタフェース AliasAnal 内の isLvalue
オーバーライド:
クラス AliasAnalHir1 内の isLvalue
戻り値:
true if the specified argument is lvalue.