# HG changeset patch # User Thomas Wuerthinger # Date 1328790093 -3600 # Node ID 447018dd775f1c6db505ba5b04c3d560024d032a # Parent c883c38e566f835905a266706f0f3c3a730d821c# Parent f1d3800b59e1e36a6a44a17233b76b8831a3dc63 Merge. diff -r c883c38e566f -r 447018dd775f graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/InliningUtil.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/InliningUtil.java Thu Feb 09 11:45:15 2012 +0100 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/InliningUtil.java Thu Feb 09 13:21:33 2012 +0100 @@ -399,18 +399,27 @@ private static Invoke duplicateInvokeForInlining(StructuredGraph graph, Invoke invoke, MergeNode exceptionMerge, PhiNode exceptionObjectPhi, boolean useForInlining) { Invoke result = (Invoke) invoke.node().copyWithInputs(); result.setUseForInlining(useForInlining); + + CiKind kind = invoke.node().kind(); + if (!kind.isVoid()) { + FrameState stateAfter = invoke.stateAfter(); + stateAfter = stateAfter.duplicate(stateAfter.bci); + stateAfter.replaceFirstInput(invoke.node(), result.node()); + result.setStateAfter(stateAfter); + } + if (invoke instanceof InvokeWithExceptionNode) { assert exceptionMerge != null && exceptionObjectPhi != null; InvokeWithExceptionNode invokeWithException = (InvokeWithExceptionNode) invoke; BeginNode exceptionEdge = invokeWithException.exceptionEdge(); ExceptionObjectNode exceptionObject = (ExceptionObjectNode) exceptionEdge.next(); - FrameState stateAfter = exceptionObject.stateAfter(); + FrameState stateAfterException = exceptionObject.stateAfter(); BeginNode newExceptionEdge = (BeginNode) exceptionEdge.copyWithInputs(); ExceptionObjectNode newExceptionObject = (ExceptionObjectNode) exceptionObject.copyWithInputs(); // set new state (pop old exception object, push new one) - newExceptionObject.setStateAfter(stateAfter.duplicateModified(stateAfter.bci, stateAfter.rethrowException(), CiKind.Object, newExceptionObject)); + newExceptionObject.setStateAfter(stateAfterException.duplicateModified(stateAfterException.bci, stateAfterException.rethrowException(), CiKind.Object, newExceptionObject)); newExceptionEdge.setNext(newExceptionObject); EndNode endNode = graph.add(new EndNode()); diff -r c883c38e566f -r 447018dd775f mx/commands.py --- a/mx/commands.py Thu Feb 09 11:45:15 2012 +0100 +++ b/mx/commands.py Thu Feb 09 13:21:33 2012 +0100 @@ -659,9 +659,35 @@ f.write(json.dumps(results)) def specjvm2008(args): - benchArgs = [a[1:] for a in args if a[0] == '@'] - vmArgs = [a for a in args if a[0] != '@'] - sanitycheck.getSPECjvm2008(benchArgs).bench('graal', opts=vmArgs) + """run one or all SPECjvm2008 benchmarks + + All options begining with - will be passed to the vm except for -ikv -wt and -it. + Other options are supposed to be benchmark names and will be passed to SPECjvm2008.""" + benchArgs = [a for a in args if a[0] != '-'] + vmArgs = [a for a in args if a[0] == '-'] + wt = None + it = None + skipValid = False + if '-ikv' in vmArgs: + skipValid = True + vmArgs.remove('-ikv') + if '-wt' in vmArgs: + wtIdx = args.index('-wt') + try: + wt = int(args[wtIdx+1]) + except: + mx.abort('-wt (Warmup time) needs a numeric value (seconds)') + vmArgs.remove('-wt') + benchArgs.remove(args[wtIdx+1]) + if '-it' in vmArgs: + itIdx = args.index('-it') + try: + it = int(args[itIdx+1]) + except: + mx.abort('-it (Iteration time) needs a numeric value (seconds)') + vmArgs.remove('-it') + benchArgs.remove(args[itIdx+1]) + sanitycheck.getSPECjvm2008(benchArgs, skipValid, wt, it).bench('graal', opts=vmArgs) def hsdis(args): """Installs the hsdis library