8205107: assert(c->Opcode() == Op_SafePoint) failed: broken outer loop
Summary: Don't remove safepoint belonging to OuterStripMinedLoopEndNode
Reviewed-by: kvn
--- a/src/hotspot/share/opto/callnode.cpp Tue Jun 26 09:33:55 2018 -0700
+++ b/src/hotspot/share/opto/callnode.cpp Fri Jun 15 14:46:04 2018 +0200
@@ -1149,6 +1149,11 @@
assert( n0->is_Call(), "expect a call here" );
}
if( n0->is_Call() && n0->as_Call()->guaranteed_safepoint() ) {
+ // Don't remove a safepoint belonging to an OuterStripMinedLoopEndNode.
+ // If the loop dies, they will be removed together.
+ if (has_out_with(Op_OuterStripMinedLoopEnd)) {
+ return this;
+ }
// Useless Safepoint, so remove it
return in(TypeFunc::Control);
}