comparison src/share/vm/opto/callnode.hpp @ 12158:766fac3395d6

8012972: Incremental Inlining should support scalar replaced object in debug info Summary: store in _first_index not absolute index but an index relative to the last (youngest) jvms->_scloff value Reviewed-by: roland, twisti
author kvn
date Fri, 23 Aug 2013 11:41:37 -0700
parents 6f3fd5150b67
children 3bfb204913de
comparison
equal deleted inserted replaced
12094:73921c720b94 12158:766fac3395d6
447 //------------------------------SafePointScalarObjectNode---------------------- 447 //------------------------------SafePointScalarObjectNode----------------------
448 // A SafePointScalarObjectNode represents the state of a scalarized object 448 // A SafePointScalarObjectNode represents the state of a scalarized object
449 // at a safepoint. 449 // at a safepoint.
450 450
451 class SafePointScalarObjectNode: public TypeNode { 451 class SafePointScalarObjectNode: public TypeNode {
452 uint _first_index; // First input edge index of a SafePoint node where 452 uint _first_index; // First input edge relative index of a SafePoint node where
453 // states of the scalarized object fields are collected. 453 // states of the scalarized object fields are collected.
454 // It is relative to the last (youngest) jvms->_scloff.
454 uint _n_fields; // Number of non-static fields of the scalarized object. 455 uint _n_fields; // Number of non-static fields of the scalarized object.
455 DEBUG_ONLY(AllocateNode* _alloc;) 456 DEBUG_ONLY(AllocateNode* _alloc;)
456 457
457 virtual uint hash() const ; // { return NO_HASH; } 458 virtual uint hash() const ; // { return NO_HASH; }
458 virtual uint cmp( const Node &n ) const; 459 virtual uint cmp( const Node &n ) const;
460
461 uint first_index() const { return _first_index; }
459 462
460 public: 463 public:
461 SafePointScalarObjectNode(const TypeOopPtr* tp, 464 SafePointScalarObjectNode(const TypeOopPtr* tp,
462 #ifdef ASSERT 465 #ifdef ASSERT
463 AllocateNode* alloc, 466 AllocateNode* alloc,
467 virtual uint ideal_reg() const; 470 virtual uint ideal_reg() const;
468 virtual const RegMask &in_RegMask(uint) const; 471 virtual const RegMask &in_RegMask(uint) const;
469 virtual const RegMask &out_RegMask() const; 472 virtual const RegMask &out_RegMask() const;
470 virtual uint match_edge(uint idx) const; 473 virtual uint match_edge(uint idx) const;
471 474
472 uint first_index() const { return _first_index; } 475 uint first_index(JVMState* jvms) const {
476 assert(jvms != NULL, "missed JVMS");
477 return jvms->scloff() + _first_index;
478 }
473 uint n_fields() const { return _n_fields; } 479 uint n_fields() const { return _n_fields; }
474 480
475 #ifdef ASSERT 481 #ifdef ASSERT
476 AllocateNode* alloc() const { return _alloc; } 482 AllocateNode* alloc() const { return _alloc; }
477 #endif 483 #endif
483 // between the start index of the jvmstates of "new_call" and "s" is 489 // between the start index of the jvmstates of "new_call" and "s" is
484 // "jvms_adj". Produce and return a SafePointScalarObjectNode that 490 // "jvms_adj". Produce and return a SafePointScalarObjectNode that
485 // corresponds appropriately to "this" in "new_call". Assumes that 491 // corresponds appropriately to "this" in "new_call". Assumes that
486 // "sosn_map" is a map, specific to the translation of "s" to "new_call", 492 // "sosn_map" is a map, specific to the translation of "s" to "new_call",
487 // mapping old SafePointScalarObjectNodes to new, to avoid multiple copies. 493 // mapping old SafePointScalarObjectNodes to new, to avoid multiple copies.
488 SafePointScalarObjectNode* clone(int jvms_adj, Dict* sosn_map) const; 494 SafePointScalarObjectNode* clone(Dict* sosn_map) const;
489 495
490 #ifndef PRODUCT 496 #ifndef PRODUCT
491 virtual void dump_spec(outputStream *st) const; 497 virtual void dump_spec(outputStream *st) const;
492 #endif 498 #endif
493 }; 499 };