Mercurial > hg > graal-compiler
changeset 23145:49619bdbd262
Make MonitorEnterNode extensible in SVM.
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Tue, 08 Dec 2015 12:29:24 -0800 |
parents | 88fb9daa58fb |
children | 5eb7281c661c |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java |
diffstat | 2 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Tue Dec 01 08:46:24 2015 -0800 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Tue Dec 08 12:29:24 2015 -0800 @@ -1985,9 +1985,13 @@ synchronizedEpilogue(BytecodeFrame.AFTER_BCI, x, kind); } + protected MonitorEnterNode createMonitorEnterNode(ValueNode x, MonitorIdNode monitorId) { + return new MonitorEnterNode(x, monitorId); + } + protected void genMonitorEnter(ValueNode x, int bci) { MonitorIdNode monitorId = graph.add(new MonitorIdNode(frameState.lockDepth(true))); - MonitorEnterNode monitorEnter = append(new MonitorEnterNode(x, monitorId)); + MonitorEnterNode monitorEnter = append(createMonitorEnterNode(x, monitorId)); frameState.pushLock(x, monitorId); monitorEnter.setStateAfter(createFrameState(bci, monitorEnter)); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Tue Dec 01 08:46:24 2015 -0800 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Tue Dec 08 12:29:24 2015 -0800 @@ -40,12 +40,16 @@ * The {@code MonitorEnterNode} represents the acquisition of a monitor. */ @NodeInfo -public final class MonitorEnterNode extends AccessMonitorNode implements Virtualizable, Lowerable, IterableNodeType, MonitorEnter, MemoryCheckpoint.Single { +public class MonitorEnterNode extends AccessMonitorNode implements Virtualizable, Lowerable, IterableNodeType, MonitorEnter, MemoryCheckpoint.Single { public static final NodeClass<MonitorEnterNode> TYPE = NodeClass.create(MonitorEnterNode.class); public MonitorEnterNode(ValueNode object, MonitorIdNode monitorId) { - super(TYPE, object, monitorId); + this(TYPE, object, monitorId); + } + + public MonitorEnterNode(NodeClass<? extends MonitorEnterNode> c, ValueNode object, MonitorIdNode monitorId) { + super(c, object, monitorId); } @Override