changeset 6406:33dab7b4b006

Add snippet factory methods
author Christian Wimmer <christian.wimmer@oracle.com>
date Fri, 14 Sep 2012 14:10:36 -0700
parents 6b56cf2bf7da
children 46d426e79bed
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java
diffstat 5 files changed, 37 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java	Fri Sep 14 14:07:58 2012 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java	Fri Sep 14 14:10:36 2012 -0700
@@ -34,7 +34,7 @@
 public abstract class AccessNode extends FixedWithNextNode implements Access {
 
     @Input private ValueNode object;
-    @Input private LocationNode location;
+    @Input private ValueNode location;
     private boolean nullCheck;
 
     public ValueNode object() {
@@ -42,7 +42,7 @@
     }
 
     public LocationNode location() {
-        return location;
+        return (LocationNode) location;
     }
 
     public boolean getNullCheck() {
@@ -53,7 +53,7 @@
         this.nullCheck = check;
     }
 
-    public AccessNode(ValueNode object, LocationNode location, Stamp stamp) {
+    public AccessNode(ValueNode object, ValueNode location, Stamp stamp) {
         super(stamp);
         this.object = object;
         this.location = location;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Fri Sep 14 14:07:58 2012 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Fri Sep 14 14:10:36 2012 -0700
@@ -34,7 +34,7 @@
  */
 public final class ReadNode extends AccessNode implements Node.IterableNodeType, LIRLowerable, Simplifiable/*, Canonicalizable*/ {
 
-    public ReadNode(ValueNode object, LocationNode location, Stamp stamp) {
+    public ReadNode(ValueNode object, ValueNode location, Stamp stamp) {
         super(object, location, stamp);
     }
 
@@ -77,4 +77,15 @@
             }
         }
     }
+
+    @SuppressWarnings("unused")
+    private ReadNode(ValueNode object, ValueNode location) {
+        this(object, location, StampFactory.forNodeIntrinsic());
+    }
+
+    @SuppressWarnings("unused")
+    @NodeIntrinsic
+    public static <T> T readMemory(Object object, Object location) {
+        throw new UnsupportedOperationException();
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java	Fri Sep 14 14:07:58 2012 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java	Fri Sep 14 14:10:36 2012 -0700
@@ -54,7 +54,7 @@
         return value;
     }
 
-    public WriteNode(ValueNode object, ValueNode value, LocationNode location) {
+    public WriteNode(ValueNode object, ValueNode value, ValueNode location) {
         super(object, location, StampFactory.forVoid());
         this.value = value;
     }
@@ -75,4 +75,10 @@
             }
         }
     }
+
+    @SuppressWarnings("unused")
+    @NodeIntrinsic
+    public static void writeMemory(Object object, Object value, Object location) {
+        throw new UnsupportedOperationException();
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java	Fri Sep 14 14:07:58 2012 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java	Fri Sep 14 14:10:36 2012 -0700
@@ -64,4 +64,10 @@
     public void lower(LoweringTool tool) {
         tool.getRuntime().lower(this, tool);
     }
+
+    @SuppressWarnings("unused")
+    @NodeIntrinsic
+    public static int arrayLength(Object array) {
+        throw new UnsupportedOperationException();
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java	Fri Sep 14 14:07:58 2012 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java	Fri Sep 14 14:10:36 2012 -0700
@@ -37,7 +37,7 @@
     private static final Stamp virtualStamp = new GenericStamp(GenericStampType.Virtual);
     private static final Stamp conditionStamp = new GenericStamp(GenericStampType.Condition);
     private static final Stamp voidStamp = new GenericStamp(GenericStampType.Void);
-
+    private static final Stamp nodeIntrinsicStamp = new ObjectStamp(null, false, false, false);
     private static final Stamp positiveInt = forInteger(Kind.Int, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
 
     private static void setCache(Kind kind, Stamp stamp) {
@@ -74,6 +74,14 @@
         return voidStamp;
     }
 
+    /**
+     * A stamp used only in the graph of intrinsics, e.g., snippets. It is then replaced by an actual stamp when the
+     * intrinsic is used, i.e., when the snippet template is instantiated.
+     */
+    public static Stamp forNodeIntrinsic() {
+        return nodeIntrinsicStamp;
+    }
+
     public static Stamp intValue() {
         return forKind(Kind.Int);
     }