changeset 7691:014092acf009

fixed bootstrap performance issue that occurred because non-static final fields are no longer assumed constant
author Christian Haeubl <haeubl@ssw.jku.at>
date Mon, 04 Feb 2013 14:27:32 +0100
parents afa802ff433c
children 301cbb131b5d
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java	Mon Feb 04 13:43:36 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java	Mon Feb 04 14:27:32 2013 +0100
@@ -27,9 +27,11 @@
 import java.lang.reflect.*;
 
 import com.oracle.graal.api.meta.*;
+import com.oracle.graal.debug.*;
 import com.oracle.graal.hotspot.*;
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.phases.*;
+import com.oracle.graal.snippets.*;
 
 /**
  * Represents a field in a HotSpot type.
@@ -94,8 +96,10 @@
             assert !Modifier.isStatic(flags);
             if (Modifier.isFinal(getModifiers())) {
                 Constant value = readValue(receiver);
-                if (!value.isDefaultForKind()) {
+                if (assumeNonStaticFinalFieldsAsFinal(receiver.asObject().getClass()) || !value.isDefaultForKind()) {
                     return value;
+                } else {
+                    TTY.println("Non-static final field %s.%s=%s", holder, name, value.toString());
                 }
             }
         }
@@ -120,6 +124,10 @@
         return clazz == GraalOptions.class;
     }
 
+    private static boolean assumeNonStaticFinalFieldsAsFinal(Class<?> clazz) {
+        return clazz == SnippetCounter.class;
+    }
+
     @Override
     public HotSpotResolvedObjectType getDeclaringClass() {
         return holder;