hotspot/test/compiler/stable/StableConfiguration.java
changeset 36604 e9c073b0c19e
parent 30859 76147e537436
child 36616 5172e3dd60f2
equal deleted inserted replaced
36603:0bc3ad031d60 36604:e9c073b0c19e
    29 import sun.hotspot.WhiteBox;
    29 import sun.hotspot.WhiteBox;
    30 
    30 
    31 public class StableConfiguration {
    31 public class StableConfiguration {
    32     static final WhiteBox WB = WhiteBox.getWhiteBox();
    32     static final WhiteBox WB = WhiteBox.getWhiteBox();
    33     static final boolean isStableEnabled;
    33     static final boolean isStableEnabled;
    34     static final boolean isServerWithStable;
       
    35 
    34 
    36     static {
    35     static {
    37         Boolean value = WB.getBooleanVMFlag("FoldStableValues");
    36         Boolean value = WB.getBooleanVMFlag("FoldStableValues");
    38         isStableEnabled = (value == null ? false : value);
    37         isStableEnabled = (value == null ? false : value);
    39         isServerWithStable = isStableEnabled && get();
       
    40         System.out.println("@Stable:         " + (isStableEnabled ? "enabled" : "disabled"));
    38         System.out.println("@Stable:         " + (isStableEnabled ? "enabled" : "disabled"));
    41         System.out.println("Server Compiler: " + get());
       
    42     }
    39     }
    43 
       
    44     // The method 'get' below returns true if the method is server compiled
       
    45     // and is used by the Stable tests to determine whether methods in
       
    46     // general are being server compiled or not as the -XX:+FoldStableValues
       
    47     // option is only applicable to -server.
       
    48     //
       
    49     // On aarch64 we DeOptimize when patching. This means that when the
       
    50     // method is compiled as a result of -Xcomp it DeOptimizes immediately.
       
    51     // The result is that getMethodCompilationLevel returns 0. This means
       
    52     // the method returns true based on java.vm.name.
       
    53     //
       
    54     // However when the tests are run with -XX:+TieredCompilation and
       
    55     // -XX:TieredStopAtLevel=1 this fails because methods will always
       
    56     // be client compiled.
       
    57     //
       
    58     // Solution is to add a simple method 'get1' which should never be
       
    59     // DeOpted and use that to determine the compilation level instead.
       
    60     static void get1() {
       
    61     }
       
    62 
       
    63 
       
    64 
       
    65     // ::get() is among immediately compiled methods.
       
    66     static boolean get() {
       
    67         try {
       
    68             get1();
       
    69             Method m = StableConfiguration.class.getDeclaredMethod("get1");
       
    70             int level = WB.getMethodCompilationLevel(m);
       
    71             if (level > 0) {
       
    72               return (level == 4);
       
    73             } else {
       
    74               String javaVM = System.getProperty("java.vm.name", "");
       
    75               if (javaVM.contains("Server")) return true;
       
    76               if (javaVM.contains("Client")) return false;
       
    77               throw new Error("Unknown VM type: "+javaVM);
       
    78             }
       
    79         } catch (NoSuchMethodException e) {
       
    80             throw new Error(e);
       
    81         }
       
    82     }
       
    83 
       
    84 }
    40 }