changeset 4998:985fbd8adf65

cleanup of XirSite: remove unused (and incorrectly implemented) type functions, add receiver to determine nonNull property
author Lukas Stadler <lukas.stadler@jku.at>
date Thu, 01 Mar 2012 12:04:37 +0100
parents 11ce128f8d28
children 71bcf0a9e875
files graal/com.oracle.max.cri/src/com/oracle/max/cri/xir/XirSite.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java
diffstat 2 files changed, 22 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.cri/src/com/oracle/max/cri/xir/XirSite.java	Wed Feb 29 14:49:54 2012 +0100
+++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/xir/XirSite.java	Thu Mar 01 12:04:37 2012 +0100
@@ -75,20 +75,4 @@
      * @return {@code true} if an array store check is required
      */
     boolean requiresArrayStoreCheck();
-
-    /**
-     * Checks whether an approximation of the type for the specified argument is available.
-     * @param argument the argument
-     * @return an {@link RiType} indicating the most specific type known for the argument, if any;
-     * {@code null} if no particular type is known
-     */
-    RiType getApproximateType(XirArgument argument);
-
-    /**
-     * Checks whether an exact type is known for the specified argument.
-     * @param argument the argument
-     * @return an {@link RiType} indicating the exact type known for the argument, if any;
-     * {@code null} if no particular type is known
-     */
-    RiType getExactType(XirArgument argument);
 }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java	Wed Feb 29 14:49:54 2012 +0100
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java	Thu Mar 01 12:04:37 2012 +0100
@@ -514,7 +514,7 @@
     @Override
     public void visitArrayLength(ArrayLengthNode x) {
         XirArgument array = toXirArgument(x.array());
-        XirSnippet snippet = xir.genArrayLength(site(x), array);
+        XirSnippet snippet = xir.genArrayLength(site(x, x.array()), array);
         emitXir(snippet, x, state(), true);
         operand(x);
     }
@@ -522,7 +522,7 @@
     @Override
     public void visitCheckCast(CheckCastNode x) {
         if (x.emitCode()) {
-            XirSnippet snippet = xir.genCheckCast(site(x), toXirArgument(x.object()), toXirArgument(x.targetClassInstruction()), x.targetClass(), x.hints(), x.hintsExact());
+            XirSnippet snippet = xir.genCheckCast(site(x, x.object()), toXirArgument(x.object()), toXirArgument(x.targetClassInstruction()), x.targetClass(), x.hints(), x.hintsExact());
             emitXir(snippet, x, state(), true);
         }
         // The result of a checkcast is the unmodified object, so no need to allocate a new variable for it.
@@ -548,7 +548,7 @@
         // The state after the monitor enter is used for deoptimization, after the monitor has blocked, so it must contain the newly locked object.
         LIRDebugInfo stateAfter = stateFor(x.stateAfter());
 
-        XirSnippet snippet = xir.genMonitorEnter(site(x), obj, lockAddress);
+        XirSnippet snippet = xir.genMonitorEnter(site(x, x.object()), obj, lockAddress);
         emitXir(snippet, x, stateBefore, stateAfter, true, null, null);
     }
 
@@ -569,7 +569,7 @@
         LIRDebugInfo stateBefore = state();
         curLocks = curLocks.outer;
 
-        XirSnippet snippet = xir.genMonitorExit(site(x), obj, lockAddress);
+        XirSnippet snippet = xir.genMonitorExit(site(x, x.object()), obj, lockAddress);
         emitXir(snippet, x, stateBefore, true);
     }
 
@@ -581,7 +581,7 @@
             emitMembar(JMM_PRE_VOLATILE_READ);
         }
         XirArgument receiver = toXirArgument(x.object());
-        XirSnippet snippet = x.isStatic() ? xir.genGetStatic(site(x), receiver, field) : xir.genGetField(site(x), receiver, field);
+        XirSnippet snippet = x.isStatic() ? xir.genGetStatic(site(x, x.object()), receiver, field) : xir.genGetField(site(x, x.object()), receiver, field);
         emitXir(snippet, x, info, true);
         if (x.isVolatile()) {
             emitMembar(JMM_POST_VOLATILE_READ);
@@ -597,7 +597,7 @@
         }
         XirArgument receiver = toXirArgument(x.object());
         XirArgument value = toXirArgument(x.value());
