comparison src/share/vm/opto/callGenerator.hpp @ 1080:7c57aead6d3e

6892658: C2 should optimize some stringbuilder patterns Reviewed-by: kvn, twisti
author never
date Thu, 12 Nov 2009 09:24:21 -0800
parents a61af66fc99e
children 97125851f396
comparison
equal deleted inserted replaced
1078:8e7adf982378 1080:7c57aead6d3e
55 // is_predicted: Uses an explicit check against a predicted type. 55 // is_predicted: Uses an explicit check against a predicted type.
56 virtual bool is_predicted() const { return false; } 56 virtual bool is_predicted() const { return false; }
57 // is_trap: Does not return to the caller. (E.g., uncommon trap.) 57 // is_trap: Does not return to the caller. (E.g., uncommon trap.)
58 virtual bool is_trap() const { return false; } 58 virtual bool is_trap() const { return false; }
59 59
60 // is_late_inline: supports conversion of call into an inline
61 virtual bool is_late_inline() const { return false; }
62 // Replace the call with an inline version of the code
63 virtual void do_late_inline() { ShouldNotReachHere(); }
64
65 virtual CallStaticJavaNode* call_node() const { ShouldNotReachHere(); return NULL; }
66
60 // Note: It is possible for a CG to be both inline and virtual. 67 // Note: It is possible for a CG to be both inline and virtual.
61 // (The hashCode intrinsic does a vtable check and an inlined fast path.) 68 // (The hashCode intrinsic does a vtable check and an inlined fast path.)
62 69
63 // Utilities: 70 // Utilities:
64 const TypeFunc* tf() const; 71 const TypeFunc* tf() const;
90 static CallGenerator* for_inline(ciMethod* m, float expected_uses = -1); 97 static CallGenerator* for_inline(ciMethod* m, float expected_uses = -1);
91 // How to generate code for an on-stack replacement handler. 98 // How to generate code for an on-stack replacement handler.
92 static CallGenerator* for_osr(ciMethod* m, int osr_bci); 99 static CallGenerator* for_osr(ciMethod* m, int osr_bci);
93 100
94 // How to generate vanilla out-of-line call sites: 101 // How to generate vanilla out-of-line call sites:
95 static CallGenerator* for_direct_call(ciMethod* m); // static, special 102 static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false); // static, special
96 static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface 103 static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface
104
105 // How to generate a replace a direct call with an inline version
106 static CallGenerator* for_late_inline(ciMethod* m, CallGenerator* inline_cg);
97 107
98 // How to make a call but defer the decision whether to inline or not. 108 // How to make a call but defer the decision whether to inline or not.
99 static CallGenerator* for_warm_call(WarmCallInfo* ci, 109 static CallGenerator* for_warm_call(WarmCallInfo* ci,
100 CallGenerator* if_cold, 110 CallGenerator* if_cold,
101 CallGenerator* if_hot); 111 CallGenerator* if_hot);