RFR (XXL): JEP 243: Java-Level JVM Compiler Interface

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Mon Sep 28 09:25:11 UTC 2015


On 2015-09-25 22:00, Christian Thalinger wrote:
>
>> On Sep 25, 2015, at 12:20 AM, Magnus Ihse Bursie 
>> <magnus.ihse.bursie at oracle.com 
>> <mailto:magnus.ihse.bursie at oracle.com>> wrote:
>>
>> On 2015-09-24 20:57, Christian Thalinger wrote:
>>>> On Sep 21, 2015, at 12:24 PM, Christian Thalinger 
>>>> <christian.thalinger at oracle.com 
>>>> <mailto:christian.thalinger at oracle.com>> wrote:
>>>>
>>>>
>>>>> On Sep 18, 2015, at 2:19 PM, Christian Thalinger 
>>>>> <christian.thalinger at oracle.com 
>>>>> <mailto:christian.thalinger at oracle.com>> wrote:
>>>>>
>>>>>
>>>>>> On Sep 18, 2015, at 7:00 AM, Christian Thalinger 
>>>>>> <christian.thalinger at oracle.com 
>>>>>> <mailto:christian.thalinger at oracle.com>> wrote:
>>>>>>
>>>>>>
>>>>>>> On Sep 17, 2015, at 11:00 PM, Volker Simonis 
>>>>>>> <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>> wrote:
>>>>>>>
>>>>>>> To which repository will you finally push these changes?
>>>>>>>
>>>>>>> The current webrevs are against jdk9/jdk9/hotspot but I doubt that
>>>>>>> they will be integrated there.
>>>>>> Good point.
>>>>>>
>>>>>>> Unfortunately the patches don't apply to jdk9/dev/hotspot anymore
>>>>>>> because of '8135067: Preparatory refactorings for compiler control'
>>>>>>> and  "8134626: Misc cleanups after generation array removal":
>>>>>>>
>>>>>>> 3 out of 18 hunks FAILED -- saving rejects to file
>>>>>>> src/share/vm/compiler/compileBroker.cpp.rej
>>>>>>> 1 out of 5 hunks FAILED -- saving rejects to file
>>>>>>> src/share/vm/compiler/compileBroker.hpp.rej
>>>>>>> 6 out of 40 hunks FAILED -- saving rejects to file
>>>>>>> src/share/vm/runtime/vmStructs.cpp.rej
>>>>>>>
>>>>>>> Will you update the patches and if yes against which repositories?
>>>>>> Yes.  Let me update the graal-jvmci-9 repository to hs-comp.
>>>>> Done.  Now I have to create new webrevs…
>>>> Here are new webrevs against hs-comp:
>>>>
>>>> http://cr.openjdk.java.net/~twisti/8136421/webrev/ 
>>>> <http://cr.openjdk.java.net/%7Etwisti/8136421/webrev/> 
>>>> <http://cr.openjdk.java.net/~twisti/8136421/webrev/ 
>>>> <http://cr.openjdk.java.net/%7Etwisti/8136421/webrev/>>
>>>> http://cr.openjdk.java.net/~twisti/8136421/hotspot/webrev/ 
>>>> <http://cr.openjdk.java.net/%7Etwisti/8136421/hotspot/webrev/> 
>>>> <http://cr.openjdk.java.net/~twisti/8136421/hotspot/webrev/ 
>>>> <http://cr.openjdk.java.net/%7Etwisti/8136421/hotspot/webrev/>>
>>> I have refreshed these webrevs.  They contain all the changes we 
>>> discussed here plus a bunch of new tests that SQE finished.
>>
>> Hi Christian,
>>
>> I didn't see Volkers proposed fix about undefined-bool-conversion:
>>
>>> If this comes only from adlc, you could fix for adlc only by adding
>>>
>>> WARNINGS_ARE_ERRORS += -Wno-undefined-bool-conversion
>>>
>>> to make/linux/makefiles/adlc.make instead of 
>>> make/linux/makefiles/gcc.make
>>
>> While this is really a fix for an unrelated issue (support for a 
>> newer version of clang), I do believe Volker's suggestion to only add 
>> it to adlc is much better, if you really need to take this in as part 
>> of the JVMCI integration.
>
> Sorry I dropped this.  After Gilles’ hint I remembered the code in 
> question was removed with:
>
> [JDK-8041620] Solaris Studio 12.4 C++ 5.13 change in behavior for 
> placing friend declarations within surrounding scope - Java Bug System 
> <https://bugs.openjdk.java.net/browse/JDK-8041620>
>
> and the remaining ones were fixed with:
>
> [JDK-8077364] "if( !this )" construct prevents build on Xcode 6.3 - 
> Java Bug System <https://bugs.openjdk.java.net/browse/JDK-8077364>
>
> I’ve removed the change:
>
> http://hg.openjdk.java.net/graal/graal-jvmci-9/hotspot/rev/6de55f563ee1
Good!

