changeset 18287:b7461f7fa8a0

added HotSpotObjectConstant.getCompositeValueClass()
author Doug Simon <doug.simon@oracle.com>
date Thu, 06 Nov 2014 13:55:47 +0100
parents ffcbc50063a3
children feef9ed5fc56
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java
diffstat 3 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java	Thu Nov 06 13:50:10 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java	Thu Nov 06 13:55:47 2014 +0100
@@ -27,6 +27,7 @@
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.graph.*;
+import com.oracle.graal.lir.*;
 
 /**
  * Represents a constant non-{@code null} object reference, within the compiler and across the
@@ -88,4 +89,11 @@
      */
     JavaConstant getCallSiteTarget(Assumptions assumptions);
 
+    /**
+     * Gets the result of {@link CompositeValueClass#get(Class)} for the {@link Class} object
+     * represented by this constant.
+     *
+     * @return {@code null} if this constant does not represent a {@link Class} object
+     */
+    JavaConstant getCompositeValueClass();
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java	Thu Nov 06 13:50:10 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstantImpl.java	Thu Nov 06 13:55:47 2014 +0100
@@ -27,6 +27,7 @@
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.graph.*;
+import com.oracle.graal.lir.*;
 
 /**
  * Represents a constant non-{@code null} object reference, within the compiler and across the
@@ -149,6 +150,16 @@
         return null;
     }
 
+    @SuppressWarnings("unchecked")
+    public JavaConstant getCompositeValueClass() {
+        if (object instanceof Class) {
+            Class<? extends CompositeValue> c = (Class<? extends CompositeValue>) object;
+            assert CompositeValueClass.class.isAssignableFrom(c);
+            return HotSpotObjectConstantImpl.forObject(CompositeValueClass.get(c));
+        }
+        return null;
+    }
+
     @Override
     public boolean isNull() {
         return false;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java	Thu Nov 06 13:50:10 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java	Thu Nov 06 13:55:47 2014 +0100
@@ -55,13 +55,13 @@
             super(invoke);
         }
 
-        @SuppressWarnings("unchecked")
         @Override
         protected JavaConstant evaluate(JavaConstant param, MetaAccessProvider metaAccess) {
             if (param.isNull() || ImmutableCode.getValue()) {
                 return null;
             }
-            return HotSpotObjectConstantImpl.forObject(CompositeValueClass.get((Class<? extends CompositeValue>) HotSpotObjectConstantImpl.asObject(param)));
+            HotSpotObjectConstant c = (HotSpotObjectConstant) param;
+            return c.getCompositeValueClass();
         }
     }