8205107: assert(c->Opcode() == Op_SafePoint) failed: broken outer loop
authorneliasso
Fri, 15 Jun 2018 14:46:04 +0200
changeset 50795 d4fefc97ae14
parent 50794 0ab1cac936b8
child 50796 1f1eb24facdd
8205107: assert(c->Opcode() == Op_SafePoint) failed: broken outer loop Summary: Don't remove safepoint belonging to OuterStripMinedLoopEndNode Reviewed-by: kvn
src/hotspot/share/opto/callnode.cpp
--- 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);
     }