# HG changeset patch # User Thomas Wuerthinger # Date 1325603191 -3600 # Node ID b765172082ac3b9bdffcbac29f01806acea42e0c # Parent ae261db78f68cb82c47c00044cf230f367b8ef87 Move HotSpotMethod* and HotSpotType* implementations into ri subpackage. diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/Compiler.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/Compiler.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/Compiler.java Tue Jan 03 16:06:31 2012 +0100 @@ -24,6 +24,7 @@ import com.oracle.max.graal.compiler.*; import com.oracle.max.graal.cri.*; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/CompilerImpl.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/CompilerImpl.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/CompilerImpl.java Tue Jan 03 16:06:31 2012 +0100 @@ -29,6 +29,7 @@ import com.oracle.max.graal.compiler.*; import com.oracle.max.graal.cri.*; import com.oracle.max.graal.hotspot.logging.*; +import com.oracle.max.graal.hotspot.ri.*; import com.oracle.max.graal.hotspot.server.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotConstantPool.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotConstantPool.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotConstantPool.java Tue Jan 03 16:06:31 2012 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.max.graal.hotspot; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ri.*; /** diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotIntrinsic.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotIntrinsic.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.oracle.max.graal.compiler.*; -import com.oracle.max.graal.compiler.phases.*; -import com.oracle.max.graal.snippets.*; - -/** - * Enumeration of intrinsic methods. - */ -public enum HotSpotIntrinsic { - Thread_currentThread("java.lang.Thread", "currentThread"); - - public final String className; - public final String methodName; - public final Class[] parameterTypes; - - - private HotSpotIntrinsic(String className, String methodName, Class... parameterTypes) { - this.className = className; - this.methodName = methodName; - this.parameterTypes = parameterTypes; - } - - public static void installIntrinsics(HotSpotRuntime runtime) { - assert CompilerImpl.getInstance() != null : "compiler must exist before installing intrinsics"; - if (GraalOptions.Intrinsify) { - GraalIntrinsics.installIntrinsics(runtime, runtime.getCompiler().getTarget(), PhasePlan.DEFAULT); - Snippets.install(runtime, runtime.getCompiler().getTarget(), new SystemSnippets(), GraalOptions.PlotSnippets, PhasePlan.DEFAULT); - Snippets.install(runtime, runtime.getCompiler().getTarget(), new UnsafeSnippets(), GraalOptions.PlotSnippets, PhasePlan.DEFAULT); - } - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethod.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethod.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.sun.cri.ri.*; - -public abstract class HotSpotMethod extends CompilerObject implements RiMethod { - - /** - * - */ - private static final long serialVersionUID = 7167491397941960839L; - protected String name; - - protected HotSpotMethod(Compiler compiler) { - super(compiler); - } - - @Override - public final String name() { - return name; - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethodResolved.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethodResolved.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.oracle.max.graal.hotspot.server.*; -import com.sun.cri.ri.*; - -public interface HotSpotMethodResolved extends RiResolvedMethod, Remote { - - RiResolvedMethod uniqueConcreteMethod(); - void dumpProfile(); -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethodResolvedImpl.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethodResolvedImpl.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,309 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import java.lang.annotation.*; -import java.lang.reflect.*; -import java.util.*; -import java.util.concurrent.*; - -import com.oracle.max.criutils.*; -import com.sun.cri.ci.*; -import com.sun.cri.ri.*; - -/** - * Implementation of RiMethod for resolved HotSpot methods. - */ -public final class HotSpotMethodResolvedImpl extends HotSpotMethod implements HotSpotMethodResolved { - - /** - * - */ - private static final long serialVersionUID = -5486975070147586588L; - - /** DO NOT USE IN JAVA CODE! */ - @SuppressWarnings("unused") - @Deprecated - private Object javaMirror; - - // cached values - private final int codeSize; - private final int accessFlags; - private final int maxLocals; - private final int maxStackSize; - private RiSignature signature; - private Boolean hasBalancedMonitors; - private Map compilerStorage; - private RiResolvedType holder; - private byte[] code; - - private HotSpotMethodResolvedImpl() { - super(null); - codeSize = -1; - accessFlags = -1; - maxLocals = -1; - maxStackSize = -1; - throw new IllegalStateException("this constructor is never actually called, because the objects are allocated from within the VM"); - } - - @Override - public RiResolvedType holder() { - return holder; - } - - @Override - public int accessFlags() { - return accessFlags; - } - - @Override - public boolean canBeStaticallyBound() { - return isLeafMethod() || Modifier.isStatic(accessFlags()); - } - - @Override - public byte[] code() { - if (code == null) { - code = compiler.getVMEntries().RiMethod_code(this); - assert code.length == codeSize : "expected: " + codeSize + ", actual: " + code.length; - } - return code; - } - - @Override - public int codeSize() { - return codeSize; - } - - @Override - public RiExceptionHandler[] exceptionHandlers() { - return compiler.getVMEntries().RiMethod_exceptionHandlers(this); - } - - @Override - public boolean hasBalancedMonitors() { - if (hasBalancedMonitors == null) { - hasBalancedMonitors = compiler.getVMEntries().RiMethod_hasBalancedMonitors(this); - } - return hasBalancedMonitors; - } - - @Override - public boolean isClassInitializer() { - return "".equals(name) && Modifier.isStatic(accessFlags()); - } - - @Override - public boolean isConstructor() { - return "".equals(name) && !Modifier.isStatic(accessFlags()); - } - - @Override - public boolean isLeafMethod() { - return Modifier.isFinal(accessFlags()) || Modifier.isPrivate(accessFlags()); - } - - @Override - public boolean isOverridden() { - throw new UnsupportedOperationException("isOverridden"); - } - - @Override - public boolean noSafepointPolls() { - return false; - } - - @Override - public String jniSymbol() { - throw new UnsupportedOperationException("jniSymbol"); - } - - public CiBitMap[] livenessMap() { - return null; - } - - @Override - public int maxLocals() { - return maxLocals; - } - - @Override - public int maxStackSize() { - return maxStackSize; - } - - @Override - public StackTraceElement toStackTraceElement(int bci) { - return CiUtil.toStackTraceElement(this, bci); - } - - @Override - public RiResolvedMethod uniqueConcreteMethod() { - return (RiResolvedMethod) compiler.getVMEntries().RiMethod_uniqueConcreteMethod(this); - } - - @Override - public RiSignature signature() { - if (signature == null) { - signature = new HotSpotSignature(compiler, compiler.getVMEntries().RiMethod_signature(this)); - } - return signature; - } - - @Override - public String toString() { - return "HotSpotMethod<" + CiUtil.format("%h.%n", this) + ">"; - } - - public boolean hasCompiledCode() { - return compiler.getVMEntries().RiMethod_hasCompiledCode(this); - } - - @Override - public RiResolvedType accessor() { - return null; - } - - @Override - public String intrinsic() { - return null; - } - - public int invocationCount() { - return compiler.getVMEntries().RiMethod_invocationCount(this); - } - - public int exceptionProbability(int bci) { - return compiler.getVMEntries().RiMethod_exceptionProbability(this, bci); - } - - public RiTypeProfile typeProfile(int bci) { - return compiler.getVMEntries().RiMethod_typeProfile(this, bci); - } - - public double branchProbability(int bci) { - return compiler.getVMEntries().RiMethod_branchProbability(this, bci); - } - - public double[] switchProbability(int bci) { - return compiler.getVMEntries().RiMethod_switchProbability(this, bci); - } - - @Override - public Map compilerStorage() { - if (compilerStorage == null) { - compilerStorage = new ConcurrentHashMap<>(); - } - return compilerStorage; - } - - @Override - public RiConstantPool getConstantPool() { - return ((HotSpotTypeResolvedImpl) holder()).constantPool(); - } - - public void dumpProfile() { - TTY.println("profile info for %s", this); - TTY.println("canBeStaticallyBound: " + canBeStaticallyBound()); - TTY.println("invocationCount: " + invocationCount()); - for (int i = 0; i < codeSize(); i++) { - if (branchProbability(i) != -1) { - TTY.println(" branchProbability@%d: %f", i, branchProbability(i)); - } - if (exceptionProbability(i) > 0) { - TTY.println(" exceptionProbability@%d: %d", i, exceptionProbability(i)); - } - RiTypeProfile profile = typeProfile(i); - if (profile != null && profile.count > 0) { - TTY.print(" profile@%d: count: %d, morphism: %d", i, profile.count, profile.morphism); - if (profile.types != null) { - TTY.print(", types:"); - for (int i2 = 0; i2 < profile.types.length; i2++) { - TTY.print(" %s (%f)", profile.types[i2], profile.probabilities[i2]); - } - } - TTY.println(); - if (exceptionProbability(i) > 0) { - TTY.println(" exceptionProbability@%d: %d", i, exceptionProbability(i)); - } - } - } - } - - - - @Override - public Annotation[][] getParameterAnnotations() { - if (isConstructor()) { - Constructor javaConstructor = toJavaConstructor(); - return javaConstructor == null ? null : javaConstructor.getParameterAnnotations(); - } - Method javaMethod = toJava(); - return javaMethod == null ? null : javaMethod.getParameterAnnotations(); - } - - @Override - public T getAnnotation(Class annotationClass) { - if (isConstructor()) { - Constructor javaConstructor = toJavaConstructor(); - return javaConstructor == null ? null : javaConstructor.getAnnotation(annotationClass); - } - Method javaMethod = toJava(); - return javaMethod == null ? null : javaMethod.getAnnotation(annotationClass); - } - - @Override - public Type getGenericReturnType() { - if (isConstructor()) { - return void.class; - } - Method javaMethod = toJava(); - return javaMethod == null ? null : javaMethod.getGenericReturnType(); - } - - @Override - public Type[] getGenericParameterTypes() { - if (isConstructor()) { - Constructor javaConstructor = toJavaConstructor(); - return javaConstructor == null ? null : javaConstructor.getGenericParameterTypes(); - } - Method javaMethod = toJava(); - return javaMethod == null ? null : javaMethod.getGenericParameterTypes(); - } - - private Method toJava() { - try { - return holder.toJava().getDeclaredMethod(name, CiUtil.signatureToTypes(signature, holder)); - } catch (NoSuchMethodException e) { - return null; - } - } - - private Constructor toJavaConstructor() { - try { - return holder.toJava().getDeclaredConstructor(CiUtil.signatureToTypes(signature, holder)); - } catch (NoSuchMethodException e) { - return null; - } - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethodUnresolved.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotMethodUnresolved.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.sun.cri.ri.*; - -/** - * Implementation of RiMethod for unresolved HotSpot methods. - */ -public final class HotSpotMethodUnresolved extends HotSpotMethod { - /** - * - */ - private static final long serialVersionUID = 5610263481791970079L; - private final RiSignature signature; - protected RiType holder; - - public HotSpotMethodUnresolved(Compiler compiler, String name, String signature, RiType holder) { - super(compiler); - this.name = name; - this.holder = holder; - this.signature = new HotSpotSignature(compiler, signature); - } - - @Override - public RiSignature signature() { - return signature; - } - - @Override - public RiType holder() { - return holder; - } - - @Override - public String toString() { - return "HotSpotMethod<" + holder.name() + ". " + name + ", unresolved>"; - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotRuntime.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotRuntime.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotRuntime.java Tue Jan 03 16:06:31 2012 +0100 @@ -30,6 +30,7 @@ import com.oracle.max.graal.cri.*; import com.oracle.max.graal.graph.*; import com.oracle.max.graal.hotspot.nodes.*; +import com.oracle.max.graal.hotspot.ri.*; import com.oracle.max.graal.nodes.*; import com.oracle.max.graal.nodes.calc.*; import com.oracle.max.graal.nodes.extended.*; @@ -174,6 +175,7 @@ */ @Override public int getCustomStackAreaSize() { + // TODO shouldn't be hard coded return 8; } diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotSignature.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotSignature.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotSignature.java Tue Jan 03 16:06:31 2012 +0100 @@ -25,6 +25,7 @@ import java.util.*; import com.oracle.max.graal.compiler.graphbuilder.*; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTargetMethod.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTargetMethod.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTargetMethod.java Tue Jan 03 16:06:31 2012 +0100 @@ -25,6 +25,7 @@ import java.util.*; import com.oracle.max.graal.hotspot.logging.*; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ci.*; import com.sun.cri.ci.CiTargetMethod.ExceptionHandler; import com.sun.cri.ci.CiTargetMethod.Mark; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotType.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotType.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.sun.cri.ri.*; - -/** - * Common interface for all HotSpot RiType-implementations. - */ -public abstract class HotSpotType extends CompilerObject implements RiType { - /** - * - */ - private static final long serialVersionUID = -4252886265301910771L; - protected String name; - - protected HotSpotType(Compiler compiler) { - super(compiler); - } - - @Override - public final String name() { - return name; - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypePrimitive.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypePrimitive.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import java.lang.annotation.*; - -import com.oracle.max.graal.compiler.util.*; -import com.sun.cri.ci.*; -import com.sun.cri.ri.*; - -/** - * Implementation of RiType for primitive HotSpot types. - */ -public final class HotSpotTypePrimitive extends HotSpotType implements RiResolvedType { - - /** - * - */ - private static final long serialVersionUID = -6208552348908071473L; - private CiKind kind; - - - HotSpotTypePrimitive(Compiler compiler, CiKind kind) { - super(compiler); - this.kind = kind; - this.name = kind.toString(); - } - - @Override - public int accessFlags() { - return kind.toJavaClass().getModifiers(); - } - - @Override - public RiResolvedType arrayOf() { - return (RiResolvedType) compiler.getVMEntries().getPrimitiveArrayType(kind); - } - - @Override - public RiResolvedType componentType() { - return null; - } - - @Override - public RiResolvedType exactType() { - return this; - } - - @Override - public RiResolvedType superType() { - return null; - } - - @Override - public CiConstant getEncoding(Representation r) { - throw Util.unimplemented("HotSpotTypePrimitive.getEncoding"); - } - - @Override - public CiKind getRepresentationKind(Representation r) { - return kind; - } - - @Override - public boolean hasFinalizableSubclass() { - return false; - } - - @Override - public boolean hasFinalizer() { - return false; - } - - @Override - public boolean hasSubclass() { - return false; - } - - @Override - public boolean isArrayClass() { - return false; - } - - @Override - public boolean isInitialized() { - return true; - } - - @Override - public boolean isInstance(CiConstant obj) { - return false; - } - - @Override - public boolean isInstanceClass() { - return false; - } - - @Override - public boolean isInterface() { - return false; - } - - @Override - public boolean isSubtypeOf(RiResolvedType other) { - return false; - } - - @Override - public CiKind kind(boolean architecture) { - return kind; - } - - @Override - public RiResolvedMethod resolveMethodImpl(RiResolvedMethod method) { - return null; - } - - @Override - public String toString() { - return "HotSpotTypePrimitive<" + kind + ">"; - } - - @Override - public RiResolvedType uniqueConcreteSubtype() { - return this; - } - - @Override - public RiResolvedMethod uniqueConcreteMethod(RiResolvedMethod method) { - return null; - } - - @Override - public RiResolvedField[] declaredFields() { - return null; - } - - @Override - public T getAnnotation(Class annotationClass) { - return toJava().getAnnotation(annotationClass); - } - - @Override - public Class< ? > toJava() { - return kind.toJavaClass(); - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypeResolved.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypeResolved.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.oracle.max.graal.hotspot.server.*; -import com.sun.cri.ri.*; - -public interface HotSpotTypeResolved extends RiResolvedType, Remote { - - String toString(); - - RiConstantPool constantPool(); - - int instanceSize(); - - RiField createRiField(String name, RiType type, int offset, int flags); - -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypeResolvedImpl.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypeResolvedImpl.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,252 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import java.lang.annotation.*; -import java.lang.reflect.*; -import java.util.*; - -import com.sun.cri.ci.*; -import com.sun.cri.ri.*; - -/** - * Implementation of RiType for resolved non-primitive HotSpot classes. - */ -public final class HotSpotTypeResolvedImpl extends HotSpotType implements HotSpotTypeResolved { - - /** - * - */ - private static final long serialVersionUID = 3481514353553840471L; - private Class javaMirror; - private String simpleName; - private int accessFlags; - private boolean hasFinalizer; - private boolean hasSubclass; - private boolean hasFinalizableSubclass; - private boolean isArrayClass; - private boolean isInstanceClass; - private boolean isInterface; - private int instanceSize; - private HashMap fieldCache; - private RiResolvedType superType; - private boolean superTypeSet; - private RiResolvedField[] fields; - private RiConstantPool constantPool; - private boolean isInitialized; - private RiResolvedType arrayOfType; - - private HotSpotTypeResolvedImpl() { - super(null); - } - - @Override - public int accessFlags() { - return accessFlags; - } - - @Override - public RiResolvedType arrayOf() { - if (arrayOfType == null) { - arrayOfType = (RiResolvedType) compiler.getVMEntries().RiType_arrayOf(this); - } - return arrayOfType; - } - - @Override - public RiResolvedType componentType() { - assert isArrayClass(); - return (RiResolvedType) compiler.getVMEntries().RiType_componentType(this); - } - - @Override - public RiResolvedType uniqueConcreteSubtype() { - return (RiResolvedType) compiler.getVMEntries().RiType_uniqueConcreteSubtype(this); - } - - @Override - public RiResolvedType superType() { - if (!superTypeSet) { - superType = (RiResolvedType) compiler.getVMEntries().RiType_superType(this); - superTypeSet = true; - } - return superType; - } - - @Override - public RiResolvedType exactType() { - if (Modifier.isFinal(accessFlags)) { - return this; - } - return null; - } - - @Override - public CiConstant getEncoding(Representation r) { - switch (r) { - case JavaClass: - return CiConstant.forObject(javaMirror); - case ObjectHub: - return CiConstant.forObject(this); - case StaticFields: - return CiConstant.forObject(javaMirror); - case TypeInfo: - return CiConstant.forObject(this); - default: - return null; - } - } - - @Override - public CiKind getRepresentationKind(Representation r) { - return CiKind.Object; - } - - @Override - public boolean hasFinalizableSubclass() { - return hasFinalizableSubclass; - } - - @Override - public boolean hasFinalizer() { - return hasFinalizer; - } - - @Override - public boolean hasSubclass() { - return hasSubclass; - } - - @Override - public boolean isArrayClass() { - return isArrayClass; - } - - @Override - public boolean isInitialized() { - if (!isInitialized) { - isInitialized = compiler.getVMEntries().RiType_isInitialized(this); - } - return isInitialized; - } - - @Override - public boolean isInstance(CiConstant obj) { - return javaMirror.isInstance(obj); - } - - @Override - public boolean isInstanceClass() { - return isInstanceClass; - } - - @Override - public boolean isInterface() { - return isInterface; - } - - @Override - public boolean isSubtypeOf(RiResolvedType other) { - if (other instanceof HotSpotTypeResolved) { - return compiler.getVMEntries().RiType_isSubtypeOf(this, other); - } - // No resolved type is a subtype of an unresolved type. - return false; - } - - @Override - public CiKind kind(boolean architecture) { - return CiKind.Object; - } - - @Override - public RiResolvedMethod resolveMethodImpl(RiResolvedMethod method) { - assert method instanceof HotSpotMethod; - return (RiResolvedMethod) compiler.getVMEntries().RiType_resolveMethodImpl(this, method.name(), method.signature().asString()); - } - - @Override - public String toString() { - return "HotSpotType<" + simpleName + ", resolved>"; - } - - @Override - public RiConstantPool constantPool() { - if (constantPool == null) { - constantPool = new HotSpotConstantPool(compiler, this); - } - return constantPool; - } - - @Override - public int instanceSize() { - return instanceSize; - } - - @Override - public synchronized RiResolvedField createRiField(String fieldName, RiType type, int offset, int flags) { - RiResolvedField result = null; - - long id = offset + ((long) flags << 32); - - // (tw) Must cache the fields, because the local load elimination only works if the objects from two field lookups are equal. - if (fieldCache == null) { - fieldCache = new HashMap<>(8); - } else { - result = fieldCache.get(id); - } - - if (result == null) { - result = new HotSpotField(compiler, this, fieldName, type, offset, flags); - fieldCache.put(id, result); - } else { - assert result.name().equals(fieldName); - assert result.accessFlags() == flags; - } - - return result; - } - - @Override - public RiResolvedMethod uniqueConcreteMethod(RiResolvedMethod method) { - return ((HotSpotMethodResolved) method).uniqueConcreteMethod(); - } - - @Override - public RiResolvedField[] declaredFields() { - if (fields == null) { - fields = compiler.getVMEntries().RiType_fields(this); - } - return fields; - } - - @Override - public Class< ? > toJava() { - return javaMirror; - } - - @Override - public T getAnnotation(Class annotationClass) { - return toJava().getAnnotation(annotationClass); - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypeUnresolved.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotTypeUnresolved.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot; - -import com.sun.cri.ci.*; -import com.sun.cri.ri.*; - -/** - * Implementation of RiType for unresolved HotSpot classes. - */ -public class HotSpotTypeUnresolved extends HotSpotType { - - /** - * - */ - private static final long serialVersionUID = -2320936267633521314L; - public final String simpleName; - public final int dimensions; - - /** - * Creates a new unresolved type for a specified type descriptor. - */ - public HotSpotTypeUnresolved(Compiler compiler, String name) { - super(compiler); - assert name.length() > 0 : "name cannot be empty"; - - int dims = 0; - // Decode name if necessary. - if (name.charAt(name.length() - 1) == ';') { - int startIndex = 0; - while (name.charAt(startIndex) == '[') { - startIndex++; - dims++; - } - assert name.charAt(startIndex) == 'L'; - this.simpleName = name.substring(startIndex + 1, name.length() - 1); - this.name = name; - } else { - this.simpleName = name; - this.name = getFullName(name, dims); - } - - this.dimensions = dims; - } - - public HotSpotTypeUnresolved(Compiler compiler, String name, int dimensions) { - super(compiler); - assert dimensions >= 0; - this.simpleName = name; - this.dimensions = dimensions; - this.name = getFullName(name, dimensions); - } - - private static String getFullName(String name, int dimensions) { - StringBuilder str = new StringBuilder(name.length() + dimensions + 2); - for (int i = 0; i < dimensions; i++) { - str.append('['); - } - str.append('L').append(name).append(';'); - return str.toString(); - } - - @Override - public RiType componentType() { - assert dimensions > 0 : "no array class" + name(); - return new HotSpotTypeUnresolved(compiler, simpleName, dimensions - 1); - } - - @Override - public RiType arrayOf() { - return new HotSpotTypeUnresolved(compiler, simpleName, dimensions + 1); - } - - @Override - public CiKind kind(boolean architecture) { - return CiKind.Object; - } - - @Override - public int hashCode() { - return simpleName.hashCode(); - } - - @Override - public boolean equals(Object o) { - return o == this; - } - - @Override - public String toString() { - return "HotSpotType<" + simpleName + ", unresolved>"; - } - - @Override - public CiKind getRepresentationKind(RiType.Representation r) { - return CiKind.Object; - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotXirGenerator.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotXirGenerator.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/HotSpotXirGenerator.java Tue Jan 03 16:06:31 2012 +0100 @@ -32,6 +32,7 @@ import com.oracle.max.asm.target.amd64.*; import com.oracle.max.graal.compiler.*; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ci.CiAddress.Scale; import com.sun.cri.ci.*; import com.sun.cri.ci.CiRegister.RegisterFlag; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMEntries.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMEntries.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMEntries.java Tue Jan 03 16:06:31 2012 +0100 @@ -25,6 +25,7 @@ import java.lang.reflect.*; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMEntriesNative.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMEntriesNative.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMEntriesNative.java Tue Jan 03 16:06:31 2012 +0100 @@ -25,6 +25,7 @@ import java.lang.reflect.*; +import com.oracle.max.graal.hotspot.ri.*; import com.oracle.max.graal.hotspot.server.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMExits.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMExits.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMExits.java Tue Jan 03 16:06:31 2012 +0100 @@ -23,6 +23,7 @@ package com.oracle.max.graal.hotspot; +import com.oracle.max.graal.hotspot.ri.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMExitsNative.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMExitsNative.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/VMExitsNative.java Tue Jan 03 16:06:31 2012 +0100 @@ -28,7 +28,10 @@ import com.oracle.max.criutils.*; import com.oracle.max.graal.compiler.*; +import com.oracle.max.graal.compiler.phases.*; +import com.oracle.max.graal.hotspot.ri.*; import com.oracle.max.graal.hotspot.server.*; +import com.oracle.max.graal.snippets.*; import com.sun.cri.ci.CiCompiler.DebugInfoLevel; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -85,7 +88,12 @@ TTY.initialize(); // Install intrinsics. - HotSpotIntrinsic.installIntrinsics((HotSpotRuntime) compiler.getCompiler().runtime); + HotSpotRuntime runtime = (HotSpotRuntime) compiler.getCompiler().runtime; + if (GraalOptions.Intrinsify) { + GraalIntrinsics.installIntrinsics(runtime, runtime.getCompiler().getTarget(), PhasePlan.DEFAULT); + Snippets.install(runtime, runtime.getCompiler().getTarget(), new SystemSnippets(), GraalOptions.PlotSnippets, PhasePlan.DEFAULT); + Snippets.install(runtime, runtime.getCompiler().getTarget(), new UnsafeSnippets(), GraalOptions.PlotSnippets, PhasePlan.DEFAULT); + } // Create compilation queue. compileQueue = new ThreadPoolExecutor(GraalOptions.Threads, GraalOptions.Threads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), daemonThreadFactory); diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethod.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethod.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import com.oracle.max.graal.hotspot.*; +import com.oracle.max.graal.hotspot.Compiler; +import com.sun.cri.ri.*; + +public abstract class HotSpotMethod extends CompilerObject implements RiMethod { + + /** + * + */ + private static final long serialVersionUID = 7167491397941960839L; + protected String name; + + protected HotSpotMethod(Compiler compiler) { + super(compiler); + } + + @Override + public final String name() { + return name; + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethodResolved.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethodResolved.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import com.oracle.max.graal.hotspot.server.*; +import com.sun.cri.ri.*; + +public interface HotSpotMethodResolved extends RiResolvedMethod, Remote { + + RiResolvedMethod uniqueConcreteMethod(); + void dumpProfile(); +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethodResolvedImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethodResolvedImpl.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import java.lang.annotation.*; +import java.lang.reflect.*; +import java.util.*; +import java.util.concurrent.*; + +import com.oracle.max.criutils.*; +import com.oracle.max.graal.hotspot.*; +import com.sun.cri.ci.*; +import com.sun.cri.ri.*; + +/** + * Implementation of RiMethod for resolved HotSpot methods. + */ +public final class HotSpotMethodResolvedImpl extends HotSpotMethod implements HotSpotMethodResolved { + + /** + * + */ + private static final long serialVersionUID = -5486975070147586588L; + + /** DO NOT USE IN JAVA CODE! */ + @SuppressWarnings("unused") + @Deprecated + private Object javaMirror; + + // cached values + private final int codeSize; + private final int accessFlags; + private final int maxLocals; + private final int maxStackSize; + private RiSignature signature; + private Boolean hasBalancedMonitors; + private Map compilerStorage; + private RiResolvedType holder; + private byte[] code; + + private HotSpotMethodResolvedImpl() { + super(null); + codeSize = -1; + accessFlags = -1; + maxLocals = -1; + maxStackSize = -1; + throw new IllegalStateException("this constructor is never actually called, because the objects are allocated from within the VM"); + } + + @Override + public RiResolvedType holder() { + return holder; + } + + @Override + public int accessFlags() { + return accessFlags; + } + + @Override + public boolean canBeStaticallyBound() { + return isLeafMethod() || Modifier.isStatic(accessFlags()); + } + + @Override + public byte[] code() { + if (code == null) { + code = compiler.getVMEntries().RiMethod_code(this); + assert code.length == codeSize : "expected: " + codeSize + ", actual: " + code.length; + } + return code; + } + + @Override + public int codeSize() { + return codeSize; + } + + @Override + public RiExceptionHandler[] exceptionHandlers() { + return compiler.getVMEntries().RiMethod_exceptionHandlers(this); + } + + @Override + public boolean hasBalancedMonitors() { + if (hasBalancedMonitors == null) { + hasBalancedMonitors = compiler.getVMEntries().RiMethod_hasBalancedMonitors(this); + } + return hasBalancedMonitors; + } + + @Override + public boolean isClassInitializer() { + return "".equals(name) && Modifier.isStatic(accessFlags()); + } + + @Override + public boolean isConstructor() { + return "".equals(name) && !Modifier.isStatic(accessFlags()); + } + + @Override + public boolean isLeafMethod() { + return Modifier.isFinal(accessFlags()) || Modifier.isPrivate(accessFlags()); + } + + @Override + public boolean isOverridden() { + throw new UnsupportedOperationException("isOverridden"); + } + + @Override + public boolean noSafepointPolls() { + return false; + } + + @Override + public String jniSymbol() { + throw new UnsupportedOperationException("jniSymbol"); + } + + public CiBitMap[] livenessMap() { + return null; + } + + @Override + public int maxLocals() { + return maxLocals; + } + + @Override + public int maxStackSize() { + return maxStackSize; + } + + @Override + public StackTraceElement toStackTraceElement(int bci) { + return CiUtil.toStackTraceElement(this, bci); + } + + @Override + public RiResolvedMethod uniqueConcreteMethod() { + return (RiResolvedMethod) compiler.getVMEntries().RiMethod_uniqueConcreteMethod(this); + } + + @Override + public RiSignature signature() { + if (signature == null) { + signature = new HotSpotSignature(compiler, compiler.getVMEntries().RiMethod_signature(this)); + } + return signature; + } + + @Override + public String toString() { + return "HotSpotMethod<" + CiUtil.format("%h.%n", this) + ">"; + } + + public boolean hasCompiledCode() { + return compiler.getVMEntries().RiMethod_hasCompiledCode(this); + } + + @Override + public RiResolvedType accessor() { + return null; + } + + @Override + public String intrinsic() { + return null; + } + + public int invocationCount() { + return compiler.getVMEntries().RiMethod_invocationCount(this); + } + + public int exceptionProbability(int bci) { + return compiler.getVMEntries().RiMethod_exceptionProbability(this, bci); + } + + public RiTypeProfile typeProfile(int bci) { + return compiler.getVMEntries().RiMethod_typeProfile(this, bci); + } + + public double branchProbability(int bci) { + return compiler.getVMEntries().RiMethod_branchProbability(this, bci); + } + + public double[] switchProbability(int bci) { + return compiler.getVMEntries().RiMethod_switchProbability(this, bci); + } + + @Override + public Map compilerStorage() { + if (compilerStorage == null) { + compilerStorage = new ConcurrentHashMap<>(); + } + return compilerStorage; + } + + @Override + public RiConstantPool getConstantPool() { + return ((HotSpotTypeResolvedImpl) holder()).constantPool(); + } + + public void dumpProfile() { + TTY.println("profile info for %s", this); + TTY.println("canBeStaticallyBound: " + canBeStaticallyBound()); + TTY.println("invocationCount: " + invocationCount()); + for (int i = 0; i < codeSize(); i++) { + if (branchProbability(i) != -1) { + TTY.println(" branchProbability@%d: %f", i, branchProbability(i)); + } + if (exceptionProbability(i) > 0) { + TTY.println(" exceptionProbability@%d: %d", i, exceptionProbability(i)); + } + RiTypeProfile profile = typeProfile(i); + if (profile != null && profile.count > 0) { + TTY.print(" profile@%d: count: %d, morphism: %d", i, profile.count, profile.morphism); + if (profile.types != null) { + TTY.print(", types:"); + for (int i2 = 0; i2 < profile.types.length; i2++) { + TTY.print(" %s (%f)", profile.types[i2], profile.probabilities[i2]); + } + } + TTY.println(); + if (exceptionProbability(i) > 0) { + TTY.println(" exceptionProbability@%d: %d", i, exceptionProbability(i)); + } + } + } + } + + + + @Override + public Annotation[][] getParameterAnnotations() { + if (isConstructor()) { + Constructor javaConstructor = toJavaConstructor(); + return javaConstructor == null ? null : javaConstructor.getParameterAnnotations(); + } + Method javaMethod = toJava(); + return javaMethod == null ? null : javaMethod.getParameterAnnotations(); + } + + @Override + public T getAnnotation(Class annotationClass) { + if (isConstructor()) { + Constructor javaConstructor = toJavaConstructor(); + return javaConstructor == null ? null : javaConstructor.getAnnotation(annotationClass); + } + Method javaMethod = toJava(); + return javaMethod == null ? null : javaMethod.getAnnotation(annotationClass); + } + + @Override + public Type getGenericReturnType() { + if (isConstructor()) { + return void.class; + } + Method javaMethod = toJava(); + return javaMethod == null ? null : javaMethod.getGenericReturnType(); + } + + @Override + public Type[] getGenericParameterTypes() { + if (isConstructor()) { + Constructor javaConstructor = toJavaConstructor(); + return javaConstructor == null ? null : javaConstructor.getGenericParameterTypes(); + } + Method javaMethod = toJava(); + return javaMethod == null ? null : javaMethod.getGenericParameterTypes(); + } + + private Method toJava() { + try { + return holder.toJava().getDeclaredMethod(name, CiUtil.signatureToTypes(signature, holder)); + } catch (NoSuchMethodException e) { + return null; + } + } + + private Constructor toJavaConstructor() { + try { + return holder.toJava().getDeclaredConstructor(CiUtil.signatureToTypes(signature, holder)); + } catch (NoSuchMethodException e) { + return null; + } + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethodUnresolved.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotMethodUnresolved.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import com.oracle.max.graal.hotspot.*; +import com.oracle.max.graal.hotspot.Compiler; +import com.sun.cri.ri.*; + +/** + * Implementation of RiMethod for unresolved HotSpot methods. + */ +public final class HotSpotMethodUnresolved extends HotSpotMethod { + /** + * + */ + private static final long serialVersionUID = 5610263481791970079L; + private final RiSignature signature; + protected RiType holder; + + public HotSpotMethodUnresolved(Compiler compiler, String name, String signature, RiType holder) { + super(compiler); + this.name = name; + this.holder = holder; + this.signature = new HotSpotSignature(compiler, signature); + } + + @Override + public RiSignature signature() { + return signature; + } + + @Override + public RiType holder() { + return holder; + } + + @Override + public String toString() { + return "HotSpotMethod<" + holder.name() + ". " + name + ", unresolved>"; + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotType.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import com.oracle.max.graal.hotspot.*; +import com.oracle.max.graal.hotspot.Compiler; +import com.sun.cri.ri.*; + +/** + * Common interface for all HotSpot RiType-implementations. + */ +public abstract class HotSpotType extends CompilerObject implements RiType { + /** + * + */ + private static final long serialVersionUID = -4252886265301910771L; + protected String name; + + protected HotSpotType(Compiler compiler) { + super(compiler); + } + + @Override + public final String name() { + return name; + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypePrimitive.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypePrimitive.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import java.lang.annotation.*; + +import com.oracle.max.graal.compiler.util.*; +import com.oracle.max.graal.hotspot.Compiler; +import com.sun.cri.ci.*; +import com.sun.cri.ri.*; + +/** + * Implementation of RiType for primitive HotSpot types. + */ +public final class HotSpotTypePrimitive extends HotSpotType implements RiResolvedType { + + /** + * + */ + private static final long serialVersionUID = -6208552348908071473L; + private CiKind kind; + + + public HotSpotTypePrimitive(Compiler compiler, CiKind kind) { + super(compiler); + this.kind = kind; + this.name = kind.toString(); + } + + @Override + public int accessFlags() { + return kind.toJavaClass().getModifiers(); + } + + @Override + public RiResolvedType arrayOf() { + return (RiResolvedType) compiler.getVMEntries().getPrimitiveArrayType(kind); + } + + @Override + public RiResolvedType componentType() { + return null; + } + + @Override + public RiResolvedType exactType() { + return this; + } + + @Override + public RiResolvedType superType() { + return null; + } + + @Override + public CiConstant getEncoding(Representation r) { + throw Util.unimplemented("HotSpotTypePrimitive.getEncoding"); + } + + @Override + public CiKind getRepresentationKind(Representation r) { + return kind; + } + + @Override + public boolean hasFinalizableSubclass() { + return false; + } + + @Override + public boolean hasFinalizer() { + return false; + } + + @Override + public boolean hasSubclass() { + return false; + } + + @Override + public boolean isArrayClass() { + return false; + } + + @Override + public boolean isInitialized() { + return true; + } + + @Override + public boolean isInstance(CiConstant obj) { + return false; + } + + @Override + public boolean isInstanceClass() { + return false; + } + + @Override + public boolean isInterface() { + return false; + } + + @Override + public boolean isSubtypeOf(RiResolvedType other) { + return false; + } + + @Override + public CiKind kind(boolean architecture) { + return kind; + } + + @Override + public RiResolvedMethod resolveMethodImpl(RiResolvedMethod method) { + return null; + } + + @Override + public String toString() { + return "HotSpotTypePrimitive<" + kind + ">"; + } + + @Override + public RiResolvedType uniqueConcreteSubtype() { + return this; + } + + @Override + public RiResolvedMethod uniqueConcreteMethod(RiResolvedMethod method) { + return null; + } + + @Override + public RiResolvedField[] declaredFields() { + return null; + } + + @Override + public T getAnnotation(Class annotationClass) { + return toJava().getAnnotation(annotationClass); + } + + @Override + public Class< ? > toJava() { + return kind.toJavaClass(); + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypeResolved.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypeResolved.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import com.oracle.max.graal.hotspot.server.*; +import com.sun.cri.ri.*; + +public interface HotSpotTypeResolved extends RiResolvedType, Remote { + + String toString(); + + RiConstantPool constantPool(); + + int instanceSize(); + + RiField createRiField(String name, RiType type, int offset, int flags); + +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypeResolvedImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypeResolvedImpl.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import java.lang.annotation.*; +import java.lang.reflect.*; +import java.util.*; + +import com.oracle.max.graal.hotspot.*; +import com.sun.cri.ci.*; +import com.sun.cri.ri.*; + +/** + * Implementation of RiType for resolved non-primitive HotSpot classes. + */ +public final class HotSpotTypeResolvedImpl extends HotSpotType implements HotSpotTypeResolved { + + /** + * + */ + private static final long serialVersionUID = 3481514353553840471L; + private Class javaMirror; + private String simpleName; + private int accessFlags; + private boolean hasFinalizer; + private boolean hasSubclass; + private boolean hasFinalizableSubclass; + private boolean isArrayClass; + private boolean isInstanceClass; + private boolean isInterface; + private int instanceSize; + private HashMap fieldCache; + private RiResolvedType superType; + private boolean superTypeSet; + private RiResolvedField[] fields; + private RiConstantPool constantPool; + private boolean isInitialized; + private RiResolvedType arrayOfType; + + private HotSpotTypeResolvedImpl() { + super(null); + } + + @Override + public int accessFlags() { + return accessFlags; + } + + @Override + public RiResolvedType arrayOf() { + if (arrayOfType == null) { + arrayOfType = (RiResolvedType) compiler.getVMEntries().RiType_arrayOf(this); + } + return arrayOfType; + } + + @Override + public RiResolvedType componentType() { + assert isArrayClass(); + return (RiResolvedType) compiler.getVMEntries().RiType_componentType(this); + } + + @Override + public RiResolvedType uniqueConcreteSubtype() { + return (RiResolvedType) compiler.getVMEntries().RiType_uniqueConcreteSubtype(this); + } + + @Override + public RiResolvedType superType() { + if (!superTypeSet) { + superType = (RiResolvedType) compiler.getVMEntries().RiType_superType(this); + superTypeSet = true; + } + return superType; + } + + @Override + public RiResolvedType exactType() { + if (Modifier.isFinal(accessFlags)) { + return this; + } + return null; + } + + @Override + public CiConstant getEncoding(Representation r) { + switch (r) { + case JavaClass: + return CiConstant.forObject(javaMirror); + case ObjectHub: + return CiConstant.forObject(this); + case StaticFields: + return CiConstant.forObject(javaMirror); + case TypeInfo: + return CiConstant.forObject(this); + default: + return null; + } + } + + @Override + public CiKind getRepresentationKind(Representation r) { + return CiKind.Object; + } + + @Override + public boolean hasFinalizableSubclass() { + return hasFinalizableSubclass; + } + + @Override + public boolean hasFinalizer() { + return hasFinalizer; + } + + @Override + public boolean hasSubclass() { + return hasSubclass; + } + + @Override + public boolean isArrayClass() { + return isArrayClass; + } + + @Override + public boolean isInitialized() { + if (!isInitialized) { + isInitialized = compiler.getVMEntries().RiType_isInitialized(this); + } + return isInitialized; + } + + @Override + public boolean isInstance(CiConstant obj) { + return javaMirror.isInstance(obj); + } + + @Override + public boolean isInstanceClass() { + return isInstanceClass; + } + + @Override + public boolean isInterface() { + return isInterface; + } + + @Override + public boolean isSubtypeOf(RiResolvedType other) { + if (other instanceof HotSpotTypeResolved) { + return compiler.getVMEntries().RiType_isSubtypeOf(this, other); + } + // No resolved type is a subtype of an unresolved type. + return false; + } + + @Override + public CiKind kind(boolean architecture) { + return CiKind.Object; + } + + @Override + public RiResolvedMethod resolveMethodImpl(RiResolvedMethod method) { + assert method instanceof HotSpotMethod; + return (RiResolvedMethod) compiler.getVMEntries().RiType_resolveMethodImpl(this, method.name(), method.signature().asString()); + } + + @Override + public String toString() { + return "HotSpotType<" + simpleName + ", resolved>"; + } + + @Override + public RiConstantPool constantPool() { + if (constantPool == null) { + constantPool = new HotSpotConstantPool(compiler, this); + } + return constantPool; + } + + @Override + public int instanceSize() { + return instanceSize; + } + + @Override + public synchronized RiResolvedField createRiField(String fieldName, RiType type, int offset, int flags) { + RiResolvedField result = null; + + long id = offset + ((long) flags << 32); + + // (tw) Must cache the fields, because the local load elimination only works if the objects from two field lookups are equal. + if (fieldCache == null) { + fieldCache = new HashMap<>(8); + } else { + result = fieldCache.get(id); + } + + if (result == null) { + result = new HotSpotField(compiler, this, fieldName, type, offset, flags); + fieldCache.put(id, result); + } else { + assert result.name().equals(fieldName); + assert result.accessFlags() == flags; + } + + return result; + } + + @Override + public RiResolvedMethod uniqueConcreteMethod(RiResolvedMethod method) { + return ((HotSpotMethodResolved) method).uniqueConcreteMethod(); + } + + @Override + public RiResolvedField[] declaredFields() { + if (fields == null) { + fields = compiler.getVMEntries().RiType_fields(this); + } + return fields; + } + + @Override + public Class< ? > toJava() { + return javaMirror; + } + + @Override + public T getAnnotation(Class annotationClass) { + return toJava().getAnnotation(annotationClass); + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypeUnresolved.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/ri/HotSpotTypeUnresolved.java Tue Jan 03 16:06:31 2012 +0100 @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2011, 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.max.graal.hotspot.ri; + +import com.oracle.max.graal.hotspot.Compiler; +import com.sun.cri.ci.*; +import com.sun.cri.ri.*; + +/** + * Implementation of RiType for unresolved HotSpot classes. + */ +public class HotSpotTypeUnresolved extends HotSpotType { + + /** + * + */ + private static final long serialVersionUID = -2320936267633521314L; + public final String simpleName; + public final int dimensions; + + /** + * Creates a new unresolved type for a specified type descriptor. + */ + public HotSpotTypeUnresolved(Compiler compiler, String name) { + super(compiler); + assert name.length() > 0 : "name cannot be empty"; + + int dims = 0; + // Decode name if necessary. + if (name.charAt(name.length() - 1) == ';') { + int startIndex = 0; + while (name.charAt(startIndex) == '[') { + startIndex++; + dims++; + } + assert name.charAt(startIndex) == 'L'; + this.simpleName = name.substring(startIndex + 1, name.length() - 1); + this.name = name; + } else { + this.simpleName = name; + this.name = getFullName(name, dims); + } + + this.dimensions = dims; + } + + public HotSpotTypeUnresolved(Compiler compiler, String name, int dimensions) { + super(compiler); + assert dimensions >= 0; + this.simpleName = name; + this.dimensions = dimensions; + this.name = getFullName(name, dimensions); + } + + private static String getFullName(String name, int dimensions) { + StringBuilder str = new StringBuilder(name.length() + dimensions + 2); + for (int i = 0; i < dimensions; i++) { + str.append('['); + } + str.append('L').append(name).append(';'); + return str.toString(); + } + + @Override + public RiType componentType() { + assert dimensions > 0 : "no array class" + name(); + return new HotSpotTypeUnresolved(compiler, simpleName, dimensions - 1); + } + + @Override + public RiType arrayOf() { + return new HotSpotTypeUnresolved(compiler, simpleName, dimensions + 1); + } + + @Override + public CiKind kind(boolean architecture) { + return CiKind.Object; + } + + @Override + public int hashCode() { + return simpleName.hashCode(); + } + + @Override + public boolean equals(Object o) { + return o == this; + } + + @Override + public String toString() { + return "HotSpotType<" + simpleName + ", unresolved>"; + } + + @Override + public CiKind getRepresentationKind(RiType.Representation r) { + return CiKind.Object; + } +} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/snippets/HotSpotThreadSnippets.java --- a/graal/com.oracle.max.graal.hotspot/src/com/oracle/max/graal/hotspot/snippets/HotSpotThreadSnippets.java Tue Jan 03 15:36:28 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2011, 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.max.graal.hotspot.snippets; - -import com.oracle.max.graal.hotspot.nodes.*; -import com.oracle.max.graal.snippets.*; - -@ClassSubstitution(java.lang.Thread.class) -public class HotSpotThreadSnippets implements SnippetsInterface { - - private final int threadObjectOffset; - - public HotSpotThreadSnippets(int threadObjectOffset) { - this.threadObjectOffset = threadObjectOffset; - } - - public Thread currentThread() { - return (Thread) CurrentThread.get(threadObjectOffset); - } -} diff -r ae261db78f68 -r b765172082ac graal/com.oracle.max.graal.snippets/src/com/oracle/max/graal/snippets/UnsafeSnippets.java --- a/graal/com.oracle.max.graal.snippets/src/com/oracle/max/graal/snippets/UnsafeSnippets.java Tue Jan 03 15:36:28 2012 +0100 +++ b/graal/com.oracle.max.graal.snippets/src/com/oracle/max/graal/snippets/UnsafeSnippets.java Tue Jan 03 16:06:31 2012 +0100 @@ -46,8 +46,6 @@ return CompareAndSwapNode.compareAndSwap(o, offset, expected, x); } - // TODO: volatile variants of the following methods, e.g. getObjectVolatile() - public Object getObject(Object o, long offset) { return UnsafeLoadNode.load(o, offset, CiKind.Object); } diff -r ae261db78f68 -r b765172082ac src/share/vm/classfile/vmSymbols.hpp --- a/src/share/vm/classfile/vmSymbols.hpp Tue Jan 03 15:36:28 2012 +0100 +++ b/src/share/vm/classfile/vmSymbols.hpp Tue Jan 03 16:06:31 2012 +0100 @@ -270,14 +270,14 @@ \ /* support for graal */ \ template(com_sun_hotspot_graal_VMExits, "com/oracle/max/graal/hotspot/VMExits") \ - template(com_sun_hotspot_graal_HotSpotMethodResolved, "com/oracle/max/graal/hotspot/HotSpotMethodResolvedImpl") \ + template(com_sun_hotspot_graal_HotSpotMethodResolved, "com/oracle/max/graal/hotspot/ri/HotSpotMethodResolvedImpl") \ template(com_sun_hotspot_graal_HotSpotTargetMethod, "com/oracle/max/graal/hotspot/HotSpotTargetMethod") \ template(com_sun_hotspot_graal_HotSpotField, "com/oracle/max/graal/hotspot/HotSpotField") \ template(com_sun_hotspot_graal_HotSpotCompiledMethod, "com/oracle/max/graal/hotspot/HotSpotCompiledMethod") \ template(com_sun_graal_graalOptions, "com/sun/graal/graalOptions") \ template(com_sun_hotspot_graal_HotSpotOptions, "com/oracle/max/graal/hotspot/HotSpotOptions") \ - template(com_sun_hotspot_graal_HotSpotTypeResolved, "com/oracle/max/graal/hotspot/HotSpotTypeResolvedImpl") \ - template(com_sun_hotspot_graal_HotSpotType, "com/oracle/max/graal/hotspot/HotSpotType") \ + template(com_sun_hotspot_graal_HotSpotTypeResolved, "com/oracle/max/graal/hotspot/ri/HotSpotTypeResolvedImpl") \ + template(com_sun_hotspot_graal_HotSpotType, "com/oracle/max/graal/hotspot/ri/HotSpotType") \ template(com_sun_hotspot_graal_HotSpotExceptionHandler,"com/oracle/max/graal/hotspot/HotSpotExceptionHandler") \ template(com_sun_hotspot_graal_HotSpotProxy, "com/oracle/max/graal/hotspot/HotSpotProxy") \ template(com_sun_hotspot_graal_Compiler, "com/oracle/max/graal/hotspot/Compiler") \ @@ -317,7 +317,7 @@ template(bootstrap_name, "bootstrap") \ template(shutdownCompiler_name, "shutdownCompiler") \ template(compileMethod_name, "compileMethod") \ - template(compileMethod_signature, "(Lcom/oracle/max/graal/hotspot/HotSpotMethodResolved;IZ)V") \ + template(compileMethod_signature, "(Lcom/oracle/max/graal/hotspot/ri/HotSpotMethodResolved;IZ)V") \ template(setOption_name, "setOption") \ template(setDefaultOptions_name, "setDefaultOptions") \ template(setOption_signature, "(Ljava/lang/String;)Z") \ diff -r ae261db78f68 -r b765172082ac src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Tue Jan 03 15:36:28 2012 +0100 +++ b/src/share/vm/graal/graalJavaAccess.hpp Tue Jan 03 16:06:31 2012 +0100 @@ -85,7 +85,7 @@ end_class \ start_class(HotSpotTargetMethod) \ oop_field(HotSpotTargetMethod, targetMethod, "Lcom/sun/cri/ci/CiTargetMethod;") \ - oop_field(HotSpotTargetMethod, method, "Lcom/oracle/max/graal/hotspot/HotSpotMethodResolved;") \ + oop_field(HotSpotTargetMethod, method, "Lcom/oracle/max/graal/hotspot/ri/HotSpotMethodResolved;") \ oop_field(HotSpotTargetMethod, name, "Ljava/lang/String;") \ oop_field(HotSpotTargetMethod, sites, "[Lcom/sun/cri/ci/CiTargetMethod$Site;") \ oop_field(HotSpotTargetMethod, exceptionHandlers, "[Lcom/sun/cri/ci/CiTargetMethod$ExceptionHandler;") \ diff -r ae261db78f68 -r b765172082ac src/share/vm/graal/graalVMEntries.cpp --- a/src/share/vm/graal/graalVMEntries.cpp Tue Jan 03 15:36:28 2012 +0100 +++ b/src/share/vm/graal/graalVMEntries.cpp Tue Jan 03 16:06:31 2012 +0100 @@ -981,9 +981,9 @@ #define PROXY "J" #define TYPE "Lcom/sun/cri/ri/RiType;" -#define RESOLVED_TYPE "Lcom/oracle/max/graal/hotspot/HotSpotTypeResolved;" +#define RESOLVED_TYPE "Lcom/oracle/max/graal/hotspot/ri/HotSpotTypeResolved;" #define METHOD "Lcom/sun/cri/ri/RiMethod;" -#define RESOLVED_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotMethodResolved;" +#define RESOLVED_METHOD "Lcom/oracle/max/graal/hotspot/ri/HotSpotMethodResolved;" #define REFLECT_METHOD "Ljava/lang/reflect/Method;" #define TYPE_PROFILE "Lcom/sun/cri/ri/RiTypeProfile;" #define SIGNATURE "Lcom/sun/cri/ri/RiSignature;" @@ -993,7 +993,7 @@ #define EXCEPTION_HANDLERS "[Lcom/sun/cri/ri/RiExceptionHandler;" #define TARGET_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotTargetMethod;" #define CONFIG "Lcom/oracle/max/graal/hotspot/HotSpotVMConfig;" -#define HS_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotMethod;" +#define HS_METHOD "Lcom/oracle/max/graal/hotspot/ri/HotSpotMethod;" #define HS_COMP_METHOD "Lcom/oracle/max/graal/hotspot/HotSpotCompiledMethod;" #define CI_CONSTANT "Lcom/sun/cri/ci/CiConstant;" #define CI_KIND "Lcom/sun/cri/ci/CiKind;"