trait ControlDependencies extends AnyRef
Represents the control-dependence information.
An instruction/statement is control dependent on a predicate (here: if, switch or any
instruction that may throw an exception) if the value of the predicate
controls the execution of the instruction.
Note that the classical definition:
Let G be a control flow graph; Let X and Y be nodes in G; Y is control dependent on X iff there exists a directed path P from X to Y with any Z in P \ X is not post-dominated by Y.
Is not well suited for methods with potentially infinite loops, exceptions and multiple exit points. (See PostDominatorTree$.apply for further information.)
- Note
In the context of static analysis an instruction (e.g., invoke, idiv,...) that may throw an exception that results in a different control-flow, is also a
,predicateadditionally to all ifs and switches.If the underlying method/CFG contains infinite loops then it is expected that the dominance frontiers are already
correctedif the used post dominator tree was augmented in the first place!
- Alphabetic
- By Inheritance
- ControlDependencies
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
xIsControlDependentOn(x: Int)(f: (Int) ⇒ Unit): Unit
Calls the function
fwith those nodes on which the given nodexis control dependent on. -
abstract
def
xIsDirectlyControlDependentOn(x: Int): IntArraySet
- returns
The nodes/basic blocks on which the given node/basic block is directly control dependent on. That is, the set of nodes which directly control whether x is executed or not. Directly means that there is at least one path between a node Y in
Control(X)/*the returned set*/and X, whose selection is controlled by Y and which contains no nodes that may prevent the execution of X.
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )