RFR: 8266854: LibraryCallKit::inline_preconditions_checkIndex modifies control flow even if the intrinsic bailed out
Vladimir Kozlov
kvn at openjdk.java.net
Mon May 10 23:59:25 UTC 2021
On Mon, 10 May 2021 23:09:33 GMT, Sandhya Viswanathan <sviswanathan at openjdk.org> wrote:
> LibraryCallKit::inline_preconditions_checkIndex can result in the following assert sometimes:
> "# assert(ctrl == kit.control()) failed: Control flow was added although the intrinsic bailed out"
>
> Consider the following code snippet:
> ...
> set_control(_gvn.transform(new IfTrueNode(rc)));
> {
> PreserveJVMState pjvms(this);
> set_control(_gvn.transform(new IfFalseNode(rc)));
> uncommon_trap(Deoptimization::Reason_range_check,
> Deoptimization::Action_make_not_entrant);
> }
> ..
> Here the control is being modified by set_control even though a bailout is possible afterwards.
> Moving the set_control later in the intrinsic fixes this.
>
> This is a small fix. Please review.
>
> Best Regards,
> Sandhya
src/hotspot/share/opto/library_call.cpp line 1049:
> 1047: record_for_igvn(rc);
> 1048: }
> 1049: set_control(_gvn.transform(new IfTrueNode(rc)));
Or you can move `stopped()` check here (after `set_control()`) and avoid generation of useless `false` path.
-------------
PR: https://git.openjdk.java.net/jdk/pull/3958
More information about the hotspot-compiler-dev
mailing list