< prev index next >
src/share/vm/opto/compile.hpp
Print this page
@@ -81,10 +81,11 @@
class TypeData;
class TypeInt;
class TypePtr;
class TypeOopPtr;
class TypeFunc;
+class ValueTypePtrNode;
class Unique_Node_List;
class nmethod;
class WarmCallInfo;
class Node_Stack;
struct Final_Reshape_Counts;
@@ -413,10 +414,11 @@
GrowableArray<CallGenerator*>* _intrinsics; // List of intrinsics.
GrowableArray<Node*>* _macro_nodes; // List of nodes which need to be expanded before matching.
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<ValueTypePtrNode*>* _value_type_ptr_nodes; // List of ValueTypePtr nodes
ConnectionGraph* _congraph;
#ifndef PRODUCT
IdealGraphPrinter* _printer;
#endif
@@ -805,10 +807,20 @@
Node* range_check_cast_node(int idx) const { return _range_check_casts->at(idx); }
int range_check_cast_count() const { return _range_check_casts->length(); }
// 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);
bool is_predicate_opaq(Node * n) {
return _predicate_opaqs->contains(n);
< prev index next >