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

Missing safepoint in not-countable loops with leaf calls

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 6
    • 6
    • hotspot
    • None
    • b20
    • sparc
    • solaris_9

      A leaf runtime functions may not have safepoints.
      But server compiler doesn't separate leaf calls from
      regular calls and doesn't generate safepoints in any
      loops will dominated calls.
      So we can have an infinite loop with leaf calls.

      % cat Test1.java
      public class Test1 {

        private static double test(double d, long limit) {
          for (long i = 0; i < limit; i++) { // 'long' - not-countable loop
            d = Math.sin(d);
          }
          return d;
        }

        public static void main(String args[]) {
          double d = 0.3;
          d = test(d, 10000); // warmup
          d = test(d, 100000000);
        }
      }

      % /export/home2/work/jdk1.5.0/bin/java_g -server -Xbatch -XX:+PrintCompilation -XX:+PrintOptoAssembly -XX:CompileOnly=.test Test1
      VM option '+PrintCompilation'
      VM option '+PrintOptoAssembly'
      VM option 'CompileOnly=.test'
        1 b Test1::test (26 bytes)
      {method}
       - klass: {other class}
       - method holder: 'Test1'
      ...
      abababab N1: # B1 <- B5 Freq: 0.00133333
      abababab
      000 B1: # B5 B2 <- BLOCK HEAD IS JUNK Freq: 0.00133333
      000 SAVE R_SP,-120,R_SP
      004 STX R_G1,[R_SP + #112]
      008 + CMP R_G1,#0 ! long
      00c BPle xcc_L,B5 P=0.000149 C=4.468000
      00c
      014 B2: # B3 <- B1 Freq: 4.46733
      014 + CLR R_G1 ! long
      018 STDF R_F0,[R_SP + #96]
      01c + STX R_G1,[R_SP + #104]
      01c
      020 B3: # B5 B4 <- B2 B4 Loop: B3-B4 inner Freq: 8.934
      # Lrgs use/def'd in loop: {2-3,8-11,15,17,20-24,26}
      020 + LDUW [R_SP + #96],R_O0
              LDUW [R_SP + #100],R_O1
      028 + CALL,runtime leaf SIN
              No JVM State Info
              #
      05c + LDX [R_SP + #104],R_G1
      060 + ADD R_G1,#1,R_G1
      064 LDX [R_SP + #112],R_G3
      068 + STX R_G1,[R_SP + #104]
      06c + CMP R_G1,R_G3 ! long
      070 BPge xcc_L,B5 P=0.000149 C=4.467333
      070
      078 B4: # B3 <- B3 Loop: B3-B4 inner Freq: 4.46667
      078 + STDF R_F0,[R_SP + #96]
      07c + BA B3
      07c
      084 B5: # N1 <- B3 B1 Freq: 0.00133307
      084 SETHI #PollAddr,L0 ! Load Polling address
              LDUW [L0],G0 !Poll for Safepointing
              RET
              RESTORE
      094 + ! return
      094

      ###@###.### 2005-1-12 20:26:51 GMT

            kvn Vladimir Kozlov
            kvn Vladimir Kozlov
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: