public class LockEliminationPhase extends Phase
BasePhase.ApplyScope, BasePhase.BasePhaseStatistics, BasePhase.PhaseOptions, BasePhase.SharedGlobalPhaseState| Constructor and Description |
|---|
LockEliminationPhase() |
| Modifier and Type | Method and Description |
|---|---|
static Block |
getGuardingBlock(GuardingNode g1,
ControlFlowGraph cfg)
Get the basic block of the
GuardingNode. |
static boolean |
isCompatibleLock(AccessMonitorNode a,
AccessMonitorNode b,
boolean aDominatesB,
ControlFlowGraph cfg)
Check that the paired monitor operations operate on the same object at the same lock depth.
|
static Block |
lowestGuardedInputBlock(AccessMonitorNode monitorNode,
ControlFlowGraph cfg)
Get the lowest (by dominance relation)
Block for the (potentially hidden behind
ProxyNodes) inputs of the AccessMonitorNode. |
static Block |
lowestGuardedInputBlock(GuardingNode g1,
GuardingNode g2,
ControlFlowGraph cfg) |
protected void |
run(StructuredGraph graph) |
static GuardingNode |
unproxifyHighestGuard(ValueNode value)
Get the highest (by input traversal)
GuardingNode attached to any ProxyNode
visited in GraphUtil.unproxify(ValueNode). |
apply, apply, applyScope, codeSizeIncrease, contractorName, equals, getName, hashCode, shouldDumpAfterAtBasicLevel, shouldDumpBeforeAtBasicLevelclone, getClass, notify, notifyAll, toString, wait, wait, waitcheckContractprotected void run(StructuredGraph graph)
public static boolean isCompatibleLock(AccessMonitorNode a, AccessMonitorNode b, boolean aDominatesB, ControlFlowGraph cfg)
PiNode in between respect a dominance relation between
a and b. This is necessary to ensure any monitor rewiring respects a proper schedule.a - The first AccessMonitorNodeb - The first AccessMonitorNodeaDominatesB - if true determine if a must dominate b (including any guarded
PiNode in between to determine if a and b are compatible, else if
false determine if b must dominate apublic static Block lowestGuardedInputBlock(AccessMonitorNode monitorNode, ControlFlowGraph cfg)
Block for the (potentially hidden behind
ProxyNodes) inputs of the AccessMonitorNode.public static Block lowestGuardedInputBlock(GuardingNode g1, GuardingNode g2, ControlFlowGraph cfg)
public static Block getGuardingBlock(GuardingNode g1, ControlFlowGraph cfg)
GuardingNode. Handles fixed and floating guarded nodes.public static GuardingNode unproxifyHighestGuard(ValueNode value)
GuardingNode attached to any ProxyNode
visited in GraphUtil.unproxify(ValueNode).