RFR: 8266854: LibraryCallKit::inline_preconditions_checkIndex modifies control flow even if the intrinsic bailed out

Sandhya Viswanathan sviswanathan at openjdk.java.net
Mon May 10 23:41:16 UTC 2021


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

-------------

Commit messages:
 - 8266854: LibraryCallKit::inline_preconditions_checkIndex modifies control flow even if the intrinsic bailed out

Changes: https://git.openjdk.java.net/jdk/pull/3958/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3958&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8266854
  Stats: 5 lines in 1 file changed: 3 ins; 0 del; 2 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3958.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3958/head:pull/3958

PR: https://git.openjdk.java.net/jdk/pull/3958


More information about the hotspot-compiler-dev mailing list