summaryrefslogtreecommitdiff
path: root/compiler/optimizing
Commit message (Collapse)AuthorAgeFilesLines
* Temporarily disable partial LSE.Nicolas Geoffray2021-09-141-1/+1
| | | | | | | | | | | | | 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
* Partial LSE: handle all kinds of infinite loops.Nicolas Geoffray2021-09-131-8/+5
| | | | | | | | | | | 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)
* Uncouple ART gtests from the ART APEX.Roland Levillain2021-07-121-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Reduce Partial LSE memory usage.Vladimir Marko2021-06-037-108/+85
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Rewrite profile file format.Vladimir Marko2021-06-021-48/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Avoid race on Thread::tlsPtr_::top_handle_scope.Vladimir Marko2021-06-023-64/+128
| | | | | | | | | | | | | | | | 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
* dex2oat: Abort app compilation without boot image.Vladimir Marko2021-05-262-1/+7
| | | | | | | | | | | | | | | | 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
* Fix scheduler's `FieldAccessHeapLocation()`.Vladimir Marko2021-05-242-4/+5
| | | | | | | | | | | | | | 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
* Fix ReplacementOrValue() for Partial LSE.Vladimir Marko2021-05-243-8/+405
| | | | | | | | | | | | | | | 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
* Reland "Devirtualize to HInvokeStaticOrDirect."Nicolas Geoffray2021-05-141-24/+35
| | | | | | | | | | This reverts commit 39d4df62d4e2606073d05cc363370db825ad7b9f. Reason for revert: fix JIT-zygote issue. Test: JIT zygote boots. Change-Id: I895ad8e59e472fb662ca9bc5394c2fd9c6babc74
* Fix array location aliasing checks in LSE.Vladimir Marko2021-05-136-48/+284
| | | | | | | | | 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
* Revert "Devirtualize to HInvokeStaticOrDirect."Nicolas Geoffray2021-05-071-27/+24
| | | | | | | | | | This reverts commit 5024ddfd125b5c3b59d7f359ae33cf7f0255b048. Bug: 187408838 Reason for revert: b/187408838 Change-Id: If74f5ddbacc73296f66c55762e2a8d1ec2cd1f19
* Devirtualize to HInvokeStaticOrDirect.Nicolas Geoffray2021-05-061-24/+27
| | | | | | | | | When we statically know the target method, devirtualize an HInvokeInterface or an HInvokeVirtual to a HInvokeStaticOrDirect. Test: test.py Bug: 182538502 Change-Id: Ie3a58603cde300fca9ca4972d4dfbbd20918f5ba
* Fix partial LSE using removed load as Phi input.Vladimir Marko2021-05-042-1/+197
| | | | | | | | 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
* Fix gtests with mini-debug-info enabled by default.David Srbecky2021-04-302-4/+4
| | | | | | | | 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
* Improve simplifier slightlyAlex Light2021-04-301-30/+31
| | | | | | | | | | 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
* Reland "Refactor code in inliner."Nicolas Geoffray2021-04-293-145/+160
| | | | | | | | This reverts commit aa1b711a40bfe92785f52bff9700dc516eba1d09. Reason for revert: Fix wrong method being recorded as CHA dependency. Change-Id: Ic8ed84979b4cd67e49b96166792729b3b586cc25
* Revert "Refactor code in inliner."Winson Chung2021-04-293-160/+145
| | | | | | | | This reverts commit 921525030301fd4b8f6bb83aa6b20160d802e689. Reason for revert: Potential cause of b/186637642, b/186637642 Change-Id: Ia6f5cb742a068f148e290071cb0675648b22ec86
* Refactor code in inliner.Nicolas Geoffray2021-04-283-145/+160
| | | | | | | | | | | - 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
* Remove RETURN_VOID_NO_BARRIER byte-code.David Srbecky2021-04-282-3/+1
| | | | | | | | Unused and obsolete quickened byte-code. Bug: 170086509 Test: test.py -b --host --64 Change-Id: I1e917c189da7bf64418412522676dc6b081d5c0b
* Fix issue with Partial LSE and casts/instanceofAlex Light2021-04-265-29/+476
| | | | | | | | | | | | | | | 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
* Clean up Handle<> comparison with null.Vladimir Marko2021-04-231-2/+2
| | | | | | | These operators do not need the mutator lock. Test: buildbot-build.sh Change-Id: I48f51853f1b3c2e56463140f23777ad26d8122f2
* Move intrinsic recognition logic in inliner.Nicolas Geoffray2021-04-201-56/+41
| | | | | | | | | | 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
* Fix inliner instruction/register limitsTim Murray2021-04-131-3/+3
| | | | | | | | | | | 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
* Add a test and CHECKs around the combination of CHA and default methods.Nicolas Geoffray2021-04-121-18/+19
| | | | | | Test: 823-cha-inlining Bug: 182538502 Change-Id: Ie3e0014804216802af0addf13751a8f89adbfdfa
* Fix issue with propagating partial valuesAlex Light2021-04-082-5/+338
| | | | | | | | | | | | 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
* Handle predicated-gets with default valuesAlex Light2021-03-312-1/+88
| | | | | | | | | | 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
* Fix simplifier issue with predicated ifield getAlex Light2021-03-305-383/+721
| | | | | | | | | | | | | | | | | | | | 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
* Remove QUICK bytecodes.David Srbecky2021-03-271-29/+2
| | | | | | | | | | 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
* Fix IC resolution DCHECKAlex Light2021-03-231-1/+5
| | | | | | | | | | | | | | 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
* Remove Vdex::GetQuickenedInfoOf and all its users.Nicolas Geoffray2021-03-236-111/+35
| | | | | | Test: test.py Bug: 170086509 Change-Id: I1e1a4abf71245c0fd37f951c9af85f62feba18ca
* Allocate LSEVisitor on the arena stack.Vladimir Marko2021-03-181-4/+23
| | | | | | | | | | | | | | 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
* Store inline caches in StackHandleScope<> in HInliner.Vladimir Marko2021-03-152-99/+58
| | | | | | | | | Avoid a managed heap allocation. Test: m test-art-host-gtest Test: testrunner.py --host Bug: 181943478 Change-Id: I7ce65c93ad2f59490dbfa2aaccba98b6ca1fd585
* Rewrite hot method info retrieval.Vladimir Marko2021-03-152-48/+35
| | | | | | | | | | | | | | | 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
* Avoid CHA trying to inline the default conflict methodv-qianliguo2021-03-151-0/+7
| | | | | | | | | 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
* Preallocate a HashMap buffer in LSE.Vladimir Marko2021-03-111-1/+6
| | | | | | | | | | | | | | | 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
* Add code size to CodeInfo.David Srbecky2021-03-055-18/+38
| | | | | | | | | 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
* Fix implicit null checks for InvokeVirtual.Vladimir Marko2021-02-231-0/+2
| | | | | | | | | | | 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
* Add Math.multiplyHigh intrinsicNikita Iashchenko2021-02-104-0/+40
| | | | | | 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
* Fix Reference.refersTo() intrinsic for heap poisoning.Vladimir Marko2021-02-054-0/+4
| | | | | | | | | 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
* ARM64: Support SVE VL other than 128-bit.Artem Serov2021-02-057-177/+210
| | | | | | | | | | | | | | | | | | 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
* Implement Reference.refersTo() intrinsic.Vladimir Marko2021-02-058-4/+260
| | | | | | | | | | 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
* ART: Implement predicated SIMD vectorization.Artem Serov2021-02-0412-695/+746
| | | | | | | | | | | | | | 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
* Use mmap for compiled code for gtest.Vladimir Marko2021-02-031-2/+10
| | | | | | | | | | 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
* Add comment to art_jni_trampoline.Yabin Cui2021-01-281-0/+1
| | | | | | Bug: 175226454 Test: N/A Change-Id: Ia83c3afa69d7e1efb9685cfaa5401242712fa02a
* Avoid potential null dereferenceAlex Light2021-01-281-1/+1
| | | | | | | | | | 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
* Revert^4 "Partial Load Store Elimination"Alex Light2021-01-2527-1694/+8334
| | | | | | | | | | | | | | | | | 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
* Revert "Revert^2 "Partial Load Store Elimination""Nicolas Geoffray2021-01-2426-8330/+1693
| | | | | | | | | | This reverts commit fc1ce4e8be0d977e3d41699f5ec746d68f63c024. Bug: 67037140 Reason for revert: Fails read-barrier-table-lookup tests. Change-Id: I373867c728789bc14a4370b93a045481167d5f76
* Revert^2 "Partial Load Store Elimination"Alex Light2021-01-2226-1693/+8330
| | | | | | | | | | | | | | | | | | 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
* Enable LSE of shadow$_monitor_ fieldAlex Light2021-01-222-1/+83
| | | | | | | | | | | | | 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