changeset 21778:037d14459ef9

Provide a method to determine size in bytes of a Stamp.
author Roland Schatz <roland.schatz@oracle.com>
date Mon, 08 Jun 2015 12:14:36 +0200
parents 76c162c69c2f
children 20ace3139510
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringProvider.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java
diffstat 3 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Mon Jun 08 12:09:37 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Mon Jun 08 12:14:36 2015 +0200
@@ -539,4 +539,13 @@
     protected LocationIdentity initLocationIdentity() {
         return INIT_LOCATION;
     }
+
+    @Override
+    public int getSizeInBytes(Stamp stamp) {
+        if (stamp instanceof NarrowOopStamp || (stamp instanceof KlassPointerStamp && ((KlassPointerStamp) stamp).isCompressed())) {
+            return Kind.Int.getByteCount();
+        } else {
+            return super.getSizeInBytes(stamp);
+        }
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringProvider.java	Mon Jun 08 12:09:37 2015 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringProvider.java	Mon Jun 08 12:14:36 2015 +0200
@@ -22,6 +22,7 @@
  */
 package com.oracle.graal.nodes.spi;
 
+import com.oracle.graal.compiler.common.type.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.extended.*;
@@ -43,4 +44,9 @@
      * @return a node that gives the index of the element
      */
     ValueNode reconstructArrayIndex(Kind elementKind, LocationNode location);
+
+    /**
+     * Gets the platform specific size of a type in bytes.
+     */
+    int getSizeInBytes(Stamp stamp);
 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Mon Jun 08 12:09:37 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Mon Jun 08 12:14:36 2015 +0200
@@ -791,4 +791,15 @@
             }
         }
     }
+
+    @Override
+    public int getSizeInBytes(Stamp stamp) {
+        if (stamp instanceof PrimitiveStamp) {
+            return ((PrimitiveStamp) stamp).getBits() / 8;
+        } else if (stamp instanceof AbstractPointerStamp) {
+            return target.wordSize;
+        } else {
+            throw JVMCIError.shouldNotReachHere("stamp " + stamp + " has no size");
+        }
+    }
 }