>
>>
>> Apart from this, the makefile changes (still) look good.
>
> Btw. we found a bug in creating the OptionDescriptors files; we get 
> duplicate entries:
>
> $ cat 
> build/macosx-x86_64-normal-server-release/jdk/modules/java.base/META-INF/services/jdk.internal.jvmci.options.OptionDescriptors 
>
> jdk.internal.jvmci.compiler.Compiler_OptionDescriptors
> jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider_OptionDescriptors
> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaFieldImpl_OptionDescriptors
> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethodImpl_OptionDescriptors
> jdk.internal.jvmci.compiler.Compiler_OptionDescriptors
> jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider_OptionDescriptors
> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaFieldImpl_OptionDescriptors
> jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethodImpl_OptionDescriptors
>>
> Would this be the right fix?
>
> diff -r db1a815d2f6c make/gensrc/Gensrc-java.base.gmk
> --- a/make/gensrc/Gensrc-java.base.gmkThu Sep 24 15:35:49 2015 -1000
> +++ b/make/gensrc/Gensrc-java.base.gmkFri Sep 25 18:18:35 2015 +0200
> @@ -94,6 +94,7 @@
>     $(GENSRC_DIR)/_gensrc_proc_done
> $(MKDIR) -p $(@D)
> ($(CD) $(GENSRC_DIR)/META-INF/jvmci.options && \
> +    $(RM) -f $@; \
>     for i in $$(ls); do \
>       echo $${i}_OptionDescriptors >> $@; \
>     done)
>
That seems like a reasonable fix, yes.

/Magnus

