| Age | Commit message (Collapse) | Author |
|
In http://r.android.com/2952876 we changed the RTP iterator to
HInstructionIterator, but we want the HandleChanges one.
Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing
Change-Id: I1e9e9cc84d45aa34c24a805f16798e86fd123fc3
|
|
Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing
Change-Id: I375edc2db3979e7080c0b9fe784fd2b5e2cfb4e4
|
|
Currently handles 50% of methods by supporting methods that:
- don't branch
- don't have try/catch
- don't have float/double
- <= 8 registers
- opcodes are
const/invokes/iget/iput/const-string/new-instance/checkcast.
Cost of compilation is 10 times less than current baseline compiler.
Performance of generated code: jit-baseline-cc configuration shows no
impact on go/lem
Test: test.py
Change-Id: I8c99b8a8a7552c09c900c5c3e831e8897aef73e5
|
|
Initialize the value properly, to not rely on an optimization to do it.
Helps investigating performance when disabling optimizations in baseline
compiler.
Test: test.py
Change-Id: If3c5d7cd85dd905a10d29081f571c78baae2888c
|
|
Mark `H{Unary,Binary}Operation::CanBeMoved()` as `final`
and remove unnecessary overrides.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: Ic375513e942b18c3244017f19a020e5bad7901cf
|
|
To do so update:
* TryReplaceStringBuilderAppend
* Code paths relevant to previously InvokeVirtual that are now
InvokeStaticOrDirect
* checker tests.
Bug: 369206455
Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing
Change-Id: I4d40980e416f3130d3c344c5f07b7b331deb5c97
|
|
Support all condition types inside the condition when performing
diamond loop auto-vectorization. This allows diamond loop
auto-vectorization to be performed on a greater variety of loops.
To support this change, new vector condition nodes are added to
mirror the scalar condition nodes.
Also add a new gtest class to test whether predicated vectorization
can be performed on different combinations of condition types and
data types.
Authors: Chris Jones <christopher.jones@arm.com>,
Konstantin Baladurin <konstantin.baladurin@arm.com>
Test: export ART_FORCE_TRY_PREDICATED_SIMD=true && \
art/test.py --target --optimizing
Test: art/test.py --target --host --optimizing
Test: 661-checker-simd-cf-loops
Test: art/test.py --gtest art_compiler_tests
Change-Id: Ic9c925f1a58ada13d9031de3b445dcd4f77764b7
|
|
This should improve app startup as we can skip the target
method resolution on the first call. For `invoke-direct` we
should never go to the resolution trampoline for app image
methods and for `invoke-static` we go to the trampoline only
if the class is not yet visibly initialized and in that case
we still save time as the target method is already known.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing --speed-profile
Test: run-gtests.sh
Test: testrunner.py --target --optimizing --speed-profile
Bug: 38313278
Change-Id: I1fea5485264b433fe642c9d0092a5411813eb996
|
|
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I4989657309b46c1e8fec3e9eb4024f1fc329fbe0
|
|
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: Ibf7d27af872bf0bc9a91d1698d66047947b513f3
|
|
Due to the dedplication of constants, the dex PC can be
useless or even misleading.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I501abc3cca920415b3118e92b06a01b173b2406a
|
|
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I0c2f310606bb03f264038534c23f15dd0fee5662
|
|
This reverts commit 434a327234f74eed3ef4072314d2e2bdb73e4dda.
Reason for revert: Relanding with no change. The regressions
that were the reason for the revert may reappear. However,
these regressions are probably caused by subtle effects that
are not directly related to this change. For example, a code
size improvement can regress performance simply by moving
the start of a loop from an aligned address to an unaligned
address, or by splitting a loop across two cache lines.
Bug: 358519867
Bug: 359722268
Change-Id: I997b8a4219418f79b3a5fc4e7e50817911f0a737
|
|
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 181943478
Change-Id: Ie05d4001e411a669e11b8edda375414e5da52ae2
|
|
Bug: 297147201
Test: ./art/test/testrunner/testrunner.py --host --64 --optimizing -b
Test: ./art/test.py --host -g
Change-Id: Ia49285c116e4abfc3da2d78495f85d9131f111b5
|
|
This reverts commit 744830cb242c82c4637e6fb303b36d0371c84979.
Reason for revert: updated CHECKer test to use rolw instead of rol.
Change-Id: I50e34c6ac69488a9c083f04c6382df4302e8e7d3
|
|
This reverts commit 39927bc359ccbe65371213c4559126b05dcfb117.
Reason for revert: Failure on bot with:
error: Statement could not be matched starting from line 1089612
TestRotate.java:95: rol {{a\d+}}, {{a\d+}}, {{a\d+}}
ISA_FEATURES = {'rv64gcv_zba_zbb_zbs': True}
READ_BARRIER_TYPE = baker
567-checker-builder-intrinsics FAILED: [run-test:1074] CFG checker failed
$ ssh -q -F /b/s/w/ir/cache/builder/art/test/testrunner/ssh_config -p 10001 ubuntu@localhost "rm -rf /home/ubuntu/art-test-chroot/data/run-test/test-343039"
567-checker-builder-intrinsics files deleted from host and from target
----------
test-art-target-run-test-ndebug-prebuild-optimizing-no-relocate-ntrace-cms-checkjni-picimage-ndebuggable-no-jvmti-567-checker-builder-intrinsics64
Change-Id: Ic1fd87c331c9eba315af6c98c3ad393766327417
|
|
Add new IR node Rol (rotate left). This allows to generate 1 (one)
risc-v instruction from Integer(Long).rotateLeft intrinsic instead of 2
instructions (Ror+Neg).
Fix InstructionBuilder:
build Rol from rotateLeft instead of Ror+Neg.
Add unfolding of Rol node in InstructionSimplifier(Arm, Arm64 and X86
Int64 type) to Neg+Ror.
By compiling with dex2oat all the methods of applications below I got:
in Facebook 1 Ror+Neg pattern,
in Minecraft 5 Ror+Neg patterns.
Test: art/test/testrunner/testrunner.py --target --64 --ndebug --optimizing
Change-Id: Ic28610c6fab4f66386f2fbc0f7223ef2c0e644b6
|
|
Bug: 297147201
Test: ./art/test/testrunner/testrunner.py --host --64 -b --optimizing
Change-Id: Ie89d310633339b785de5d9f3daf653abfbff875c
|
|
... which targets invoke-virtual methods.
New entrypoint changes deliverException's offset, hence arm test
change.
Bug: 297147201
Test: ./art/test/testrunner/testrunner.py --host --64 -b --optimizing
Test: ./art/test.py --host -g
Change-Id: I636fc60c088bfdf9b695c92de47f1c539e3956f1
|
|
Add tests for the cases where the LSE correctly inserts the
required type conversion instructions as needed, as well as
tests for currently broken cases. The latter are guarded by
`GTEST_SKIP()` until we fix them in a separate change.
Test: m test-art-host-gtest
Bug: 341476044
Change-Id: Id6002bc31cef542564b84258defcab45b06e6445
|
|
This reverts commit 3e75615ad25b6af1842b194e78b429b0f585b46a.
Reason for revert: Regressed some micro-benchmarks, see bug
359722268.
Bug: 358519867
Bug: 359722268
Change-Id: I207cc78c88193564e90c98eda2c96a5ba354a588
|
|
Leave condition construction in the `HGraph` but move the
rest of the condition simplification code to the simplifier
where it belongs.
Also clean up simplifier tests and a few other gtests. Note
that `SuperblockClonerTest.IndividualInstrCloner` now clones
an additional `HGoto` from the entry block.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I73ee8c227c1c100ac7eb9d4a3813c61ad928b6dd
|
|
This reverts commit 275cf7423efdb36e441b7bceb2e678944f8fa34b.
Reason for revert: Fix HEquals and HNotEquals cases
Change-Id: I47559e0b0d6625370e392119fd005bc10167aa87
|
|
This reverts commit 7496a81f4298257a5c6ce25271873b0c12e69f96.
Reason for revert: Broke some builds because of wrong
handling of HCompare(unsigned)+{HEqual,HNotEqual}.
Change-Id: Ic233740c3997d449777207d15243c8a4786df238
|
|
Support unsigned comparison in HCompare IR node
Implement instruction simplifier pass
Implement code generation of HCompare node for all
supported CPU targets
Performance gain on RISC-V:
Integer.compareUnsigned: +7.17%
Long.compareUnsigned: +7.17%
Add test cases to check simplification from HCompare to HCondition
Test: testrunner.py --target --64 --ndebug --optimizing
Change-Id: I591016e9aa4d094dc5e6f8b0128ac91f842cf25e
|
|
Determine the number of out vregs needed by invokes that
actually make a call, and by `HStringBuilderAppend`s.
This can yield smaller frame sizes of compiled methods when
some calls are inlined or fully intrinsified.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 358519867
Change-Id: I4930a9bd811b1de14658f5ef44e65eadea6a7961
|
|
This reverts commit b63adc919ba9a53f4fbad476356c702845821149.
Bringing back map from ArtMethod to code pointers.
Bug: 297147201
Test: CtsPerfettoTestCases
Test: ./art/test/testrunner/testrunner.py --host --64 --jit -b
Test: ./art/test/testrunner/testrunner.py --host --64 --jit --cms -b
Test: ./art/test/testrunner/testrunner.py --host --64 -b
Test: ./art/test.py --host -b
Change-Id: I6a1c50598ec878393edf8ef895274da79d4ab42d
|
|
This reverts commit d92a43f4310e2d634d6e8f24103fc1e27557d784.
Reason for revert: Failing 979-const-method-handle
https://ci.chromium.org/ui/p/art/builders/ci/host-x86_64-cms/10095/overview
Change-Id: I9b44d8cc66e98db074edfa90ce2ebab087e4b115
|
|
This reverts commit 69c9ea4f93a688ff50e08060be37bcfd3f3e9910.
Instead of storing reversed method_code_map_, now just keep
MethodType-s associated with a compiled code.
Increasing constant in 979/Main.java to trigger jit more reliably.
Bug: 297147201
Test: CtsPerfettoTestCases
Test: ./art/test/testrunner/testrunner.py --host --64 --jit -b
Test: ./art/test/testrunner/testrunner.py --host --64 -b
Test: ./art/test.py --host -b
Change-Id: I5ece80b63cd0d6dac2805c94649726dc62fe85db
|
|
Add BitwiseNegatedRight optimization for riscv:
And + Not -> AndNot
Or + Not -> OrNot
Xor + Not -> XorNot
By compiling facebook app using dex2oat I got:
169 cases of And + Not pattern
9 cases of Or + Not pattern
1 case of Xor + Not pattern.
Test: art/test/testrunner/testrunner.py --target --64 --ndebug --optimizing
Change-Id: Icc2db96770378005d2fb01176298a067e1a0e4ad
|
|
This reverts commit e5d59342bcfdb7f6d2e7d7b4a4ce8dd97ca39091.
With this CL, startup methods which do not reach the JIT threshold will just be marked as startup. The compiler driver now decides whether they should be compiled.
Reason for revert: Move the decision of compiling startup methods in the
compiler driver.
Change-Id: Iba8ac7f092e1ce0f412a579a93da57e82fdea4a6
|
|
This reverts commit 85ee2c92239fbafc22c2c47b22faa817a0a4b034.
Bug: 345267352
Reason for revert: b/345267352
Change-Id: If5b5057e86493aea97ed3ffd02d7069da0187ce7
|
|
Use the kAccPreviouslyWarm as soon as a method gets scheduled for
JITting. The profile saver now only uses that flag.
For benefiting simplicity, deprecate the -Xps-hot-startup-method-samples
flag (unused in the code base).
Test: second run after speed-profile contains less JITting
Bug: 333614471
Bug: 333701031
Change-Id: I2b846026f7d74d20ea761421b857db3834b3011c
|
|
Add app image relocations for classes in the app image,
similar to the existing relocations for boot image. This new
load kind lets the compiled code avoid the null check and
slow path.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing --speed-profile
Test: run-test.sh
Test: testrunner.py --target --optimizing --speed-profile
Bug: 38313278
Change-Id: Iffd76fe9ac6b95c37c2781fd6257e1d5cd0790d0
|
|
Treat app image objects similar to boot image objects and
avoid unnecessary read barriers for app image `HLoadClass`
and `HInstanceOf` checks with app image `HLoadClass` input.
Extend other optimizations to treat app image classes the
same way as boot image classes even though this remains
mostly dormant because we currently do not initialize app
image classes with class initializers; the experimental
flag `--initialize-app-image-classes` is false by default.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing --speed-profile
Bug: 38313278
Change-Id: I359dd8897f6d128213602f5731d40edace298ab8
|
|
Prepare for adding app image patches to the same section.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 38313278
Change-Id: Ib552f005b3a2859152d0de9fa6b2fcd48a0f3feb
|
|
This reverts commit 53ca944020bb86199f6f80d8594d5deb1b1d46dd.
Bug: 297147201
Reason for revert: Crash on bot
Change-Id: Ibf3b53a8fe67aa633686990881a96acb783af9a3
|
|
In aosp/2876518 JIT code made runtime calls.
Bug: 297147201
Test: ./art/test/testrunner/testrunner.py --host --64 --jit -b
Test: ./art/test/testrunner/testrunner.py --host --64 -b
Test: ./art/test.py --host -b
Change-Id: Ifdfd3ace9419b34f8079c9ec4b1b2de31cb50ef7
|
|
Create InstructionSimplifierRiscv64 optimization.
Replace Shl (1|2|3) and Add with Riscv64ShiftAdd IR instruction.
By compiling with dex2oat all the methods of applications below I got:
Facebook: 45 cases
TikTok: 26 cases
YouTube: 19 cases of the pattern.
Test: art/test/testrunner/testrunner.py --target --64 --ndebug --optimizing
Change-Id: I88903450d998983bb2a628942112d7518099c3f5
|
|
Move the `LOG(FATAL)` code to the `HUnaryOperation` and
`HBinaryOperation` classes to avoid duplication in derived
classes. For consistency, implement an unreachable function
`HUnaryOperation::Evaluate(HIntConstant*)` even though all
currently existing subclasses override it.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I908c494b125e370ce9fe253c97ebacdd54ed1d96
|
|
When clearing the NeedsTypeCheck flag in ArraySet instructions,
we can remove the environment as it is no longer needed.
Also add a check in GraphChecker that instructions have an
environment iff they need one.
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Change-Id: I698d9d88bc7c6c8569caf6397cbebf29b34585d5
|
|
This reverts commit 35a1479ab434257e9db629fda5f4ca96bfbef3fc.
Reason for revert: Disable failing test on debuggable
Change-Id: Icd012ac9e3b37c1187adf5e915ba7c1ffc415805
|
|
This reverts commit e872656585952f993eb84633a66e0aedcbdf52ac.
Reason for revert: Test failures
Change-Id: I05aadb695b87f661063ff87f63eb68048d16e050
|
|
Skip `HPhi::Accept()` and add functions to visit only Phis
or only non-Phi instructions.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 181943478
Change-Id: Iba0690ae70f46d6a2bafa9055b2ae5167e58a2f4
|
|
Investigating DCE I noticed that it was the 3rd most time consuming
optimization phase (Inliner, GVN, DCE) on local pprof profiles.
Inside RemoveDeadInstructions we ask IsDeadAndRemovable for every
instruction and Phi. We can speed it up by:
* Swap the order of IsDead and IsRemovable for earlier breaks with
e.g. LoadClass. LoadClass instructions are used by ClinitCheck
instructions (until very late in the graph). These instructions
are never going to be removed in DCE.
* Phi instructions always pass the IsRemovable check so we can
skip it.
Swapping the order improves RemoveDeadInstructions by ~20%, which
is DCE's most time consuming method. Overall, DCE improves by ~5%
and in my local trace now is the 4th most time consuming
optimization (LSE is now 3rd).
The Phi optimization didn't show up in my pprof profile. It may
improve apps with many Phi instructions.
Test: Locally compile and take a look at pprof profiles
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Change-Id: I59932a8d8d627fc71628e2255582f35282dd0b4e
|
|
If profiling doesn't benefit the method, switch a baseline compilation
into optimized.
Reduces the number of JIT compilations on the Sheets benchmark from
~3100 (2250 baseline, 850 optimized) to ~2750 (2250 baseline, 500
optimized).
Test: test.py
Change-Id: I94760481d130d2dc168152daa94429baf201f66e
|
|
This code is dead after Partial LSE removal.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 298176183
Change-Id: If67efa9d1df908232b6c2f32f3d2c64fb91759ae
|
|
This reverts commit 1ba3516e8c3e2b86c73084893dd297f468469181.
Reason for revert:
PS1 is reland as-is
PS2 has two related fixes (for RISC-V and arm64) taking into
account that when we store zero, we use a special register.
Bug: 301833859
Bug: 310755375
Bug: 260843353
Test: lunch cf_riscv64_wear-trunk_staging-userdebug && m
Test: lunch starnix_wear_yukawa-trunk_staging-userdebug && m
Change-Id: I5e69890fd56404ddde56ebc457179241363d9243
|
|
This reverts commit 1be176f5a78750e2f0e32470f8c83e3d1643954d.
Reason for revert: Potential cause of build breakage for cf_riscv64_wear-trunk_staging-userdebug build 11353124
Change-Id: I5db1c9fba1edd4ab1eef30e2b547bb9649af5c10
|