From c00fef1bbdafbf6409553db32d8ee65407afadc8 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Fri, 13 Jun 2025 13:01:50 +0200 Subject: [PATCH 1/3] Fix --- src/hotspot/share/cds/cds_globals.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/cds/cds_globals.hpp b/src/hotspot/share/cds/cds_globals.hpp index e51dd26ff06c0..730902207f01b 100644 --- a/src/hotspot/share/cds/cds_globals.hpp +++ b/src/hotspot/share/cds/cds_globals.hpp @@ -147,7 +147,7 @@ product(bool, AOTVerifyTrainingData, trueInDebug, DIAGNOSTIC, \ "Verify archived training data") \ \ - product(bool, AOTCompileEagerly, false, DIAGNOSTIC, \ + product(bool, AOTCompileEagerly, false, EXPERIMENTAL, \ "Compile methods as soon as possible") \ \ /* AOT Code flags */ \ From c62f367fc3c31e2e540c856476cf3270d12fe763 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Tue, 17 Jun 2025 10:44:36 +0200 Subject: [PATCH 2/3] Test --- .../appcds/aotCache/AOTCompileEagerly.java | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java diff --git a/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java b/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java new file mode 100644 index 0000000000000..31d537d42222d --- /dev/null +++ b/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + + +/* + * @test + * @summary Sanity-check that eager compilation flags are accepted + * @requires vm.cds + * @requires vm.flagless + * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds/test-classes + * @build Hello + * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar hello.jar Hello + * @run driver AOTCompileEagerly + */ + +import java.io.File; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.helpers.ClassFileInstaller; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class AOTCompileEagerly { + static final String appJar = ClassFileInstaller.getJarPath("hello.jar"); + static final String aotConfigFile = "hello.aotconfig"; + static final String aotCacheFile = "hello.aot"; + static final String helloClass = "Hello"; + + public static void main(String[] args) throws Exception { + ProcessBuilder pb; + OutputAnalyzer out; + + //---------------------------------------------------------------------- + System.out.println("Training Run"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTMode=record", + "-XX:AOTConfiguration=" + aotConfigFile, + "-cp", appJar, helloClass); + + out = CDSTestUtils.executeAndLog(pb, "train"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Assembly Phase"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTMode=create", + "-XX:AOTConfiguration=" + aotConfigFile, + "-XX:AOTCache=" + aotCacheFile, + "-cp", appJar); + out = CDSTestUtils.executeAndLog(pb, "asm"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Production Run with AOTCache defaults"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTCache=" + aotCacheFile, + "-cp", appJar, helloClass); + out = CDSTestUtils.executeAndLog(pb, "prod-default"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Production Run with AOTCache and eager compilation explicitly ON"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTCache=" + aotCacheFile, + "-XX:+UnlockExperimentalVMOptions", + "-XX:+AOTCompileEagerly", + "-cp", appJar, helloClass); + out = CDSTestUtils.executeAndLog(pb, "prod-eager-on"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Production Run with AOTCache and eager compilation explicitly OFF"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTCache=" + aotCacheFile, + "-XX:+UnlockExperimentalVMOptions", + "-XX:-AOTCompileEagerly", + "-cp", appJar, helloClass); + out = CDSTestUtils.executeAndLog(pb, "prod-eager-off"); + out.shouldHaveExitValue(0); + } +} From 6b84ae342a524fddd1c0697c14a6173b5b4b3f91 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 25 Jun 2025 12:09:46 +0200 Subject: [PATCH 3/3] Add bug line --- .../jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java b/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java index 31d537d42222d..c740ecd96f5d4 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java @@ -25,6 +25,7 @@ /* * @test + * @bug 8359436 * @summary Sanity-check that eager compilation flags are accepted * @requires vm.cds * @requires vm.flagless