aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/callGenerator.hpp
diff options
context:
space:
mode:
authornever <none@none>2009-11-12 09:24:21 -0800
committernever <none@none>2009-11-12 09:24:21 -0800
commitd156d3d6a03f231076a0b2752e511f07fb421d1e (patch)
tree16db82a4764794dcace8c7e7d10edf4a6f16f460 /src/share/vm/opto/callGenerator.hpp
parent90991b04f6e3a5d378ec7ae0b51d7651180285d9 (diff)
6892658: C2 should optimize some stringbuilder patterns
Reviewed-by: kvn, twisti
Diffstat (limited to 'src/share/vm/opto/callGenerator.hpp')
-rw-r--r--src/share/vm/opto/callGenerator.hpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/share/vm/opto/callGenerator.hpp b/src/share/vm/opto/callGenerator.hpp
index bbd47ca4a..70ec9d3ff 100644
--- a/src/share/vm/opto/callGenerator.hpp
+++ b/src/share/vm/opto/callGenerator.hpp
@@ -57,6 +57,13 @@ class CallGenerator : public ResourceObj {
// is_trap: Does not return to the caller. (E.g., uncommon trap.)
virtual bool is_trap() const { return false; }
+ // is_late_inline: supports conversion of call into an inline
+ virtual bool is_late_inline() const { return false; }
+ // Replace the call with an inline version of the code
+ virtual void do_late_inline() { ShouldNotReachHere(); }
+
+ virtual CallStaticJavaNode* call_node() const { ShouldNotReachHere(); return NULL; }
+
// Note: It is possible for a CG to be both inline and virtual.
// (The hashCode intrinsic does a vtable check and an inlined fast path.)
@@ -92,9 +99,12 @@ class CallGenerator : public ResourceObj {
static CallGenerator* for_osr(ciMethod* m, int osr_bci);
// How to generate vanilla out-of-line call sites:
- static CallGenerator* for_direct_call(ciMethod* m); // static, special
+ static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false); // static, special
static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface
+ // How to generate a replace a direct call with an inline version
+ static CallGenerator* for_late_inline(ciMethod* m, CallGenerator* inline_cg);
+
// How to make a call but defer the decision whether to inline or not.
static CallGenerator* for_warm_call(WarmCallInfo* ci,
CallGenerator* if_cold,