Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JDK-8252061 [lword] Support Object::toString for inline type #155

Closed
wants to merge 4 commits into from

Conversation

mlchung
Copy link
Member

@mlchung mlchung commented Aug 20, 2020

This adds the Object::toString support for inline classes. This will replace the need
for javac to generate the toString method to call the bootstrap method.

JDK-8206077 will revisit the overlap of ValueBootstrapMethods and ObjectMethods.

This patch also removes the private isSubstituable0 method and makes sure
that isSubstitutable does not have acmp instruction and can be invoked by VM.


Progress

  • Change must not contain extraneous whitespace

Issue

  • JDK-8252061: [lword] Support Object::toString for inline type

Reviewers

Download

$ git fetch https://git.openjdk.java.net/valhalla pull/155/head:pull/155
$ git checkout pull/155

@bridgekeeper
Copy link

bridgekeeper bot commented Aug 20, 2020

👋 Welcome back mchung! A progress list of the required criteria for merging this PR into lworld will be added to the body of your pull request.

@openjdk
Copy link

openjdk bot commented Aug 20, 2020

@mlchung This change now passes all automated pre-integration checks, type /integrate in a new comment to proceed. After integration, the commit message will be:

8252061: [lword] Support Object::toString for inline type

Reviewed-by: sadayapalam, rriggs
  • If you would like to add a summary, use the /summary command.
  • To credit additional contributors, use the /contributor command.
  • To add additional solved issues, use the /issue command.

Since the source branch of this PR was last updated there have been 198 commits pushed to the lworld branch:

  • bce51c9: 8244713: [lworld] V.ref class should not inadvertently carry over attributes from V.class
  • a8215ec: Merge jdk
  • 4ab5388: 8252227: [lworld] Merge of jdk-16+5 broke compiler/arraycopy/TestEliminateArrayCopy.java
  • cd5c75f: Merge jdk
  • c75f0f1: 8252111: [lworld] C2 intrinsic needs to handle unsafe access to non-flattened field of constant inline type holder
  • 2d8688f: 8252112: [lworld] Deoptimization fails when trying to re-assign empty inline type elements of a flattened array
  • 6f7ee4f: 8252110: [lworld] C2 compilation crashes with SIGSEGV in AddPNode::Value
  • ac68edf: 8252109: [lworld] C2 compilation fails with assert(!has_phi_inputs(region)) failed: already cloned with phis
  • a5aa3a9: 8251986: [lworld] implement Class::valueType and Class::referenceType in Java
  • 2bde31f: 8250511: [lworld] C2 compilation crashes in PhaseIdealLoop::spinup
  • ... and 188 more: https://git.openjdk.java.net/valhalla/compare/5d1350ef32eba34258f5e700d2637c8a0a95dd99...lworld

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid automatic rebasing, please merge lworld into your branch, and then specify the current head hash when integrating, like this: /integrate bce51c9076ba84e831e6b4797faed7f3806446c3.

➡️ To integrate this PR with the above commit message to the lworld branch, type /integrate in a new comment.

@mlbridge
Copy link

mlbridge bot commented Aug 20, 2020

Webrevs

@rose00
Copy link
Collaborator

rose00 commented Aug 20, 2020

A couple of comments:

  1. In order for this to perform well, the code for each generated toString method needs to be JIT-ted, and to be reached quickly (or even inlined) via ClassValue::get. Optimization work (to be done later) should probably consider JDK-8238260.

  2. We should try to handle Record subtypes the same way. Putting funky bytecodes into classfiles, even using indy, is worse than allowing Object::toString (and equals and hashCode) to vector through a specified, customized method, using ClassValue::get.

  3. I think it is reasonable to have special intrinsic logic in the JIT to hurry along the previous two steps, although in the long run the JVM should have a good story (perhaps using ClassValue, perhaps not) for auto-expanded method bodies.

Copy link
Collaborator

@sadayapalam sadayapalam left a comment

+1 for javac changes

@mlchung
Copy link
Member Author

mlchung commented Aug 25, 2020

/integrate

@openjdk openjdk bot closed this Aug 25, 2020
@openjdk openjdk bot added integrated and removed ready rfr labels Aug 25, 2020
@openjdk
Copy link

openjdk bot commented Aug 25, 2020

