< prev index next >

src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp

Print this page
rev 59252 : 8244813: [BACKOUT] 8244523: Shenandoah: Remove null-handling in LRB expansion

*** 479,498 **** const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0, fields); return TypeFunc::make(domain, range); } ! const TypeFunc* ShenandoahBarrierSetC2::shenandoah_load_reference_barrier_Type(const Type* value_type) { const Type **fields = TypeTuple::fields(2); ! fields[TypeFunc::Parms+0] = value_type; // original field value fields[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // original load address const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+2, fields); // create result type (range) fields = TypeTuple::fields(1); ! fields[TypeFunc::Parms+0] = value_type; const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields); return TypeFunc::make(domain, range); } --- 479,498 ---- const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0, fields); return TypeFunc::make(domain, range); } ! const TypeFunc* ShenandoahBarrierSetC2::shenandoah_load_reference_barrier_Type() { const Type **fields = TypeTuple::fields(2); ! fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // original field value fields[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // original load address const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+2, fields); // create result type (range) fields = TypeTuple::fields(1); ! fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields); return TypeFunc::make(domain, range); }
*** 1057,1067 **** } return n; } } } ! if (can_reshape && n->Opcode() == Op_If && ShenandoahBarrierC2Support::is_heap_stable_test(n) && n->in(0) != NULL) { Node* dom = n->in(0); Node* prev_dom = n; --- 1057,1094 ---- } return n; } } } ! if (n->Opcode() == Op_CmpP) { ! Node* in1 = n->in(1); ! Node* in2 = n->in(2); ! if (in1->bottom_type() == TypePtr::NULL_PTR) { ! in2 = step_over_gc_barrier(in2); ! } ! if (in2->bottom_type() == TypePtr::NULL_PTR) { ! in1 = step_over_gc_barrier(in1); ! } ! PhaseIterGVN* igvn = phase->is_IterGVN(); ! if (in1 != n->in(1)) { ! if (igvn != NULL) { ! n->set_req_X(1, in1, igvn); ! } else { ! n->set_req(1, in1); ! } ! assert(in2 == n->in(2), "only one change"); ! return n; ! } ! if (in2 != n->in(2)) { ! if (igvn != NULL) { ! n->set_req_X(2, in2, igvn); ! } else { ! n->set_req(2, in2); ! } ! return n; ! } ! } else if (can_reshape && n->Opcode() == Op_If && ShenandoahBarrierC2Support::is_heap_stable_test(n) && n->in(0) != NULL) { Node* dom = n->in(0); Node* prev_dom = n;
< prev index next >