changeset 13118:d511d688b782

re-enabled TieredCompilation when GRAAL is defined by handling abstract types in profiles gathered by C1
author Doug Simon <doug.simon@oracle.com>
date Fri, 22 Nov 2013 21:08:09 +0100
parents 99dcb236aaad
children 124860fac470
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java src/cpu/sparc/vm/c2_globals_sparc.hpp src/cpu/x86/vm/c2_globals_x86.hpp
diffstat 3 files changed, 9 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Fri Nov 22 12:15:22 2013 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Fri Nov 22 21:08:09 2013 +0100
@@ -26,6 +26,7 @@
 import static com.oracle.graal.api.meta.DeoptimizationReason.*;
 import static com.oracle.graal.nodes.type.StampFactory.*;
 import static com.oracle.graal.phases.GraalOptions.*;
+import static java.lang.reflect.Modifier.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -434,6 +435,7 @@
             super(invoke);
             this.concrete = concrete;
             this.type = type;
+            assert !isAbstract(type.getModifiers()) : type;
         }
 
         @Override
@@ -1137,6 +1139,10 @@
             }
 
             ResolvedJavaType type = ptypes[0].getType();
+            if (isAbstract(type.getModifiers())) {
+                // In TieredCompilation mode, C1 can generate profiles containing abstract types
+                return null;
+            }
             ResolvedJavaMethod concrete = type.resolveMethod(targetMethod);
             if (!checkTargetConditions(data, replacements, invoke, concrete, optimisticOpts)) {
                 return null;
@@ -1207,6 +1213,9 @@
                 int index = concreteMethods.indexOf(concrete);
                 if (index == -1) {
                     notRecordedTypeProbability += type.getProbability();
+                } else if (isAbstract(type.getType().getModifiers())) {
+                    // In TieredCompilation mode, C1 can generate profiles containing abstract types
+                    notRecordedTypeProbability += type.getProbability();
                 } else {
                     usedTypes.add(type);
                     typesToConcretes.add(index);
--- a/src/cpu/sparc/vm/c2_globals_sparc.hpp	Fri Nov 22 12:15:22 2013 +0100
+++ b/src/cpu/sparc/vm/c2_globals_sparc.hpp	Fri Nov 22 21:08:09 2013 +0100
@@ -44,12 +44,7 @@
 #else
 define_pd_global(bool, ProfileInterpreter,           true);
 #endif // CC_INTERP
-// Disable TieredCompilation while profile data problems are not resolved - same thing in c2_globals_x86.hpp
-#ifdef GRAAL
-define_pd_global(bool, TieredCompilation,            false);
-#else
 define_pd_global(bool, TieredCompilation,            trueInTiered);
-#endif
 define_pd_global(intx, CompileThreshold,             10000);
 define_pd_global(intx, BackEdgeThreshold,            140000);
 
--- a/src/cpu/x86/vm/c2_globals_x86.hpp	Fri Nov 22 12:15:22 2013 +0100
+++ b/src/cpu/x86/vm/c2_globals_x86.hpp	Fri Nov 22 21:08:09 2013 +0100
@@ -45,12 +45,7 @@
 #else
 define_pd_global(bool, ProfileInterpreter,           true);
 #endif // CC_INTERP
-// Disable TieredCompilation while profile data problems are not resolved - same thing in c2_globals_sparc.hpp
-#ifdef GRAAL
-define_pd_global(bool, TieredCompilation,            false);
-#else
 define_pd_global(bool, TieredCompilation,            trueInTiered);
-#endif
 define_pd_global(intx, CompileThreshold,             10000);
 define_pd_global(intx, BackEdgeThreshold,            100000);