< prev index next >

src/share/vm/opto/parse2.cpp

Print this page

        

@@ -38,10 +38,14 @@
 #include "opto/parse.hpp"
 #include "opto/runtime.hpp"
 #include "runtime/deoptimization.hpp"
 #include "runtime/sharedRuntime.hpp"
 
+#if INCLUDE_ALL_GCS
+#include "gc_implementation/shenandoah/c2/shenandoahBarrierSetC2.hpp"
+#endif
+
 extern int explicit_null_checks_inserted,
            explicit_null_checks_elided;
 
 //---------------------------------array_load----------------------------------
 void Parse::array_load(BasicType elem_type) {

@@ -49,10 +53,15 @@
   Node* adr = array_addressing(elem_type, 0, &elem);
   if (stopped())  return;     // guaranteed null or range check
   dec_sp(2);                  // Pop array and index
   const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(elem_type);
   Node* ld = make_load(control(), adr, elem, elem_type, adr_type, MemNode::unordered);
+#if INCLUDE_ALL_GCS
+  if (UseShenandoahGC && (elem_type == T_OBJECT || elem_type == T_ARRAY)) {
+    ld = ShenandoahBarrierSetC2::bsc2()->load_reference_barrier(this, ld);
+  }
+#endif
   push(ld);
 }
 
 
 //--------------------------------array_store----------------------------------

@@ -2271,11 +2280,11 @@
   handle_if_acmp:
     // If this is a backwards branch in the bytecodes, add Safepoint
     maybe_add_safepoint(iter().get_dest());
     a = pop();
     b = pop();
-    c = _gvn.transform( new (C) CmpPNode(b, a) );
+    c = _gvn.transform(new (C) CmpPNode(b, a) );
     c = optimize_cmp_with_klass(c);
     do_if(btest, c);
     break;
 
   case Bytecodes::_ifeq: btest = BoolTest::eq; goto handle_ifxx;
< prev index next >