# HG changeset patch # User Christian Haeubl # Date 1355487055 -3600 # Node ID 8fbb97b0016a066a1c67537510cea49b97e16f21 # Parent 8a3efb8c831d022c0405763400e8ed8a4efdb21b fixes after merge diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- 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; diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ClassSnippets.java --- 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. diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/HotSpotSnippetUtils.java --- 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; } /** diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectSnippets.java --- 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()); } diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ThreadSnippets.java --- 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) diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java --- 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 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 hints; - private final GraalCodeCacheProvider runtime; private final Assumptions assumptions; private final OptimisticOptimizations optimisticOpts; private final Deque sortedInvokes; @@ -286,11 +285,10 @@ private FixedNode invokePredecessor; public CFInliningPolicy(InliningDecision inliningPolicy, WeightComputationPolicy weightComputationPolicy, Collection 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 hints; - private final GraalCodeCacheProvider runtime; private final Assumptions assumptions; private final OptimisticOptimizations optimisticOpts; private final PriorityQueue sortedCandidates; public PriorityInliningPolicy(InliningDecision inliningPolicy, WeightComputationPolicy weightComputationPolicy, Collection 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 hints) { + private static InliningPolicy createInliningPolicy(Assumptions assumptions, OptimisticOptimizations optimisticOpts, Collection 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; diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java --- 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); diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/ClassSubstitution.java --- 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. */ diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/InstanceMethodSubstitution.java --- 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 ""; -} diff -r 8a3efb8c831d -r 8fbb97b0016a graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetInstaller.java --- 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;