Mercurial > hg > graal-compiler
changeset 12450:aace760df495
Merge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Wed, 16 Oct 2013 15:03:29 +0200 |
parents | c0fa3796819b (diff) b3490a7bb1b7 (current diff) |
children | d60cdea43920 |
files | graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/AMD64SPARCForeignCallsProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java |
diffstat | 12 files changed, 38 insertions(+), 370 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Wed Oct 16 15:03:29 2013 +0200 @@ -52,18 +52,18 @@ public void testByteConstant() { assertEquals(new IntegerStamp(Kind.Int, 0, 0, 0x0, 0x0), ConstantNode.forByte((byte) 0, graph).stamp()); assertEquals(new IntegerStamp(Kind.Int, 16, 16, 0x10, 0x10), ConstantNode.forByte((byte) 16, graph).stamp()); - assertEquals(new IntegerStamp(Kind.Int, -16, -16, 0xf0, 0xf0), ConstantNode.forByte((byte) -16, graph).stamp()); + assertEquals(new IntegerStamp(Kind.Int, -16, -16, 0xfffffff0L, 0xfffffff0L), ConstantNode.forByte((byte) -16, graph).stamp()); assertEquals(new IntegerStamp(Kind.Int, 127, 127, 0x7f, 0x7f), ConstantNode.forByte((byte) 127, graph).stamp()); - assertEquals(new IntegerStamp(Kind.Int, -128, -128, 0x80, 0x80), ConstantNode.forByte((byte) -128, graph).stamp()); + assertEquals(new IntegerStamp(Kind.Int, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forByte((byte) -128, graph).stamp()); } @Test public void testShortConstant() { assertEquals(new IntegerStamp(Kind.Int, 0, 0, 0x0, 0x0), ConstantNode.forShort((short) 0, graph).stamp()); assertEquals(new IntegerStamp(Kind.Int, 128, 128, 0x80, 0x80), ConstantNode.forShort((short) 128, graph).stamp()); - assertEquals(new IntegerStamp(Kind.Int, -128, -128, 0xff80, 0xff80), ConstantNode.forShort((short) -128, graph).stamp()); + assertEquals(new IntegerStamp(Kind.Int, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forShort((short) -128, graph).stamp()); assertEquals(new IntegerStamp(Kind.Int, 32767, 32767, 0x7fff, 0x7fff), ConstantNode.forShort((short) 32767, graph).stamp()); - assertEquals(new IntegerStamp(Kind.Int, -32768, -32768, 0x8000, 0x8000), ConstantNode.forShort((short) -32768, graph).stamp()); + assertEquals(new IntegerStamp(Kind.Int, -32768, -32768, 0xffff8000L, 0xffff8000L), ConstantNode.forShort((short) -32768, graph).stamp()); } @Test
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Oct 16 15:03:29 2013 +0200 @@ -75,7 +75,9 @@ } public static ConstantNode forConstant(Constant constant, MetaAccessProvider metaAccess, Graph graph) { - if (constant.getKind() == Kind.Object) { + if (constant.getKind().getStackKind() == Kind.Int && constant.getKind() != Kind.Int) { + return forInt(constant.asInt(), graph); + } else if (constant.getKind() == Kind.Object) { return graph.unique(new ConstantNode(constant, metaAccess)); } else { return graph.unique(new ConstantNode(constant)); @@ -142,7 +144,7 @@ * @return a node representing the boolean */ public static ConstantNode forBoolean(boolean i, Graph graph) { - return graph.unique(new ConstantNode(Constant.forBoolean(i))); + return graph.unique(new ConstantNode(Constant.forInt(i ? 1 : 0))); } /** @@ -153,7 +155,7 @@ * @return a node representing the byte */ public static ConstantNode forByte(byte i, Graph graph) { - return graph.unique(new ConstantNode(Constant.forByte(i))); + return graph.unique(new ConstantNode(Constant.forInt(i))); } /** @@ -164,7 +166,7 @@ * @return a node representing the char */ public static ConstantNode forChar(char i, Graph graph) { - return graph.unique(new ConstantNode(Constant.forChar(i))); + return graph.unique(new ConstantNode(Constant.forInt(i))); } /** @@ -175,7 +177,7 @@ * @return a node representing the short */ public static ConstantNode forShort(short i, Graph graph) { - return graph.unique(new ConstantNode(Constant.forShort(i))); + return graph.unique(new ConstantNode(Constant.forInt(i))); } /** @@ -217,7 +219,6 @@ public static ConstantNode defaultForKind(Kind kind, Graph graph) { switch (kind) { case Boolean: - return ConstantNode.forBoolean(false, graph); case Byte: case Char: case Short:
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Wed Oct 16 15:03:29 2013 +0200 @@ -65,7 +65,7 @@ int entryIndex = state.getVirtualObject().entryIndexForOffset(offset); if (entryIndex != -1) { ValueNode entry = state.getEntry(entryIndex); - if (entry.kind() == accessKind() || state.getVirtualObject().entryKind(entryIndex) == accessKind()) { + if (entry.kind() == kind() || state.getVirtualObject().entryKind(entryIndex) == accessKind()) { tool.replaceWith(entry); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Wed Oct 16 15:03:29 2013 +0200 @@ -82,7 +82,7 @@ int entryIndex = state.getVirtualObject().entryIndexForOffset(offset); if (entryIndex != -1) { ValueNode entry = state.getEntry(entryIndex); - if (entry.kind() == this.accessKind() || state.getVirtualObject().entryKind(entryIndex) == this.accessKind()) { + if (entry.kind() == value.kind() || state.getVirtualObject().entryKind(entryIndex) == accessKind()) { tool.setVirtualEntry(state, entryIndex, value()); tool.delete(); }
--- a/graal/com.oracle.graal.truffle.printer/src/com/oracle/graal/truffle/printer/InlinePrinterProcessor.java Wed Oct 16 13:24:34 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2013, 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.truffle.printer; - -import java.util.*; - -import com.oracle.graal.debug.*; -import com.oracle.graal.truffle.printer.method.*; - -public final class InlinePrinterProcessor { - - private static final String IDENT = " "; - private static InlinePrinterProcessor instance; - - private final List<TruffleMethodNode> inlineTree = new ArrayList<>(); - - public static void initialize() { - if (instance == null) { - instance = new InlinePrinterProcessor(); - } else { - throw new IllegalStateException(); - } - } - - public static void addInlining(MethodHolder methodHolder) { - instance.addExecuteInline(methodHolder); - } - - public static void printTree() { - instance.print(); - } - - public static void reset() { - instance = null; - } - - private void addExecuteInline(MethodHolder executeMethod) { - if (inlineTree.isEmpty()) { - inlineTree.add(new TruffleMethodNode(null, executeMethod)); - } else { - TruffleMethodNode newNode = null; - for (TruffleMethodNode node : inlineTree) { - newNode = node.addTruffleExecuteMethodNode(executeMethod); - if (newNode != null) { - break; - } - } - if (newNode == null) { - throw new AssertionError("Not able to add " + executeMethod.getMethod().toString() + " to the inlineing tree"); - } - inlineTree.add(newNode); - } - } - - private TruffleMethodNode getInlineTree() { - TruffleMethodNode root = inlineTree.get(0); - while (root.getParent() != null) { - root = root.getParent(); - } - - // asserting: - for (TruffleMethodNode node : inlineTree) { - TruffleMethodNode nodeRoot = node; - while (nodeRoot.getParent() != null) { - nodeRoot = nodeRoot.getParent(); - } - if (root != nodeRoot) { - throw new AssertionError("Different roots found"); - } - } - - return root; - } - - private void print() { - String curIndent = ""; - TruffleMethodNode root = getInlineTree(); - String name = root.getJavaMethod().getDeclaringClass().getName(); - TTY.print(name.substring(name.lastIndexOf('/') + 1, name.lastIndexOf(';')) + "::" + root.getJavaMethod().getName()); - TTY.println(); - recursivePrint(curIndent, root); - } - - private void recursivePrint(String curIdent, TruffleMethodNode node) { - Map<Integer, List<TruffleMethodNode>> inlinings = node.getInlinings(); - for (int l : inlinings.keySet()) { - for (TruffleMethodNode n : inlinings.get(l)) { - TTY.print(curIdent); - TTY.print("L" + l + " "); - String name = n.getJavaMethod().getDeclaringClass().getName(); - TTY.print(name.substring(name.lastIndexOf('/') + 1, name.lastIndexOf(';')) + "::" + n.getJavaMethod().getName()); - TTY.println(); - recursivePrint(curIdent + IDENT, n); - } - } - } -}
--- a/graal/com.oracle.graal.truffle.printer/src/com/oracle/graal/truffle/printer/method/CallStackElement.java Wed Oct 16 13:24:34 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2013, 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.truffle.printer.method; - -import com.oracle.graal.api.meta.*; - -public class CallStackElement { - - private final int lineOfInvoke; - private final ResolvedJavaMethod callerMethod; - - public CallStackElement(ResolvedJavaMethod callerMethod, int lineOfInvoke) { - this.lineOfInvoke = lineOfInvoke; - this.callerMethod = callerMethod; - } - - public int getLineOfInvoke() { - return lineOfInvoke; - } - - @Override - public boolean equals(Object o) { - if (o instanceof CallStackElement) { - CallStackElement i = (CallStackElement) o; - if (i.getCallerMethod() == this.getCallerMethod()/* - * && i.lineOfInvoke == - * this.lineOfInvoke - */) { - return true; - } else { - return false; - } - } else { - return false; - } - } - - @Override - public int hashCode() { - return super.hashCode(); - } - - public ResolvedJavaMethod getCallerMethod() { - return callerMethod; - } -}
--- a/graal/com.oracle.graal.truffle.printer/src/com/oracle/graal/truffle/printer/method/MethodHolder.java Wed Oct 16 13:24:34 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2013, 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.truffle.printer.method; - -import java.util.*; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.java.*; - -public final class MethodHolder { - - private final List<CallStackElement> callStack; - private final ResolvedJavaMethod method; - - public static MethodHolder getNewTruffleExecuteMethod(MethodCallTargetNode targetNode) { - return new MethodHolder(getCallStack(targetNode), targetNode.targetMethod()); - } - - private MethodHolder(List<CallStackElement> callStack, ResolvedJavaMethod callee) { - this.callStack = callStack; - this.method = callee; - } - - public List<CallStackElement> getCallStack() { - return callStack; - } - - public ResolvedJavaMethod getMethod() { - return method; - } - - private static List<CallStackElement> getCallStack(MethodCallTargetNode targetNode) { - List<CallStackElement> callStack = new ArrayList<>(); - FrameState state = targetNode.invoke().stateAfter(); - while (state != null) { - ResolvedJavaMethod method = state.method(); - LineNumberTable table = method.getLineNumberTable(); - int lineNr = table.getLineNumber(state.bci - 1); - callStack.add(new CallStackElement(method, lineNr)); - state = state.outerFrameState(); - } - return callStack; - } -}
--- a/graal/com.oracle.graal.truffle.printer/src/com/oracle/graal/truffle/printer/method/TruffleMethodNode.java Wed Oct 16 13:24:34 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2013, 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.truffle.printer.method; - -import java.util.*; - -import com.oracle.graal.api.meta.*; - -public final class TruffleMethodNode { - - private final TruffleMethodNode parent; - private final MethodHolder truffleExecuteMethod; - private final Map<Integer, List<TruffleMethodNode>> inlinings; - - public TruffleMethodNode(TruffleMethodNode parent, MethodHolder truffleExecuteMethod) { - this.parent = parent; - this.truffleExecuteMethod = truffleExecuteMethod; - this.inlinings = new HashMap<>(); - } - - public TruffleMethodNode getParent() { - return parent; - } - - public ResolvedJavaMethod getJavaMethod() { - return truffleExecuteMethod.getMethod(); - } - - public Map<Integer, List<TruffleMethodNode>> getInlinings() { - return inlinings; - } - - public void putInlineList(int lineOfInvoke, List<TruffleMethodNode> list) { - inlinings.put(lineOfInvoke, list); - } - - public List<TruffleMethodNode> getInliningsAtLine(int line) { - return inlinings.get(line); - } - - public MethodHolder getTruffleExecuteMethod() { - return truffleExecuteMethod; - } - - public TruffleMethodNode addTruffleExecuteMethodNode(MethodHolder newMethod) { - int lineOfInvoke = newMethod.getCallStack().get(0).getLineOfInvoke(); - - if (!callStackMatch(newMethod.getCallStack())) { - return null; - } else { - TruffleMethodNode node = new TruffleMethodNode(this, newMethod); - if (getInliningsAtLine(lineOfInvoke) == null) { - List<TruffleMethodNode> list = new ArrayList<>(); - list.add(node); - putInlineList(lineOfInvoke, list); - } else { - getInliningsAtLine(lineOfInvoke).add(node); - } - return node; - } - } - - private boolean callStackMatch(List<CallStackElement> callStack) { - List<CallStackElement> curCallStack = truffleExecuteMethod.getCallStack(); - if (curCallStack.size() == callStack.size() - 1) { - if (curCallStack.size() >= 1) { - if (curCallStack.get(0).getCallerMethod() != callStack.get(1).getCallerMethod()) { - return false; - } - } - for (int i = 1; i < curCallStack.size(); i++) { - if (!curCallStack.get(i).equals(callStack.get(i + 1))) { - return false; - } - } - } else { - return false; - } - return true; - } - -}
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Wed Oct 16 15:03:29 2013 +0200 @@ -56,7 +56,7 @@ @Option(help = "") public static final OptionValue<Boolean> TruffleFunctionInlining = new OptionValue<>(true); @Option(help = "") - public static final OptionValue<Integer> TruffleGraphMaxNodes = new OptionValue<>(20000); + public static final OptionValue<Integer> TruffleGraphMaxNodes = new OptionValue<>(25000); @Option(help = "") public static final OptionValue<Integer> TruffleInliningMaxRecursiveDepth = new OptionValue<>(2); @Option(help = "")
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Wed Oct 16 15:03:29 2013 +0200 @@ -186,8 +186,14 @@ } private ValueNode initialValue(FrameSlotKind kind) { - Kind graalKind = Kind.Long; + Kind graalKind = null; switch (kind) { + case Boolean: + graalKind = Kind.Boolean; + break; + case Byte: + graalKind = Kind.Byte; + break; case Int: graalKind = Kind.Int; break; @@ -197,9 +203,17 @@ case Float: graalKind = Kind.Float; break; - case Boolean: - graalKind = Kind.Boolean; + case Long: + graalKind = Kind.Long; + break; + case Object: + graalKind = Kind.Object; break; + case Illegal: + graalKind = Kind.Long; + break; + default: + throw new IllegalStateException("Unexpected frame slot kind: " + kind); } return ConstantNode.defaultForKind(graalKind, graph());
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java Wed Oct 16 15:03:29 2013 +0200 @@ -61,9 +61,11 @@ } else { locationIdentity = ObjectLocationIdentity.create(locationIdentityObject); } - return graph().add( - new UnsafeLoadNode(objectArgument, offsetArgument, this.stamp().kind(), locationIdentity, CompareNode.createCompareNode(Condition.EQ, conditionArgument, - ConstantNode.forBoolean(true, graph())))); + Node result = graph().add( + new UnsafeLoadNode(objectArgument, offsetArgument, this.getTargetMethod().getSignature().getReturnKind(), locationIdentity, CompareNode.createCompareNode(Condition.EQ, + conditionArgument, ConstantNode.forBoolean(true, graph())))); + + return result; } return this; }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeStoreMacroNode.java Wed Oct 16 13:24:34 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeStoreMacroNode.java Wed Oct 16 15:03:29 2013 +0200 @@ -61,7 +61,8 @@ locationIdentity = ObjectLocationIdentity.create(locationIdentityObject); } - UnsafeStoreNode unsafeStoreNode = graph().add(new UnsafeStoreNode(objectArgument, offsetArgument, valueArgument, valueArgument.kind(), locationIdentity)); + UnsafeStoreNode unsafeStoreNode = graph().add( + new UnsafeStoreNode(objectArgument, offsetArgument, valueArgument, this.getTargetMethod().getSignature().getParameterKind(VALUE_ARGUMENT_INDEX), locationIdentity)); unsafeStoreNode.setStateAfter(this.stateAfter()); return unsafeStoreNode; }