# HG changeset patch # User Thomas Wuerthinger # Date 1373426865 -7200 # Node ID 87d2df0a7624fe3c533eeca59e35efc3c3263ecb # Parent d2055a110396f00affb7fb9af57868a2fafa286c# Parent 73122b5edf6a692d65c7a021493e98295a657373 Merge. diff -r 73122b5edf6a -r 87d2df0a7624 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Tue Jul 09 15:37:50 2013 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Wed Jul 10 05:27:45 2013 +0200 @@ -45,6 +45,7 @@ import com.oracle.graal.phases.tiers.*; import com.oracle.graal.truffle.phases.*; import com.oracle.graal.virtual.phases.ea.*; +import com.oracle.truffle.api.*; import com.oracle.truffle.api.nodes.*; /** @@ -244,8 +245,10 @@ private FixedNode expandInvoke(Invoke invoke) { if (invoke.callTarget() instanceof MethodCallTargetNode) { final MethodCallTargetNode methodCallTargetNode = (MethodCallTargetNode) invoke.callTarget(); + if ((methodCallTargetNode.invokeKind() == InvokeKind.Special || methodCallTargetNode.invokeKind() == InvokeKind.Static) && - !Modifier.isNative(methodCallTargetNode.targetMethod().getModifiers()) && methodCallTargetNode.targetMethod().getAnnotation(ExplodeLoop.class) == null) { + !Modifier.isNative(methodCallTargetNode.targetMethod().getModifiers()) && methodCallTargetNode.targetMethod().getAnnotation(ExplodeLoop.class) == null && + methodCallTargetNode.targetMethod().getAnnotation(CompilerDirectives.SlowPath.class) == null) { Class macroSubstitution = replacements.getMacroSubstitution(methodCallTargetNode.targetMethod()); if (macroSubstitution != null) { return InliningUtil.inlineMacroNode(invoke, methodCallTargetNode.targetMethod(), methodCallTargetNode.graph(), macroSubstitution); diff -r 73122b5edf6a -r 87d2df0a7624 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java Tue Jul 09 15:37:50 2013 -0700 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java Wed Jul 10 05:27:45 2013 +0200 @@ -139,4 +139,12 @@ public static T unsafeCast(Object value, Class clazz) { return (T) value; } + + /** + * Marks methods that are considered slowpath and should therefore not be inlined by default. + */ + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.METHOD}) + public @interface SlowPath { + } }