159 // This is the number of times we expect the call code to be used. |
159 // This is the number of times we expect the call code to be used. |
160 float expected_uses = past_uses; |
160 float expected_uses = past_uses; |
161 |
161 |
162 // Try inlining a bytecoded method: |
162 // Try inlining a bytecoded method: |
163 if (!call_does_dispatch) { |
163 if (!call_does_dispatch) { |
164 InlineTree* ilt; |
164 InlineTree* ilt = InlineTree::find_subtree_from_root(this->ilt(), jvms->caller(), jvms->method()); |
165 if (UseOldInlining) { |
|
166 ilt = InlineTree::find_subtree_from_root(this->ilt(), jvms->caller(), jvms->method()); |
|
167 } else { |
|
168 // Make a disembodied, stateless ILT. |
|
169 // TO DO: When UseOldInlining is removed, copy the ILT code elsewhere. |
|
170 float site_invoke_ratio = prof_factor; |
|
171 // Note: ilt is for the root of this parse, not the present call site. |
|
172 ilt = new InlineTree(this, jvms->method(), jvms->caller(), site_invoke_ratio, MaxInlineLevel); |
|
173 } |
|
174 WarmCallInfo scratch_ci; |
165 WarmCallInfo scratch_ci; |
175 if (!UseOldInlining) |
|
176 scratch_ci.init(jvms, callee, profile, prof_factor); |
|
177 bool should_delay = false; |
166 bool should_delay = false; |
178 WarmCallInfo* ci = ilt->ok_to_inline(callee, jvms, profile, &scratch_ci, should_delay); |
167 WarmCallInfo* ci = ilt->ok_to_inline(callee, jvms, profile, &scratch_ci, should_delay); |
179 assert(ci != &scratch_ci, "do not let this pointer escape"); |
168 assert(ci != &scratch_ci, "do not let this pointer escape"); |
180 bool allow_inline = (ci != NULL && !ci->is_cold()); |
169 bool allow_inline = (ci != NULL && !ci->is_cold()); |
181 bool require_inline = (allow_inline && ci->is_hot()); |
170 bool require_inline = (allow_inline && ci->is_hot()); |