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.)
- Source
- ControlDependencies.scala
- 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
,predicate
additionally to all ifs and switches.If the underlying method/CFG contains infinite loops then it is expected that the dominance frontiers are already
corrected
if the used post dominator tree was augmented in the first place!
- Alphabetic
- By Inheritance
- ControlDependencies
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def xIsControlDependentOn(x: Int)(f: (Int) => Unit): Unit
Calls the function
f
with those nodes on which the given nodex
is 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[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- 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() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated