changeset 13592:805a904eae8f

enable String.equals substitution but disable it when RegisterPressure is used
author twisti
date Fri, 10 Jan 2014 17:47:16 -0800
parents 2b5c77ff960e
children 24353c21ef34
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java mx/projects
diffstat 2 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java	Fri Jan 10 13:40:44 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java	Fri Jan 10 17:47:16 2014 -0800
@@ -29,6 +29,7 @@
 import com.oracle.graal.hotspot.meta.*;
 import com.oracle.graal.hotspot.replacements.*;
 import com.oracle.graal.nodes.*;
+import com.oracle.graal.phases.*;
 import com.oracle.graal.phases.util.*;
 import com.oracle.graal.replacements.*;
 
@@ -47,17 +48,18 @@
 
     @Override
     protected ResolvedJavaMethod registerMethodSubstitution(Member originalMethod, Method substituteMethod) {
-        if (substituteMethod.getDeclaringClass().getDeclaringClass() == BoxingSubstitutions.class) {
+        final Class<?> substituteClass = substituteMethod.getDeclaringClass();
+        if (substituteClass.getDeclaringClass() == BoxingSubstitutions.class) {
             if (config.useHeapProfiler) {
                 return null;
             }
-        } else if (substituteMethod.getDeclaringClass() == IntegerSubstitutions.class || substituteMethod.getDeclaringClass() == LongSubstitutions.class) {
+        } else if (substituteClass == IntegerSubstitutions.class || substituteClass == LongSubstitutions.class) {
             if (substituteMethod.getName().equals("bitCount")) {
                 if (!config.usePopCountInstruction) {
                     return null;
                 }
             }
-        } else if (substituteMethod.getDeclaringClass() == AESCryptSubstitutions.class || substituteMethod.getDeclaringClass() == CipherBlockChainingSubstitutions.class) {
+        } else if (substituteClass == AESCryptSubstitutions.class || substituteClass == CipherBlockChainingSubstitutions.class) {
             if (!config.useAESIntrinsics) {
                 return null;
             }
@@ -65,10 +67,18 @@
             assert config.aescryptDecryptBlockStub != 0L;
             assert config.cipherBlockChainingEncryptAESCryptStub != 0L;
             assert config.cipherBlockChainingDecryptAESCryptStub != 0L;
-        } else if (substituteMethod.getDeclaringClass() == CRC32Substitutions.class) {
+        } else if (substituteClass == CRC32Substitutions.class) {
             if (!config.useCRC32Intrinsics) {
                 return null;
             }
+        } else if (substituteClass == StringSubstitutions.class) {
+            /*
+             * AMD64's String.equals substitution needs about 8 registers so we better disable the
+             * substitution if there is some register pressure.
+             */
+            if (GraalOptions.RegisterPressure.getValue() != null) {
+                return null;
+            }
         }
         return super.registerMethodSubstitution(originalMethod, substituteMethod);
     }
--- a/mx/projects	Fri Jan 10 13:40:44 2014 +0100
+++ b/mx/projects	Fri Jan 10 17:47:16 2014 -0800
@@ -352,6 +352,7 @@
 project@com.oracle.graal.replacements.amd64@dependencies=com.oracle.graal.replacements
 project@com.oracle.graal.replacements.amd64@checkstyle=com.oracle.graal.graph
 project@com.oracle.graal.replacements.amd64@javaCompliance=1.7
+project@com.oracle.graal.replacements.amd64@annotationProcessors=com.oracle.graal.service.processor
 project@com.oracle.graal.replacements.amd64@workingSets=Graal,Replacements,AMD64
 
 # graal.replacements.hsail