# HG changeset patch # User Tom Rodriguez # Date 1415931530 28800 # Node ID e11768d6136e7ccdc9dda44b9fb8ac66f493d8ca # Parent 0866598c927fdb9a89672a547f530f0fdd0d5976 trust final fields in constants with default values diff -r 0866598c927f -r e11768d6136e graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java --- 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 OptFoldMemory = new OptionValue<>(false); @Option(help = "Allow backend to match complex expressions.") public static final OptionValue MatchExpressions = new OptionValue<>(true); + @Option(help = "Constant fold final fields with default values.") + public static final OptionValue TrustFinalDefaultFields = new OptionValue<>(true); /** diff -r 0866598c927f -r e11768d6136e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaFieldImpl.java --- 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; }