changeset 7227:8fbb97b0016a

fixes after merge
author Christian Haeubl <haeubl@ssw.jku.at>
date Fri, 14 Dec 2012 13:10:55 +0100
parents 8a3efb8c831d
children 57e6f9162c43
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ClassSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/HotSpotSnippetUtils.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ThreadSnippets.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/ClassSubstitution.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/InstanceMethodSubstitution.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java
diffstat 10 files changed, 37 insertions(+), 89 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java	Fri Dec 14 13:10:55 2012 +0100
@@ -329,7 +329,7 @@
     public int deoptReasonNone;
     public long threadIsInterruptedStub;
     public long identityHashCodeStub;
-    
+
     public int deoptReasonNullCheck;
     public int deoptReasonRangeCheck;
     public int deoptReasonClassCheck;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ClassSnippets.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ClassSnippets.java	Fri Dec 14 13:10:55 2012 +0100
@@ -27,6 +27,7 @@
 import java.lang.reflect.*;
 
 import com.oracle.graal.snippets.*;
+import com.oracle.graal.snippets.ClassSubstitution.InstanceMethodSubstitution;
 
 /**
  * Snippets for {@link java.lang.Class} methods.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/HotSpotSnippetUtils.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/HotSpotSnippetUtils.java	Fri Dec 14 13:10:55 2012 +0100
@@ -61,17 +61,17 @@
 
     @Fold
     public static int threadObjectOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().threadObjectOffset;
+        return config().threadObjectOffset;
     }
 
     @Fold
     public static int osThreadOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().osThreadOffset;
+        return config().osThreadOffset;
     }
 
     @Fold
     public static int osThreadInterruptedOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().osThreadInterruptedOffset;
+        return config().osThreadInterruptedOffset;
     }
 
     @Fold
@@ -110,43 +110,28 @@
     }
 
     @Fold
-    public static int klassOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().klassOffset;
-    }
-
-    @Fold
-    public static int klassModifierFlagsOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().klassModifierFlagsOffset;
-    }
-
-    @Fold
     public static int klassAccessFlagsOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().klassAccessFlagsOffset;
+        return config().klassAccessFlagsOffset;
     }
 
     @Fold
     public static int klassLayoutHelperOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().klassLayoutHelperOffset;
+        return config().klassLayoutHelperOffset;
     }
 
     @Fold
     public static int arrayKlassLayoutHelperIdentifier() {
-        return HotSpotGraalRuntime.getInstance().getConfig().arrayKlassLayoutHelperIdentifier;
+        return config().arrayKlassLayoutHelperIdentifier;
     }
 
     @Fold
     public static int arrayKlassComponentMirrorOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().arrayKlassComponentMirrorOffset;
+        return config().arrayKlassComponentMirrorOffset;
     }
 
     @Fold
     public static int klassSuperKlassOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().klassSuperKlassOffset;
-    }
-
-    @Fold
-    public static int classMirrorOffset() {
-        return HotSpotGraalRuntime.getInstance().getConfig().classMirrorOffset;
+        return config().klassSuperKlassOffset;
     }
 
     @Fold
@@ -264,12 +249,12 @@
 
     @Fold
     static int uninitializedIdentityHashCodeValue() {
-        return HotSpotGraalRuntime.getInstance().getConfig().uninitializedIdentityHashCodeValue;
+        return config().uninitializedIdentityHashCodeValue;
     }
 
     @Fold
     static int identityHashCodeShift() {
-        return HotSpotGraalRuntime.getInstance().getConfig().identityHashCodeShift;
+        return config().identityHashCodeShift;
     }
 
     /**
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectSnippets.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectSnippets.java	Fri Dec 14 13:10:55 2012 +0100
@@ -26,15 +26,15 @@
 
 import com.oracle.graal.hotspot.nodes.*;
 import com.oracle.graal.snippets.*;
-import com.oracle.graal.snippets.ClassSubstitution.MethodSubstitution;
+import com.oracle.graal.snippets.ClassSubstitution.InstanceMethodSubstitution;
 
 /**
  * Snippets for {@link java.lang.Object} methods.
  */
 @ClassSubstitution(java.lang.Object.class)
 public class ObjectSnippets implements SnippetsInterface {
-    @InstanceMethodSubstitution("getClass")
-    public static Class<?> getClassSnippet(final Object thisObj) {
+    @InstanceMethodSubstitution
+    public static Class<?> getClass(final Object thisObj) {
         Word hub = loadHub(thisObj);
         return (Class<?>) readFinalObject(hub, classMirrorOffset());
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ThreadSnippets.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ThreadSnippets.java	Fri Dec 14 13:10:55 2012 +0100
@@ -26,8 +26,9 @@
 
 import com.oracle.graal.hotspot.nodes.*;
 import com.oracle.graal.snippets.*;
+import com.oracle.graal.snippets.ClassSubstitution.InstanceMethodSubstitution;
 
-
+/**
  * Snippets for {@link java.lang.Thread} methods.
  */
 @ClassSubstitution(java.lang.Thread.class)
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java	Fri Dec 14 13:10:55 2012 +0100
@@ -60,7 +60,7 @@
     private static final DebugMetric metricInliningRuns = Debug.metric("Runs");
 
     public InliningPhase(TargetDescription target, GraalCodeCacheProvider runtime, Collection<Invoke> hints, Assumptions assumptions, GraphCache cache, PhasePlan plan, OptimisticOptimizations optimisticOpts) {
-        this(target, runtime, assumptions, cache, plan, createInliningPolicy(runtime, assumptions, optimisticOpts, hints));
+        this(target, runtime, assumptions, cache, plan, createInliningPolicy(assumptions, optimisticOpts, hints));
     }
 
     public InliningPhase(TargetDescription target, GraalCodeCacheProvider runtime, Assumptions assumptions, GraphCache cache, PhasePlan plan, InliningPolicy inliningPolicy) {
@@ -278,7 +278,6 @@
         private final InliningDecision inliningDecision;
         private final WeightComputationPolicy weightComputationPolicy;
         private final Collection<Invoke> hints;
-        private final GraalCodeCacheProvider runtime;
         private final Assumptions assumptions;
         private final OptimisticOptimizations optimisticOpts;
         private final Deque<Invoke> sortedInvokes;
@@ -286,11 +285,10 @@
         private FixedNode invokePredecessor;
 
         public CFInliningPolicy(InliningDecision inliningPolicy, WeightComputationPolicy weightComputationPolicy, Collection<Invoke> hints,
-                        GraalCodeCacheProvider runtime, Assumptions assumptions, OptimisticOptimizations optimisticOpts) {
+                        Assumptions assumptions, OptimisticOptimizations optimisticOpts) {
             this.inliningDecision = inliningPolicy;
             this.weightComputationPolicy = weightComputationPolicy;
             this.hints = hints;
-            this.runtime = runtime;
             this.assumptions = assumptions;
             this.optimisticOpts = optimisticOpts;
             this.sortedInvokes = new ArrayDeque<>();
@@ -308,7 +306,7 @@
 
         public InlineInfo next() {
             Invoke invoke = sortedInvokes.pop();
-            InlineInfo info = InliningUtil.getInlineInfo(invoke, runtime, assumptions, this, optimisticOpts);
+            InlineInfo info = InliningUtil.getInlineInfo(invoke, assumptions, this, optimisticOpts);
             if (info != null) {
                 invokePredecessor = (FixedNode) info.invoke().predecessor();
                 assert invokePredecessor.isAlive();
@@ -351,17 +349,15 @@
         private final InliningDecision inliningDecision;
         private final WeightComputationPolicy weightComputationPolicy;
         private final Collection<Invoke> hints;
-        private final GraalCodeCacheProvider runtime;
         private final Assumptions assumptions;
         private final OptimisticOptimizations optimisticOpts;
         private final PriorityQueue<InlineInfo> sortedCandidates;
 
         public PriorityInliningPolicy(InliningDecision inliningPolicy, WeightComputationPolicy weightComputationPolicy, Collection<Invoke> hints,
-                        GraalCodeCacheProvider runtime, Assumptions assumptions, OptimisticOptimizations optimisticOpts) {
+                        Assumptions assumptions, OptimisticOptimizations optimisticOpts) {
             this.inliningDecision = inliningPolicy;
             this.weightComputationPolicy = weightComputationPolicy;
             this.hints = hints;
-            this.runtime = runtime;
             this.assumptions = assumptions;
             this.optimisticOpts = optimisticOpts;
             sortedCandidates = new PriorityQueue<>();
@@ -380,7 +376,7 @@
         public InlineInfo next() {
             // refresh cached info before using it (it might have been in the queue for a long time)
             InlineInfo info = sortedCandidates.remove();
-            return InliningUtil.getInlineInfo(info.invoke(), runtime, assumptions, this, optimisticOpts);
+            return InliningUtil.getInlineInfo(info.invoke(), assumptions, this, optimisticOpts);
         }
 
         @Override
@@ -413,7 +409,7 @@
         }
 
         private void scanInvoke(Invoke invoke) {
-            InlineInfo info = InliningUtil.getInlineInfo(invoke, runtime, assumptions, this, optimisticOpts);
+            InlineInfo info = InliningUtil.getInlineInfo(invoke, assumptions, this, optimisticOpts);
             if (info != null) {
                 sortedCandidates.add(info);
             }
@@ -522,10 +518,10 @@
         }
     }
 
-    private static InliningPolicy createInliningPolicy(GraalCodeCacheProvider runtime, Assumptions assumptions, OptimisticOptimizations optimisticOpts, Collection<Invoke> hints) {
+    private static InliningPolicy createInliningPolicy(Assumptions assumptions, OptimisticOptimizations optimisticOpts, Collection<Invoke> hints) {
         switch(GraalOptions.InliningPolicy) {
-            case 0: return new CFInliningPolicy(createInliningDecision(), createWeightComputationPolicy(), hints, runtime, assumptions, optimisticOpts);
-            case 1: return new PriorityInliningPolicy(createInliningDecision(), createWeightComputationPolicy(), hints, runtime, assumptions, optimisticOpts);
+            case 0: return new CFInliningPolicy(createInliningDecision(), createWeightComputationPolicy(), hints, assumptions, optimisticOpts);
+            case 1: return new PriorityInliningPolicy(createInliningDecision(), createWeightComputationPolicy(), hints, assumptions, optimisticOpts);
             default:
                 GraalInternalError.shouldNotReachHere();
                 return null;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Fri Dec 14 13:10:55 2012 +0100
@@ -648,11 +648,10 @@
     /**
      * Determines if inlining is possible at the given invoke node.
      * @param invoke the invoke that should be inlined
-     * @param runtime a GraalRuntime instance used to determine of the invoke can be inlined and/or should be intrinsified
      * @param inliningPolicy used to determine the weight of a specific inlining
      * @return an instance of InlineInfo, or null if no inlining is possible at the given invoke
      */
-    public static InlineInfo getInlineInfo(Invoke invoke, GraalCodeCacheProvider runtime, Assumptions assumptions, InliningPolicy inliningPolicy, OptimisticOptimizations optimisticOpts) {
+    public static InlineInfo getInlineInfo(Invoke invoke, Assumptions assumptions, InliningPolicy inliningPolicy, OptimisticOptimizations optimisticOpts) {
         if (!checkInvokeConditions(invoke)) {
             return null;
         }
@@ -661,7 +660,7 @@
         ResolvedJavaMethod targetMethod = callTarget.targetMethod();
 
         if (callTarget.invokeKind() == InvokeKind.Special || targetMethod.canBeStaticallyBound()) {
-            return getExactInlineInfo(invoke, runtime, inliningPolicy, optimisticOpts, caller, targetMethod);
+            return getExactInlineInfo(invoke, inliningPolicy, optimisticOpts, caller, targetMethod);
         }
 
         assert callTarget.invokeKind() == InvokeKind.Virtual || callTarget.invokeKind() == InvokeKind.Interface;
@@ -675,33 +674,33 @@
                 holder = receiverType;
                 if (receiverStamp.isExactType()) {
                     assert targetMethod.getDeclaringClass().isAssignableFrom(holder) : holder + " subtype of " + targetMethod.getDeclaringClass() + " for " + targetMethod;
-                    return getExactInlineInfo(invoke, runtime, inliningPolicy, optimisticOpts, caller, holder.resolveMethod(targetMethod));
+                    return getExactInlineInfo(invoke, inliningPolicy, optimisticOpts, caller, holder.resolveMethod(targetMethod));
                 }
             }
         }
 
         if (holder.isArray()) {
             // arrays can be treated as Objects
-            return getExactInlineInfo(invoke, runtime, inliningPolicy, optimisticOpts, caller, holder.resolveMethod(targetMethod));
+            return getExactInlineInfo(invoke, inliningPolicy, optimisticOpts, caller, holder.resolveMethod(targetMethod));
         }
 
         // TODO (chaeubl): we could also use the type determined after assumptions for the type-checked inlining case as it might have an effect on type filtering
         if (assumptions.useOptimisticAssumptions()) {
             ResolvedJavaType uniqueSubtype = holder.findUniqueConcreteSubtype();
             if (uniqueSubtype != null) {
-                return getAssumptionInlineInfo(invoke, runtime, inliningPolicy, optimisticOpts, caller, uniqueSubtype.resolveMethod(targetMethod), new Assumptions.ConcreteSubtype(holder, uniqueSubtype));
+                return getAssumptionInlineInfo(invoke, inliningPolicy, optimisticOpts, caller, uniqueSubtype.resolveMethod(targetMethod), new Assumptions.ConcreteSubtype(holder, uniqueSubtype));
             }
 
             ResolvedJavaMethod concrete = holder.findUniqueConcreteMethod(targetMethod);
             if (concrete != null) {
-                return getAssumptionInlineInfo(invoke, runtime, inliningPolicy, optimisticOpts, caller, concrete, new Assumptions.ConcreteMethod(targetMethod, holder, concrete));
+                return getAssumptionInlineInfo(invoke, inliningPolicy, optimisticOpts, caller, concrete, new Assumptions.ConcreteMethod(targetMethod, holder, concrete));
             }
 
             // TODO (chaeubl): C1 has one more assumption in the case of interfaces
         }
 
         // type check based inlining
-        return getTypeCheckedInlineInfo(invoke, inliningPolicy, caller, holder, targetMethod, optimisticOpts, runtime);
+        return getTypeCheckedInlineInfo(invoke, inliningPolicy, caller, holder, targetMethod, optimisticOpts);
     }
 
     private static InlineInfo getAssumptionInlineInfo(Invoke invoke, InliningPolicy inliningPolicy, OptimisticOptimizations optimisticOpts,
@@ -714,10 +713,10 @@
         return new AssumptionInlineInfo(invoke, weight, concrete, takenAssumption);
     }
 
-    private static InlineInfo getExactInlineInfo(Invoke invoke, GraalCodeCacheProvider runtime, InliningPolicy inliningPolicy, OptimisticOptimizations optimisticOpts,
+    private static InlineInfo getExactInlineInfo(Invoke invoke, InliningPolicy inliningPolicy, OptimisticOptimizations optimisticOpts,
                     ResolvedJavaMethod caller, ResolvedJavaMethod targetMethod) {
         assert !Modifier.isAbstract(targetMethod.getModifiers());
-        if (!checkTargetConditions(invoke, targetMethod, optimisticOpts, runtime)) {
+        if (!checkTargetConditions(invoke, targetMethod, optimisticOpts)) {
             return null;
         }
         double weight = inliningPolicy.inliningWeight(caller, targetMethod, invoke);
--- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/ClassSubstitution.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/ClassSubstitution.java	Fri Dec 14 13:10:55 2012 +0100
@@ -40,7 +40,7 @@
      */
     @Retention(RetentionPolicy.RUNTIME)
     @Target(ElementType.METHOD)
-    public @interface MethodSubstitution {
+    public @interface InstanceMethodSubstitution {
         /**
          * Get the name of the original method.
          */
--- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/InstanceMethodSubstitution.java	Fri Dec 14 13:02:49 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.graal.snippets;
-
-import java.lang.annotation.*;
-
-/**
- * Denotes a method that substitutes a method of another class.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.METHOD)
-public @interface InstanceMethodSubstitution {
-    String value() default "";
-}
--- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java	Fri Dec 14 13:02:49 2012 +0100
+++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java	Fri Dec 14 13:10:55 2012 +0100
@@ -37,7 +37,7 @@
 import com.oracle.graal.nodes.java.*;
 import com.oracle.graal.phases.*;
 import com.oracle.graal.phases.common.*;
-import com.oracle.graal.snippets.ClassSubstitution.MethodSubstitution;
+import com.oracle.graal.snippets.ClassSubstitution.InstanceMethodSubstitution;
 import com.oracle.graal.snippets.Snippet.DefaultSnippetInliningPolicy;
 import com.oracle.graal.snippets.Snippet.SnippetInliningPolicy;