Mercurial > hg > truffle
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 |