Skip to content
This repository has been archived by the owner on Sep 2, 2022. It is now read-only.
Permalink
Browse files
8259061: C2: assert(found) failed: memory-writing node is not placed …
…in its original loop or an ancestor of it

Remove assertion that is too general, that is, it can fail on compilations where
C2 generates correct code otherwise.

Reviewed-by: chagedorn, thartmann, kvn
  • Loading branch information
robcasloz authored and TobiHartmann committed Jan 13, 2021
1 parent 793017d commit 417e1d1
Showing 1 changed file with 0 additions and 20 deletions.
@@ -1221,26 +1221,6 @@ void PhaseCFG::verify() const {
if (j >= 1 && n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_CreateEx) {
assert(j == 1 || block->get_node(j-1)->is_Phi(), "CreateEx must be first instruction in block");
}
// Verify that memory-writing nodes (such as stores and calls) are placed
// in their original loop L (given by the control input) or in an ancestor
// of L. This is guaranteed by the freq. estimation model for reducible
// CFGs, and by special handling in PhaseCFG::schedule_late() otherwise.
if (n->is_Mach() && n->bottom_type()->has_memory() && n->in(0) != NULL) {
Block* original_block = find_block_for_node(n->in(0));
assert(original_block != NULL, "missing block for memory-writing node");
CFGLoop* original_or_ancestor = original_block->_loop;
assert(block->_loop != NULL && original_or_ancestor != NULL, "no loop");
bool found = false;
do {
if (block->_loop == original_or_ancestor) {
found = true;
break;
}
original_or_ancestor = original_or_ancestor->parent();
} while (original_or_ancestor != NULL);
assert(found, "memory-writing node is not placed in its original loop "
"or an ancestor of it");
}
if (n->needs_anti_dependence_check()) {
verify_anti_dependences(block, n);
}

1 comment on commit 417e1d1

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.