RFR(S): 8210646: [lworld] C2 compilation fails with "assert(!target->is_ready()) failed: our arrival must be expected"

Tobias Hartmann tobias.hartmann at oracle.com
Thu Sep 13 11:34:05 UTC 2018


Hi,

please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8210646
http://cr.openjdk.java.net/~thartmann/8210646/webrev.00/

With value types, the acmp implementation looks like this:

(1) for 'a != b':

  do_if(a != b) -> taken_branch
   |
  do_if(a is value) -> taken_branch
   |
  untaken_branch

(2) for 'a == b':

  do_if(a == b) -> do_if(a is not value) -> taken_branch
   |                |
    \              /
     \            /
     untaken_branch


Now Parse::do_if() will mark an unreachable successor block as parsed which is not correct for the
first taken_branch in (1) and the first untaken_branch in (2) because they might still be reachable
through the second if. Marking them as taken will trigger an assert when merging into those blocks
later through the second do_if.

The fix is to not mark the corresponding branch as taken in case (1) and (2). I've verified the fix
with replay compilation, the new regression test cases and the failing tests in the CI.

Thanks,
Tobias



More information about the valhalla-dev mailing list