--- a/src/hotspot/share/opto/parse1.cpp Tue Jun 19 08:44:31 2018 +0200
+++ b/src/hotspot/share/opto/parse1.cpp Tue Jun 19 09:08:39 2018 +0200
@@ -666,10 +666,13 @@
if (block->is_SEL_head()) {
// Add predicate to single entry (not irreducible) loop head.
assert(!block->has_merged_backedge(), "only entry paths should be merged for now");
- // Need correct bci for predicate.
- // It is fine to set it here since do_one_block() will set it anyway.
- set_parse_bci(block->start());
- add_predicate();
+ // Predicates may have been added after a dominating if
+ if (!block->has_predicates()) {
+ // Need correct bci for predicate.
+ // It is fine to set it here since do_one_block() will set it anyway.
+ set_parse_bci(block->start());
+ add_predicate();
+ }
// Add new region for back branches.
int edges = block->pred_count() - block->preds_parsed() + 1; // +1 for original region
RegionNode *r = new RegionNode(edges+1);
@@ -1262,6 +1265,7 @@
_is_handler = false;
_has_merged_backedge = false;
_start_map = NULL;
+ _has_predicates = false;
_num_successors = 0;
_all_successors = 0;
_successors = NULL;