< prev index next >
src/hotspot/share/opto/macro.cpp
Print this page
@@ -2572,11 +2572,13 @@
break;
default:
assert(n->Opcode() == Op_LoopLimit ||
n->Opcode() == Op_Opaque1 ||
n->Opcode() == Op_Opaque2 ||
- n->Opcode() == Op_Opaque3, "unknown node type in macro list");
+ n->Opcode() == Op_Opaque3 ||
+ BarrierSet::barrier_set()->barrier_set_c2()->is_gc_barrier_node(n),
+ "unknown node type in macro list");
}
assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count");
progress = progress || success;
}
}
@@ -2654,11 +2656,11 @@
// before the allocate nodes are expanded.
int macro_idx = C->macro_count() - 1;
while (macro_idx >= 0) {
Node * n = C->macro_node(macro_idx);
assert(n->is_macro(), "only macro nodes expected here");
- if (_igvn.type(n) == Type::TOP || n->in(0)->is_top() ) {
+ if (_igvn.type(n) == Type::TOP || (n->in(0) != NULL && n->in(0)->is_top())) {
// node is unreachable, so don't try to expand it
C->remove_macro_node(n);
} else if (n->is_ArrayCopy()){
int macro_count = C->macro_count();
expand_arraycopy_node(n->as_ArrayCopy());
@@ -2672,11 +2674,11 @@
// nodes are removed from the macro list as they are processed
while (C->macro_count() > 0) {
int macro_count = C->macro_count();
Node * n = C->macro_node(macro_count-1);
assert(n->is_macro(), "only macro nodes expected here");
- if (_igvn.type(n) == Type::TOP || n->in(0)->is_top() ) {
+ if (_igvn.type(n) == Type::TOP || (n->in(0) != NULL && n->in(0)->is_top())) {
// node is unreachable, so don't try to expand it
C->remove_macro_node(n);
continue;
}
switch (n->class_id()) {
< prev index next >