420 public: 421 SafePointScalarObjectNode(const TypeOopPtr* tp, 422 #ifdef ASSERT 423 AllocateNode* alloc, 424 #endif 425 uint first_index, uint n_fields); 426 virtual int Opcode() const; 427 virtual uint ideal_reg() const; 428 virtual const RegMask &in_RegMask(uint) const; 429 virtual const RegMask &out_RegMask() const; 430 virtual uint match_edge(uint idx) const; 431 432 uint first_index() const { return _first_index; } 433 uint n_fields() const { return _n_fields; } 434 DEBUG_ONLY(AllocateNode* alloc() const { return _alloc; }) 435 436 // SafePointScalarObject should be always pinned to the control edge 437 // of the SafePoint node for which it was generated. 438 virtual bool pinned() const; // { return true; } 439 440 virtual uint size_of() const { return sizeof(*this); } 441 442 // Assumes that "this" is an argument to a safepoint node "s", and that 443 // "new_call" is being created to correspond to "s". But the difference 444 // between the start index of the jvmstates of "new_call" and "s" is 445 // "jvms_adj". Produce and return a SafePointScalarObjectNode that 446 // corresponds appropriately to "this" in "new_call". Assumes that 447 // "sosn_map" is a map, specific to the translation of "s" to "new_call", 448 // mapping old SafePointScalarObjectNodes to new, to avoid multiple copies. 449 SafePointScalarObjectNode* clone(int jvms_adj, Dict* sosn_map) const; 450 451 #ifndef PRODUCT 452 virtual void dump_spec(outputStream *st) const; 453 #endif 454 }; 455 456 //------------------------------CallNode--------------------------------------- 457 // Call nodes now subsume the function of debug nodes at callsites, so they 458 // contain the functionality of a full scope chain of debug nodes. 459 class CallNode : public SafePointNode { | 420 public: 421 SafePointScalarObjectNode(const TypeOopPtr* tp, 422 #ifdef ASSERT 423 AllocateNode* alloc, 424 #endif 425 uint first_index, uint n_fields); 426 virtual int Opcode() const; 427 virtual uint ideal_reg() const; 428 virtual const RegMask &in_RegMask(uint) const; 429 virtual const RegMask &out_RegMask() const; 430 virtual uint match_edge(uint idx) const; 431 432 uint first_index() const { return _first_index; } 433 uint n_fields() const { return _n_fields; } 434 DEBUG_ONLY(AllocateNode* alloc() const { return _alloc; }) 435 436 // SafePointScalarObject should be always pinned to the control edge 437 // of the SafePoint node for which it was generated. 438 virtual bool pinned() const; // { return true; } 439 440 // SafePointScalarObject depends on the SafePoint node 441 // for which it was generated. 442 virtual bool depends_only_on_test() const; // { return false; } 443 444 virtual uint size_of() const { return sizeof(*this); } 445 446 // Assumes that "this" is an argument to a safepoint node "s", and that 447 // "new_call" is being created to correspond to "s". But the difference 448 // between the start index of the jvmstates of "new_call" and "s" is 449 // "jvms_adj". Produce and return a SafePointScalarObjectNode that 450 // corresponds appropriately to "this" in "new_call". Assumes that 451 // "sosn_map" is a map, specific to the translation of "s" to "new_call", 452 // mapping old SafePointScalarObjectNodes to new, to avoid multiple copies. 453 SafePointScalarObjectNode* clone(int jvms_adj, Dict* sosn_map) const; 454 455 #ifndef PRODUCT 456 virtual void dump_spec(outputStream *st) const; 457 #endif 458 }; 459 460 //------------------------------CallNode--------------------------------------- 461 // Call nodes now subsume the function of debug nodes at callsites, so they 462 // contain the functionality of a full scope chain of debug nodes. 463 class CallNode : public SafePointNode { |