--- old/src/share/vm/adlc/formssel.cpp	Fri Feb  6 14:00:13 2009
+++ new/src/share/vm/adlc/formssel.cpp	Fri Feb  6 14:00:13 2009
@@ -574,9 +574,13 @@
   // TEMPORARY
   // if( is_simple_chain_rule(globals) )  return false;
 
-  // String-compare uses many memorys edges, but writes none
+// String.(compareTo/equals/indexOf) and Arrays.equals use many memorys edges, 
+// but writes none
   if( _matrule && _matrule->_rChild &&
-      strcmp(_matrule->_rChild->_opType,"StrComp")==0 )
+      (strcmp(_matrule->_rChild->_opType,"StrComp")==0    ||
+       strcmp(_matrule->_rChild->_opType,"StrEquals")==0  ||
+       strcmp(_matrule->_rChild->_opType,"StrIndexOf")==0 ||
+       strcmp(_matrule->_rChild->_opType,"AryEq")==0)) 
     return true;
 
   // Check if instruction has a USE of a memory operand class, but no defs
@@ -815,8 +819,10 @@
     return AdlcVMDeps::Parms;   // Skip the machine-state edges
 
   if( _matrule->_rChild &&
-          strcmp(_matrule->_rChild->_opType,"StrComp")==0 ) {
-        // String compare takes 1 control and 4 memory edges.
+      (strcmp(_matrule->_rChild->_opType,"StrComp")==0   ||
+       strcmp(_matrule->_rChild->_opType,"StrEquals")==0 ||
+       strcmp(_matrule->_rChild->_opType,"StrIndexOf")==0)) {
+       // String.(compareTo/equals/indexOf) take 1 control and 4 memory edges.
     return 5;
   }
 