> And I see the same behavior for HotSpotJVMCIBackendFactory:
>
> $ cat 
> build/macosx-x86_64-normal-server-release/jdk/modules/java.base/META-INF/services/jdk.internal.jvmci.hotspot.HotSpotJVMCIBackendFactory 
>
> jdk.internal.jvmci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory
> jdk.internal.jvmci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory
> jdk.internal.jvmci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory
> jdk.internal.jvmci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory
>>
> So I think a similar fix needs to be applied there.
>
>>
>> /Magnus
>>
>>>
>>>>>>> If I want to work on the ppc64 implementation, which repository 
>>>>>>> should I use?
>>>>>> graal-jvmci-9.  Are you working on this for fun or do you want to 
>>>>>> have that integrated with this JEP?
>>>>>>
>>>>>>> Thank you and best regards,
>>>>>>> Volker
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Sep 18, 2015 at 10:20 AM, Volker Simonis
>>>>>>> <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>> wrote:
>>>>>>>> For the top-level change I always get a strange error when 
>>>>>>>> importing it:
>>>>>>>>
>>>>>>>> patch failed, unable to continue (try -v)
>>>>>>>> patch failed, rejects left in working dir
>>>>>>>> errors during apply, please fix and refresh 
>>>>>>>> 8062493_jvmci_top_0911.v1.patch
>>>>>>>>
>>>>>>>> It is because of the strange path syntax of the last hunk in 
>>>>>>>> the patch file:
>>>>>>>>
>>>>>>>> --- old/./modules.xml 2015-09-16 15:11:14.000000000 -0700
>>>>>>>> +++ new/./modules.xml 2015-09-16 15:11:14.000000000 -0700
>>>>>>>> @@ -254,6 +254,14 @@
>>>>>>>>    <to>jdk.jfr</to>
>>>>>>>>  </export>
>>>>>>>>  <export>
>>>>>>>> +      <name>jdk.internal.jvmci.hotspot</name>
>>>>>>>> +      <to>jdk.jfr</to>
>>>>>>>> +    </export>
>>>>>>>> +    <export>
>>>>>>>> +      <name>jdk.internal.jvmci.hotspot.events</name>
>>>>>>>> +      <to>jdk.jfr</to>
>>>>>>>> +    </export>
>>>>>>>> +    <export>
>>>>>>>>    <name>sun.misc</name>
>>>>>>>>    <to>java.corba</to>
>>>>>>>>    <to>java.desktop</to>
>>>>>>>>
>>>>>>>>
>>>>>>>> Notice the strange syntax "old/./modules.xml" and 
>>>>>>>> "new/./modules.xml".
>>>>>>>> If I remove the redundant './' from the path, everything works 
>>>>>>>> fine.
>>>>>>>> For some reason only the diffs for modules.xml has this strange 
>>>>>>>> path
>>>>>>>> syntax in the patch.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Volker
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Sep 17, 2015 at 10:32 PM, Christian Thalinger
>>>>>>>> <christian.thalinger at oracle.com 
>>>>>>>> <mailto:christian.thalinger at oracle.com>> wrote:
>>>>>>>>> Since there are no objections I’m going to push this…
>>>>>>>>>
>>>>>>>>> http://hg.openjdk.java.net/graal/graal-jvmci-9/hotspot/rev/6a6766a8cbbf
>>>>>>>>>
>>>>>>>>>> On Sep 16, 2015, at 3:05 PM, Christian Thalinger 
>>>>>>>>>> <christian.thalinger at oracle.com> wrote:
>>>>>>>>>>
>>>>>>>>>> I would like to add this change:
>>>>>>>>>>
>>>>>>>>>> diff -r 2134e08cc132 src/share/vm/utilities/vmError.cpp
>>>>>>>>>> --- a/src/share/vm/utilities/vmError.cpp      Wed Sep 16 
>>>>>>>>>> 14:28:33 2015 -1000
>>>>>>>>>> +++ b/src/share/vm/utilities/vmError.cpp      Wed Sep 16 
>>>>>>>>>> 15:04:02 2015 -1000
>>>>>>>>>> @@ -517,6 +517,10 @@ void VMError::report(outputStream* st) {
>>>>>>>>>>                Abstract_VM_Version::vm_release(),
>>>>>>>>>>                Abstract_VM_Version::vm_info_string(),
>>>>>>>>>>                TieredCompilation ? ", tiered" : "",
>>>>>>>>>> +#if INCLUDE_JVMCI
>>>>>>>>>> +                   EnableJVMCI ? ", jvmci" : "",
>>>>>>>>>> +                   UseJVMCICompiler ? ", jvmci compiler" : "",
>>>>>>>>>> +#endif
>>>>>>>>>>                UseCompressedOops ? ", compressed oops" : "",
>>>>>>>>>>                gc_mode(),
>>>>>>>>>>                Abstract_VM_Version::vm_platform_string()
>>>>>>>>>>
>>>>>>>>>> It would be useful to see in the crash logs if this 
>>>>>>>>>> experimental feature was turned on.
>>>>>>>>>>
>>>>>>>>>>> On Sep 16, 2015, at 12:43 PM, Vladimir Kozlov 
>>>>>>>>>>> <vladimir.kozlov at oracle.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> I updated top and hotspot webrev with latest (build) changes.
>>>>>>>>>>>
>>>>>>>>>>> Vladimir
>>>>>>>>>>>
>>>>>>>>>>> On 9/16/15 2:28 PM, Christian Thalinger wrote:
>>>>>>>>>>>>> On Sep 16, 2015, at 6:52 AM, Christian Thalinger 
>>>>>>>>>>>>> <christian.thalinger at oracle.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Sep 16, 2015, at 2:57 AM, Magnus Ihse Bursie 
>>>>>>>>>>>>>> <magnus.ihse.bursie at oracle.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 2015-09-14 09:24, Christian Thalinger wrote:
>>>>>>>>>>>>>>> The JEP itself can be found here:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8062493 
>>>>>>>>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8062493>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Here are the webrevs:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> http://cr.openjdk.java.net/~kvn/JVMCI/webrev.top/ 
>>>>>>>>>>>>>>> <http://cr.openjdk.java.net/~kvn/JVMCI/webrev.top/>
>>>>>>>>>>>>>>> http://cr.openjdk.java.net/~kvn/JVMCI/webrev.hotspot/ 
>>>>>>>>>>>>>>> <http://cr.openjdk.java.net/~kvn/JVMCI/webrev.hotspot/>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The change has already undergone a few iterations of 
>>>>>>>>>>>>>>> internal review by different people of different teams. 
>>>>>>>>>>>>>>>  Most comments and suggestions were handled accordingly. 
>>>>>>>>>>>>>>>  Although there is one open item we agreed we will 
>>>>>>>>>>>>>>> address after the integration of JEP 243 and that work 
>>>>>>>>>>>>>>> is captured in RFE:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8134994 
>>>>>>>>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8134994>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> SQE is still working on the tests and all test tasks can 
>>>>>>>>>>>>>>> be seen as sub-tasks of the JEP.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The integration will happen under the bug number:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8136421 
>>>>>>>>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8136421>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Christian,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (Adding build-dev since this review includes some major 
>>>>>>>>>>>>>> build changes.)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The makefile changes looks good in general to me. I have 
>>>>>>>>>>>>>> not reviewed the source code changes.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Some comments:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> * modules.xml:
>>>>>>>>>>>>>> Make sure you get sign-off from a Jigsaw developer for 
>>>>>>>>>>>>>> modifying this file.
>>>>>>>>>>>>> I’ve asked Alan to take a look.
>>>>>>>>>>>>>
>>>>>>>>>>>>>> * hotspot/make/linux/makefiles/gcc.make:
>>>>>>>>>>>>>> Seems unfortunate to have to disable a new warning 
>>>>>>>>>>>>>> (undefined-bool-conversion) for newly incorporated code. 
>>>>>>>>>>>>>> Is it not possible to fix the code emitting this warning 
>>>>>>>>>>>>>> instead?
>>>>>>>>>>>>> We had this question before.  It’s not obvious because you 
>>>>>>>>>>>>> can’t see it in the regular diff views but this is under:
>>>>>>>>>>>>>
>>>>>>>>>>>>> ifeq ($(USE_CLANG), true)
>>>>>>>>>>>>>
>>>>>>>>>>>>>> * make/common/MakeBase.gmk and 
>>>>>>>>>>>>>> hotspot/make/gensrc/Gensrc-java.base.gmk:
>>>>>>>>>>>>>> I see a coming merge conflict. In jdk9/dev, there is now 
>>>>>>>>>>>>>> a new function that performs the same function as 
>>>>>>>>>>>>>> CreatePath, but it's named PathList. (It's a bit 
>>>>>>>>>>>>>> unfortunate that this code snippet has bounced around as 
>>>>>>>>>>>>>> patches without a definite name.) I assume you are going 
>>>>>>>>>>>>>> to push this through a hotspot forest. If the PathList 
>>>>>>>>>>>>>> patch reaches the hotspot repo before this, please remove 
>>>>>>>>>>>>>> the CreatePath from MakeBase, and change the calls to 
>>>>>>>>>>>>>> CreatePath to PathList instead. (I could only find such 
>>>>>>>>>>>>>> calls in hotspot/make/gensrc/Gensrc-java.base.gmk). If 
>>>>>>>>>>>>>> this patch goes in before that, we'll need to give a 
>>>>>>>>>>>>>> heads-up to the integrator about this conflict.
>>>>>>>>>>>>> Thanks for the heads up.
>>>>>>>>>>>> Erik sent me a patch to avoid merge conflicts.  I’ve 
>>>>>>>>>>>> integrated two changesets:
>>>>>>>>>>>>
>>>>>>>>>>>> http://hg.openjdk.java.net/graal/graal-jvmci-9/rev/ddedccc5c0ab 
>>>>>>>>>>>> <http://hg.openjdk.java.net/graal/graal-jvmci-9/rev/ddedccc5c0ab><http://hg.openjdk.java.net/graal/graal-jvmci-9/rev/ddedccc5c0ab 
>>>>>>>>>>>> <http://hg.openjdk.java.net/graal/graal-jvmci-9/rev/ddedccc5c0ab>>
>>>>>>>>>>>> http://hg.openjdk.java.net/graal/graal-jvmci-9/hotspot/rev/fee6b89199c9 
>>>>>>>>>>>> <http://hg.openjdk.java.net/graal/graal-jvmci-9/hotspot/rev/fee6b89199c9><http://hg.openjdk.java.net/graal/graal-jvmci-9/hotspot/rev/fee6b89199c9 
>>>>>>>>>>>> <http://hg.openjdk.java.net/graal/graal-jvmci-9/hotspot/rev/fee6b89199c9>>
>>>>>>>>>>>>
>>>>>>>>>>>>>> Another potential coming merge conflict relates to 
>>>>>>>>>>>>>> ListPathsSafely in Gensrc-java.base.gmk. There is 
>>>>>>>>>>>>>> currenlty a review out from Erik which modifies the API 
>>>>>>>>>>>>>> for ListPathsSafely. If/when it goes in, the call to 
>>>>>>>>>>>>>> ListPathsSafely in Gensrc-java.base.gmk will need to be 
>>>>>>>>>>>>>> modified (Erik can give advice on how). Depending on 
>>>>>>>>>>>>>> timing, this too might hit the integrator rather than 
>>>>>>>>>>>>>> your push.
>>>>>>>>>>>>> Ok, thanks.
>>>>>>>>>>>>>
>>>>>>>>>>>>>> /Magnus
>



More information about the hotspot-dev mailing list