--- a/src/hotspot/share/opto/loopnode.hpp Tue Jun 12 07:52:30 2018 -0700
+++ b/src/hotspot/share/opto/loopnode.hpp Tue Jun 12 17:40:28 2018 +0200
@@ -912,7 +912,7 @@
}
// build the loop tree and perform any requested optimizations
- void build_and_optimize(bool do_split_if, bool skip_loop_opts);
+ void build_and_optimize(bool do_split_if, bool skip_loop_opts, bool last_round = false);
// Dominators for the sea of nodes
void Dominators();
@@ -922,13 +922,13 @@
Node *dom_lca_internal( Node *n1, Node *n2 ) const;
// Compute the Ideal Node to Loop mapping
- PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool skip_loop_opts = false) :
+ PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool skip_loop_opts = false, bool last_round = false) :
PhaseTransform(Ideal_Loop),
_igvn(igvn),
_dom_lca_tags(arena()), // Thread::resource_area
_verify_me(NULL),
_verify_only(false) {
- build_and_optimize(do_split_ifs, skip_loop_opts);
+ build_and_optimize(do_split_ifs, skip_loop_opts, last_round);
}
// Verify that verify_me made the same decisions as a fresh run.
@@ -1227,9 +1227,9 @@
// Check for aggressive application of 'split-if' optimization,
// using basic block level info.
- void split_if_with_blocks ( VectorSet &visited, Node_Stack &nstack );
+ void split_if_with_blocks ( VectorSet &visited, Node_Stack &nstack, bool last_round );
Node *split_if_with_blocks_pre ( Node *n );
- void split_if_with_blocks_post( Node *n );
+ void split_if_with_blocks_post( Node *n, bool last_round );
Node *has_local_phi_input( Node *n );
// Mark an IfNode as being dominated by a prior test,
// without actually altering the CFG (and hence IDOM info).