@mlchung The following commits have been pushed to lworld since your change was applied:

  • bce51c9: 8244713: [lworld] V.ref class should not inadvertently carry over attributes from V.class
  • a8215ec: Merge jdk
  • 4ab5388: 8252227: [lworld] Merge of jdk-16+5 broke compiler/arraycopy/TestEliminateArrayCopy.java
  • cd5c75f: Merge jdk
  • c75f0f1: 8252111: [lworld] C2 intrinsic needs to handle unsafe access to non-flattened field of constant inline type holder
  • 2d8688f: 8252112: [lworld] Deoptimization fails when trying to re-assign empty inline type elements of a flattened array
  • 6f7ee4f: 8252110: [lworld] C2 compilation crashes with SIGSEGV in AddPNode::Value
  • ac68edf: 8252109: [lworld] C2 compilation fails with assert(!has_phi_inputs(region)) failed: already cloned with phis
  • a5aa3a9: 8251986: [lworld] implement Class::valueType and Class::referenceType in Java
  • 2bde31f: 8250511: [lworld] C2 compilation crashes in PhaseIdealLoop::spinup
  • b697e16: 8250764: [lworld] Merge JDK-8247697 in from mainline
  • 023c53d: 8247677: Incorrect class name displayed in DriverManager trace output
  • 1982432: Merge
  • 590de67: 8242891: vmTestbase/nsk/jvmti/ test should be fixed to fail early if JVMTI function return error
  • d7c1bb1: Merge
  • 6d201db: 8249036: clean up FileInstaller $test.src $cwd in vmTestbase_nsk_stress tests
  • 919eb12: 8249032: clean up FileInstaller $test.src $cwd in vmTestbase_nsk_sysdict tests
  • 6c95a87: 8249035: clean up FileInstaller $test.src $cwd in vmTestbase_nsk_jdwp tests
  • ba1db57: 8249028: clean up FileInstaller $test.src $cwd in vmTestbase_nsk_monitoring tests
  • 765abcb: 8249033: clean up FileInstaller $test.src $cwd in vmTestbase_vm_metaspace tests
  • 606aad5: 8249029: clean up FileInstaller $test.src $cwd in vmTestbase_vm_defmeth tests
  • 52977fd: Merge
  • 265b36f: 8236809: [Graal] java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java timeouts
  • f8f35d3: 8248695: HostLocaleProviderAdapterImpl provides invalid date-only
  • 10e6a6a: 8248605: Update --release 15 symbol information for JDK 15 build 31
  • a9b7ae8: 8249255: Build fails if source code in cygwin home dir
  • 7a6c1a6: 8247502: PhaseStringOpts crashes while optimising effectively dead code
  • be04c8c: 8249256: [macos] Add EmptyFolderPackageTest test to problem list
  • 92be493: Merge
  • 77c83d9: 8236935: Improve UX of the search control
  • 5b2fd36: 8247670: Shenandoah: deadlock during class unloading OOME
  • 04280a0: 8249000: vm.gc.X should take selected JIT into account
  • c5ad1da: 8249019: clean up FileInstaller $test.src $cwd in vmTestbase_vm_compiler tests
  • 9bbec04: 8249038: clean up FileInstaller $test.src $cwd in vmTestbase_vm_gc tests
  • a376fb7: 8217475: Unexpected StackOverflowError in "process reaper" thread
  • 32482c8: 8248598: [Graal] Several testcases from applications/jcstress/acqrel.java fails with forbidden state
  • 4d2b0b5: 8248016: JFR: Remove Javadoc warnings
  • 0853b33: 8248701: On Windows generated modules-deps.gmk can contain backslash-r (CR) characters
  • d308558: 8248865: Document JNDI/LDAP timeout properties
  • d42f541: 8248231: deserializeLambda created with wrong encoding if platform encoding not UTF-8
  • a18e8d3: 8248048: ZGC: AArch64: SIGILL in load barrier register spilling
  • 8f26a1f: 8247229: jpackage tests failed due to "semop(1): encountered an error: Invalid argument"
  • 37880ba: 8242529: javac defines type annotations incorrectly for record members (constructor and property accessor)
  • 1b1fb08: 8249086: JDK 15 L10N resource file update - msg drop 10
  • 183dadb: 8249037: clean up FileInstaller $test.src $cwd in vmTestbase_vm_g1classunloading tests
  • 2fe15bc: Added tag jdk-15+31 for changeset a32f58c6b8be
  • 69a9403: 8248822: 8 vm/classfmt/atr_ann/atr_rtm_annot007/atr_rtm_annot00709 tests fail w/ AOT
  • 9f0bafe: 8249097: test/lib/jdk/test/lib/util/JarBuilder.java has a bad copyright
  • dda0c6c: 8211974: move test/jdk/lib/testlibrary/java/util/jar/*.java to top-level library or a local library
  • e5c43ab: 8249018: clean up FileInstaller $test.src $cwd in vmTestbase_vm_mlvm tests
  • a0e5043: 8246806: Incorrect copyright header in KeyAgreementTest.java, GroupName.java
  • 802737c: 8248845: AArch64: stack corruption after spilling vector register
  • ddcb17e: 8248112: array index out of bound in FileMapInfo::check_paths
  • e87c864: 8248570: Incorrect copyright header in TestUnsafeUnalignedSwap.java
  • 5899ef1: 8208243: vmTestbase/gc/lock/jni/jnilock002/TestDescription.java fails in jdk/hs nightly
  • f4756fd: 8248505: Unexpected NoSuchAlgorithmException when using secure random impl from BCFIPS provider
  • ca91da0: 8248794: Transition JFR Periodic Task Thread to "_thread_in_native" before invoking performance counters
  • c7ecaa4: 8248219: aarch64: missing memory barrier in fast_storefield and fast_accessfield
  • 1b3a127: 8241803: JFR TestThreadStartEndEvents.java failed due to "RuntimeException: Wrong thread id"
  • 653af30: 8248348: Regression caused by the update to BCEL 6.0
  • 7a4bf24: 8248501: [macos] App created with jpackage on Mac fails with error -10810
  • 45fce6b: 8242538: java/security/SecureRandom/ThreadSafe.java failed on windows
  • a8d20c9: 8247527: serviceability/dcmd/gc/HeapDumpCompressedTest.java fails with Graal + ZGC
  • 79ad551: 8243670: Unexpected test result caused by C2 MergeMemNode::Ideal
  • 63a6adf: 8248746: Undo jhsdb related exclusiveAccess.dirs changes that were done for JDK-8220295
  • 82cc03f: 8248703: Clarify the behavior of java.net.NetworkInterface::equals
  • 734a6c9: 8248799: Shenandoah: Claim threads token in constructor of ShenandoahRootVerifier
  • 6c89a96: 8248306: gc/stress/gclocker/TestExcessGCLockerCollections.java does not compile
  • 5cf3316: 8248725: Shenandoah: Claim verifier thread roots for parallel processing
  • 9993572: 8248388: ZGC: Load barrier incorrectly elided in jdk/java/text/Format/DateFormat/SDFTCKZoneNamesTest.java
  • 5a90271: 8237488: jdk/jfr/event/compiler/TestCompilerCompile.java failed due to "RuntimeException: No thread in event"
  • dc0c0c7: 8248060: small HTML issues in java.xml package-info.java files
  • 72ae322: 8208207: Test nsk/stress/jni/gclocker/gcl001 fails after co-location
  • 1d5ec8f: 8247762: [aarch64] Timeout in .../HeapDumpTestWithActiveProcess.java due to inf. loop in AARCH64CurrentFrameGuess.run()
  • d7b097f: 8244764: Improve assertion for CPP_VTABLE_PATCH_TYPES_DO
  • eeb4b15: 8249002: New serviceability/sa/ClhsdbFindPC.java #id2 and #id3 tests are failing with ZGC
  • ed05d57: 8223955: Eliminate or reduce mixing of old File API and new Path/Files APIs
  • c782d0e: Merge
  • db2d4e8: 8248194: Need better support for running SA tests on core files
  • f243b28: 8205467: javax/management/remote/mandatory/connection/MultiThreadDeadLockTest.java possible deadlock
  • 50e18e2: 8227337: javax/management/remote/mandatory/connection/ReconnectTest.java NoSuchObjectException no such object in table
  • a6cf325: 8248226: TestCloneAccessStressGCM fails with -XX:-ReduceBulkZeroing
  • 584e983: 8248568: compiler/c2/TestBit.java failed: test missing from stdout/stderr
  • c5bb023: 8232782: Shenandoah: streamline post-LRB CAS barrier (aarch64)
  • a4b1353: 8244763: Update --release 8 symbol information after JSR 337 MR3
  • 2e65885: Added tag jdk-15+30 for changeset 6909e4a1f25b
  • 55e7003: 8248059: [macos] EmptyFolderPackageTest.java failed "hdiutil: create failed - No child processes"
  • 83a8c4a: 8244724: CTW: C2 compilation fails with "Live Node limit exceeded limit"
  • 485194c: 8245021: Adding method 'remove_if_existing' to growableArray
  • 3d1b1a6: 8248170: Excessive include of compiledMethod, codeCache, javaClasses and systemDictionary
  • e584237: Merge
  • 8170244: 8248886: InstanceKlass::initialize_impl crashes with -XX:-UsePerfData after JDK-8246019
  • 28e219f: 8233829: javac cannot find non-ASCII module name under non-UTF8 environment
  • 2e09a58: 8246019: PerfClassTraceTime slows down VM start-up
  • 6d137a3: 8248043: Need to eliminate excessive i2l conversions
  • b02e4d4: 8248596: [TESTBUG] compiler/loopopts/PartialPeelingUnswitch.java times out with Graal enabled
  • 459da4a: 8248219: aarch64: missing memory barrier in fast_storefield and fast_accessfield
  • 4922a35: Merge
  • 83fff05: 8248306: gc/stress/gclocker/TestExcessGCLockerCollections.java does not compile
  • 20147c3: Merge
  • 4506975: 8248398: Add diagnostic RepeatCompilation utility
  • e2072bb: 8245302: Upgrade LogRecord to support long thread ids and remove its usage of ThreadLocal
  • 3961468: Merge
  • af51a73: 8244383: jhsdb/HeapDumpTestWithActiveProcess.java fails with "AssertionFailure: illegal bci"
  • e0c26b3: 8248348: Regression caused by the update to BCEL 6.0
  • 6b8bf62: Merge
  • 4858141: 8247533: SA stack walking sometimes fails with sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp
  • 8b7c959: 8247922: Update Graal
  • ec25b42: 8076985: Allocation path: biased locking + compressed oops code quality
  • 579ed70: 8248417: some jdk/javadoc/doclet tests fail (JDK 16)
  • 78b9de8: 8248495: [macos] zerovm is broken due to libffi headers location
  • 1eaa411: Added tag jdk-16+4 for changeset e2622818f0bd
  • 4e962f9: 8248321: [JVMCI] improve libgraal logging and fatal error handling
  • 1356a0f: 8248667: Need support for building native libraries located in the test/lib directory
  • 3d9bad1: 8218021: Have jarsigner preserve posix permission attributes
  • dc63bf2: 8248650: [BACKOUT] Backout JDK-8244603 because it generates too much noise in CI
  • 51937e1: 8248634: Shenandoah: incorrect include in shenandoahInitLogger.cpp
  • 00e0a60: 8248632: Shenandoah: build fails without both JVMTI and JFR
  • 5fbac4a: 8244324: RTFEditorKit does not display some of Japanese characters correctly
  • 911c553: 8245921: Minor copy/paste issue in BasicScrollBarUI
  • c3ec97d: 8248187: javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java fails with String is not properly drawn
  • 43a2010: Merge
  • 637fdbc: Added tag jdk-16+4 for changeset 78c07dd72404
  • 5699024: 8197560: test javax/swing/JTree/8003400/Test8003400.java fails
  • 7e93e03: 8248612: Back quotes and double quotes must not be escaped in: Cannot convert "$unix_path" to Windows path
  • bf04926: 8005088: remove unused NativeInstruction::test methods
  • dc74336: 8243586: Optimize calls to SystemDictionaryShared::define_shared_package for classpath
  • 4b85bd5: 8248610: Clean up handling of Windows RC files
  • 32aa661: 8247534: Update --release 15 symbol information for JDK 15 build 29
  • 292a3d5: Merge
  • 03d47d5: 8248359: Update JVMCI
  • eb78035: 8247741: Test test/hotspot/jtreg/runtime/7162488/TestUnrecognizedVmOption.java fails when -XX:+IgnoreUnrecognizedVMOptions is set
  • f23c983: 8248468: java/awt/font/DefaultFontTest/DefaultFontTest.java fails in SunFontManager.findFont2D
  • 921155d: 8036604: Typo in BufferedBufImgOps.java in the exception message
  • a1b5e01: 8213535: Windows HiDPI html lightweight tooltips are truncated
  • 2c868d6: Merge
  • 3c472b6: 8198623: java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogButtonTest/EnqueueWithDialogButtonTest.java fails on mac
  • 02201d1: 7131400: [macosx] Desktop.edit(a directory) should throw IOException
  • b852688: 8237592: Enhance certificate verification
  • 34fc330: 8234836: Improve serialization handling
  • 19c2992: 8241522: Manifest improved jar headers redux
  • d7bbb5c: 8242136: Better XML namespace handling
  • 343ecd8: 8231800: Better listing of arrays
  • 0ffa6b7: 8237117: Better ForkJoinPool behavior
  • fe514a2: 8241379: Update JCEKS support
  • e3673d4: 8238843: Enhanced font handing
  • 45258a1: 8236867: Enhance Graal interface handling
  • 0c58055: 8240482: Improved WAV file playback
  • 6ac3892: 8238804: Enhance key handling process
  • c90e523: 8238920: Better Buffer support
  • 800f133: 8240119: Less Affine Transformations
  • 45cace2: 8238925: Enhance WAV file playback
  • 8fdbb29: 8236191: Enhance OID processing
  • fa3d79c: 8230613: Better ASCII conversions
  • 195c45a: 8245226: Clean-up FlagSetting and remove misuse
  • 30bc2b7: 8248997: JFR: Improve javadoc for @name
  • 4900219: 8249264: Build validate-headers task fails after JDK-8248261
  • c4f835b: 8249165: Remove unneeded nops introduced by 8234160 changes
  • 7436ef2: 8246476: remove AsyncDeflateIdleMonitors option and the safepoint based deflation mechanism
  • 231a840: 8248261: Add timestamps to jpackage and jpackage tests verbose output
  • 8f8ff52: 8248486: SafeThread illegal access to java.lang private fields should be removed
  • 83a458c: 8247779: Remove deprecated --bind-services option from jpackage
  • 5146474: 8246308: Reference count for PackageEntry::name may be incorrectly decremented
  • 097720c: 8249195: Change to Xcode 11.3.1 for building on Macos at Oracle
  • a14490d: 8247502: PhaseStringOpts crashes while optimising effectively dead code
  • deddbe5: 8248988: JFR: Split up TestThreadStartEndEvents.java
  • f613d43: 8249230: Shenandoah: assertion failure with -XX:-ResizeTLAB
  • 870e67d: 8247695: PPC/S390: compiler/intrinsics/math/TestFpMinMaxIntrinsics.java fails
  • 2d3c928: 8249137: Remove CollectedHeap::obj_size
  • faf4d7c: 8242428: JVMTI thread operations should use Thread-Local Handshake
  • 09510a1: Merge
  • 0861248: 8247670: Shenandoah: deadlock during class unloading OOME
  • 985061a: 8249149: Remove obsolete UseNewFieldLayout option and associated code
  • 0a38584: 8248652: Shenandoah: SATB buffer handling may assume no forwarded objects
  • d3d29a4: Merge
  • 5c76194: 8248983: Add links to definition of empty name
  • 9bac33f: 8248426: NMT: VirtualMemoryTracker::split_reserved_region() does not properly update summary counting
  • 97b948a: 8248336: AArch64: C2: offset overflow in BoxLockNode::emit
  • 6b91162: 8210462: Fix remaining mentions of initial mark
  • 59e3ebb: 8248322: G1: Refactor full collection sizing code
  • 65b23ca: 8249080: Reduce MemberName class dependency on MethodHandles
  • f4f0940: 8249141: Fix indent in java_lang_Record definition in vmSymbols.hpp
  • 6a91c73: 8248403: AArch64: Remove uses of kernel integer types
  • ed31b66: 8247818: GCC 10 warning stringop-overflow with symbol code
  • 3dcd1c1: Merge
  • 11ba454: Added tag jdk-16+5 for changeset 143e258f64af
  • fc1b24e: 8243592: Subject$SecureSet::addAll should not call contains(null)
  • e2353cc: 8248987: AOT's Linker.java seems to eagerly fail-fast on Windows
  • dfe381a: 8248658: Remove vmTestbase/vm/share/vmcrasher
  • 151b6f1: 8233239: Enhance TIFF support
  • 3476724: 8238002: Better matrix operations
  • 697fb9e: 8232014: Expand DTD support
  • fc02d98: 8238013: Enhance String writing
  • d285fd6: 8234418: Better parsing with CertificateFactory
  • 8a616df: 8233234: Better Zip Naming
  • a5a46ff: 8233255: Better Swing Buttons
  • da6daad: 8234042: Better factory production of certificates
  • 1bfcf76: 8234032: Improve basic calendar services

Your commit was automatically rebased without conflicts.

Pushed as commit acfed88.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
4 participants