changeset 51429:d4fefc97ae14

8205107: assert(c->Opcode() == Op_SafePoint) failed: broken outer loop Summary: Don't remove safepoint belonging to OuterStripMinedLoopEndNode Reviewed-by: kvn
author neliasso
date Fri, 15 Jun 2018 14:46:04 +0200
parents 0ab1cac936b8
children 1f1eb24facdd
files src/hotspot/share/opto/callnode.cpp
diffstat 1 files changed, 5 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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);
     }