< prev index next >
src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
Print this page
rev 59195 : 8244594: [BACKOUT] 8244523: Shenandoah: Remove null-handling in LRB expansion
rev 59196 : 8244595: [REDO] 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 **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);
}
--- 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);
}
*** 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;
--- 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;
< prev index next >