| Package | Description |
|---|---|
| org.jruby.ir | |
| org.jruby.ir.dataflow | |
| org.jruby.ir.dataflow.analyses | |
| org.jruby.ir.passes | |
| org.jruby.ir.representations | |
| org.jruby.ir.transformations.inlining |
| Modifier and Type | Field and Description |
|---|---|
private java.util.List<BasicBlock> |
IRScope.linearizedBBList |
| Modifier and Type | Method and Description |
|---|---|
java.util.List<BasicBlock> |
IRScope.buildLinearization() |
java.util.List<BasicBlock> |
IRScope.linearization() |
| Modifier and Type | Method and Description |
|---|---|
void |
IRScope.inlineMethod(IRScope method,
RubyModule implClass,
int classToken,
BasicBlock basicBlock,
CallBase call) |
| Modifier and Type | Field and Description |
|---|---|
protected BasicBlock |
FlowGraphNode.basicBlock |
private BasicBlock |
FlowGraphNode.rescuer |
| Modifier and Type | Method and Description |
|---|---|
BasicBlock |
FlowGraphNode.getBB() |
| Modifier and Type | Method and Description |
|---|---|
java.lang.Iterable<BasicBlock> |
DataFlowProblem.getIncomingSourcesOf(BasicBlock bb) |
java.lang.Iterable<BasicBlock> |
DataFlowProblem.getOutgoingDestinationsOf(BasicBlock bb) |
| Modifier and Type | Method and Description |
|---|---|
abstract FlowGraphNode |
DataFlowProblem.buildFlowGraphNode(BasicBlock bb) |
abstract void |
FlowGraphNode.compute_MEET(Edge e,
BasicBlock source,
FlowGraphNode pred)
"MEET" current solution of "IN/OUT" with "OUT/IN(pred)", where "pred"
is a predecessor of the current node! The choice of "IN/OUT" is
determined by the direction of data flow.
|
protected FlowGraphNode |
DataFlowProblem.getFlowGraphNode(BasicBlock b) |
java.lang.Iterable<BasicBlock> |
DataFlowProblem.getIncomingSourcesOf(BasicBlock bb) |
java.lang.Iterable<BasicBlock> |
DataFlowProblem.getOutgoingDestinationsOf(BasicBlock bb) |
private void |
FlowGraphNode.processDestBB(java.util.List<FlowGraphNode> workList,
java.util.BitSet bbSet,
BasicBlock d) |
| Constructor and Description |
|---|
FlowGraphNode(DataFlowProblem p,
BasicBlock n) |
| Modifier and Type | Method and Description |
|---|---|
FlowGraphNode |
LiveVariablesProblem.buildFlowGraphNode(BasicBlock bb) |
FlowGraphNode |
LoadLocalVarPlacementProblem.buildFlowGraphNode(BasicBlock bb) |
FlowGraphNode |
StoreLocalVarPlacementProblem.buildFlowGraphNode(BasicBlock bb) |
void |
LiveVariableNode.compute_MEET(Edge e,
BasicBlock source,
FlowGraphNode pred) |
void |
LoadLocalVarPlacementNode.compute_MEET(Edge e,
BasicBlock source,
FlowGraphNode pred) |
void |
StoreLocalVarPlacementNode.compute_MEET(Edge e,
BasicBlock source,
FlowGraphNode pred) |
| Constructor and Description |
|---|
LiveVariableNode(DataFlowProblem prob,
BasicBlock n) |
LoadLocalVarPlacementNode(DataFlowProblem prob,
BasicBlock n) |
StoreLocalVarPlacementNode(DataFlowProblem prob,
BasicBlock n) |
| Modifier and Type | Method and Description |
|---|---|
void |
DominatorTreeBuilder.buildDominatorTree(CFG cfg,
java.util.LinkedList<BasicBlock> postOrderList,
int maxNodeId) |
| Modifier and Type | Field and Description |
|---|---|
private BasicBlock |
ExceptionRegion.endBB |
private BasicBlock |
CFG.entryBB
Entry BB
|
private BasicBlock |
CFG.exitBB
Exit BB
|
private BasicBlock |
ExceptionRegion.firstRescueBB |
private BasicBlock |
CFG.globalEnsureBB
BB that traps all exception-edges out of the cfg where we could add any cleanup/ensure code (ex: pop frames, etc.)
|
private BasicBlock |
ExceptionRegion.startBB |
| Modifier and Type | Field and Description |
|---|---|
private java.util.Map<Label,BasicBlock> |
CFG.bbMap |
private java.util.Map<BasicBlock,BasicBlock> |
CFG.ensurerMap |
private java.util.Map<BasicBlock,BasicBlock> |
CFG.ensurerMap |
private java.util.List<BasicBlock> |
ExceptionRegion.exclusiveBBs |
private DirectedGraph<BasicBlock> |
CFG.graph
The graph itself
|
(package private) java.util.LinkedList<BasicBlock> |
CFG.postOrderList |
private java.util.Map<BasicBlock,BasicBlock> |
CFG.rescuerMap |
private java.util.Map<BasicBlock,BasicBlock> |
CFG.rescuerMap |
| Modifier and Type | Method and Description |
|---|---|
private BasicBlock |
CFG.buildExitBasicBlock(java.util.Stack<ExceptionRegion> nestedExceptionRegions,
BasicBlock firstBB,
java.util.List<BasicBlock> returnBBs,
java.util.List<BasicBlock> exceptionBBs,
boolean nextIsFallThrough,
BasicBlock currBB,
BasicBlock entryBB)
Create special empty exit BasicBlock that all BasicBlocks will eventually
flow into.
|
BasicBlock |
BasicBlock.cloneForInlinedClosure(InlinerInfo ii) |
BasicBlock |
BasicBlock.cloneForInlinedMethod(InlinerInfo ii) |
private BasicBlock |
CFG.createBB(Label label,
java.util.Stack<ExceptionRegion> nestedExceptionRegions) |
private BasicBlock |
CFG.createBB(java.util.Stack<ExceptionRegion> nestedExceptionRegions) |
BasicBlock |
CFG.getBBForLabel(Label label) |
BasicBlock |
ExceptionRegion.getEndBB() |
BasicBlock |
CFG.getEnsurerBBFor(BasicBlock block) |
BasicBlock |
CFG.getEntryBB() |
BasicBlock |
CFG.getExitBB() |
BasicBlock |
CFG.getGlobalEnsureBB() |
BasicBlock |
CFG.getIncomingSource(BasicBlock block) |
BasicBlock |
CFG.getIncomingSourceOfType(BasicBlock block,
java.lang.Object type) |
BasicBlock |
CFG.getOutgoingDestination(BasicBlock block) |
BasicBlock |
CFG.getOutgoingDestinationOfType(BasicBlock block,
java.lang.Object type) |
BasicBlock |
CFG.getRescuerBBFor(BasicBlock block) |
BasicBlock |
ExceptionRegion.getStartBB() |
BasicBlock |
BasicBlock.splitAtInstruction(Instr splitPoint,
Label newLabel,
boolean includeSplitPointInstr) |
| Modifier and Type | Method and Description |
|---|---|
DirectedGraph<BasicBlock> |
CFG.build(java.util.List<Instr> instrs)
Build the Control Flow Graph
|
private java.util.LinkedList<BasicBlock> |
CFG.buildPostOrderList() |
java.util.Collection<BasicBlock> |
CFG.getBasicBlocks() |
java.util.List<BasicBlock> |
ExceptionRegion.getExclusiveBBs() |
Edge<BasicBlock> |
CFG.getIncomingEdgeOfType(BasicBlock block,
java.lang.Object type) |
java.lang.Iterable<Edge<BasicBlock>> |
CFG.getIncomingEdges(BasicBlock block) |
java.lang.Iterable<BasicBlock> |
CFG.getIncomingSources(BasicBlock block) |
java.lang.Iterable<BasicBlock> |
CFG.getOutgoingDestinations(BasicBlock block) |
java.lang.Iterable<BasicBlock> |
CFG.getOutgoingDestinationsNotOfType(BasicBlock block,
java.lang.Object type) |
java.lang.Iterable<BasicBlock> |
CFG.getOutgoingDestinationsOfType(BasicBlock block,
java.lang.Object type) |
Edge<BasicBlock> |
CFG.getOutgoingEdgeOfType(BasicBlock block,
java.lang.Object type) |
java.util.Set<Edge<BasicBlock>> |
CFG.getOutgoingEdges(BasicBlock block) |
java.lang.Iterable<Edge<BasicBlock>> |
CFG.getOutgoingEdgesNotOfType(BasicBlock block,
java.lang.Object type) |
java.util.ListIterator<BasicBlock> |
CFG.getPostOrderTraverser() |
java.util.ListIterator<BasicBlock> |
CFG.getReversePostOrderTraverser() |
java.util.Collection<BasicBlock> |
CFG.getSortedBasicBlocks() |
static java.util.List<BasicBlock> |
CFGLinearizer.linearize(CFG cfg) |
java.util.LinkedList<BasicBlock> |
CFG.postOrderList() |
| Modifier and Type | Method and Description |
|---|---|
void |
CFG.addBasicBlock(BasicBlock bb) |
void |
ExceptionRegion.addBB(BasicBlock bb) |
void |
CFG.addEdge(BasicBlock source,
BasicBlock destination,
java.lang.Object type) |
private void |
CFG.addEdge(BasicBlock src,
Label targetLabel,
java.util.Map<Label,java.util.List<BasicBlock>> forwardRefs) |
void |
CFG.addGlobalEnsureBB(BasicBlock geb) |
private static void |
CFGLinearizer.addJumpIfNextNotDestination(CFG cfg,
BasicBlock next,
Instr lastInstr,
BasicBlock current) |
boolean |
CFG.bbIsProtected(BasicBlock b) |
private BasicBlock |
CFG.buildExitBasicBlock(java.util.Stack<ExceptionRegion> nestedExceptionRegions,
BasicBlock firstBB,
java.util.List<BasicBlock> returnBBs,
java.util.List<BasicBlock> exceptionBBs,
boolean nextIsFallThrough,
BasicBlock currBB,
BasicBlock entryBB)
Create special empty exit BasicBlock that all BasicBlocks will eventually
flow into.
|
BasicBlock |
CFG.getEnsurerBBFor(BasicBlock block) |
Edge<BasicBlock> |
CFG.getIncomingEdgeOfType(BasicBlock block,
java.lang.Object type) |
java.lang.Iterable<Edge<BasicBlock>> |
CFG.getIncomingEdges(BasicBlock block) |
BasicBlock |
CFG.getIncomingSource(BasicBlock block) |
BasicBlock |
CFG.getIncomingSourceOfType(BasicBlock block,
java.lang.Object type) |
java.lang.Iterable<BasicBlock> |
CFG.getIncomingSources(BasicBlock block) |
BasicBlock |
CFG.getOutgoingDestination(BasicBlock block) |
BasicBlock |
CFG.getOutgoingDestinationOfType(BasicBlock block,
java.lang.Object type) |
java.lang.Iterable<BasicBlock> |
CFG.getOutgoingDestinations(BasicBlock block) |
java.lang.Iterable<BasicBlock> |
CFG.getOutgoingDestinationsNotOfType(BasicBlock block,
java.lang.Object type) |
java.lang.Iterable<BasicBlock> |
CFG.getOutgoingDestinationsOfType(BasicBlock block,
java.lang.Object type) |
Edge<BasicBlock> |
CFG.getOutgoingEdgeOfType(BasicBlock block,
java.lang.Object type) |
java.util.Set<Edge<BasicBlock>> |
CFG.getOutgoingEdges(BasicBlock block) |
java.lang.Iterable<Edge<BasicBlock>> |
CFG.getOutgoingEdgesNotOfType(BasicBlock block,
java.lang.Object type) |
BasicBlock |
CFG.getRescuerBBFor(BasicBlock block) |
int |
CFG.inDegree(BasicBlock b) |
private static void |
CFGLinearizer.linearizeInner(CFG cfg,
java.util.List<BasicBlock> list,
java.util.BitSet processed,
BasicBlock current) |
private boolean |
CFG.mergeBBs(BasicBlock a,
BasicBlock b) |
void |
ExceptionRegion.mergeBBs(BasicBlock a,
BasicBlock b) |
int |
CFG.outDegree(BasicBlock b) |
void |
CFG.removeAllOutgoingEdgesForBB(BasicBlock b) |
void |
CFG.removeBB(BasicBlock b) |
void |
CFG.removeEdge(BasicBlock a,
BasicBlock b) |
void |
ExceptionRegion.setEndBB(BasicBlock bb) |
void |
CFG.setEnsurerBB(BasicBlock block,
BasicBlock ensureBlock) |
void |
ExceptionRegion.setFirstRescueBB(BasicBlock frbb) |
void |
CFG.setRescuerBB(BasicBlock block,
BasicBlock rescuerBlock) |
void |
BasicBlock.swallowBB(BasicBlock foodBB) |
private static void |
CFGLinearizer.tryAndRemoveUnneededJump(BasicBlock next,
CFG cfg,
Instr lastInstr,
BasicBlock current) |
| Modifier and Type | Method and Description |
|---|---|
private void |
CFG.addEdge(BasicBlock src,
Label targetLabel,
java.util.Map<Label,java.util.List<BasicBlock>> forwardRefs) |
private BasicBlock |
CFG.buildExitBasicBlock(java.util.Stack<ExceptionRegion> nestedExceptionRegions,
BasicBlock firstBB,
java.util.List<BasicBlock> returnBBs,
java.util.List<BasicBlock> exceptionBBs,
boolean nextIsFallThrough,
BasicBlock currBB,
BasicBlock entryBB)
Create special empty exit BasicBlock that all BasicBlocks will eventually
flow into.
|
private BasicBlock |
CFG.buildExitBasicBlock(java.util.Stack<ExceptionRegion> nestedExceptionRegions,
BasicBlock firstBB,
java.util.List<BasicBlock> returnBBs,
java.util.List<BasicBlock> exceptionBBs,
boolean nextIsFallThrough,
BasicBlock currBB,
BasicBlock entryBB)
Create special empty exit BasicBlock that all BasicBlocks will eventually
flow into.
|
private void |
CFG.deleteOrphanedBlocks(DirectedGraph<BasicBlock> graph) |
private static void |
CFGLinearizer.fixupList(CFG cfg,
java.util.List<BasicBlock> list)
Process (fixup) list of instruction and add or remove jumps.
|
private static void |
CFGLinearizer.linearizeInner(CFG cfg,
java.util.List<BasicBlock> list,
java.util.BitSet processed,
BasicBlock current) |
| Constructor and Description |
|---|
ExceptionRegion(Label firstRescueBlockLabel,
Label ensureBlockLabel,
BasicBlock startBB) |
| Modifier and Type | Field and Description |
|---|---|
private java.util.Map<BasicBlock,BasicBlock> |
InlinerInfo.bbRenameMap |
private java.util.Map<BasicBlock,BasicBlock> |
InlinerInfo.bbRenameMap |
| Modifier and Type | Method and Description |
|---|---|
BasicBlock |
InlinerInfo.getOrCreateRenamedBB(BasicBlock bb) |
BasicBlock |
InlinerInfo.getRenamedBB(BasicBlock bb) |
| Modifier and Type | Method and Description |
|---|---|
BasicBlock |
InlinerInfo.getOrCreateRenamedBB(BasicBlock bb) |
BasicBlock |
InlinerInfo.getRenamedBB(BasicBlock bb) |
private void |
CFGInliner.inlineClosureAtYieldSite(InlinerInfo ii,
IRClosure cl,
BasicBlock yieldBB,
YieldInstr yield) |
void |
CFGInliner.inlineMethod(IRScope scope,
RubyModule implClass,
int classToken,
BasicBlock callBB,
CallBase call) |
void |
InlinerInfo.recordYieldSite(BasicBlock bb,
YieldInstr i) |
void |
InlinerInfo.setupYieldArgsAndYieldResult(YieldInstr yi,
BasicBlock yieldBB,
Arity blockArity) |