Age | Commit message (Collapse) | Author |
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
This reverts commit 39d4df62d4e2606073d05cc363370db825ad7b9f.
Reason for revert: fix JIT-zygote issue.
Test: JIT zygote boots.
Change-Id: I895ad8e59e472fb662ca9bc5394c2fd9c6babc74
|
|
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
|
|
This reverts commit 5024ddfd125b5c3b59d7f359ae33cf7f0255b048.
Bug: 187408838
Reason for revert: b/187408838
Change-Id: If74f5ddbacc73296f66c55762e2a8d1ec2cd1f19
|
|
When we statically know the target method, devirtualize an
HInvokeInterface or an HInvokeVirtual to a HInvokeStaticOrDirect.
Test: test.py
Bug: 182538502
Change-Id: Ie3a58603cde300fca9ca4972d4dfbbd20918f5ba
|
|
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
|
|
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
|
|
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
|
|
This reverts commit aa1b711a40bfe92785f52bff9700dc516eba1d09.
Reason for revert: Fix wrong method being recorded as CHA dependency.
Change-Id: Ic8ed84979b4cd67e49b96166792729b3b586cc25
|
|
This reverts commit 921525030301fd4b8f6bb83aa6b20160d802e689.
Reason for revert: Potential cause of b/186637642, b/186637642
Change-Id: Ia6f5cb742a068f148e290071cb0675648b22ec86
|
|
- 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
|
|
Unused and obsolete quickened byte-code.
Bug: 170086509
Test: test.py -b --host --64
Change-Id: I1e917c189da7bf64418412522676dc6b081d5c0b
|
|
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
|
|
These operators do not need the mutator lock.
Test: buildbot-build.sh
Change-Id: I48f51853f1b3c2e56463140f23777ad26d8122f2
|
|
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
|
|
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
|
|
Test: 823-cha-inlining
Bug: 182538502
Change-Id: Ie3e0014804216802af0addf13751a8f89adbfdfa
|
|
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
|
|
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
|
|
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 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
|
|
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
|
|
Test: test.py
Bug: 170086509
Change-Id: I1e1a4abf71245c0fd37f951c9af85f62feba18ca
|
|
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
|
|
Avoid a managed heap allocation.
Test: m test-art-host-gtest
Test: testrunner.py --host
Bug: 181943478
Change-Id: I7ce65c93ad2f59490dbfa2aaccba98b6ca1fd585
|
|
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
|
|
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
|
|
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
|
|
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 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
Bug: 175226454
Test: N/A
Change-Id: Ia83c3afa69d7e1efb9685cfaa5401242712fa02a
|
|
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
|
|
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
|
|
This reverts commit fc1ce4e8be0d977e3d41699f5ec746d68f63c024.
Bug: 67037140
Reason for revert: Fails read-barrier-table-lookup tests.
Change-Id: I373867c728789bc14a4370b93a045481167d5f76
|
|
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
|
|
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
|