--- old/src/share/vm/opto/compile.hpp 2017-07-10 18:11:34.870530175 +0200 +++ new/src/share/vm/opto/compile.hpp 2017-07-10 18:11:30.024551881 +0200 @@ -83,6 +83,7 @@ class TypePtr; class TypeOopPtr; class TypeFunc; +class ValueTypePtrNode; class Unique_Node_List; class nmethod; class WarmCallInfo; @@ -415,6 +416,7 @@ GrowableArray* _predicate_opaqs; // List of Opaque1 nodes for the loop predicates. GrowableArray* _expensive_nodes; // List of nodes that are expensive to compute and that we'd better not let the GVN freely common GrowableArray* _range_check_casts; // List of CastII nodes with a range check dependency + GrowableArray* _value_type_ptr_nodes; // List of ValueTypePtr nodes ConnectionGraph* _congraph; #ifndef PRODUCT IdealGraphPrinter* _printer; @@ -807,6 +809,16 @@ // Remove all range check dependent CastIINodes. void remove_range_check_casts(PhaseIterGVN &igvn); + void add_value_type_ptr(ValueTypePtrNode* n); + void remove_value_type_ptr(ValueTypePtrNode* n) { + if (_value_type_ptr_nodes->contains(n)) { + _value_type_ptr_nodes->remove(n); + } + } + ValueTypePtrNode* value_type_ptr(int idx) const { return _value_type_ptr_nodes->at(idx); } + int value_type_ptr_count() const { return _value_type_ptr_nodes->length(); } + void process_value_type_ptr_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);