83 { |
83 { |
84 NOT_PRODUCT(_count_inlines = 0;) |
84 NOT_PRODUCT(_count_inlines = 0;) |
85 assert(!UseOldInlining, "do not use for old stuff"); |
85 assert(!UseOldInlining, "do not use for old stuff"); |
86 } |
86 } |
87 |
87 |
|
88 /** |
|
89 * Return true when EA is ON and a java constructor is called or |
|
90 * a super constructor is called from an inlined java constructor. |
|
91 * Also return true for boxing methods. |
|
92 */ |
88 static bool is_init_with_ea(ciMethod* callee_method, |
93 static bool is_init_with_ea(ciMethod* callee_method, |
89 ciMethod* caller_method, Compile* C) { |
94 ciMethod* caller_method, Compile* C) { |
90 // True when EA is ON and a java constructor is called or |
95 if (!C->do_escape_analysis() || !EliminateAllocations) { |
91 // a super constructor is called from an inlined java constructor. |
96 return false; // EA is off |
92 return C->do_escape_analysis() && EliminateAllocations && |
97 } |
93 ( callee_method->is_initializer() || |
98 if (callee_method->is_initializer()) { |
94 (caller_method->is_initializer() && |
99 return true; // constuctor |
95 caller_method != C->method() && |
100 } |
96 caller_method->holder()->is_subclass_of(callee_method->holder())) |
101 if (caller_method->is_initializer() && |
97 ); |
102 caller_method != C->method() && |
98 } |
103 caller_method->holder()->is_subclass_of(callee_method->holder())) { |
99 |
104 return true; // super constructor is called from inlined constructor |
|
105 } |
|
106 if (C->eliminate_boxing() && callee_method->is_boxing_method()) { |
|
107 return true; |
|
108 } |
|
109 return false; |
|
110 } |
|
111 |
|
112 /** |
|
113 * Force inlining unboxing accessor. |
|
114 */ |
100 static bool is_unboxing_method(ciMethod* callee_method, Compile* C) { |
115 static bool is_unboxing_method(ciMethod* callee_method, Compile* C) { |
101 // Force inlining unboxing accessor. |
|
102 return C->eliminate_boxing() && callee_method->is_unboxing_method(); |
116 return C->eliminate_boxing() && callee_method->is_unboxing_method(); |
103 } |
117 } |
104 |
118 |
105 // positive filter: should callee be inlined? |
119 // positive filter: should callee be inlined? |
106 bool InlineTree::should_inline(ciMethod* callee_method, ciMethod* caller_method, |
120 bool InlineTree::should_inline(ciMethod* callee_method, ciMethod* caller_method, |