RFR(XS) 8191688: Assert failed in > 200 tests: failed dependencies, but counter didn't change
dean.long at oracle.com
dean.long at oracle.com
Wed Nov 22 19:14:20 UTC 2017
On 11/22/17 4:13 AM, Vladimir Ivanov wrote:
>> https://bugs.openjdk.java.net/browse/JDK-8191688
>> http://cr.openjdk.java.net/~dlong/8191688/webrev/
>
> The fix looks good.
>
Thanks Vladimir. I already pushed it, so I wasn't able to add you as a
reviewer.
> An observation not related to the bug:
>
> + if (env->jvmti_can_hotswap_or_post_breakpoint()) {
> // 6328518 check hotswap conditions under the right lock.
> MutexLocker locker(Compile_lock);
> if (Dependencies::check_evol_method(h_m()) != NULL) {
> _is_c1_compilable = false;
> _is_c2_compilable = false;
> + _can_be_parsed = false;
> }
> } else {
>
> Klass* Dependencies::check_evol_method(Method* m) {
> ...
> if (m->is_old()
> || m->number_of_breakpoints() > 0) {
> return m->method_holder();
>
> It seems once there's a breakpoint set in a method, it will never be
> compiled again. (I looked in the code couldn't find where
> _is_c1_compilable/_is_c2_compilable are reset once all breakpoints are
> cleared). If that's the case, it has severe performance consequences,
> so better to fix it.
>
The ciMethod only lasts for the lifetime of the compiler task, right?
> Also, some nitpicking follows:
>
> + bool _can_be_parsed;
>
> + bool can_be_parsed() const { return _can_be_parsed; }
>
> The name confuses me. I'd presume it signals there are some problems
> with parsing the method, so don't even try. It seems the choice was
> affected by InlineTree::check_can_parse(), but the latter looks
> justified:
>
> const char* InlineTree::check_can_parse(ciMethod* callee) {
> // Certain methods cannot be parsed at all:
> if ( callee->is_native()) return "native method";
> if ( callee->is_abstract()) return "abstract method";
> if (!callee->has_balanced_monitors()) return "not compilable
> (unbalanced monitors)";
> if ( callee->get_flow_analysis()->failing()) return "not compilable
> (flow analysis failed)";
>
> Why doesn't it stress it's all about inlining? E.g.,
> ciMethod::can_be_inlined looks more descriptive in that context.
>
The way things are now, "can be parsed" seems to mean "can be compiled
or inlined". If there was a way to say a method can be compiled but not
inlined, then I agree can_be_inlined would make sense.
dl
> Best regards,
> Vladimir Ivanov
More information about the hotspot-compiler-dev
mailing list