Mercurial > hg > truffle
comparison src/share/vm/opto/node.hpp @ 8048:8b3da8d14c93
7197327: 40% regression on 8 b41 comp 8 b40 on specjvm2008.mpegaudio on oob
Summary: Add support for expensive nodes.
Reviewed-by: kvn
author | roland |
---|---|
date | Tue, 12 Feb 2013 12:56:11 +0100 |
parents | a7114d3d712e |
children | 6f3fd5150b67 |
comparison
equal
deleted
inserted
replaced
8047:1e5e28bac299 | 8048:8b3da8d14c93 |
---|---|
376 | 376 |
377 #ifdef ASSERT | 377 #ifdef ASSERT |
378 bool is_dead() const; | 378 bool is_dead() const; |
379 #define is_not_dead(n) ((n) == NULL || !VerifyIterativeGVN || !((n)->is_dead())) | 379 #define is_not_dead(n) ((n) == NULL || !VerifyIterativeGVN || !((n)->is_dead())) |
380 #endif | 380 #endif |
381 // Check whether node has become unreachable | |
382 bool is_unreachable(PhaseIterGVN &igvn) const; | |
381 | 383 |
382 // Set a required input edge, also updates corresponding output edge | 384 // Set a required input edge, also updates corresponding output edge |
383 void add_req( Node *n ); // Append a NEW required input | 385 void add_req( Node *n ); // Append a NEW required input |
384 void add_req_batch( Node* n, uint m ); // Append m NEW required inputs (all n). | 386 void add_req_batch( Node* n, uint m ); // Append m NEW required inputs (all n). |
385 void del_req( uint idx ); // Delete required edge & compact | 387 void del_req( uint idx ); // Delete required edge & compact |
644 Flag_is_cisc_alternate = Flag_is_Con << 1, | 646 Flag_is_cisc_alternate = Flag_is_Con << 1, |
645 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, | 647 Flag_is_dead_loop_safe = Flag_is_cisc_alternate << 1, |
646 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 1, | 648 Flag_may_be_short_branch = Flag_is_dead_loop_safe << 1, |
647 Flag_avoid_back_to_back = Flag_may_be_short_branch << 1, | 649 Flag_avoid_back_to_back = Flag_may_be_short_branch << 1, |
648 Flag_has_call = Flag_avoid_back_to_back << 1, | 650 Flag_has_call = Flag_avoid_back_to_back << 1, |
649 _max_flags = (Flag_has_call << 1) - 1 // allow flags combination | 651 Flag_is_expensive = Flag_has_call << 1, |
652 _max_flags = (Flag_is_expensive << 1) - 1 // allow flags combination | |
650 }; | 653 }; |
651 | 654 |
652 private: | 655 private: |
653 jushort _class_id; | 656 jushort _class_id; |
654 jushort _flags; | 657 jushort _flags; |
817 // Goto and Return. This call also returns the block ending Node. | 820 // Goto and Return. This call also returns the block ending Node. |
818 virtual const Node *is_block_proj() const; | 821 virtual const Node *is_block_proj() const; |
819 | 822 |
820 // The node is a "macro" node which needs to be expanded before matching | 823 // The node is a "macro" node which needs to be expanded before matching |
821 bool is_macro() const { return (_flags & Flag_is_macro) != 0; } | 824 bool is_macro() const { return (_flags & Flag_is_macro) != 0; } |
825 // The node is expensive: the best control is set during loop opts | |
826 bool is_expensive() const { return (_flags & Flag_is_expensive) != 0 && in(0) != NULL; } | |
822 | 827 |
823 //----------------- Optimization | 828 //----------------- Optimization |
824 | 829 |
825 // Get the worst-case Type output for this Node. | 830 // Get the worst-case Type output for this Node. |
826 virtual const class Type *bottom_type() const; | 831 virtual const class Type *bottom_type() const; |