93 private static final boolean PRINT_TIMES = Boolean.parseBoolean(System.getProperty("PrintTimes", "false")); 94 private static boolean VERIFY_IR = Boolean.parseBoolean(System.getProperty("VerifyIR", "true")); 95 private static final boolean VERIFY_VM = Boolean.parseBoolean(System.getProperty("VerifyVM", "false")); 96 private static final String SCENARIOS = System.getProperty("Scenarios", ""); 97 private static final String TESTLIST = System.getProperty("Testlist", ""); 98 private static final String EXCLUDELIST = System.getProperty("Exclude", ""); 99 private static final int WARMUP = Integer.parseInt(System.getProperty("Warmup", "251")); 100 private static final boolean DUMP_REPLAY = Boolean.parseBoolean(System.getProperty("DumpReplay", "false")); 101 102 // Pre-defined settings 103 private static final List<String> defaultFlags = Arrays.asList( 104 "-XX:-BackgroundCompilation", "-XX:CICompilerCount=1", 105 "-XX:+PrintCompilation", "-XX:+PrintIdeal", "-XX:+PrintOptoAssembly", 106 "-XX:CompileCommand=quiet", 107 "-XX:CompileCommand=compileonly,java.lang.invoke.*::*", 108 "-XX:CompileCommand=compileonly,java.lang.Long::sum", 109 "-XX:CompileCommand=compileonly,java.lang.Object::<init>", 110 "-XX:CompileCommand=compileonly,compiler.valhalla.valuetypes.*::*"); 111 private static final List<String> verifyFlags = Arrays.asList( 112 "-XX:+VerifyOops", "-XX:+VerifyStack", "-XX:+VerifyLastFrame", "-XX:+VerifyBeforeGC", "-XX:+VerifyAfterGC", 113 "-XX:+VerifyDuringGC", "-XX:+VerifyAdapterSharing", "-XX:+StressValueTypeReturnedAsFields"); 114 115 protected static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); 116 protected static final int ValueTypePassFieldsAsArgsOn = 0x1; 117 protected static final int ValueTypePassFieldsAsArgsOff = 0x2; 118 protected static final int ValueTypeArrayFlattenOn = 0x4; 119 protected static final int ValueTypeArrayFlattenOff = 0x8; 120 protected static final int ValueTypeReturnedAsFieldsOn = 0x10; 121 protected static final int ValueTypeReturnedAsFieldsOff = 0x20; 122 static final int AllFlags = ValueTypePassFieldsAsArgsOn | ValueTypePassFieldsAsArgsOff | ValueTypeArrayFlattenOn | ValueTypeArrayFlattenOff | ValueTypeReturnedAsFieldsOn; 123 protected static final boolean ValueTypePassFieldsAsArgs = (Boolean)WHITE_BOX.getVMFlag("ValueTypePassFieldsAsArgs"); 124 protected static final boolean ValueTypeArrayFlatten = (Boolean)WHITE_BOX.getVMFlag("ValueArrayFlatten"); 125 protected static final boolean ValueTypeReturnedAsFields = (Boolean)WHITE_BOX.getVMFlag("ValueTypeReturnedAsFields"); 126 protected static final boolean NullableValueTypes = (Boolean)WHITE_BOX.getVMFlag("NullableValueTypes"); 127 protected static final int COMP_LEVEL_ANY = -2; 128 protected static final int COMP_LEVEL_FULL_OPTIMIZATION = 4; 129 protected static final Hashtable<String, Method> tests = new Hashtable<String, Method>(); 130 protected static final boolean USE_COMPILER = WHITE_BOX.getBooleanVMFlag("UseCompiler"); 131 protected static final boolean PRINT_IDEAL = WHITE_BOX.getBooleanVMFlag("PrintIdeal"); 132 protected static final boolean XCOMP = Platform.isComp(); 133 134 // Regular expressions used to match nodes in the PrintIdeal output 135 protected static final String START = "(\\d+\\t(.*"; 136 protected static final String MID = ".*)+\\t===.*"; 137 protected static final String END = ")|"; 138 protected static final String ALLOC = "(.*precise klass compiler/valhalla/valuetypes/MyValue.*\\R(.*(nop|spill).*\\R)*.*_new_instance_Java" + END; 139 protected static final String ALLOCA = "(.*precise klass \\[Lcompiler/valhalla/valuetypes/MyValue.*\\R(.*(nop|spill).*\\R)*.*_new_array_Java" + END; 140 protected static final String LOAD = START + "Load(B|S|I|L|F|D|P|N)" + MID + "@compiler/valhalla/valuetypes/MyValue.*" + END; 141 protected static final String LOADK = START + "LoadK" + MID + END; 142 protected static final String STORE = START + "Store(B|S|I|L|F|D|P|N)" + MID + "@compiler/valhalla/valuetypes/MyValue.*" + END; 143 protected static final String LOOP = START + "Loop" + MID + "" + END; 144 protected static final String TRAP = START + "CallStaticJava" + MID + "uncommon_trap.*(unstable_if|predicate)" + END; 145 protected static final String RETURN = START + "Return" + MID + "returns" + END; 146 protected static final String LINKTOSTATIC = START + "CallStaticJava" + MID + "linkToStatic" + END; 147 protected static final String NPE = START + "CallStaticJava" + MID + "null_check" + END; 148 protected static final String CALL = START + "CallStaticJava" + MID + END; 149 protected static final String STOREVALUETYPEFIELDS = START + "CallStaticJava" + MID + "store_value_type_fields" + END; 150 protected static final String SCOBJ = "(.*# ScObj.*" + END; 151 152 public static String[] concat(String prefix[], String... extra) { 153 ArrayList<String> list = new ArrayList<String>(); 154 if (prefix != null) { 155 for (String s : prefix) { 156 list.add(s); 157 } 158 } 159 if (extra != null) { 160 for (String s : extra) { 161 list.add(s); 162 } 186 "-XX:+ValueArrayFlatten", 187 "-XX:ValueFieldMaxFlatSize=-1", 188 "-XX:+ValueTypePassFieldsAsArgs", 189 "-XX:+ValueTypeReturnedAsFields"}; 190 case 1: return new String[] { 191 "-XX:-UseCompressedOops", 192 "-XX:ValueArrayElemMaxFlatOops=-1", 193 "-XX:ValueArrayElemMaxFlatSize=-1", 194 "-XX:+ValueArrayFlatten", 195 "-XX:ValueFieldMaxFlatSize=-1", 196 "-XX:-ValueTypePassFieldsAsArgs", 197 "-XX:-ValueTypeReturnedAsFields"}; 198 case 2: return new String[] { 199 "-DVerifyIR=false", 200 "-XX:-UseCompressedOops", 201 "-XX:ValueArrayElemMaxFlatOops=0", 202 "-XX:ValueArrayElemMaxFlatSize=0", 203 "-XX:-ValueArrayFlatten", 204 "-XX:ValueFieldMaxFlatSize=0", 205 "-XX:+ValueTypePassFieldsAsArgs", 206 "-XX:+ValueTypeReturnedAsFields"}; 207 case 3: return new String[] { 208 "-DVerifyIR=false", 209 "-XX:+AlwaysIncrementalInline", 210 "-XX:ValueArrayElemMaxFlatOops=0", 211 "-XX:ValueArrayElemMaxFlatSize=0", 212 "-XX:ValueFieldMaxFlatSize=0", 213 "-XX:-ValueTypePassFieldsAsArgs", 214 "-XX:-ValueTypeReturnedAsFields"}; 215 case 4: return new String[] { 216 "-DVerifyIR=false", 217 "-XX:ValueArrayElemMaxFlatOops=-1", 218 "-XX:ValueArrayElemMaxFlatSize=-1", 219 "-XX:+ValueArrayFlatten", 220 "-XX:ValueFieldMaxFlatSize=0", 221 "-XX:+ValueTypePassFieldsAsArgs", 222 "-XX:-ValueTypeReturnedAsFields"}; 223 } 224 225 return null; 226 } 227 228 /** 229 * Override this method to provide extra parameters for selected scenarios 230 */ 231 public String[] getExtraVMParameters(int scenario) { 232 return null; 233 } 234 235 public static void main(String[] args) throws Throwable { 236 if (args.length != 1) { 237 throw new RuntimeException("Usage: @run main/othervm/timeout=120 -Xbootclasspath/a:. -ea" + 238 " -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions" + 239 " -XX:+UnlockExperimentalVMOptions -XX:+WhiteBoxAPI -XX:+EnableValhalla" + 240 " compiler.valhalla.valuetypes.ValueTypeTest <YourTestMainClass>"); 241 } 242 String testMainClassName = args[0]; | 93 private static final boolean PRINT_TIMES = Boolean.parseBoolean(System.getProperty("PrintTimes", "false")); 94 private static boolean VERIFY_IR = Boolean.parseBoolean(System.getProperty("VerifyIR", "true")); 95 private static final boolean VERIFY_VM = Boolean.parseBoolean(System.getProperty("VerifyVM", "false")); 96 private static final String SCENARIOS = System.getProperty("Scenarios", ""); 97 private static final String TESTLIST = System.getProperty("Testlist", ""); 98 private static final String EXCLUDELIST = System.getProperty("Exclude", ""); 99 private static final int WARMUP = Integer.parseInt(System.getProperty("Warmup", "251")); 100 private static final boolean DUMP_REPLAY = Boolean.parseBoolean(System.getProperty("DumpReplay", "false")); 101 102 // Pre-defined settings 103 private static final List<String> defaultFlags = Arrays.asList( 104 "-XX:-BackgroundCompilation", "-XX:CICompilerCount=1", 105 "-XX:+PrintCompilation", "-XX:+PrintIdeal", "-XX:+PrintOptoAssembly", 106 "-XX:CompileCommand=quiet", 107 "-XX:CompileCommand=compileonly,java.lang.invoke.*::*", 108 "-XX:CompileCommand=compileonly,java.lang.Long::sum", 109 "-XX:CompileCommand=compileonly,java.lang.Object::<init>", 110 "-XX:CompileCommand=compileonly,compiler.valhalla.valuetypes.*::*"); 111 private static final List<String> verifyFlags = Arrays.asList( 112 "-XX:+VerifyOops", "-XX:+VerifyStack", "-XX:+VerifyLastFrame", "-XX:+VerifyBeforeGC", "-XX:+VerifyAfterGC", 113 "-XX:+VerifyDuringGC", "-XX:+VerifyAdapterSharing"); 114 115 protected static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); 116 protected static final int ValueTypePassFieldsAsArgsOn = 0x1; 117 protected static final int ValueTypePassFieldsAsArgsOff = 0x2; 118 protected static final int ValueTypeArrayFlattenOn = 0x4; 119 protected static final int ValueTypeArrayFlattenOff = 0x8; 120 protected static final int ValueTypeReturnedAsFieldsOn = 0x10; 121 protected static final int ValueTypeReturnedAsFieldsOff = 0x20; 122 static final int AllFlags = ValueTypePassFieldsAsArgsOn | ValueTypePassFieldsAsArgsOff | ValueTypeArrayFlattenOn | ValueTypeArrayFlattenOff | ValueTypeReturnedAsFieldsOn; 123 protected static final boolean ValueTypePassFieldsAsArgs = (Boolean)WHITE_BOX.getVMFlag("ValueTypePassFieldsAsArgs"); 124 protected static final boolean ValueTypeArrayFlatten = (Boolean)WHITE_BOX.getVMFlag("ValueArrayFlatten"); 125 protected static final boolean ValueTypeReturnedAsFields = (Boolean)WHITE_BOX.getVMFlag("ValueTypeReturnedAsFields"); 126 protected static final boolean NullableValueTypes = (Boolean)WHITE_BOX.getVMFlag("NullableValueTypes"); 127 protected static final int COMP_LEVEL_ANY = -2; 128 protected static final int COMP_LEVEL_FULL_OPTIMIZATION = 4; 129 protected static final Hashtable<String, Method> tests = new Hashtable<String, Method>(); 130 protected static final boolean USE_COMPILER = WHITE_BOX.getBooleanVMFlag("UseCompiler"); 131 protected static final boolean PRINT_IDEAL = WHITE_BOX.getBooleanVMFlag("PrintIdeal"); 132 protected static final boolean XCOMP = Platform.isComp(); 133 134 // Regular expressions used to match nodes in the PrintIdeal output 135 protected static final String START = "(\\d+\\t(.*"; 136 protected static final String MID = ".*)+\\t===.*"; 137 protected static final String END = ")|"; 138 protected static final String ALLOC = "(.*precise klass compiler/valhalla/valuetypes/MyValue.*\\R(.*(nop|spill).*\\R)*.*_new_instance_Java" + END; 139 protected static final String ALLOCA = "(.*precise klass \\[Lcompiler/valhalla/valuetypes/MyValue.*\\R(.*(nop|spill).*\\R)*.*_new_array_Java" + END; 140 protected static final String LOAD = START + "Load(B|S|I|L|F|D|P|N)" + MID + "@compiler/valhalla/valuetypes/MyValue.*" + END; 141 protected static final String LOADK = START + "LoadK" + MID + END; 142 protected static final String STORE = START + "Store(B|C|S|I|L|F|D|P|N)" + MID + "@compiler/valhalla/valuetypes/MyValue.*" + END; 143 protected static final String LOOP = START + "Loop" + MID + "" + END; 144 protected static final String TRAP = START + "CallStaticJava" + MID + "uncommon_trap.*(unstable_if|predicate)" + END; 145 protected static final String RETURN = START + "Return" + MID + "returns" + END; 146 protected static final String LINKTOSTATIC = START + "CallStaticJava" + MID + "linkToStatic" + END; 147 protected static final String NPE = START + "CallStaticJava" + MID + "null_check" + END; 148 protected static final String CALL = START + "CallStaticJava" + MID + END; 149 protected static final String STOREVALUETYPEFIELDS = START + "CallStaticJava" + MID + "store_value_type_fields" + END; 150 protected static final String SCOBJ = "(.*# ScObj.*" + END; 151 152 public static String[] concat(String prefix[], String... extra) { 153 ArrayList<String> list = new ArrayList<String>(); 154 if (prefix != null) { 155 for (String s : prefix) { 156 list.add(s); 157 } 158 } 159 if (extra != null) { 160 for (String s : extra) { 161 list.add(s); 162 } 186 "-XX:+ValueArrayFlatten", 187 "-XX:ValueFieldMaxFlatSize=-1", 188 "-XX:+ValueTypePassFieldsAsArgs", 189 "-XX:+ValueTypeReturnedAsFields"}; 190 case 1: return new String[] { 191 "-XX:-UseCompressedOops", 192 "-XX:ValueArrayElemMaxFlatOops=-1", 193 "-XX:ValueArrayElemMaxFlatSize=-1", 194 "-XX:+ValueArrayFlatten", 195 "-XX:ValueFieldMaxFlatSize=-1", 196 "-XX:-ValueTypePassFieldsAsArgs", 197 "-XX:-ValueTypeReturnedAsFields"}; 198 case 2: return new String[] { 199 "-DVerifyIR=false", 200 "-XX:-UseCompressedOops", 201 "-XX:ValueArrayElemMaxFlatOops=0", 202 "-XX:ValueArrayElemMaxFlatSize=0", 203 "-XX:-ValueArrayFlatten", 204 "-XX:ValueFieldMaxFlatSize=0", 205 "-XX:+ValueTypePassFieldsAsArgs", 206 "-XX:+ValueTypeReturnedAsFields", 207 "-XX:+StressValueTypePassFieldsAsArgs", 208 "-XX:+StressValueTypeReturnedAsFields"}; 209 case 3: return new String[] { 210 "-DVerifyIR=false", 211 "-XX:+AlwaysIncrementalInline", 212 "-XX:ValueArrayElemMaxFlatOops=0", 213 "-XX:ValueArrayElemMaxFlatSize=0", 214 "-XX:ValueFieldMaxFlatSize=0", 215 "-XX:-ValueTypePassFieldsAsArgs", 216 "-XX:-ValueTypeReturnedAsFields"}; 217 case 4: return new String[] { 218 "-DVerifyIR=false", 219 "-XX:ValueArrayElemMaxFlatOops=-1", 220 "-XX:ValueArrayElemMaxFlatSize=-1", 221 "-XX:+ValueArrayFlatten", 222 "-XX:ValueFieldMaxFlatSize=0", 223 "-XX:+ValueTypePassFieldsAsArgs", 224 "-XX:-ValueTypeReturnedAsFields", 225 "-XX:+StressValueTypePassFieldsAsArgs"}; 226 } 227 228 return null; 229 } 230 231 /** 232 * Override this method to provide extra parameters for selected scenarios 233 */ 234 public String[] getExtraVMParameters(int scenario) { 235 return null; 236 } 237 238 public static void main(String[] args) throws Throwable { 239 if (args.length != 1) { 240 throw new RuntimeException("Usage: @run main/othervm/timeout=120 -Xbootclasspath/a:. -ea" + 241 " -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions" + 242 " -XX:+UnlockExperimentalVMOptions -XX:+WhiteBoxAPI -XX:+EnableValhalla" + 243 " compiler.valhalla.valuetypes.ValueTypeTest <YourTestMainClass>"); 244 } 245 String testMainClassName = args[0]; |