Mercurial > hg > graal-compiler
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 | c57c3777fa72 ed0fce2e999a |
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; }