# HG changeset patch # User twisti # Date 1389404836 28800 # Node ID 805a904eae8fb49eb63cd7c197122786662b9de4 # Parent 2b5c77ff960ecc5cb0fb0376981b6b5a8998435e enable String.equals substitution but disable it when RegisterPressure is used diff -r 2b5c77ff960e -r 805a904eae8f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java --- 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); } diff -r 2b5c77ff960e -r 805a904eae8f mx/projects --- 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