src/share/vm/opto/graphKit.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/graphKit.hpp

Print this page
rev 8008 : 8073866: Fix for 8064703 is not sufficient
Summary: side effects between allocation and arraycopy can be reexecuted, unreachable uninitialized array can be seen by GCs
Reviewed-by:


 392     }
 393     return NULL;
 394   }
 395 
 396   // record type from profiling with the type system
 397   Node* record_profile_for_speculation(Node* n, ciKlass* exact_kls, bool maybe_null);
 398   void record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc);
 399   void record_profiled_parameters_for_speculation();
 400   void record_profiled_return_for_speculation();
 401   Node* record_profiled_receiver_for_speculation(Node* n);
 402 
 403   // Use the type profile to narrow an object type.
 404   Node* maybe_cast_profiled_receiver(Node* not_null_obj,
 405                                      ciKlass* require_klass,
 406                                      ciKlass* spec,
 407                                      bool safe_for_replace);
 408 
 409   // Cast obj to type and emit guard unless we had too many traps here already
 410   Node* maybe_cast_profiled_obj(Node* obj,
 411                                 ciKlass* type,
 412                                 bool not_null = false,
 413                                 SafePointNode* sfpt = NULL);
 414 
 415   // Cast obj to not-null on this path
 416   Node* cast_not_null(Node* obj, bool do_replace_in_map = true);
 417   // Replace all occurrences of one node by another.
 418   void replace_in_map(Node* old, Node* neww);
 419 
 420   void  push(Node* n)     { map_not_null();        _map->set_stack(_map->_jvms,   _sp++        , n); }
 421   Node* pop()             { map_not_null(); return _map->stack(    _map->_jvms, --_sp             ); }
 422   Node* peek(int off = 0) { map_not_null(); return _map->stack(    _map->_jvms,   _sp - off - 1   ); }
 423 
 424   void push_pair(Node* ldval) {
 425     push(ldval);
 426     push(top());  // the halfword is merely a placeholder
 427   }
 428   void push_pair_local(int i) {
 429     // longs are stored in locals in "push" order
 430     push(  local(i+0) );  // the real value
 431     assert(local(i+1) == top(), "");
 432     push(top());  // halfword placeholder
 433   }




 392     }
 393     return NULL;
 394   }
 395 
 396   // record type from profiling with the type system
 397   Node* record_profile_for_speculation(Node* n, ciKlass* exact_kls, bool maybe_null);
 398   void record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc);
 399   void record_profiled_parameters_for_speculation();
 400   void record_profiled_return_for_speculation();
 401   Node* record_profiled_receiver_for_speculation(Node* n);
 402 
 403   // Use the type profile to narrow an object type.
 404   Node* maybe_cast_profiled_receiver(Node* not_null_obj,
 405                                      ciKlass* require_klass,
 406                                      ciKlass* spec,
 407                                      bool safe_for_replace);
 408 
 409   // Cast obj to type and emit guard unless we had too many traps here already
 410   Node* maybe_cast_profiled_obj(Node* obj,
 411                                 ciKlass* type,
 412                                 bool not_null = false);

 413 
 414   // Cast obj to not-null on this path
 415   Node* cast_not_null(Node* obj, bool do_replace_in_map = true);
 416   // Replace all occurrences of one node by another.
 417   void replace_in_map(Node* old, Node* neww);
 418 
 419   void  push(Node* n)     { map_not_null();        _map->set_stack(_map->_jvms,   _sp++        , n); }
 420   Node* pop()             { map_not_null(); return _map->stack(    _map->_jvms, --_sp             ); }
 421   Node* peek(int off = 0) { map_not_null(); return _map->stack(    _map->_jvms,   _sp - off - 1   ); }
 422 
 423   void push_pair(Node* ldval) {
 424     push(ldval);
 425     push(top());  // the halfword is merely a placeholder
 426   }
 427   void push_pair_local(int i) {
 428     // longs are stored in locals in "push" order
 429     push(  local(i+0) );  // the real value
 430     assert(local(i+1) == top(), "");
 431     push(top());  // halfword placeholder
 432   }


src/share/vm/opto/graphKit.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File