public class DeadCodeEliminator extends DataFlow<DeadCodeEliminator.DataFlowItem>
Modifier and Type | Class and Description |
---|---|
protected static class |
DeadCodeEliminator.DataFlowItem |
protected static class |
DeadCodeEliminator.DefUseFinder |
DataFlow.BoolItem<FlowItem extends DataFlow.Item>, DataFlow.ConditionNavigator<FlowItem extends DataFlow.Item>, DataFlow.FlowGraphSource<FlowItem extends DataFlow.Item>, DataFlow.Frame<FlowItem extends DataFlow.Item>, DataFlow.Item
dataflowOnEntry, detectBackEdges, flowCounter, flowgraphStack, forward, postordering
error, job, nf, ts
bypass, bypassParent
Constructor and Description |
---|
DeadCodeEliminator(Job job,
TypeSystem ts,
NodeFactory nf) |
Modifier and Type | Method and Description |
---|---|
void |
check(FlowGraph<DeadCodeEliminator.DataFlowItem> graph,
Term n,
boolean entry,
DeadCodeEliminator.DataFlowItem inItem,
java.util.Map<FlowGraph.EdgeKey,DeadCodeEliminator.DataFlowItem> outItems)
Check that the term n satisfies whatever properties this
dataflow is checking for.
|
DeadCodeEliminator.DataFlowItem |
confluence(java.util.List<DeadCodeEliminator.DataFlowItem> inItems) |
DeadCodeEliminator.DataFlowItem |
confluence(java.util.List<DeadCodeEliminator.DataFlowItem> inItems,
FlowGraph.Peer<DeadCodeEliminator.DataFlowItem> peer,
FlowGraph<DeadCodeEliminator.DataFlowItem> graph)
The confluence operator for many flows.
|
protected NodeVisitor |
createDefUseFinder(java.util.Set<LocalInstance> def,
java.util.Set<LocalInstance> use) |
DeadCodeEliminator.DataFlowItem |
createInitialItem(FlowGraph<DeadCodeEliminator.DataFlowItem> graph,
Term node,
boolean entry)
Create an initial Item for the term node.
|
java.util.Map<FlowGraph.EdgeKey,DeadCodeEliminator.DataFlowItem> |
flow(DeadCodeEliminator.DataFlowItem in,
FlowGraph<DeadCodeEliminator.DataFlowItem> graph,
FlowGraph.Peer<DeadCodeEliminator.DataFlowItem> peer)
Produce new
Item s as appropriate for the
Peer and the input Item s. |
protected Pair<java.util.Set<LocalInstance>,java.util.Set<LocalInstance>> |
getDefUse(Node n)
Returns pair of sets of local instances.
|
protected Stmt |
getEffects(Expr expr)
Returns a statement that is side-effect-equivalent to the given
expression.
|
Node |
leaveCall(Node old,
Node n,
NodeVisitor v)
Overridden superclass method, to pop from the stack of
FlowGraph s if necessary. |
void |
post(FlowGraph<DeadCodeEliminator.DataFlowItem> graph,
Term root)
Check all of the Peers in the graph, after the dataflow analysis has
been performed.
|
check, confluence, constructItemsFromCondition, createCFGBuilder, createFrame, createInitialItem, currentFlowGraph, dataflow, dataflow, dataflow, dumpFlowGraph, enterCall, filterItems, filterItemsExceptionSubclass, filterItemsNonError, filterItemsNonException, findSCCs, flow, flow, flow, flow, flowBooleanConditions, flowToBooleanFlow, hasTrueFalseBranches, initGraph, initGraph, itemsToMap, itemToMap, lang, leave, safeConfluence, safeConfluence, safeConfluence
begin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystem
bypass, bypass, bypassChildren, override, visitChildren
copy, enter, finish, finish, leave, override, toString, visitEdge, visitEdgeNoOverride
public DeadCodeEliminator(Job job, TypeSystem ts, NodeFactory nf)
public DeadCodeEliminator.DataFlowItem createInitialItem(FlowGraph<DeadCodeEliminator.DataFlowItem> graph, Term node, boolean entry)
DataFlow
createInitialItem
in class DataFlow<DeadCodeEliminator.DataFlowItem>
public DeadCodeEliminator.DataFlowItem confluence(java.util.List<DeadCodeEliminator.DataFlowItem> inItems, FlowGraph.Peer<DeadCodeEliminator.DataFlowItem> peer, FlowGraph<DeadCodeEliminator.DataFlowItem> graph)
DataFlow
confluence
in class DataFlow<DeadCodeEliminator.DataFlowItem>
inItems
- List of Item
s that flow into node
.
this method will only be called if the list has at least 2
elements.peer
- Peer
for which the items
are
flowing into.public DeadCodeEliminator.DataFlowItem confluence(java.util.List<DeadCodeEliminator.DataFlowItem> inItems)
public java.util.Map<FlowGraph.EdgeKey,DeadCodeEliminator.DataFlowItem> flow(DeadCodeEliminator.DataFlowItem in, FlowGraph<DeadCodeEliminator.DataFlowItem> graph, FlowGraph.Peer<DeadCodeEliminator.DataFlowItem> peer)
DataFlow
Item
s as appropriate for the
Peer
and the input Item
s.flow
in class DataFlow<DeadCodeEliminator.DataFlowItem>
graph
- the FlowGraph which the dataflow is operating onpeer
- the Peer which this method must calculate the flow for.public void post(FlowGraph<DeadCodeEliminator.DataFlowItem> graph, Term root) throws SemanticException
DataFlow
post
in class DataFlow<DeadCodeEliminator.DataFlowItem>
SemanticException
public void check(FlowGraph<DeadCodeEliminator.DataFlowItem> graph, Term n, boolean entry, DeadCodeEliminator.DataFlowItem inItem, java.util.Map<FlowGraph.EdgeKey,DeadCodeEliminator.DataFlowItem> outItems) throws SemanticException
DataFlow
check
in class DataFlow<DeadCodeEliminator.DataFlowItem>
SemanticException
public Node leaveCall(Node old, Node n, NodeVisitor v) throws SemanticException
DataFlow
FlowGraph
s if necessary.leaveCall
in class DataFlow<DeadCodeEliminator.DataFlowItem>
SemanticException
protected Pair<java.util.Set<LocalInstance>,java.util.Set<LocalInstance>> getDefUse(Node n)
protected NodeVisitor createDefUseFinder(java.util.Set<LocalInstance> def, java.util.Set<LocalInstance> use)