| |
|
| java.lang.Object EDU.purdue.cs.bloat.tree.TreeVisitor EDU.purdue.cs.bloat.cfg.VerifyCFG
VerifyCFG | public class VerifyCFG extends TreeVisitor (Code) | | VerifyCFG visits the nodes in a control flow graph and verifies that certain
properties of the graph are true. For instance, value numbers of expressions
are not equal to -1, node connections are consistent, exception handlers are
set up correctly, etc. Mostly used for debugging purposes.
|
Constructor Summary | |
public | VerifyCFG() Constructor. | public | VerifyCFG(boolean checkValueNumbers) Constructor. |
Method Summary | |
public void | visitBlock(Block block) First make sure that the Block indeed is in the CFG. | public void | visitDefExpr(DefExpr expr) Keep track of all the uses of the expression defined by the
DefExpr. | public void | visitExpr(Expr expr) If desired, make sure that the value number of the Expr is not
-1. | public void | visitFlowGraph(FlowGraph cfg) Visit the blocks and expression trees in a control flow graph. | public void | visitGotoStmt(GotoStmt stmt) Make sure that the target of goto is valid. | public void | visitIfStmt(IfStmt stmt) Make sure that the targets of the if statement are valid. | public void | visitJsrStmt(JsrStmt stmt) Make sure that all of the targets of the jsr are valid. | public void | visitNode(Node node) Make sure that the Node resides in the block that we expect it
to and that it has the expected parent expression tree Node. | public void | visitRetStmt(RetStmt stmt) Make sure that all of targets of the ret are valid. | public void | visitStoreExpr(StoreExpr node) If desired, makes sure that the store expression's value number is not
-1. | public void | visitSwitchStmt(SwitchStmt stmt) Make sure that that all of the targets of the switch are valid. | public void | visitVarExpr(VarExpr expr) Make sure that the VarExpr either defines a local variable, is
defined by another expression, or is the child of a PhiStmt
(therefore making the VarExpr a phi-variable). |
checkValueNumbers | boolean checkValueNumbers(Code) | | |
VerifyCFG | public VerifyCFG()(Code) | | Constructor. Don't check value numbers.
|
VerifyCFG | public VerifyCFG(boolean checkValueNumbers)(Code) | | Constructor. Since value numbers are not strictly part of the control
flow graph, they may or may not be checked. For instance, if a CFG is
being verfied before value numbers are assigned, we would not want to
check them.
Parameters: checkValueNumbers - Are the value numbers of expressions checked? |
visitBlock | public void visitBlock(Block block)(Code) | | First make sure that the Block indeed is in the CFG. If the
block begins an exception handler, then make sure that all edges from
protected blocks lead to the handler block. Also make sure that all of
the handler block's predacessor lead to protected blocks. Finally, make
sure that the successor/predacessor relationship holds.
|
visitDefExpr | public void visitDefExpr(DefExpr expr)(Code) | | Keep track of all the uses of the expression defined by the
DefExpr. This information is used when verifying the
FlowGraph.
|
visitExpr | public void visitExpr(Expr expr)(Code) | | If desired, make sure that the value number of the Expr is not
-1.
|
visitFlowGraph | public void visitFlowGraph(FlowGraph cfg)(Code) | | Visit the blocks and expression trees in a control flow graph. Examine
the uses of a variable that is defined in the CFG. Make that all uses are
reachable (i.e. are in the CFG).
|
visitGotoStmt | public void visitGotoStmt(GotoStmt stmt)(Code) | | Make sure that the target of goto is valid.
|
visitIfStmt | public void visitIfStmt(IfStmt stmt)(Code) | | Make sure that the targets of the if statement are valid. Targets consist
of the true target, the false target, and the first blocks of any
exceptions that may be thrown by the if statement.
|
visitJsrStmt | public void visitJsrStmt(JsrStmt stmt)(Code) | | Make sure that all of the targets of the jsr are valid. The
only target is the entry block of the subroutine.
|
visitNode | public void visitNode(Node node)(Code) | | Make sure that the Node resides in the block that we expect it
to and that it has the expected parent expression tree Node.
Make sure that the children of this Node are also correct.
|
visitRetStmt | public void visitRetStmt(RetStmt stmt)(Code) | | Make sure that all of targets of the ret are valid. The
targets are the blocks to which the subroutine can return.
|
visitStoreExpr | public void visitStoreExpr(StoreExpr node)(Code) | | If desired, makes sure that the store expression's value number is not
-1. Makes sure that the store expression's block and parent Node
are what we expect them to be. If the type of the StoreExpr is
void, then make sure that its parent is an ExprStmt (i.e. make
sure it is not nested within another expression).
|
visitSwitchStmt | public void visitSwitchStmt(SwitchStmt stmt)(Code) | | Make sure that that all of the targets of the switch are valid.
|
visitVarExpr | public void visitVarExpr(VarExpr expr)(Code) | | Make sure that the VarExpr either defines a local variable, is
defined by another expression, or is the child of a PhiStmt
(therefore making the VarExpr a phi-variable).
|
|
|
|