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