-        XirSnippet snippet = x.isStatic() ? xir.genPutStatic(site(x), receiver, field, value) : xir.genPutField(site(x), receiver, field, value);
+        XirSnippet snippet = x.isStatic() ? xir.genPutStatic(site(x, x.object()), receiver, field, value) : xir.genPutField(site(x, x.object()), receiver, field, value);
         emitXir(snippet, x, info, true);
         if (x.isVolatile()) {
             emitMembar(JMM_POST_VOLATILE_WRITE);
@@ -608,7 +608,7 @@
     public void visitLoadIndexed(LoadIndexedNode x) {
         XirArgument array = toXirArgument(x.array());
         XirArgument index = toXirArgument(x.index());
-        XirSnippet snippet = xir.genArrayLoad(site(x), array, index, x.elementKind(), null);
+        XirSnippet snippet = xir.genArrayLoad(site(x, x.array()), array, index, x.elementKind(), null);
         emitXir(snippet, x, state(), true);
     }
 
@@ -617,7 +617,7 @@
         XirArgument array = toXirArgument(x.array());
         XirArgument index = toXirArgument(x.index());
         XirArgument value = toXirArgument(x.value());
-        XirSnippet snippet = xir.genArrayStore(site(x), array, index, value, x.elementKind(), null);
+        XirSnippet snippet = xir.genArrayStore(site(x, x.array()), array, index, value, x.elementKind(), null);
         emitXir(snippet, x, state(), true);
     }
 
@@ -811,7 +811,7 @@
 
     private void emitInstanceOfBranch(InstanceOfNode x, LabelRef trueSuccessor, LabelRef falseSuccessor, LIRDebugInfo info) {
         XirArgument obj = toXirArgument(x.object());
-        XirSnippet snippet = xir.genInstanceOf(site(x), obj, toXirArgument(x.targetClassInstruction()), x.targetClass(), x.hints(), x.hintsExact());
+        XirSnippet snippet = xir.genInstanceOf(site(x, x.object()), obj, toXirArgument(x.targetClassInstruction()), x.targetClass(), x.hints(), x.hintsExact());
         emitXir(snippet, x, info, null, false, x.negated() ? falseSuccessor : trueSuccessor, x.negated() ? trueSuccessor : falseSuccessor);
     }
 
@@ -862,7 +862,7 @@
         XirArgument obj = toXirArgument(x.object());
         XirArgument trueArg = toXirArgument(x.negated() ? falseValue : trueValue);
         XirArgument falseArg = toXirArgument(x.negated() ? trueValue : falseValue);
-        XirSnippet snippet = xir.genMaterializeInstanceOf(site(x), obj, toXirArgument(x.targetClassInstruction()), trueArg, falseArg, x.targetClass(), x.hints(), x.hintsExact());
+        XirSnippet snippet = xir.genMaterializeInstanceOf(site(x, x.object()), obj, toXirArgument(x.targetClassInstruction()), trueArg, falseArg, x.targetClass(), x.hints(), x.hintsExact());
         return (Variable) emitXir(snippet, null, null, false);
     }
 
@@ -926,17 +926,17 @@
                 break;
             case Special:
                 receiver = toXirArgument(callTarget.receiver());
-                snippet = xir.genInvokeSpecial(site(x.node()), receiver, targetMethod);
+                snippet = xir.genInvokeSpecial(site(x.node(), callTarget.receiver()), receiver, targetMethod);
                 break;
             case Virtual:
                 assert callTarget.receiver().kind() == CiKind.Object : callTarget + ": " + callTarget.targetMethod().toString();
                 receiver = toXirArgument(callTarget.receiver());
-                snippet = xir.genInvokeVirtual(site(x.node()), receiver, targetMethod);
+                snippet = xir.genInvokeVirtual(site(x.node(), callTarget.receiver()), receiver, targetMethod);
                 break;
             case Interface:
                 assert callTarget.receiver().kind() == CiKind.Object : callTarget;
                 receiver = toXirArgument(callTarget.receiver());
-                snippet = xir.genInvokeInterface(site(x.node()), receiver, targetMethod);
+                snippet = xir.genInvokeInterface(site(x.node(), callTarget.receiver()), receiver, targetMethod);
                 break;
         }
 
@@ -1437,7 +1437,11 @@
     }
 
     protected XirSupport site(ValueNode x) {
-        return xirSupport.site(x);
+        return xirSupport.site(x, null);
+    }
+
+    protected XirSupport site(ValueNode x, ValueNode receiver) {
+        return xirSupport.site(x, receiver);
     }
 
     /**
@@ -1445,6 +1449,7 @@
      */
     static class XirSupport implements XirSite {
         ValueNode current;
+        ValueNode receiver;
 
         XirSupport() {
         }
@@ -1464,7 +1469,7 @@
         }
 
         public boolean requiresNullCheck() {
-            return current == null || true;
+            return receiver == null || !receiver.stamp().nonNull();
         }
 
         public boolean requiresBoundsCheck() {
@@ -1483,16 +1488,9 @@
             return true;
         }
 
-        public RiType getApproximateType(XirArgument argument) {
-            return current == null ? null : current.declaredType();
-        }
-
-        public RiType getExactType(XirArgument argument) {
-            return current == null ? null : current.exactType();
-        }
-
-        XirSupport site(ValueNode v) {
+        XirSupport site(ValueNode v, ValueNode r) {
             current = v;
+            receiver = r;
             return this;
         }