< prev index next >

src/hotspot/share/opto/escape.cpp

Print this page
rev 52851 : Streamline CAS barriers, C2 ideal graph generation and matching

@@ -513,19 +513,29 @@
       }
       break;
     }
     case Op_CompareAndExchangeP:
     case Op_CompareAndExchangeN:
+#if INCLUDE_SHENANDOAHGC
+    case Op_ShenandoahCompareAndExchangeP:
+    case Op_ShenandoahCompareAndExchangeN:
+#endif
     case Op_GetAndSetP:
     case Op_GetAndSetN: {
       add_objload_to_connection_graph(n, delayed_worklist);
       // fallthrough
     }
     case Op_StoreP:
     case Op_StoreN:
     case Op_StoreNKlass:
     case Op_StorePConditional:
+#if INCLUDE_SHENANDOAHGC
+    case Op_ShenandoahWeakCompareAndSwapP:
+    case Op_ShenandoahWeakCompareAndSwapN:
+    case Op_ShenandoahCompareAndSwapP:
+    case Op_ShenandoahCompareAndSwapN:
+#endif
     case Op_WeakCompareAndSwapP:
     case Op_WeakCompareAndSwapN:
     case Op_CompareAndSwapP:
     case Op_CompareAndSwapN: {
       Node* adr = n->in(MemNode::Address);

@@ -760,10 +770,18 @@
     case Op_CompareAndExchangeN:
     case Op_CompareAndSwapP:
     case Op_CompareAndSwapN:
     case Op_WeakCompareAndSwapP:
     case Op_WeakCompareAndSwapN:
+#if INCLUDE_SHENANDOAHGC
+    case Op_ShenandoahCompareAndExchangeP:
+    case Op_ShenandoahCompareAndExchangeN:
+    case Op_ShenandoahCompareAndSwapP:
+    case Op_ShenandoahCompareAndSwapN:
+    case Op_ShenandoahWeakCompareAndSwapP:
+    case Op_ShenandoahWeakCompareAndSwapN:
+#endif
     case Op_GetAndSetP:
     case Op_GetAndSetN: {
       Node* adr = n->in(MemNode::Address);
       const Type *adr_type = _igvn->type(adr);
       adr_type = adr_type->make_ptr();

@@ -773,10 +791,13 @@
         assert(adr_type != NULL, "dead node should not be on list");
         break;
       }
 #endif
       if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
+#if INCLUDE_SHENANDOAHGC
+          opcode == Op_ShenandoahCompareAndExchangeN || opcode == Op_ShenandoahCompareAndExchangeP ||
+#endif
           opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) {
         add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
       }
       if (   adr_type->isa_oopptr()
           || (   (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass)

@@ -2143,10 +2164,14 @@
         bt = field->layout_type();
       } else {
         // Check for unsafe oop field access
         if (n->has_out_with(Op_StoreP, Op_LoadP, Op_StoreN, Op_LoadN) ||
             n->has_out_with(Op_GetAndSetP, Op_GetAndSetN, Op_CompareAndExchangeP, Op_CompareAndExchangeN) ||
+#if INCLUDE_SHENANDOAHGC
+            n->has_out_with(Op_ShenandoahCompareAndExchangeP) || n->has_out_with(Op_ShenandoahCompareAndExchangeN) ||
+            n->has_out_with(Op_ShenandoahCompareAndSwapP, Op_ShenandoahCompareAndSwapN, Op_ShenandoahWeakCompareAndSwapP, Op_ShenandoahWeakCompareAndSwapN) ||
+#endif
             n->has_out_with(Op_CompareAndSwapP, Op_CompareAndSwapN, Op_WeakCompareAndSwapP, Op_WeakCompareAndSwapN)) {
           bt = T_OBJECT;
           (*unsafe) = true;
         }
       }
< prev index next >