# HG changeset patch # User Thomas Wuerthinger # Date 1373223665 -7200 # Node ID 90a7a58bf54fedd83b59377af1f25a7cec13c7ce # Parent 8060a20be76b89d0916cdf124e5ef06d455defc3 Create utility method in InliningUtil for inlining macro nodes. diff -r 8060a20be76b -r 90a7a58bf54f 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 Sun Jul 07 21:00:29 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Sun Jul 07 21:01:05 2013 +0200 @@ -320,27 +320,7 @@ assert inlineable instanceof InlineableMacroNode; Class macroNodeClass = ((InlineableMacroNode) inlineable).getMacroNodeClass(); - if (((MethodCallTargetNode) invoke.callTarget()).targetMethod() != concrete) { - assert ((MethodCallTargetNode) invoke.callTarget()).invokeKind() != InvokeKind.Static; - InliningUtil.replaceInvokeCallTarget(invoke, graph, InvokeKind.Special, concrete); - } - - FixedWithNextNode macroNode; - try { - macroNode = macroNodeClass.getConstructor(Invoke.class).newInstance(invoke); - } catch (ReflectiveOperationException | IllegalArgumentException | SecurityException e) { - throw new GraalInternalError(e).addContext(invoke.asNode()).addContext("macroSubstitution", macroNodeClass); - } - - CallTargetNode callTarget = invoke.callTarget(); - if (invoke instanceof InvokeNode) { - graph.replaceFixedWithFixed((InvokeNode) invoke, graph.add(macroNode)); - } else { - InvokeWithExceptionNode invokeWithException = (InvokeWithExceptionNode) invoke; - invokeWithException.killExceptionEdge(); - graph.replaceSplitWithFixed(invokeWithException, graph.add(macroNode), invokeWithException.next()); - } - GraphUtil.killWithUnusedFloatingInputs(callTarget); + inlineMacroNode(invoke, concrete, graph, macroNodeClass); } InlinedBytecodes.add(concrete.getCodeSize()); @@ -1472,4 +1452,29 @@ public static Class getMacroNodeClass(Replacements replacements, ResolvedJavaMethod target) { return replacements.getMacroSubstitution(target); } + + public static FixedWithNextNode inlineMacroNode(Invoke invoke, ResolvedJavaMethod concrete, StructuredGraph graph, Class macroNodeClass) throws GraalInternalError { + if (((MethodCallTargetNode) invoke.callTarget()).targetMethod() != concrete) { + assert ((MethodCallTargetNode) invoke.callTarget()).invokeKind() != InvokeKind.Static; + InliningUtil.replaceInvokeCallTarget(invoke, graph, InvokeKind.Special, concrete); + } + + FixedWithNextNode macroNode; + try { + macroNode = macroNodeClass.getConstructor(Invoke.class).newInstance(invoke); + } catch (ReflectiveOperationException | IllegalArgumentException | SecurityException e) { + throw new GraalInternalError(e).addContext(invoke.asNode()).addContext("macroSubstitution", macroNodeClass); + } + + CallTargetNode callTarget = invoke.callTarget(); + if (invoke instanceof InvokeNode) { + graph.replaceFixedWithFixed((InvokeNode) invoke, graph.add(macroNode)); + } else { + InvokeWithExceptionNode invokeWithException = (InvokeWithExceptionNode) invoke; + invokeWithException.killExceptionEdge(); + graph.replaceSplitWithFixed(invokeWithException, graph.add(macroNode), invokeWithException.next()); + } + GraphUtil.killWithUnusedFloatingInputs(callTarget); + return macroNode; + } }