--- a/src/hotspot/share/opto/compile.hpp Thu Mar 22 16:39:02 2018 -0700
+++ b/src/hotspot/share/opto/compile.hpp Thu Mar 22 20:21:19 2018 -0700
@@ -416,6 +416,7 @@
GrowableArray<Node*>* _predicate_opaqs; // List of Opaque1 nodes for the loop predicates.
GrowableArray<Node*>* _expensive_nodes; // List of nodes that are expensive to compute and that we'd better not let the GVN freely common
GrowableArray<Node*>* _range_check_casts; // List of CastII nodes with a range check dependency
+ GrowableArray<Node*>* _opaque4_nodes; // List of Opaque4 nodes that have a default value
ConnectionGraph* _congraph;
#ifndef PRODUCT
IdealGraphPrinter* _printer;
@@ -810,6 +811,16 @@
// Remove all range check dependent CastIINodes.
void remove_range_check_casts(PhaseIterGVN &igvn);
+ void add_opaque4_node(Node* n);
+ void remove_opaque4_node(Node* n) {
+ if (_opaque4_nodes->contains(n)) {
+ _opaque4_nodes->remove(n);
+ }
+ }
+ Node* opaque4_node(int idx) const { return _opaque4_nodes->at(idx); }
+ int opaque4_count() const { return _opaque4_nodes->length(); }
+ void remove_opaque4_nodes(PhaseIterGVN &igvn);
+
// remove the opaque nodes that protect the predicates so that the unused checks and
// uncommon traps will be eliminated from the graph.
void cleanup_loop_predicates(PhaseIterGVN &igvn);