83 //
84 // The non-Parm edges of the returned map will contain updated global state,
85 // and one or two edges before jvms->sp() will carry any return values.
86 // Other map edges may contain locals or monitors, and should not
87 // be changed in meaning.
88 //
89 // If the call traps, the returned map must have a control edge of top.
90 // If the call can throw, the returned map must report has_exceptions().
91 //
92 // If the result is NULL, it means that this CallGenerator was unable
93 // to handle the given call, and another CallGenerator should be consulted.
94 virtual JVMState* generate(JVMState* jvms) = 0;
95
96 // How to generate a call site that is inlined:
97 static CallGenerator* for_inline(ciMethod* m, float expected_uses = -1);
98 // How to generate code for an on-stack replacement handler.
99 static CallGenerator* for_osr(ciMethod* m, int osr_bci);
100
101 // How to generate vanilla out-of-line call sites:
102 static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false); // static, special
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);
107
108 // How to make a call but defer the decision whether to inline or not.
109 static CallGenerator* for_warm_call(WarmCallInfo* ci,
110 CallGenerator* if_cold,
111 CallGenerator* if_hot);
112
113 // How to make a call that optimistically assumes a receiver type:
114 static CallGenerator* for_predicted_call(ciKlass* predicted_receiver,
115 CallGenerator* if_missed,
116 CallGenerator* if_hit,
117 float hit_prob);
118
119 // How to make a call that gives up and goes back to the interpreter:
120 static CallGenerator* for_uncommon_trap(ciMethod* m,
121 Deoptimization::DeoptReason reason,
122 Deoptimization::DeoptAction action);
|
83 //
84 // The non-Parm edges of the returned map will contain updated global state,
85 // and one or two edges before jvms->sp() will carry any return values.
86 // Other map edges may contain locals or monitors, and should not
87 // be changed in meaning.
88 //
89 // If the call traps, the returned map must have a control edge of top.
90 // If the call can throw, the returned map must report has_exceptions().
91 //
92 // If the result is NULL, it means that this CallGenerator was unable
93 // to handle the given call, and another CallGenerator should be consulted.
94 virtual JVMState* generate(JVMState* jvms) = 0;
95
96 // How to generate a call site that is inlined:
97 static CallGenerator* for_inline(ciMethod* m, float expected_uses = -1);
98 // How to generate code for an on-stack replacement handler.
99 static CallGenerator* for_osr(ciMethod* m, int osr_bci);
100
101 // How to generate vanilla out-of-line call sites:
102 static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false); // static, special
103 static CallGenerator* for_dynamic_call(ciMethod* m); // invokedynamic
104 static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface
105
106 // How to generate a replace a direct call with an inline version
107 static CallGenerator* for_late_inline(ciMethod* m, CallGenerator* inline_cg);
108
109 // How to make a call but defer the decision whether to inline or not.
110 static CallGenerator* for_warm_call(WarmCallInfo* ci,
111 CallGenerator* if_cold,
112 CallGenerator* if_hot);
113
114 // How to make a call that optimistically assumes a receiver type:
115 static CallGenerator* for_predicted_call(ciKlass* predicted_receiver,
116 CallGenerator* if_missed,
117 CallGenerator* if_hit,
118 float hit_prob);
119
120 // How to make a call that gives up and goes back to the interpreter:
121 static CallGenerator* for_uncommon_trap(ciMethod* m,
122 Deoptimization::DeoptReason reason,
123 Deoptimization::DeoptAction action);
|