# HG changeset patch # User Thomas Wuerthinger # Date 1308057046 -7200 # Node ID 84a7b7069ffbc2cf56b0f9ee46d1ed8a935cda77 # Parent 8b2953f6d3252f998d4d1841b170757c3ed45bea Improved performance for looking up primitive types. diff -r 8b2953f6d325 -r 84a7b7069ffb graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Local.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Local.java Tue Jun 14 11:03:14 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Local.java Tue Jun 14 15:10:46 2011 +0200 @@ -26,7 +26,6 @@ import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.graph.*; -import com.sun.cri.bytecode.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; diff -r 8b2953f6d325 -r 84a7b7069ffb graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/Compiler.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/Compiler.java Tue Jun 14 11:03:14 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/Compiler.java Tue Jun 14 15:10:46 2011 +0200 @@ -23,11 +23,13 @@ package com.oracle.max.graal.runtime; import com.oracle.max.graal.compiler.*; +import com.sun.cri.ri.*; public interface Compiler { VMEntries getVMEntries(); VMExits getVMExits(); GraalCompiler getCompiler(); + RiType lookupType(String returnType, HotSpotTypeResolved accessingClass); } diff -r 8b2953f6d325 -r 84a7b7069ffb graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/CompilerImpl.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/CompilerImpl.java Tue Jun 14 11:03:14 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/CompilerImpl.java Tue Jun 14 15:10:46 2011 +0200 @@ -155,4 +155,42 @@ return vmExits; } + @Override + public RiType lookupType(String returnType, HotSpotTypeResolved accessingClass) { + if (returnType.length() == 1 && vmExits instanceof VMExitsNative) { + VMExitsNative exitsNative = (VMExitsNative) vmExits; + CiKind kind = CiKind.fromPrimitiveOrVoidTypeChar(returnType.charAt(0)); + switch(kind) { + case Boolean: + return exitsNative.typeBoolean; + case Byte: + return exitsNative.typeByte; + case Char: + return exitsNative.typeChar; + case Double: + return exitsNative.typeDouble; + case Float: + return exitsNative.typeFloat; + case Illegal: + break; + case Int: + return exitsNative.typeInt; + case Jsr: + break; + case Long: + return exitsNative.typeLong; + case Object: + break; + case Short: + return exitsNative.typeShort; + case Void: + return exitsNative.typeVoid; + case Word: + break; + + } + } + return vmEntries.RiSignature_lookupType(returnType, accessingClass); + } + } diff -r 8b2953f6d325 -r 84a7b7069ffb graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotSignature.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotSignature.java Tue Jun 14 11:03:14 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotSignature.java Tue Jun 14 15:10:46 2011 +0200 @@ -117,7 +117,7 @@ } RiType type = argumentTypes[index]; if (type == null) { - type = compiler.getVMEntries().RiSignature_lookupType(arguments.get(index), (HotSpotTypeResolved) accessingClass); + type = compiler.lookupType(arguments.get(index), (HotSpotTypeResolved) accessingClass); argumentTypes[index] = type; } return type; @@ -136,7 +136,7 @@ @Override public RiType returnType(RiType accessingClass) { if (returnTypeCache == null) { - returnTypeCache = compiler.getVMEntries().RiSignature_lookupType(returnType, (HotSpotTypeResolved) accessingClass); + returnTypeCache = compiler.lookupType(returnType, (HotSpotTypeResolved) accessingClass); } return returnTypeCache; }