@@ -2314,12 +2314,12 @@ void MemoryGraphFixer::collect_memory_nodes() {
2314
2314
Node* m = _memory_nodes[c->in (k)->_idx ];
2315
2315
assert (m != NULL , " expect memory state" );
2316
2316
if (u->in (k) != m) {
2317
- phi = NULL ;
2317
+ phi = NodeSentinel ;
2318
2318
}
2319
2319
}
2320
2320
}
2321
2321
}
2322
- if (phi == NULL ) {
2322
+ if (phi == NodeSentinel ) {
2323
2323
phi = new PhiNode (c, Type::MEMORY, _phase->C ->get_adr_type (_alias));
2324
2324
for (uint k = 1 ; k < c->req (); k++) {
2325
2325
Node* m = _memory_nodes[c->in (k)->_idx ];
@@ -2328,8 +2328,11 @@ void MemoryGraphFixer::collect_memory_nodes() {
2328
2328
}
2329
2329
}
2330
2330
}
2331
- assert (phi != NULL , " " );
2332
- regions.map (c->_idx , phi);
2331
+ if (phi != NULL ) {
2332
+ regions.map (c->_idx , phi);
2333
+ } else {
2334
+ assert (c->unique_ctrl_out ()->Opcode () == Op_Halt, " expected memory state" );
2335
+ }
2333
2336
}
2334
2337
Node* current_region = regions[c->_idx ];
2335
2338
if (current_region != prev_region) {
@@ -2340,7 +2343,7 @@ void MemoryGraphFixer::collect_memory_nodes() {
2340
2343
}
2341
2344
} else if (prev_mem == NULL || prev_mem->is_Phi () || ctrl_or_self (prev_mem) != c) {
2342
2345
Node* m = _memory_nodes[_phase->idom (c)->_idx ];
2343
- assert (m != NULL , " expect memory state" );
2346
+ assert (m != NULL || c-> Opcode () == Op_Halt , " expect memory state" );
2344
2347
if (m != prev_mem) {
2345
2348
_memory_nodes.map (c->_idx , m);
2346
2349
progress = true ;
@@ -2364,7 +2367,8 @@ void MemoryGraphFixer::collect_memory_nodes() {
2364
2367
Node* c = rpo_list.at (i);
2365
2368
if (c->is_Region () && (_include_lsm || !c->is_OuterStripMinedLoop ())) {
2366
2369
Node* n = regions[c->_idx ];
2367
- if (n->is_Phi () && n->_idx >= last && n->in (0 ) == c) {
2370
+ assert (n != NULL || c->unique_ctrl_out ()->Opcode () == Op_Halt, " expected memory state" );
2371
+ if (n != NULL && n->is_Phi () && n->_idx >= last && n->in (0 ) == c) {
2368
2372
_phase->register_new_node (n, c);
2369
2373
}
2370
2374
}
@@ -2373,10 +2377,12 @@ void MemoryGraphFixer::collect_memory_nodes() {
2373
2377
Node* c = rpo_list.at (i);
2374
2378
if (c->is_Region () && (_include_lsm || !c->is_OuterStripMinedLoop ())) {
2375
2379
Node* n = regions[c->_idx ];
2380
+ assert (n != NULL || c->unique_ctrl_out ()->Opcode () == Op_Halt, " expected memory state" );
2376
2381
for (DUIterator_Fast imax, i = c->fast_outs (imax); i < imax; i++) {
2377
2382
Node* u = c->fast_out (i);
2378
2383
if (u->is_Phi () && u->bottom_type () == Type::MEMORY &&
2379
2384
u != n) {
2385
+ assert (c->unique_ctrl_out ()->Opcode () != Op_Halt, " expected memory state" );
2380
2386
if (u->adr_type () == TypePtr::BOTTOM) {
2381
2387
fix_memory_uses (u, n, n, c);
2382
2388
} else if (_phase->C ->get_alias_index (u->adr_type ()) == _alias) {
0 commit comments