< prev index next >

src/share/vm/adlc/formssel.cpp

Print this page

        

@@ -637,26 +637,10 @@
   }
   return (USE_of_memory && !DEF_of_memory);
 }
 
 
-bool InstructForm::is_wide_memory_kill(FormDict &globals) const {
-  if( _matrule == NULL ) return false;
-  if( !_matrule->_opType ) return false;
-
-  if( strcmp(_matrule->_opType,"MemBarRelease") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"MemBarAcquire") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"MemBarReleaseLock") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"MemBarAcquireLock") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"MemBarStoreStore") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"MemBarVolatile") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"StoreFence") == 0 ) return true;
-  if( strcmp(_matrule->_opType,"LoadFence") == 0 ) return true;
-
-  return false;
-}
-
 int InstructForm::memory_operand(FormDict &globals) const {
   // Machine independent loads must be checked for anti-dependences
   // Check if instruction has a USE of a memory operand class, or a def.
   int USE_of_memory  = 0;
   int DEF_of_memory  = 0;

@@ -780,11 +764,12 @@
         !strcmp(_matrule->_rChild->_opType,"LoadN")        ||
         !strcmp(_matrule->_rChild->_opType,"LoadNKlass")   ||
         !strcmp(_matrule->_rChild->_opType,"CreateEx")     ||  // type of exception
         !strcmp(_matrule->_rChild->_opType,"CheckCastPP")  ||
         !strcmp(_matrule->_rChild->_opType,"GetAndSetP")   ||
-        !strcmp(_matrule->_rChild->_opType,"GetAndSetN")) )  return true;
+        !strcmp(_matrule->_rChild->_opType,"GetAndSetN")   ||
+        !strcmp(_matrule->_rChild->_opType,"ShenandoahReadBarrier"))) return true;
   else if ( is_ideal_load() == Form::idealP )                return true;
   else if ( is_ideal_store() != Form::none  )                return true;
 
   if (needs_base_oop_edge(globals)) return true;
 

@@ -1157,10 +1142,13 @@
     return "MachFastLockNode";
   }
   else if (is_ideal_nop()) {
     return "MachNopNode";
   }
+  else if (is_ideal_membar()) {
+    return "MachMemBarNode";
+  }
   else if (is_mach_constant()) {
     return "MachConstantNode";
   }
   else if (captures_bottom_type(globals)) {
     return "MachTypeNode";

@@ -1240,11 +1228,12 @@
   if (_matrule != NULL &&
       this != short_branch &&   // Don't match myself
       !is_short_branch() &&     // Don't match another short branch variant
       reduce_result() != NULL &&
       strcmp(reduce_result(), short_branch->reduce_result()) == 0 &&
-      _matrule->equivalent(AD.globalNames(), short_branch->_matrule)) {
+      _matrule->equivalent(AD.globalNames(), short_branch->_matrule) &&
+      equivalent_predicates(this, short_branch)) {
     // The instructions are equivalent.
 
     // Now verify that both instructions have the same parameters and
     // the same effects. Both branch forms should have the same inputs
     // and resulting projections to correctly replace a long branch node

@@ -3487,10 +3476,11 @@
     "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
     "StoreCM",
     "ClearArray",
     "GetAndAddI", "GetAndSetI", "GetAndSetP",
     "GetAndAddL", "GetAndSetL", "GetAndSetN",
+    "ShenandoahReadBarrier",
   };
   int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
   if( strcmp(_opType,"PrefetchRead")==0 ||
       strcmp(_opType,"PrefetchWrite")==0 ||
       strcmp(_opType,"PrefetchAllocation")==0 )
< prev index next >