RFR(XS): fix c2-only compilation and some tests
Liu Xin
navy.xliu at gmail.com
Tue Aug 7 02:31:12 UTC 2018
That’s really neat.
This function is defined as my Lemma. It’s way much better than my fork-process.
I don’t think we need to add new API in WB. I will add a prop "vm.c1.enabled”.
Thanks,
—lx
/*
* Check if C1 is used as JIT compiler.
*
* C1 is enabled if following conditions are true:
* - we are not in Interpreter mode
* - we are not in Server compilation mode
* - TieredCompilation is used in Server mode
*
* @return true if C1 is used as JIT compiler.
*/
public static boolean isC1Enabled() {
Boolean useCompiler = WB.getBooleanVMFlag("UseCompiler");
if (useCompiler == null || !useCompiler) {
return false;
}
Boolean serverMode = WB.getBooleanVMFlag("ProfileInterpreter");
if (serverMode == null || !serverMode) {
return true; // Client mode
}
Boolean tieredCompilation = WB.getBooleanVMFlag("TieredCompilation");
// C1 is not used in server mode if TieredCompilation is off.
if (tieredCompilation != null && !tieredCompilation) {
return false;
}
return true;
}
> On Aug 6, 2018, at 7:12 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
>
> This test is slightly different. It execute program in debugger with default flags regardless what you pass to test. As result we can't test flags.
>
> Checking output of forked process could be fine but I want a general solution for tests which should not be run without C1 (or C2).
>
> You can add new jtreg value into test/jtreg-ext/requires/VMProps.java similar to vm.graal.enabled (used in test's @requires command, 'grep' to see usage). It uses Compiler class which has check isGraalEnabled() and the same for C1 and C2:
>
> test/lib/sun/hotspot/code/Compiler.java
>
> I would suggest to add new WhiteBox API to check presence of C1 and C2 in VM: isC1[C2]Present(). I planned to do that anyway in a future.
>
> May need to check with Igor Ignatyev if he agree with that.
>
> Thanks,
> Vladimir
>
> On 8/6/18 6:34 PM, Liu Xin wrote:
>> Hi, Vladimir,
>> Thanks for the advice.
>> First of all, I know the reason why I can’t reproduce the failure on my platform before.
>> It’s because MacOSX can’t attach to the SA by default [JDK-8199700]. As a the issue said, using ‘sudo’ can work it around.
>> Secondly, I don’t understand why C2 has to depot the method but C1 can keep it.
>> If we run c1-only build, we can see the NMethod:
>> hsdb> Address 0x000000010481d12c: In code in NMethod for jdk/test/lib/apps/LingeredApp.main([Ljava/lang/String;)V content: [0x000000010481ce00, 0x000000010481d890), code: [0x000000010481ce00, 0x000000010481d890), data: [0x000000010481d890, 0x000000010481e080), oops: [0x000000010481d890, 0x000000010481d898), frame size: 144
>> Currently, Whitebox doesn’t have any API to tell C1 is on. We can have the following lemma to determine C1.
>> / C1 is present iff VMTYPE is ("Client”) or !stderr.contains("TieredCompilation not supported in this VM”) if user pass in ''-XX:+TieredCompilation"/
>> It can be proofed from the following 2 macros.
>> 1. macros.hpp
>> #ifdef COMPILER1
>> #ifdef COMPILER2
>> #define TIERED
>> #endif
>> #endif
>> 2. vm_versoin.cpp
>> #ifndef VMTYPE
>> #ifdef TIERED
>> #define VMTYPE "Server"
>> #else // TIERED
>> #define VMTYPE COMPILER1_PRESENT("Client") \
>> COMPILER2_PRESENT("Server")
>> #endif // ZERO
>> #endif // TIERED
>> #endif
>> As a result, I can throw SkippedException if C1 is absent.
>> Is it a good practice to have this complex logic in test? How about we add a new API to tell C1 is present or not?
>> Or provide a API in JTReglib?
>> diff -r 11abc1eb1d32 test/hotspot/jtreg/serviceability/sa/ClhsdbFindPC.java
>> --- a/test/hotspot/jtreg/serviceability/sa/ClhsdbFindPC.java Fri Aug 03 16:01:00 2018 -0700
>> +++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbFindPC.java Mon Aug 06 18:28:30 2018 -0700
>> @@ -27,7 +27,10 @@
>> import java.util.ArrayList;
>> import jdk.test.lib.apps.LingeredApp;
>> +import jdk.test.lib.process.OutputAnalyzer;
>> +import jdk.test.lib.process.ProcessTools;
>> +import jtreg.SkippedException;
>> /**
>> * @test
>> * @bug 8193124
>> @@ -38,9 +41,29 @@
>> */
>> public class ClhsdbFindPC {
>> + private static boolean isCompiler1Present() throws Exception {
>> + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
>> + "-XX:+IgnoreUnrecognizedVMOptions", "-showversion",
>> + "-XX:+TieredCompilation");
>> +
>> + OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
>> + String stderr = analyzer.getStderr();
>> +
>> + if (stderr.contains("Client VM")
>> + || !stderr.contains("TieredCompilation not supported in this VM")) {
>> + return true;
>> + }
>> +
>> + return false;
>> + }
>> private static void testFindPC(boolean withXcomp) throws Exception {
>> LingeredApp theApp = null;
>> +
>> + if (withXcomp && !isCompiler1Present()) {
>> + throw new SkippedException("C2 generated code will always deopt methods which have unloaded (during compilation) classes");
>> + }
>> +
>> try {
>> ClhsdbLauncher test = new ClhsdbLauncher();
>> theApp = withXcomp ? LingeredApp.startApp(List.of("-Xcomp"))
>> Thanks,
>> —lx
>>> On Aug 6, 2018, at 12:39 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>> wrote:
>>>
>>> About ClhsdbFindPC.java. I would suggest to not run it when C1 is not available. C2 generated code will always deopt method which have have unloaded (during compilation) classes.
>>>
>>> Vladimir
>>>
>>> On 8/3/18 7:46 PM, Liu Xin wrote:
>>>>> On Aug 3, 2018, at 7:28 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>> wrote:
>>>>>
>>>>> Hi, Liu
>>>>>
>>>>> Changes in TestOnSpinWait.java are fine.
>>>>> But you last change in TestMeetIncompatibleInterfaceArrays.java is incorrect. SkippedException should be used with check - it does not do the check:
>>>>> http://hg.openjdk.java.net/jdk/jdk/file/7b1ddbafa134/test/lib/jtreg/SkippedException.java <http://hg.openjdk.java.net/jdk/jdk/file/7b1ddbafa134/test/lib/jtreg/SkippedException.java>
>>>>>
>>>> Thanks for the reviewing.
>>>> You mean I only throw SkippedException if TieredCompilation is OFF.
>>>> Otherwise, I need to verify compilation levels and throw regular exception.
>>>>> You can't simple replace error exception with it.
>>>>>
>>>>> Please, update Copyright year (2016 -> 2018) in header in TestOnSpinWait.java test.
>>>>>
>>>>> I tested new changes and only serviceability/sa/ClhsdbFindPC.java failed as I said before.
>>>>>
>>>>> cd test/hotspot/jtreg
>>>>> jtreg -testjdk:$JAVA_HOME -va serviceability/sa/ClhsdbFindPC.java
>>>>>
>>>> I run the command and it does fail. I will try to reproduce it on linux. Hopefully, I can fix that.
>>>>> It seems C2 immediately deoptimize it after compilation and debugger does not expect that:
>>>>>
>>>>> 12984 1305 !b jdk.test.lib.apps.LingeredApp::main (88 bytes)
>>>>> 12989 1305 ! jdk.test.lib.apps.LingeredApp::main (88 bytes) made not entrant
>>>>>
>>>>> http://openjdk.java.net/jtreg/ <http://openjdk.java.net/jtreg/>
>>>>>
>>>>> Regards,
>>>>> Vladimir
>>>>>
>>>>> On 8/3/18 6:15 PM, Liu Xin wrote:
>>>>>> Hi, Vladimir & Igor,
>>>>>> I found you decide to throw SkippedException if tieredCompilation doesn’t meet.
>>>>>> I modified my patch to follow this direction. Could you review it?
>>>>>> http://cr.openjdk.java.net/~phh/8207965/webrev.03/ <http://cr.openjdk.java.net/~phh/8207965/webrev.03/> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.03/ <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.03/>>
>>>>>> Besides the inputs from Vladimir, I mainly worked on TestOnSpinWait
>>>>>> It will run both client and server VMs. It will skip c1-check if user only enable compiler2.
>>>>>> Tested using c2-only server and clientVM locally(x86-64+macosx).
>>>>>> Thanks,
>>>>>> —lx
>>>>>>> On Aug 1, 2018, at 1:05 PM, Hohensee, Paul <hohensee at amazon.com <mailto:hohensee at amazon.com> <mailto:hohensee at amazon.com <mailto:hohensee at amazon.com>>> wrote:
>>>>>>>
>>>>>>> Webrev also here:http://cr.openjdk.java.net/~phh/8207965/webrev.02/ <http://cr.openjdk.java.net/~phh/8207965/webrev.02/> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.02/ <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.02/>>
>>>>>>> *From:*hotspot-compiler-dev <hotspot-compiler-dev-bounces at openjdk.java.net <mailto:hotspot-compiler-dev-bounces at openjdk.java.net> <mailto:hotspot-compiler-dev-bounces at openjdk.java.net <mailto:hotspot-compiler-dev-bounces at openjdk.java.net>>> on behalf of Liu Xin <navy.xliu at gmail.com <mailto:navy.xliu at gmail.com> <mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>>>
>>>>>>> *Date:*Tuesday, July 31, 2018 at 6:31 PM
>>>>>>> *To:*Vladimir Kozlov <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>>
>>>>>>> *Cc:*"hotspot-compiler-dev at openjdk.java.net <mailto:hotspot-compiler-dev at openjdk.java.net> <mailto:hotspot-compiler-dev at openjdk.java.net <mailto:hotspot-compiler-dev at openjdk.java.net>>" <hotspot-compiler-dev at openjdk.java.net <mailto:hotspot-compiler-dev at openjdk.java.net> <mailto:hotspot-compiler-dev at openjdk.java.net <mailto:hotspot-compiler-dev at openjdk.java.net>>>
>>>>>>> *Subject:*Re: RFR(XS): fix c2-only compilation and some tests
>>>>>>> Hi, Vladimir,
>>>>>>> thanks for running it and the feedback.
>>>>>>> I made a modification according your feedback. Could you take a look?
>>>>>>> https://s3-us-west-2.amazonaws.com/openjdk-webrevs/jdk/c2_only_fix-v3/webrev/index.html <https://s3-us-west-2.amazonaws.com/openjdk-webrevs/jdk/c2_only_fix-v3/webrev/index.html>
>>>>>>> 1. I don't suffer from SA failure. can I pass them all.
>>>>>>> TEST TOTAL PASS FAIL ERROR
>>>>>>> jtreg:test/hotspot/jtreg/serviceability/sa 22 22 0 0
>>>>>>> ClhsdbFindPC.java seems not to relate to 'TieredCompilation'
>>>>>>> 2. I don't quite understand the testcase
>>>>>>> test/hotspot/jtreg/vmTestbase/jit/tiered/tieredTest.sh
>>>>>>>
>>>>>>>
>>>>>>> The java file is empty. it only triggers a shell without any parameter.
>>>>>>> Actually, this test is dummy unless you pass in JTREG="VM_OPTIONS=-XX:+TieredCompilation"
>>>>>>> how to run it with different VM_OPTIONS.
>>>>>>> thanks,
>>>>>>> --lx
>>>>>>> On Mon, Jul 30, 2018 at 10:24 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>> wrote:
>>>>>>>
>>>>>>> I hit several issues in testing.
>>>>>>>
>>>>>>> 1. Build failures on SPARC because of missing include:
>>>>>>>
>>>>>>> make/hotspot/src/native/dtrace/generateJvmOffsets.cpp
>>>>>>> @@ -40,6 +40,7 @@
>>>>>>>
>>>>>>> #include <proc_service.h>
>>>>>>> #include "gc/shared/collectedHeap.hpp"
>>>>>>> +#include "memory/heap.hpp"
>>>>>>> #include "runtime/vmStructs.hpp"
>>>>>>>
>>>>>>> typedef enum GEN_variant {
>>>>>>>
>>>>>>> 2. Several tests failed because they want -XX:+TieredCompilation. Currently there is no check
>>>>>>>
>>>>>>> vmTestbase/jit/tiered/TestDescription.java
>>>>>>>
>>>>>>> test/hotspot/jtreg/vmTestbase/jit/tiered/tieredTest.sh Mon Jul 30 21:48:51 2018 -0700
>>>>>>> @@ -46,6 +46,11 @@
>>>>>>> exit 0
>>>>>>> fi
>>>>>>>
>>>>>>> +if grep "TieredCompilation not supported in this VM" $log; then
>>>>>>> + echo "TEST PASSED: Non-tiered Server VM. The test is useless"
>>>>>>> + exit 0
>>>>>>> +fi
>>>>>>> +
>>>>>>> if ! egrep '^[0-9.]+: \[compile level=[0-9]' $log; then
>>>>>>> if [ "${tiered}" == "on" ]; then
>>>>>>> echo "TEST FAILED: No PrintTieredEvents output"
>>>>>>>
>>>>>>> compiler/tiered/ConstantGettersTransitionsTest.java (change assert to check) - run with -ea -esa
>>>>>>>
>>>>>>> compiler/onSpinWait/TestOnSpinWait.java (add skipOnTieredCompilation() check to skip C1 test)
>>>>>>>
>>>>>>> There is also closed test failed because it uses C1 flag - need to add -XX:+IgnoreUnrecognizedVMOptions (it is
>>>>>>> work for us in Oracle).
>>>>>>>
>>>>>>> serviceability/sa/ClhsdbFindPC.java (I don't know how to fix it yet)
>>>>>>>
>>>>>>> Vladimir
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 7/30/18 6:19 PM, Vladimir Kozlov wrote:
>>>>>>>
>>>>>>> I started our tier1-3 testing with --with-jvm-features=-compiler1 build.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Vladimir
>>>>>>>
>>>>>>> On 7/30/18 3:03 PM, Liu Xin wrote:
>>>>>>>
>>>>>>> hi, list,
>>>>>>>
>>>>>>> We also submitted to the submit repo and ran it successfully.
>>>>>>>
>>>>>>> I am not sure if it runs in the special configuration. This document doesn't say anything about
>>>>>>> configurations.
>>>>>>> https://wiki.openjdk.java.net/display/Build/Submit+Repo <https://wiki.openjdk.java.net/display/Build/Submit+Repo>
>>>>>>>
>>>>>>> thanks,
>>>>>>> --lx
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Jul 30, 2018 at 2:41 PM, Liu Xin <navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>
>>>>>>> <mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>><mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com> <mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>>>> wrote:
>>>>>>>
>>>>>>> hi, mail-list,
>>>>>>>
>>>>>>> Could you kindly review this patch?
>>>>>>> Because the patch is from Vladimir, we might need another reviewer to approve it.
>>>>>>>
>>>>>>> Problem: JDK-8207965
>>>>>>> Webrev:http://cr.openjdk.java.net/~phh/8207965/webrev.01/ <http://cr.openjdk.java.net/~phh/8207965/webrev.01/>
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.01/ <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.01/>>
>>>>>>> <http://cr.openjdk.java.net/~phh/8207965/webrev.01/ <http://cr.openjdk.java.net/~phh/8207965/webrev.01/>
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.01/ <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.01/>>>
>>>>>>>
>>>>>>> I passed the hotspot-tier1 on x86-64 with the following configuration:
>>>>>>> --with-debug-level=fastdebug --with-jvm-features=-compiler1,zgc
>>>>>>>
>>>>>>> thanks,
>>>>>>> --lx
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Jul 27, 2018 at 5:27 PM, Liu Xin <navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>
>>>>>>> <mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>><mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com> <mailto:navy.xliu at gmail.com <mailto:navy.xliu at gmail.com>>>> wrote:
>>>>>>>
>>>>>>> hi, Vladimir,
>>>>>>> thank for the patch. I will verify it locally.
>>>>>>> I will take a look at ZGC.
>>>>>>>
>>>>>>> thanks,
>>>>>>> --lx
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Jul 27, 2018 at 5:19 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>
>>>>>>> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>
>>>>>>> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>>> wrote:
>>>>>>>
>>>>>>> Hi Liu
>>>>>>>
>>>>>>> I looked on it again and you are right. Method::_aot_code is defined and used only in
>>>>>>> tiered case.
>>>>>>>
>>>>>>> But changes should be next:
>>>>>>> 1. The assert is needed for case when aot code is used.
>>>>>>> 2. AOTCompiledMethod::make_entrant() is used only in Tiered (add #ifdef guard).
>>>>>>> 3. #ifdef DirectivesStack::init() should check INCLUDE_JVMCI
>>>>>>> 4. Missing changes for ZGC.
>>>>>>> 5. In TestMeetIncompatibleInterfaceArrays.java skip test with C1 compilation request
>>>>>>> when Tiered is off.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Vladimir
>>>>>>>
>>>>>>>
>>>>>>> diff -r 2ce72467c4e8 src/hotspot/share/aot/aotCodeHeap.cpp
>>>>>>> --- a/src/hotspot/share/aot/aotCodeHeap.cpp
>>>>>>> +++ b/src/hotspot/share/aot/aotCodeHeap.cpp
>>>>>>> @@ -714,7 +714,7 @@
>>>>>>> void AOTCodeHeap::sweep_method(AOTCompiledMethod *aot) {
>>>>>>> int indexes[] = {aot->method_index()};
>>>>>>> sweep_dependent_methods(indexes, 1);
>>>>>>> - vmassert(aot->method()->code() != aot && aot->method()->aot_code() == NULL, "method
>>>>>>> still active");
>>>>>>> + vmassert(aot->method()->code() != aot TIERED_ONLY( && aot->method()->aot_code() ==
>>>>>>> NULL), "method still active");
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> diff -r 2ce72467c4e8 src/hotspot/share/aot/aotCompiledMethod.cpp
>>>>>>> --- a/src/hotspot/share/aot/aotCompiledMethod.cpp
>>>>>>> +++ b/src/hotspot/share/aot/aotCompiledMethod.cpp
>>>>>>> @@ -206,6 +206,7 @@
>>>>>>> return true;
>>>>>>> }
>>>>>>>
>>>>>>> +#ifdef TIERED
>>>>>>> bool AOTCompiledMethod::make_entrant() {
>>>>>>> assert(!method()->is_old(), "reviving evolved method!");
>>>>>>> assert(*_state_adr != not_entrant, "%s", method()->has_aot_code() ? "has_aot_code()
>>>>>>> not cleared" : "caller didn't check has_aot_code()");
>>>>>>> @@ -240,6 +241,7 @@
>>>>>>>
>>>>>>> return true;
>>>>>>> }
>>>>>>> +#endif // TIERED
>>>>>>>
>>>>>>> // We don't have full dependencies for AOT methods, so flushing is
>>>>>>> // more conservative than for nmethods.
>>>>>>> diff -r 2ce72467c4e8 src/hotspot/share/aot/aotCompiledMethod.hpp
>>>>>>> --- a/src/hotspot/share/aot/aotCompiledMethod.hpp
>>>>>>> +++ b/src/hotspot/share/aot/aotCompiledMethod.hpp
>>>>>>> @@ -194,7 +194,7 @@
>>>>>>> virtual address verified_entry_point() const { return _code +
>>>>>>> _meta->verified_entry_offset(); }
>>>>>>> virtual void log_identity(xmlStream* stream) const;
>>>>>>> virtual void log_state_change() const;
>>>>>>> - virtual bool make_entrant();
>>>>>>> + virtual bool make_entrant() NOT_TIERED({ ShouldNotReachHere(); return false; });
>>>>>>> virtual bool make_not_entrant() { return make_not_entrant_helper(not_entrant); }
>>>>>>> virtual bool make_not_used() { return make_not_entrant_helper(not_used); }
>>>>>>> virtual address entry_point() const { return _code + _meta->entry_offset(); }
>>>>>>> diff -r 2ce72467c4e8 src/hotspot/share/compiler/compilerDirectives.cpp
>>>>>>> --- a/src/hotspot/share/compiler/compilerDirectives.cpp
>>>>>>> +++ b/src/hotspot/share/compiler/compilerDirectives.cpp
>>>>>>> @@ -442,7 +442,7 @@
>>>>>>> char str[] = "*.*";
>>>>>>> const char* error_msg = NULL;
>>>>>>> _default_directives->add_match(str, error_msg);
>>>>>>> -#ifdef COMPILER1
>>>>>>> +#if defined(COMPILER1) || INCLUDE_JVMCI
>>>>>>> _default_directives->_c1_store->EnableOption = true;
>>>>>>> #endif
>>>>>>> #ifdef COMPILER2
>>>>>>> diff -r 2ce72467c4e8 src/hotspot/share/gc/z/zBarrierSet.cpp
>>>>>>> --- a/src/hotspot/share/gc/z/zBarrierSet.cpp
>>>>>>> +++ b/src/hotspot/share/gc/z/zBarrierSet.cpp
>>>>>>> @@ -22,8 +22,12 @@
>>>>>>> */
>>>>>>>
>>>>>>> #include "precompiled.hpp"
>>>>>>> +#ifdef COMPILER1
>>>>>>> #include "gc/z/c1/zBarrierSetC1.hpp"
>>>>>>> +#endif
>>>>>>> +#ifdef COMPILER2
>>>>>>> #include "gc/z/c2/zBarrierSetC2.hpp"
>>>>>>> +#endif
>>>>>>> #include "gc/z/zBarrierSet.hpp"
>>>>>>> #include "gc/z/zBarrierSetAssembler.hpp"
>>>>>>> #include "gc/z/zGlobals.hpp"
>>>>>>> @@ -33,8 +37,8 @@
>>>>>>>
>>>>>>> ZBarrierSet::ZBarrierSet() :
>>>>>>> BarrierSet(make_barrier_set_assembler<ZBarrierSetAssembler>(),
>>>>>>> - make_barrier_set_c1<ZBarrierSetC1>(),
>>>>>>> - make_barrier_set_c2<ZBarrierSetC2>(),
>>>>>>> + COMPILER1_PRESENT( make_barrier_set_c1<ZBarrierSetC1>() )
>>>>>>> NOT_COMPILER1(NULL),
>>>>>>> + COMPILER2_PRESENT( make_barrier_set_c2<ZBarrierSetC2>() )
>>>>>>> NOT_COMPILER2(NULL),
>>>>>>> BarrierSet::FakeRtti(BarrierSet::ZBarrierSet)) {}
>>>>>>>
>>>>>>> ZBarrierSetAssembler* ZBarrierSet::assembler() {
>>>>>>> diff -r 2ce72467c4e8
>>>>>>> test/hotspot/jtreg/compiler/types/TestMeetIncompatibleInterfaceArrays.java
>>>>>>> --- a/test/hotspot/jtreg/compiler/types/TestMeetIncompatibleInterfaceArrays.java
>>>>>>> +++ b/test/hotspot/jtreg/compiler/types/TestMeetIncompatibleInterfaceArrays.java
>>>>>>> @@ -362,6 +362,12 @@
>>>>>>> System.out.println((j + 1) + ". invokation of " + baseClassName +
>>>>>>> i + "ASM.test() [::" +
>>>>>>> r.getName() + "() should be '" + tier[pass][j]
>>>>>>> + "' compiled]");
>>>>>>>
>>>>>>> + // Skip Profiling compilation (C1) when Tiered is disabled.
>>>>>>> + boolean profile = (level[pass][j] ==
>>>>>>> CompilerWhiteBoxTest.COMP_LEVEL_FULL_PROFILE);
>>>>>>> + if (profile && CompilerWhiteBoxTest.skipOnTieredCompilation(false)) {
>>>>>>> + continue;
>>>>>>> + }
>>>>>>> +
>>>>>>> WB.enqueueMethodForCompilation(r, level[pass][j]);
>>>>>>>
>>>>>>> try {
>>>>>>>
>>>>>>> On 7/26/18 1:11 PM, Liu Xin wrote:
>>>>>>>
>>>>>>> hi, Vladimir,
>>>>>>>
>>>>>>> Thank you for replying.
>>>>>>>
>>>>>>> If I disable compiler1, I will run into compiler errors when I build fastdebug. The
>>>>>>> attachment is the output.
>>>>>>> Even if ignore the assertion, we still have problem to pass hs-tier1. it will crash
>>>>>>> when it try to use jvmci.
>>>>>>>
>>>>>>> Here is my configuration:
>>>>>>> The existing configuration has been successfully updated in
>>>>>>> /Users/xxinliu/Devel/openjdk/jdk/build/macosx-x86_64-normal-server-fastdebug
>>>>>>> using configure arguments '--enable-option-checking=fatal
>>>>>>> --with-debug-level=fastdebug --with-jtreg=/Users/xxinliu/Devel/jtreg
>>>>>>> --with-jvm-features=-compiler1'.
>>>>>>>
>>>>>>> Configuration summary:
>>>>>>> * Debug level: fastdebug
>>>>>>> * HS debug level: fastdebug
>>>>>>> * JVM variants: server
>>>>>>> * JVM features: server: 'aot cds cmsgc compiler2 dtrace epsilongc g1gc graal jfr
>>>>>>> jni-check jvmci jvmti management nmt parallelgc serialgc services vm-structs'
>>>>>>> * OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
>>>>>>> * Version string: 12-internal+0-adhoc.xxinliu.jdk (12-internal)
>>>>>>>
>>>>>>> thanks,
>>>>>>> --lx
>>>>>>>
>>>>>>> On Thu, Jul 26, 2018 at 12:48 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com
>>>>>>> <mailto:vladimir.kozlov at oracle.com>
>>>>>>> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>
>>>>>>> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>
>>>>>>> <mailto:vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>>> wrote:
>>>>>>>
>>>>>>> This does not seems right. What failure you got in aotCodeHeap.cpp and
>>>>>>> aotCompiledMethod.cpp?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Vladimir
>>>>>>>
>>>>>>> On 7/26/18 10:16 AM, Liu Xin wrote:
>>>>>>>
>>>>>>> Hi, hotspot community,
>>>>>>>
>>>>>>>
>>>>>>> Please review the small change to getc2-onlybuild to work.
>>>>>>>
>>>>>>> Bug:https://bugs.openjdk.java.net/browse/JDK-8207965
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8207965>
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8207965
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8207965>>
>>>>>>>
>>>>>>> Webrev:http://cr.openjdk.java.net/~phh/8207965/webrev.00/
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/>
>>>>>>> <http://cr.openjdk.java.net/~phh/8207965/webrev.00/
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/>>
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/>>
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/>
>>>>>>>
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/
>>>>>>> <http://cr.openjdk.java.net/%7Ephh/8207965/webrev.00/>>>
>>>>>>>
>>>>>>> It will meet 2 compiler errors if you configure project with “./configure
>>>>>>> --with-jvm-features=-compiler1
>>>>>>> --enable-option-checking=fatal --with-debug-level=fastdebug”.
>>>>>>>
>>>>>>> the configure disable c1. Furthermore, 12 failures in hs-tier1 if we
>>>>>>> havec2-only.
>>>>>>>
>>>>>>>
>>>>>>> C2-onlybuilt met the following errors when I ran hs-tier1:
>>>>>>>
>>>>>>> compiler/aot/cli/jaotc/CompileClassWithDebugTest.java: check that jaotc can
>>>>>>> compile a class with a --debug flag
>>>>>>> compiler/jvmci/compilerToVM/IsCompilableTest.java:
>>>>>>> compiler/jvmci/events/JvmciNotifyBootstrapFinishedEventTest.java:
>>>>>>> compiler/jvmci/events/JvmciNotifyInstallEventTest.java:
>>>>>>> compiler/jvmci/jdk.vm.ci
>>>>>>> <http://jdk.vm.ci/>.code.test/src/jdk/vm/ci/code/test/DataPatchTest.java:
>>>>>>> compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/MaxOopMapStackOffsetTest.java:
>>>>>>> compiler/jvmci/jdk.vm.ci
>>>>>>> <http://jdk.vm.ci/>.code.test/src/jdk/vm/ci/code/test/NativeCallTest.java:
>>>>>>> compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleCodeInstallationTest.java:
>>>>>>> compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/SimpleDebugInfoTest.java:
>>>>>>> compiler/jvmci/jdk.vm.ci.code.test/src/jdk/vm/ci/code/test/VirtualObjectDebugInfoTest.java:
>>>>>>> compiler/types/TestMeetIncompatibleInterfaceArrays.java: C2 can not handle
>>>>>>> returns with incompatible interface
>>>>>>> arrays
>>>>>>>
>>>>>>> Most due to bug similar withJDK-8145331
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8145331
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8145331>
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8145331
>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8145331>>>.
>>>>>>>
>>>>>>>
>>>>>>> CompilerDirectives::get_for(AbstractCompiler *comp) returns _/c1/_store
>>>>>>>
>>>>>>> if jvmci() enabled, but hotspot won’t enable it if COMPILER1 is
>>>>>>> disabled. As a result, hotspot messes up
>>>>>>> refcounts of _c1_store. This webrev fixes 11 out of 12 cases.
>>>>>>>
>>>>>>>
>>>>>>> The last test (compiler/types/TestMeetIncompatibleInterfaceArrays.java)
>>>>>>> makes use of WhiteBox to check tier
>>>>>>> levels. I can’t fix it easily. Shall I try to fix it in this webrev? If no,
>>>>>>> we can file a new bug to fix the
>>>>>>> test. Does anyone have any idea how to fix it?
>>>>>>>
>>>>>>>
>>>>>>> thanks,
>>>>>>>
>>>>>>> --lx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20180806/f3cdb1b7/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list