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

C1 does backedge profiling incorrectly

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P3
    • Resolution: Fixed
    • Affects Version/s: 10
    • Fix Version/s: 11
    • Component/s: hotspot
    • Labels:
    • Subcomponent:
    • Resolved In Build:
      b14

      Backports

        Description

        While looking into an issue with a Graal bailout because the OSR entry point appeared to be unreachable I noticed that when C1 profiles if bytecodes it increments the backedge counter on every execution of the if instead of just on the backedge. For a simple loop like this:

        public class dowhile {
            public static void main(String[] args) {
                for (int i = 0; i < 10000000; i++) {
                    testDoWhile();
                }
            }
            public static volatile boolean repeatLoop;
            static volatile int sideEffect;

            public static void testDoWhile() {
                do {
                    sideEffect++;
                } while (repeatLoop);
            }
        }

        HotSpot ends up requesting an OSR compile:

        <task_queued compile_id='16' compile_kind='osr' method='dowhile testDoWhile ()V' bytes='15' count='224300' backedge_count='163840' iicount='224300' osr_bci='0' level='4' stamp='0.576' comment='tiered' hot_count='163840'/>

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  iveresov Igor Veresov
                  Reporter:
                  never Tom Rodriguez
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  4 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: