Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8275847

Scheduling fails with "too many D-U pinch points" on small method

    XMLWordPrintable

    Details

    • Subcomponent:
    • Resolved In Build:
      b23

      Description

      Since around JDK 16 the following method cannot be compiled by C2 on AArch64:

      public double mergeSync() { return Math.log(Math.sin(value)); }

      811 416 ! 3 Test::mergeSync (61 bytes)
      813 417 ! 4 Test::mergeSync (61 bytes)
      816 417 ! 4 Test::mergeSync (61 bytes) COMPILE SKIPPED: too many D-U pinch points (retry at different tier)
      816 418 ! 1 Test::mergeSync (61 bytes)
      416 ! 3 Test::mergeSync (61 bytes) made not entrant

      The problem is the scheduler will create temporary Nodes for each OptoReg killed by the MachProjs from the two runtime log/sin leaf calls. After SVE support was added these runtime calls kill more registers, and the number of new Nodes added by anti_do_def exceeds an internal limit (which is roughly proportional to the method size).

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              ngasson Nick Gasson
              Reporter:
              ngasson Nick Gasson
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: