changeset 18376:e11768d6136e

trust final fields in constants with default values
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Thu, 13 Nov 2014 18:18:50 -0800
parents 0866598c927f
children ed0fce2e999a c57c3777fa72
files graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java	Thu Nov 13 18:18:18 2014 -0800
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java	Thu Nov 13 18:18:50 2014 -0800
@@ -272,6 +272,8 @@
     public static final OptionValue<Boolean> OptFoldMemory = new OptionValue<>(false);
     @Option(help = "Allow backend to match complex expressions.")
     public static final OptionValue<Boolean> MatchExpressions = new OptionValue<>(true);
+    @Option(help = "Constant fold final fields with default values.")
+    public static final OptionValue<Boolean> TrustFinalDefaultFields = new OptionValue<>(true);
 
 
     /**
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java	Thu Nov 13 18:18:18 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java	Thu Nov 13 18:18:50 2014 -0800
@@ -220,7 +220,7 @@
                 if (isFinal()) {
                     if (isInObject(object)) {
                         JavaConstant value = readValue(receiver);
-                        if (assumeNonStaticFinalFieldsAsFinal(object.getClass()) || !value.isDefaultForKind()) {
+                        if (!value.isDefaultForKind() || assumeNonStaticFinalDefaultFieldsAsFinal(object.getClass())) {
                             return value;
                         }
                     }
@@ -274,7 +274,10 @@
         }
     }
 
-    private static boolean assumeNonStaticFinalFieldsAsFinal(Class<?> clazz) {
+    private static boolean assumeNonStaticFinalDefaultFieldsAsFinal(Class<?> clazz) {
+        if (TrustFinalDefaultFields.getValue()) {
+            return true;
+        }
         return clazz == SnippetCounter.class || clazz == NodeClass.class;
     }