| Age | Commit message (Collapse) | Author |
|
int[] pattern are now compiled differently
Test: m -j PRODUCT-aosp_arm64-eng core-oj
Change-Id: I0110d9d74c8c54610aff17173cdc09f20f6abf72
|
|
Fix erroneous usage of the inner method's access flags
while checking the class of the outer method. This allowed
erroneous elimination of a needed ClinitCheck when inlining.
Treat constructors the same way as static methods as the
instance allocation necessarily preceding the constructor
call performs the class initialization check.
The size of the aosp_taimen-userdebug prebuilts:
- before:
arm/boot*.oat: 20252196
arm64/boot*.oat: 24030776
oat/arm64/services.odex: 22406664
- after:
arm/boot*.oat: 20252092 (-0.1KiB)
arm64/boot*.oat: 24027024 (-3.7KiB)
oat/arm64/services.odex: 22402528 (-4.0KiB)
(Insignificant changes.)
Test: Add regression test to 174-escaping-instance-of-bad-class.
Test: Add optimization test to 551-checker-clinit.
Test: testrunner.py --jvm -t 174
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: Pixel 2 XL boots.
Test: m test-art-target-gtest
Test: testrunner.py --target --optimizing
Bug: 62478025
Change-Id: I591aca2c538d10cf6df1d38d59270af1de380b3e
|
|
We cannot generally elide ClinitCheck for superclasses
because of escaping instances of erroneous classes and
because a subclass can be successfully initialized while
the superclass is initializing and the subclass remains
initialized even when the superclass initializer throws.
However, for those superclasses that have trivial init,
i.e. that class and its superclasses (and superinterfaces
with default methods) initialize only their own static
fields using constant values, there is no chance to end
up in one of these weird situations and we can safely
eliminate the ClinitCheck.
The size of the aosp_taimen-userdebug prebuilts:
- before:
arm/boot*.oat: 16856928
arm64/boot*.oat: 19846592
oat/arm64/services.odex: 24662880
- after:
arm/boot*.oat: 16848696 (-8.0KiB, -0.05%)
arm64/boot*.oat: 19842320 (-4.2KiB, -0.02%)
oat/arm64/services.odex: 24629952 (-32.2KiB, -0.13%)
with minor changes to other app prebuilts.
Test: Improved 478-checker-clinit-check-pruning.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: Pixel 2 XL boots.
Test: testrunner.py --target --optimizing
Bug: 62478025
Change-Id: I865f567443f1b7f172e5e6559d8eb3232adb7833
|
|
To handle escaping instances of erroneous classes correctly,
we can omit the HClinitCheck only when using a class in the
static method of the very same class. Even for superclasses
we need to do the check. The new test exposes the cases
where we were previously diverging from the RI.
Also clean up the CompilerDriver by inlining one function
directly to the HInstructionBuild::IsInitialized(.) and
removing some related functions that are no longer used.
The size of the aosp_taimen-userdebug prebuilts:
- before:
arm/boot*.oat: 16891788
arm64/boot*.oat: 19815520
oat/arm64/services.odex: 20071624
- after:
arm/boot*.oat: 16949532 (+56.4KiB, +0.34%)
arm64/boot*.oat: 19889752 (+72.5KiB, +0.37%)
oat/arm64/services.odex: 20224328 (+149.1KiB, +0.76%)
with minor changes to other app prebuilts.
Note: Some of that could be reclaimed by reinstating the old
optimization for classes where no bytecode can be executed
during initialization (no <clinit> to execute in that class
or superclasses).
Test: 174-escaping-instance-of-bad-class
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: testrunner.py --jvm -t 174
Test: Pixel 2 XL boots.
Test: testrunner.py --target --optimizing
Bug: 62478025
Change-Id: I41f026ea7fecc615c06e87f3b6cb847de0ede8a6
|
|
Change-Id: I622a98b620e9d261cb654e2f5ab578bd8b3484b1
|