< prev index next >
src/share/vm/opto/graphKit.hpp
Print this page
*** 61,70 ****
--- 61,73 ----
PhaseGVN &_gvn; // Some optimizations while parsing
SafePointNode* _map; // Parser map from JVM to Nodes
SafePointNode* _exceptions;// Parser map(s) for exception state(s)
int _bci; // JVM Bytecode Pointer
ciMethod* _method; // JVM Current Method
+ #ifdef ASSERT
+ uint _worklist_size;
+ #endif
private:
int _sp; // JVM Expression Stack Pointer; don't modify directly!
private:
*** 73,97 ****
return _map;
}
public:
GraphKit(); // empty constructor
! GraphKit(JVMState* jvms); // the JVM state on which to operate
#ifdef ASSERT
~GraphKit() {
assert(!has_exceptions(), "user must call transfer_exceptions_into_jvms");
}
#endif
virtual Parse* is_Parse() const { return NULL; }
virtual LibraryCallKit* is_LibraryCallKit() const { return NULL; }
ciEnv* env() const { return _env; }
PhaseGVN& gvn() const { return _gvn; }
! void record_for_igvn(Node* n) const { C->record_for_igvn(n); } // delegate to Compile
// Handy well-known nodes:
Node* null() const { return zerocon(T_OBJECT); }
Node* top() const { return C->top(); }
RootNode* root() const { return C->root(); }
--- 76,105 ----
return _map;
}
public:
GraphKit(); // empty constructor
! GraphKit(JVMState* jvms, PhaseGVN* gvn = NULL); // the JVM state on which to operate
#ifdef ASSERT
~GraphKit() {
assert(!has_exceptions(), "user must call transfer_exceptions_into_jvms");
+ // During incremental inlining, the Node_Array of the C->for_igvn() worklist and the IGVN
+ // worklist are shared but the _in_worklist VectorSet is not. To avoid inconsistencies,
+ // we should not add nodes to the _for_igvn worklist when using IGVN for the GraphKit.
+ assert((_gvn.is_IterGVN() == NULL) || (_gvn.C->for_igvn()->size() == _worklist_size),
+ "GraphKit should not modify _for_igvn worklist after parsing");
}
#endif
virtual Parse* is_Parse() const { return NULL; }
virtual LibraryCallKit* is_LibraryCallKit() const { return NULL; }
ciEnv* env() const { return _env; }
PhaseGVN& gvn() const { return _gvn; }
! void record_for_igvn(Node* n) const { _gvn.record_for_igvn(n); }
// Handy well-known nodes:
Node* null() const { return zerocon(T_OBJECT); }
Node* top() const { return C->top(); }
RootNode* root() const { return C->root(); }
*** 878,888 ****
Node* get_layout_helper(Node* klass_node, jint& constant_value);
Node* new_instance(Node* klass_node,
Node* slow_test = NULL,
Node* *return_size_val = NULL,
bool deoptimize_on_exception = false,
! ValueTypeNode* value_node = NULL);
Node* new_array(Node* klass_node, Node* count_val, int nargs,
Node* *return_size_val = NULL,
bool deoptimize_on_exception = false);
void initialize_value_type_array(Node* array, Node* length, ciValueKlass* vk, int nargs);
--- 886,896 ----
Node* get_layout_helper(Node* klass_node, jint& constant_value);
Node* new_instance(Node* klass_node,
Node* slow_test = NULL,
Node* *return_size_val = NULL,
bool deoptimize_on_exception = false,
! ValueTypeBaseNode* value_node = NULL);
Node* new_array(Node* klass_node, Node* count_val, int nargs,
Node* *return_size_val = NULL,
bool deoptimize_on_exception = false);
void initialize_value_type_array(Node* array, Node* length, ciValueKlass* vk, int nargs);
< prev index next >