--- a/src/hotspot/share/opto/macro.cpp Tue Nov 28 21:04:42 2017 +0530
+++ b/src/hotspot/share/opto/macro.cpp Tue Nov 28 11:59:16 2017 +0100
@@ -282,7 +282,8 @@
if (!this_region->in(ind)->is_IfFalse()) {
ind = 2;
}
- if (this_region->in(ind)->is_IfFalse()) {
+ if (this_region->in(ind)->is_IfFalse() &&
+ this_region->in(ind)->in(0)->Opcode() == Op_If) {
Node* bol = this_region->in(ind)->in(0)->in(1);
assert(bol->is_Bool(), "");
cmpx = bol->in(1);
@@ -2660,6 +2661,8 @@
break;
case Node::Class_ArrayCopy:
break;
+ case Node::Class_OuterStripMinedLoop:
+ break;
default:
assert(n->Opcode() == Op_LoopLimit ||
n->Opcode() == Op_Opaque1 ||
@@ -2733,6 +2736,10 @@
} else if (n->Opcode() == Op_Opaque4) {
_igvn.replace_node(n, n->in(2));
success = true;
+ } else if (n->Opcode() == Op_OuterStripMinedLoop) {
+ n->as_OuterStripMinedLoop()->adjust_strip_mined_loop(&_igvn);
+ C->remove_macro_node(n);
+ success = true;
}
assert(success == (C->macro_count() < old_macro_count), "elimination reduces macro count");
progress = progress || success;