summaryrefslogtreecommitdiff
path: root/compiler/optimizing
AgeCommit message (Collapse)Author
2021-09-14Temporarily disable partial LSE.Nicolas Geoffray
Due to a bug in it. Add a regression test. Bug: 197818595 Test: 828-partial-lse (cherry picked from commit 18074d2b59ae56dcfccea770ceb515215c8eb53f) (cherry picked from commit a38b7355a603772424a8212840849094ce0ddeb3) Merged-In: I65da4f7ef09cd2a1f6c4b21799ecd7a42c1adac2 Change-Id: I3eb52dc091264e617bb711260fb4950d15c7f50b
2021-09-13Partial LSE: handle all kinds of infinite loops.Nicolas Geoffray
A subgraph could also have an infinite loop. Test: 826-inifinite-loop Bug: 196246395 Merged-In: Ifd1e1ae0f42dfe2cc156386fc166101c20748fc9 (cherry picked from commit 96dadefd24331f6808cb287048269ba772423c33) Change-Id: I410ec26aefbc42629ba7dbe5a19a87399cefe396 (cherry picked from commit 1c7eeae26429bf76c47a1eaf6eddf514c000ba71)
2021-07-12Uncouple ART gtests from the ART APEX.Roland Levillain
Introduce standalone versions of ART gtests on target, not bundled with the ART APEX. So far ART gtests have always been built as debug artifacts (and linked against ART debug libraries). Make some adjustments in some of these tests so that they can also work as non-debug artifacts and be used with the Release ART APEX (which contains only non-debug artifacts). Newly added tests: * `art_standalone_cmdline_tests` * `art_standalone_compiler_tests` * `art_standalone_dex2oat_tests` * `art_standalone_dexdump_tests` * `art_standalone_dexlist_tests` * `art_standalone_dexoptanalyzer_tests` * Note: Requires root access to the device. * `art_standalone_libartbase_tests` * `art_standalone_libartpalette_tests` * `art_standalone_libdexfile_support_tests` * `art_standalone_libdexfile_tests` * `art_standalone_libprofile_tests` * `art_standalone_oatdump_tests` * `art_standalone_odrefresh_tests` * `art_standalone_profman_tests` * Note: Requires root access to the device. * Note: Some tests (2 out of 37) are failing in multi-ABI contexts and have been temporarily disabled. * `art_standalone_runtime_compiler_tests` * `art_standalone_runtime_tests` * Note: Some tests (16 out of 686) are failing and have been temporarily disabled. * Note: Some tests (4 out of 686) are failing in multi-ABI contexts and have been temporarily disabled. * `art_standalone_sigchain_tests` Tests not added: * `art_standalone_dexanalyze_tests` * Reason: ART binary `dexanalyze` is not part of the Release ART APEX. * `art_standalone_dexdiag_tests` * Reason: ART binary `dexdiag` is not part of the Release ART APEX. * `art_standalone_dexlayout_tests` * Reason: ART binary `dexlayout` is not part of the Release ART APEX. * `art_standalone_imgdiag_tests` * Reason: ART binary `imgdiag` is not part of the Release ART APEX. Tests not added (but present in AOSP): * `art_standalone_libartservice_tests` * Reason: Test `art_libartservice_tests` does not exist in this branch. * `art_standalone_libarttools_tests` * Reason: Test `art_libarttools_tests` does not exist in this branch. (cherry picked from commit f040914a122be86e280efe5e31af1168f2b7c72e) Test: atest -a art_standalone_cmdline_tests Test: atest -a art_standalone_compiler_tests Test: atest -a art_standalone_dex2oat_tests Test: atest -a art_standalone_dexdump_tests Test: atest -a art_standalone_dexlist_tests Test: atest -a art_standalone_dexoptanalyzer_tests Test: atest -a art_standalone_libartbase_tests Test: atest -a art_standalone_libartpalette_tests Test: atest -a art_standalone_libdexfile_support_tests Test: atest -a art_standalone_libdexfile_tests Test: atest -a art_standalone_libprofile_tests Test: atest -a art_standalone_oatdump_tests Test: atest -a art_standalone_odrefresh_tests Test: atest -a art_standalone_profman_tests Test: atest -a art_standalone_runtime_compiler_tests Test: atest -a art_standalone_runtime_tests Test: atest -a art_standalone_sigchain_tests Test: atest -a art_standalone_\*_tests Test: m art_chroot && atest ArtGtestsTargetChroot Bug: 193218514 Bug: 162834439 Bug: 162734417 Change-Id: I8beda9159d48c4ca495698357dc3bd95e3ff84d5 Merged-In: I8beda9159d48c4ca495698357dc3bd95e3ff84d5
2021-06-03Reduce Partial LSE memory usage.Vladimir Marko
Instantiate ExecutionSubgraph only for partial singleton candidates (currently NewInstance, possibly NewArray in the future). This reduces "LSA" allocations. Reserve memory for PartialLoadStoreEliminationHelper members based on the number of partial singletons instead of the number of reference infos. This reduces "LSE" allocations. The peak scoped arena allocation for one compiled method is reduced from MEM: used: 97424004, allocated: 99006568, lost: 1115968 LSA 46015104 LSE 51408900 down to MEM: used: 17000744, allocated: 26713880, lost: 3332496 GVN 17000744 where the LSA+LSE memory use is lower than GVN use. (cherry picked from commit 5c824937bb82adbde857bc99cb03c769c9f68f7b) Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 33650849 Merged-In: I323b9f144b258f0fab034794770971547ce94b59 Change-Id: If3fc9787fc0dc4a1a33dd5ca0f2dc972998c4da7
2021-06-02Rewrite profile file format.Vladimir Marko
The new format contains one mandatory section and several optional sections. This allows extending the profile with new sections that shall be ignored by old versions of ART. We add an "extra descriptors" section to support class references without a `dex::TypeId` in the referencing dex file. Type indexes between the dex file's `NumTypeIds()` and `DexFile::kDexNoIndex16` are used to index these extra descriptors. This prepares for collecting array classes which shall be tied to the element type's dex file even when the array type is not needed by that dex file and has been used only from another dex file. It also allows inline caches to be self-contained, so we can remove the profile index from data structures and serialized data. The creation of the the binary profile from text files is updated to correctly allow array types to be stored as the profiled classes using the "extra descriptors". However, the interface for filling in inline caches remains unchanged for now, so we require a `TypeId` in one of the processed dex files. The data collection by JIT has not been updated. (cherry picked from commit c63d9672264e894d8d409e8d582b4e086b26abca) Test: m test-art-host-gtest Test: testrunner.py --host --optimizing --speed-profile Test: boots. Test: atest BootImageProfileTest Bug: 148067697 Merged-In: Idd5f709bdc0ab4a3c7480d69d1dfac72d6e818fc Change-Id: I99b314c3de4e4bc0c515b86336ecbb283107ee38
2021-06-02Avoid race on Thread::tlsPtr_::top_handle_scope.Vladimir Marko
Require mutator lock for that field and update tests to hold the mutator lock when needed. This prevents GC thread that executes a thread roots flip on behalf of suspended threads from racing against construction or destruction of handle scopes by those threads and possibly seeing invalid values. (cherry picked from commit 1d326f94a3fdd6292ccdf0022cedfb2a2b8acfee) Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 189439174 Merged-In: I268a0ef6e5aa838347956febca0d3b6e02fe3ae5 Change-Id: If4cdcf4a488e77cb5aa7748de7c77c49f04388b0
2021-05-26dex2oat: Abort app compilation without boot image.Vladimir Marko
Also avoid crash in GraphChecker for bad instructions that throw into catch block but do not have an environment. And DCHECK() that java_lang_Double_doubleToRawLongBits and java_lang_Float_floatToRawIntBits are intrinsics. (cherry picked from commit d42902692d1fbb101a3c60ba314df69005da9c83) Test: New test Dex2oatTest.MissingBootImageTest. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 188684102 Merged-In: I13ec2ee8a7968c0a5652aa67ec6291d07a986c80 Change-Id: I531b87c25e937f8c5f7d471cb7878e086e9662b5
2021-05-24Fix scheduler's `FieldAccessHeapLocation()`.Vladimir Marko
Use the correct target for predicated get. Also remove an always-false condition from LSE. (cherry picked from commit 642c8f6e69929f46a1a52583cb55b68d83828a02) Test: m Bug: 188188275 Bug: 188847019 Merged-In: I731e181c8c0d812120dc4fad0c011158053fa7a8 Change-Id: I39152f60d58039077068fc4a085dc2bbc4579fb7
2021-05-24Fix ReplacementOrValue() for Partial LSE.Vladimir Marko
Also fix a bad DCHECK() in `FindSubstiute()` and fix the HeapLocationCollector::VisitPredicatedInstanceFieldGet() to use the correct input. (cherry picked from commit 06fb7fa55cca3210f38c92ac7cc7ad525ff30c83) Test: New tests in load_store_elimination_test. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 188188275 Merged-In: Ifdace5ddbe1777af2109189013c0557f226d9cc9 Change-Id: If95e67fa0d4e54e6b61f37208986a83bffb9d750
2021-05-14Reland "Devirtualize to HInvokeStaticOrDirect."Nicolas Geoffray
This reverts commit 39d4df62d4e2606073d05cc363370db825ad7b9f. Reason for revert: fix JIT-zygote issue. Test: JIT zygote boots. Change-Id: I895ad8e59e472fb662ca9bc5394c2fd9c6babc74
2021-05-13Fix array location aliasing checks in LSE.Vladimir Marko
Test: New tests in load_store_elimination_test. Test: New test in 539-checker-lse. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 187487955 Change-Id: Iff66d5406cf1b36c3bebbce1d48117f83bb50553
2021-05-07Revert "Devirtualize to HInvokeStaticOrDirect."Nicolas Geoffray
This reverts commit 5024ddfd125b5c3b59d7f359ae33cf7f0255b048. Bug: 187408838 Reason for revert: b/187408838 Change-Id: If74f5ddbacc73296f66c55762e2a8d1ec2cd1f19
2021-05-06Devirtualize to HInvokeStaticOrDirect.Nicolas Geoffray
When we statically know the target method, devirtualize an HInvokeInterface or an HInvokeVirtual to a HInvokeStaticOrDirect. Test: test.py Bug: 182538502 Change-Id: Ie3a58603cde300fca9ca4972d4dfbbd20918f5ba
2021-05-04Fix partial LSE using removed load as Phi input.Vladimir Marko
Test: New test in load_store_elimination_test.cc . Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 183897743 Change-Id: I4ddf1657b5b9240c229016a3671a74b0582ac30d
2021-04-30Fix gtests with mini-debug-info enabled by default.David Srbecky
Ensure we can generate mini-debug-info if it is enabled by default. The tests don't explicitly generate the info on background thread. Test: test.py -g Change-Id: If3cf9a067ce683f728d553394e1407beeadae670
2021-04-30Improve simplifier slightlyAlex Light
It's possible thanks to the dead-code-elimination and other passes to end up with a PredicatedInstanceFieldGet that either has a null or a 'never-null' target value. We can simplify this down to either the default value or a normal ifield-get respectively. Test: ./test.py --host Change-Id: I92d9ff159a7b30294d29dbf4349d201dc654f0e1
2021-04-29Reland "Refactor code in inliner."Nicolas Geoffray
This reverts commit aa1b711a40bfe92785f52bff9700dc516eba1d09. Reason for revert: Fix wrong method being recorded as CHA dependency. Change-Id: Ic8ed84979b4cd67e49b96166792729b3b586cc25
2021-04-29Revert "Refactor code in inliner."Winson Chung
This reverts commit 921525030301fd4b8f6bb83aa6b20160d802e689. Reason for revert: Potential cause of b/186637642, b/186637642 Change-Id: Ia6f5cb742a068f148e290071cb0675648b22ec86
2021-04-28Refactor code in inliner.Nicolas Geoffray
- Code refactoring to dissociate CHA attempts and devirtualization attemps - Only devirtualize (currently invoke-interface -> invoke-virtual) when the target can be statically resolved. The benefits for CHA and inline caches are less clear. Test: test.py Change-Id: I2d41cef8143ab1ce66b2c2e149674eaf228d15a3
2021-04-28Remove RETURN_VOID_NO_BARRIER byte-code.David Srbecky
Unused and obsolete quickened byte-code. Bug: 170086509 Test: test.py -b --host --64 Change-Id: I1e917c189da7bf64418412522676dc6b081d5c0b
2021-04-26Fix issue with Partial LSE and casts/instanceofAlex Light
If PartialLSE encounters an instanceof or check-cast before the escapes it could not correctly handle it. Due to how java language code is typically developed and compiled this is generally not a problem but could lead to incorrect codegen on release builds or DCHECK failures on debug builds. This fixes the issues by (1) causing partial LSE to consider check-cast and instance-ofs to be escaping. This also updates the instruction simplifier to be much more aggressive in removing instance-of and check-casts. Test: ./test.py --host Bug: 186041085 Change-Id: Ia513c4210a87a0dfa92f10adc530e17ee631d006
2021-04-23Clean up Handle<> comparison with null.Vladimir Marko
These operators do not need the mutator lock. Test: buildbot-build.sh Change-Id: I48f51853f1b3c2e56463140f23777ad26d8122f2
2021-04-20Move intrinsic recognition logic in inliner.Nicolas Geoffray
The previous place `TryInlineAndReplace` did not cover all cases we try inlining. Because we always want to intrinsify, move the code to `TryBuildAndInline`, which is always called. Test: test.py Test: 638-checker-inline-cache-intrinsic Change-Id: Id74b664f6139c00224473af6c72cb6fd858aec4c
2021-04-13Fix inliner instruction/register limitsTim Murray
Because instruction/register usage was compared with >=, the limits were actually one lower than the constants. This prevented trivial getters/setters from being inlined because they were 3 SSA instructions. Test: build + boot + presubmit Bug: 185143864 Change-Id: Ie27c9163efe79bb7392c881c0165ab1164323a2c
2021-04-12Add a test and CHECKs around the combination of CHA and default methods.Nicolas Geoffray
Test: 823-cha-inlining Bug: 182538502 Change-Id: Ie3e0014804216802af0addf13751a8f89adbfdfa
2021-04-08Fix issue with propagating partial valuesAlex Light
We would incorrectly not propagate or calculate partial read values sometimes in the presence of loops. This fixes that issue by correctly interpreting merged-unknowns as being phis when before escapes and propagating uses of removed reads when needed. Test: ./test.py --host Test: ./art/tools/compile-jar.py --dex2oat `which dex2oatd64` --profile-line 'HSLcom/android/textclassifier/common/statsd/GenerateLinksLogger;->logGenerateLinks(Ljava/lang/CharSequence;Landroid/view/textclassifier/TextLinks;Ljava/lang/String;JLcom/google/common/base/Optional;Lcom/google/common/base/Optional;)V' --arch arm64 ~/GoogleExtServices.apk -j1 --runtime-arg -verbose:compiler --dump-stats Bug: 183554067 Change-Id: I7f6e99934237174922ef2da2b77092e74cfb6a77
2021-03-31Handle predicated-gets with default valuesAlex Light
Due to an oversight the default-value of a PredicatedGet did not support being a Default value. This fixes that oversight. Test: ./art/tools/compile-jar.py --profile-line 'HSLe/k/a/g/i;->i(Le/k/a/g/d;Ljava/io/OutputStream;)V' --arch arm64 ~/no.nrk.mobil.radio_10922_base_split.apk --compiler-filter=speed-profile --dump-stats -j1 --force-allow-oj-inlines Test: LoadStoreEliminationTest.PredicatedLoadDefaultValue Bug: 183898383 Change-Id: I11bccddb0b5a5c2e958690864ff2d4449a9f2fad
2021-03-30Fix simplifier issue with predicated ifield getAlex Light
In cases where all targets of a HPredicatedInstanceFieldGet instruction are known to not be null the simplifier would attempt to replace the default value with a null instruction. This would cause a null-pointer dereference. Correct the simplifier to handle this case correctly. Moved some LSE test helper functions to CommonCompilerTestHelper to avoid duplicating code. Fixed an incorrect (though until now unused) constructor for HPredicatatedInstanceFieldGet (the default value and target we swapped). Test: ./test.py --host Test: ./art/tools/compile_jars.py --profile-file bad-compile.txt ~/imgur.apk Bug: 183942773 Change-Id: I66f4ce37d768d5e457047a3f80bd4cb9aa4546a3
2021-03-27Remove QUICK bytecodes.David Srbecky
Remove the deprecated unofficial (not part of the spec) bytecodes. This frees the 16 bytecodes for future use. Bug: 170086509 Test: m test-art-host-gtest Test: test.py -r -b --host Change-Id: I9f6d8a2c21b88f883c8fdc1eb67b24620f313d56
2021-03-23Fix IC resolution DCHECKAlex Light
We were incorrectly asserting that all inline-cache entries referring to valid classes are resolvable. This is only true as long as the profiles stay perfectly in sync with the framework code, which is not likely to always be the case since we update profiles rather infrequently. This simply loosens the dcheck to return null on unresolvable methods when run in AOT mode. Test: m droid Bug: 168941430 Bug: 183514504 Change-Id: Id863b65ccead1a40643c4538df4f5215a18e39ad
2021-03-23Remove Vdex::GetQuickenedInfoOf and all its users.Nicolas Geoffray
Test: test.py Bug: 170086509 Change-Id: I1e1a4abf71245c0fd37f951c9af85f62feba18ca
2021-03-18Allocate LSEVisitor on the arena stack.Vladimir Marko
Use a simple wrapper to allocate the LSEVisitor on the arena stack. This allows adding additional members to the class without running into stack frame size errors with clang. Make the pre-allocated buffer for `store_records_` a member of LSEVisitor as originally intended. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 181943478 Change-Id: I88b8ca5f9c765cc26e884e9f29cb2c870c799e13
2021-03-15Store inline caches in StackHandleScope<> in HInliner.Vladimir Marko
Avoid a managed heap allocation. Test: m test-art-host-gtest Test: testrunner.py --host Bug: 181943478 Change-Id: I7ce65c93ad2f59490dbfa2aaccba98b6ca1fd585
2021-03-15Rewrite hot method info retrieval.Vladimir Marko
Remove the `ProfileCompilationInfo::GetHotMethodInfo()` API and provide another API to tie profile indexes to dex files for inline caches that avoids unnecessary heap allocations. And look up only dex caches for the referenced dex files when getting AOT inline caches in HInliner. Test: m test-art-host-gtest Test: testrunner.py --host --optimzing Test: boots. Bug: 181943478 Change-Id: I124ac4870b0f483c1f0422c841c4ff69fc95b7e0
2021-03-15Avoid CHA trying to inline the default conflict methodv-qianliguo
Changing to invoke-virtual will cause Artmethod to be null exception since default conflict method is not in any vtable Bug:182496372 Signed-off-by: v-qianliguo <v-qianliguo@xiaomi.com> Change-Id: I61f08bb13fce1270ac48cd3cc0c6f3d216e04990
2021-03-11Preallocate a HashMap buffer in LSE.Vladimir Marko
Add more HashSet<> constuctors with the allocator argument. Inherit HashSet<> constructors in HashMap<>. Use a pre-allocated buffer with size 16 to avoid allocating a large one (kMinBuckets = 1000) on first use. With the default max load factor 0.7, this pre-allocated buffer is sufficient for all methods with up to 11 stores. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 181943478 Change-Id: I7862b98ec9ec3ddb34693fd956fea75138d35e02
2021-03-05Add code size to CodeInfo.David Srbecky
This is in preparation of removing it from OatQuickMethodHeader. Bug: 123510633 Test: m test-art-host-gtest Test: ./art/test.py -b -r --host Change-Id: I5c5adb4c040e329b81c1393aa1b80ee017729c8a
2021-02-23Fix implicit null checks for InvokeVirtual.Vladimir Marko
Fix braino from https://android-review.googlesource.com/1570261 . Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 172573708 Bug: 180527726 Change-Id: I430d3e7034a3f600674763986a324d80903aaf6c
2021-02-10Add Math.multiplyHigh intrinsicNikita Iashchenko
Test: ./art/test/testrunner/testrunner.py --target --optimizing --64 -t 082-inline-execute Test: ./art/test/testrunner/testrunner.py --host --optimizing --64 -t 082-inline-execute Change-Id: I4b6cafa8b9e513eca7c5c139440024d87a7ef758
2021-02-05Fix Reference.refersTo() intrinsic for heap poisoning.Vladimir Marko
Test: ART_HEAP_POISONING=true m test-art-host-gtest Test: ART_HEAP_POISONING=true testrunner.py --host --optimizing Test: run-gtests.sh # with ART_HEAP_POISONING=true Test: testrunner.py --target --optimizing # with ART_HEAP_POISONING=true Bug: 172573708 Change-Id: I2e09b49813bdad40c1e18bf5681ba2094c5a40c1
2021-02-05ARM64: Support SVE VL other than 128-bit.Artem Serov
Arm SVE register size is not fixed and can be a multiple of 128 bits. To support that the patch removes explicit assumptions on the SIMD register size to be 128 bit from the vectorizer and code generators and enables configurable SVE vector length autovectorization, e.g. extends SIMD register save/restore routines. Test: art SIMD tests on VIXL simulator. Test: art tests on FVP (steps in test/README.arm_fvp.md) with FVP arg: -C SVE.ScalableVectorExtension.veclen=[2,4] (SVE vector [128,256] bits wide) Change-Id: Icb46e7eb17f21d3bd38b16dd50f735c29b316427
2021-02-05Implement Reference.refersTo() intrinsic.Vladimir Marko
Test: Added tests to 122-npe and 160-read-barrier-stress Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: run-gtests.sh Test: testrunner.py --target --optimizing Bug: 172573708 Change-Id: I8342510565289058df218d3249ffac1eb993ca4f
2021-02-04ART: Implement predicated SIMD vectorization.Artem Serov
This CL brings support for predicated execution for auto-vectorizer and implements arm64 SVE vector backend. This version passes all the VIXL simulator-runnable tests in SVE mode with checker off (as all VecOp CHECKs need to be adjusted for an extra input) and all tests in NEON mode. Test: art SIMD tests on VIXL simulator. Test: art tests on FVP (steps in test/README.arm_fvp.md) Change-Id: Ib78bde31a15e6713d875d6668ad4458f5519605f
2021-02-03Use mmap for compiled code for gtest.Vladimir Marko
Avoid executing code in memory allocated with malloc() as pointers to that memory can be tagged which interferes with managed stack walk. Test: m test-art-host-gtest. Bug: 177816575 Change-Id: Id376091f82d5686adf3ab18d2980a42e78de57ce
2021-01-28Add comment to art_jni_trampoline.Yabin Cui
Bug: 175226454 Test: N/A Change-Id: Ia83c3afa69d7e1efb9685cfaa5401242712fa02a
2021-01-28Avoid potential null dereferenceAlex Light
In a log statement we were dereferencing a pointer that could potentially be null. Add support for safely dereferencing a pointer for ostreams. Test: ./test.py --host Bug: 67037140 Change-Id: Ibe04811883575902a9b2fe8a064f18de2b2cea7b
2021-01-25Revert^4 "Partial Load Store Elimination"Alex Light
This reverts commit 791df7a161ecfa28eb69862a4bc285282463b960. This unreverts commit fc1ce4e8be0d977e3d41699f5ec746d68f63c024. This unreverts commit b8686ce4c93eba7192ed7ef89e7ffd9f3aa6cd07. We incorrectly failed to include PredicatedInstanceFieldGet in a few conditions, including a DCHECK. This caused tests to fail under the read-barrier-table-lookup configuration. Reason for revert: Fixed 2 incorrect checks Bug: 67037140 Test: ./art/test/testrunner/run_build_test_target.py -j70 art-gtest-read-barrier-table-lookup Change-Id: I32b01b29fb32077fb5074e7c77a0226bd1fcaab4
2021-01-24Revert "Revert^2 "Partial Load Store Elimination""Nicolas Geoffray
This reverts commit fc1ce4e8be0d977e3d41699f5ec746d68f63c024. Bug: 67037140 Reason for revert: Fails read-barrier-table-lookup tests. Change-Id: I373867c728789bc14a4370b93a045481167d5f76
2021-01-22Revert^2 "Partial Load Store Elimination"Alex Light
This reverts commit 47ac53100303e7e864b7f6d65f17b23088ccf1d6. There was a bug in LSE where we would incorrectly record the shadow$_monitor_ field as not having a default initial value. This caused partial LSE to be unable to compile the Object.identityHashCode function, causing crashes. This issue was fixed in a parent CL. Also updated all Offsets in LSE_test to be outside of the object header regardless of configuration. Test: ./test.py --host Bug: 67037140 Reason for revert: Fixed issue with shadow$_monitor_ field and offsets Change-Id: I4fb2afff4d410da818db38ed833927dfc0f6be33
2021-01-22Enable LSE of shadow$_monitor_ fieldAlex Light
The shadow$_monitor_ field is an object header field. Unlike shadow_klass this field has regular default initialization and we should record this in LSE. This won't have any actual effect generally since the only (java) use of the field is in Object.identityHashCode and the object always escapes if the value is 0. Still this simplifies partial LSE since we will not need to special case this field. Test: ./test.py --host Bug: 67037140 Change-Id: I68a8e4a4d84d42cd206e0dce37cefb19fd099b20