comparison src/share/vm/opto/callnode.hpp @ 4115:1bd45abaa507

6890673: Eliminate allocations immediately after EA Summary: Try to eliminate allocations and related locks immediately after escape analysis. Reviewed-by: never
author kvn
date Wed, 16 Nov 2011 09:13:57 -0800
parents f6f3bb0ee072
children 1dc233a8c7fe
comparison
equal deleted inserted replaced
4114:6729bbc1fcd6 4115:1bd45abaa507
438 class SafePointScalarObjectNode: public TypeNode { 438 class SafePointScalarObjectNode: public TypeNode {
439 uint _first_index; // First input edge index of a SafePoint node where 439 uint _first_index; // First input edge index of a SafePoint node where
440 // states of the scalarized object fields are collected. 440 // states of the scalarized object fields are collected.
441 uint _n_fields; // Number of non-static fields of the scalarized object. 441 uint _n_fields; // Number of non-static fields of the scalarized object.
442 DEBUG_ONLY(AllocateNode* _alloc;) 442 DEBUG_ONLY(AllocateNode* _alloc;)
443
444 virtual uint hash() const ; // { return NO_HASH; }
445 virtual uint cmp( const Node &n ) const;
446
443 public: 447 public:
444 SafePointScalarObjectNode(const TypeOopPtr* tp, 448 SafePointScalarObjectNode(const TypeOopPtr* tp,
445 #ifdef ASSERT 449 #ifdef ASSERT
446 AllocateNode* alloc, 450 AllocateNode* alloc,
447 #endif 451 #endif
452 virtual const RegMask &out_RegMask() const; 456 virtual const RegMask &out_RegMask() const;
453 virtual uint match_edge(uint idx) const; 457 virtual uint match_edge(uint idx) const;
454 458
455 uint first_index() const { return _first_index; } 459 uint first_index() const { return _first_index; }
456 uint n_fields() const { return _n_fields; } 460 uint n_fields() const { return _n_fields; }
457 DEBUG_ONLY(AllocateNode* alloc() const { return _alloc; }) 461
458 462 #ifdef ASSERT
459 // SafePointScalarObject should be always pinned to the control edge 463 AllocateNode* alloc() const { return _alloc; }
460 // of the SafePoint node for which it was generated. 464 #endif
461 virtual bool pinned() const; // { return true; }
462
463 // SafePointScalarObject depends on the SafePoint node
464 // for which it was generated.
465 virtual bool depends_only_on_test() const; // { return false; }
466 465
467 virtual uint size_of() const { return sizeof(*this); } 466 virtual uint size_of() const { return sizeof(*this); }
468 467
469 // Assumes that "this" is an argument to a safepoint node "s", and that 468 // Assumes that "this" is an argument to a safepoint node "s", and that
470 // "new_call" is being created to correspond to "s". But the difference 469 // "new_call" is being created to correspond to "s". But the difference
878 // mark node as eliminated and update the counter if there is one 877 // mark node as eliminated and update the counter if there is one
879 void set_eliminated(); 878 void set_eliminated();
880 879
881 bool is_coarsened() { return _coarsened; } 880 bool is_coarsened() { return _coarsened; }
882 void set_coarsened() { _coarsened = true; } 881 void set_coarsened() { _coarsened = true; }
882 void clear_coarsened() { _coarsened = false; }
883 883
884 // locking does not modify its arguments 884 // locking does not modify its arguments
885 virtual bool may_modify(const TypePtr *addr_t, PhaseTransform *phase){ return false;} 885 virtual bool may_modify(const TypePtr *addr_t, PhaseTransform *phase){ return false;}
886 886
887 #ifndef PRODUCT 887 #ifndef PRODUCT