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

      Backports

        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:
                6 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved: