| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
| |
The code generators assume things that only the instruction
simplier ensures. So it has to be run last in case previous
optimiziations broke those assumptions.
bug:21865464
(cherry picked from commit b2bdfce7f805b00668a2521b1c939a0aafb2be49)
Change-Id: Ibf4384a911e400eb7586bbf6b4edd6351034cbd8
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Because the verifier does not check trivially dead instructions,
the compilers must prepare for bogus instructions. This change
fixes the case the arguments for an invoke do not match the
formal parameters.
bug:21865459
(cherry picked from commit 2e33525bd4eb892246b4c244c6d4ebf6c6d07501)
Change-Id: I392f86eafefde28263fe35a31f17b398ff8dfc24
|
|\ \ |
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The lower range of an array length instruction can
be changed by other instructions than HBoundsCheck,
like HNewArray.
bug:21862741
(cherry picked from commit 8d82a0c2b2b12f259ccb357d3b1e699c68ad0400)
Change-Id: I1bb1a4f4c6673509dd3fb5184c32992bed876250
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
| |
If it has been DCE, we should create a new one, instead of
using the old one.
Also move the first DCE to a place where it could actually
be useful.
bug:21870788
(cherry picked from commit 18e6873c469b48aaed22148451523479eece98e3)
Change-Id: I3b3ab2dafe8ce5fb60868fd1a6ef0eeefe666e0c
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The String Change adds multiple move results if the uninitialized string
is in multiple registers. This adds StoreLocals on the same instruction,
which isn't allowed. Now, a LoadLocal is added for each extra move
needed.
bug:21902634
(cherry picked from commit aa919207d2fb63af11d72d3b7cdbc435769565af)
Change-Id: I057d14cdac437d06eec20caaddd430c304e58196
|
|
|
|
|
|
|
|
|
|
| |
This is required for gdb to work.
libunwind works with either encoding.
(cherry picked from commit 17065880693d1b15ffeb60b9955a2d092839977f)
Bug: 21924613
Change-Id: I4e4f1cf9c65d48fa885a5993eeeed0253a3f2579
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Bug: 21034044
(cherry picked from commit 45d68f138a31a3ff9b45cda313f0ba27f1431f26)
Change-Id: I7f382a3124955eff5c0b96ca39ec67fb658fa3d0
|
|\ \
| |/
|/| |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Previously we checked the number of bits, but then rounded up to a
byte boundary. If ref_bitmap_bits was 65535, it would pass the check
but not actually fit in the 13 bits for ref_bitmap_bytes since we
rounded up to 8192 bytes.
Regression test infeasible due to smali limitations.
Bug: 21888453
Change-Id: If4b769431f27ecca14fe7852d017bcde01b3e146
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When creating a phi for the array length when we add HDeoptimization
nodes, we might update accesses in inner loops to use that phi instead
of the array length. The BCE phase was not expecting this case.
Bug: 21034044
(cherry picked from commit 3cde6227678cf62e06bca264671d1e957456ac3d)
Change-Id: I639f4ea6f5889726142041a42736183f162c7437
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add a test between initial_ and end_ to see if the loop body is entered.
If the loop body isn't entered at all, we jump to the loop header. Loop header is
still executed and is going to test the condition again and loop body won't be
entered. This makes sure no deoptimization is triggered if the loop body isn't
even entered.
Bug: 21034044
(cherry picked from commit 3584bce5b1f45e5741d3a6ca24884a36320ecb6b)
Change-Id: I2b6de1f22fbc4568ca419f76382ebd87806d9694
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
dex2oat can already generate unwinding and symbol information which
allows tools to create backtrace of mixed native and Java code.
This is a cherry pick from aosp/master which fixes several issues.
Most notably:
* It enables generation of ELF-64 on 64-bit systems (in dex2oat, C
compilers already produce ELF-64). Libunwind requires ELF-64 on
64-bit systems for backtraces to work.
* It enables loading of ELF files with dlopen. This is required for
libunwind to be able to generate backtrace of current process (i.e.
the process requesting backtrace of itself).
* It adds unit test to test the above (32 vs 64 bit, in-proces vs
out-of-process, application code vs framework code).
* Some other fixes or clean-ups which should not be of much
significance but which are easier to include to make the
important CLs cherry-pick cleanly.
This is squash of the following commits from aosp/master:
7381010 ART: CFI Test
e1bbed2 ART: Blacklist CFI test for non-compiled run-tests
aab9f73 ART: Blacklist CFI test for JIT
4437219 ART: Blacklist CFI test for Heap Poisoning
a3a49fe Switch to using ELF-64 for 64-bit architectures.
297ed22 Write 64-bit address in DWARF if we are on 64-bit architecture.
24981a1 Set correct size of PT_PHDR ELF segment.
1a146bf Link .dynamic to .dynstr
67a0653 Make some parts of ELF more (pointer) aligned.
f50fa82 Enable 64-bit CFI tests.
49e1fab Use dlopen to load oat files.
5dedb80 Add more logging output for dlopen.
aa03870 Find the dlopened file using address rather than file path.
82e73dc Release dummy MemMaps corresponding to dlopen.
5c40961 Test that we can unwind framework code.
020c543 Add more log output to the CFI test.
88da3b0 ART: Fix CFI test wrt/ PIC
a70e5b9 CFI test: kill the other process in native code.
ad5fa8c Support generation of CFI in .debug_frame format.
90688ae Fix build - large frame size of ElfWriterQuick<ElfTypes>::Write.
97dabb7 Fix build breakage in dwarf_test.
388d286 Generate just single ARM mapping symbol.
f898087 Split .oat_patches to multiple sections.
491a7fe Fix build - large frame size of ElfWriterQuick<ElfTypes>::Write (again).
8363c77 Add --generate-debug-info flag and remove the other two flags.
461d72a Generate debug info for core.oat files.
Bug: 21924613
Change-Id: I3f944a08dd2ed1df4d8a807da4fee423fdd35eb7
|
| |/
|/|
| |
| |
| |
| |
| |
| | |
Removes part that checks for throwing half of instruction. It's no
longer necessary. Also adds regression test.
Bug: 21902684
Change-Id: Ic600165e6b3719de3d83a73b8a1fa64473668fc8
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
OpRegCopyWide() in arm and mips backends didn't handle the
total register overlap when the registers holding the source
and destination pairs are the same but in reverse order.
Bug: 21897012
(cherry picked from commit 8958f7f8702327e713264d0538ab5dec586f3738)
Change-Id: I20afce6cc3213e7f7b3edaef91f3ec29c469f877
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If a block ending with if-eqz or if-nez has the same "taken"
and "fallthrough", we cannot assume that the value has been
checked against zero in one of the succesors. This affects
the null check elimination pass as well as GVN. Refactor all
those checks to a single function in BasicBlock and check
that the "taken" and "falthrough" are different when needed.
Bug: 21614284
(cherry picked from commit f11c420c448baffac6a70ac0884d481ab347e257)
Change-Id: I062e0042de3470ce8680b586487b9c7acbd206bc
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Codegen verified that the entry block always falls through to the next
block. While this is the case with Optimizing, it doesn't hold for
Baseline but it doesn't need to since codegen handles it fine.
Bug:21913514
Change-Id: I751ef227e6cf103af3e7fc35fca4b01c663385a1
(cherry picked from commit 015c7e63604c038e866d7af3850c557403cddc8b)
|
| |
| |
| |
| |
| |
| |
| | |
Uses optimizing compiler more and fixes x86_64 invoke codegen.
Bug: 21902634
Change-Id: Ia2a87d013c4746b107014a04a22a0a37269cfdb2
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The dalvik bytecode doesn't require a move-exception in
a catch handler that ignores the exception.
Bug: 21873167
(cherry picked from commit 2d1a0a408fd148f7b2a2d670e6942ec3d920f875)
Change-Id: Ia00e5791fabdd1b88e9a63b741600ed63d918703
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Optimizing and the interpreter wrongly assumed that a PackedSwitch
always has at least one target. This patch removes the corresponding
DCHECKs and adds a regression test case.
This is a resubmission of CL I32b7033ed38de6f1d1a6ee5d5bf12f3a47c9b37e
Bug: 21863783
Change-Id: I04e6e124bdd16591ba27c79490e6ce183c36b691
(cherry picked from commit 2ef645ba50544b879a82ea30e606f18c9af98917)
|
|/ /
| |
| |
| |
| |
| |
| |
| | |
Bug: 21702651
(cherry picked from commit 511d408909b7fe9be3c95e032cc7f426f4a01e6e)
Change-Id: I059e0b841543334cd08a27431e0ea853b42e4f35
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fix a bug where the CompilerDriver was erroneously reporting
classes as initialized during AOT compilation when they were
not guaranteed to be initialized at runtime.
This fix prevents the Quick compiler from inlining calls to
static methods in classes that are not guaranteed to be
initialized, so that the runtime performs the initialization
required for correctness.
Bug: 21847756
(cherry picked from commit 07785bb98dc8bbe192970e0f4c2cafd338a8dc68)
Change-Id: I60c7361cb6e8f51be20a3cbfcae19f3240bdfbed
|
|\ \
| | |
| | |
| | | |
MERGE ANYWHERE" into mnc-dev
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
ANYWHERE
bug:21867144
Test had to change a bit because it was using some features from
aosp not present in mnc-dev.
(cherry picked from commit 3507105caea0d209c66a95d5ec5d739949105c5d)
Change-Id: If12ea9a5c64e86b5bd3a5fd4a943bff60fe49762
|
|/
|
|
|
|
|
|
|
|
| |
Otherwise, the graph could remain mistyped.
bug:21776173
(cherry picked from commit 51d400d4ebd41b9fb4d67ac3179f8fb66a090fdd)
Change-Id: Iff36dfa4e79b14a9dd85c37e0fbb9e1080dd0364
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously we recreated this intern table during runtime startup.
This added 50-100ms of boot time.
Fixed bug where we didn't copy over hashcodes into the image.
Deleted some stale code.
Bug: 20727525
Bug: 19569780
Change-Id: I08959e9aa2a73cedb52f393033e2ffea3a26e76b
|
|
|
|
|
|
|
|
|
|
|
|
| |
Always push the loop head on the loop head stack. This fixes
a bug where we failed to return to an unnatural loop head to
recalculate its GVN data.
Bug: 17410955
(cherry picked from commit 67c8c942e9dfcabd548351db75e6d3b8b5165afa)
Change-Id: I44b9a17cbcd7307d1cc70ac564b99e29803723c5
|
|
|
|
|
|
|
|
|
|
| |
The ClassLinker cache speeds up FindArrayClass requests, but all
entries are roots. It is possible that an entry is a non-image
class when creating the boot image, artificially keeping the
class around.
Bug: 21596650
Change-Id: Ief9b439945d0e293a3cb5dcddfeb189b5e174f06
|
|
|
|
|
|
|
|
| |
(cherry picked from commit 5783a74163878095475596fabc0b9cb04bec467b)
Bug: 21572270
Change-Id: I711a9ee2d9688a8e4b59380c401f10f42c6c068e
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Optimizing + quick tests are passing, devices boot.
TODO: Test and fix bugs in mips64.
Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.
Some of the savings are from removal of virtual methods and direct
methods object arrays.
Bug: 19264997
(cherry picked from commit e401d146407d61eeb99f8d6176b2ac13c4df1e33)
Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d
Fix some ArtMethod related bugs
Added root visiting for runtime methods, not currently required
since the GcRoots in these methods are null.
Added missing GetInterfaceMethodIfProxy in GetMethodLine, fixes
--trace run-tests 005, 044.
Fixed optimizing compiler bug where we used a normal stack location
instead of double on ARM64, this fixes the debuggable tests.
TODO: Fix JDWP tests.
Bug: 19264997
Change-Id: I7c55f69c61d1b45351fd0dc7185ffe5efad82bd3
ART: Fix casts for 64-bit pointers on 32-bit compiler.
Bug: 19264997
Change-Id: Ief45cdd4bae5a43fc8bfdfa7cf744e2c57529457
Fix JDWP tests after ArtMethod change
Fixes Throwable::GetStackDepth for exception event detection after
internal stack trace representation change.
Adds missing ArtMethod::GetInterfaceMethodIfProxy call in case of
proxy method.
Bug: 19264997
Change-Id: I363e293796848c3ec491c963813f62d868da44d2
Fix accidental IMT and root marking regression
Was always using the conflict trampoline. Also included fix for
regression in GC time caused by extra roots. Most of the regression
was IMT.
Fixed bug in DumpGcPerformanceInfo where we would get SIGABRT due to
detached thread.
EvaluateAndApplyChanges:
From ~2500 -> ~1980
GC time: 8.2s -> 7.2s due to 1s less of MarkConcurrentRoots
Bug: 19264997
Change-Id: I4333e80a8268c2ed1284f87f25b9f113d4f2c7e0
Fix bogus image test assert
Previously we were comparing the size of the non moving space to
size of the image file.
Now we properly compare the size of the image space against the size
of the image file.
Bug: 19264997
Change-Id: I7359f1f73ae3df60c5147245935a24431c04808a
[MIPS64] Fix art_quick_invoke_stub argument offsets.
ArtMethod reference's size got bigger, so we need to move other args
and leave enough space for ArtMethod* and 'this' pointer.
This fixes mips64 boot.
Bug: 19264997
Change-Id: I47198d5f39a4caab30b3b77479d5eedaad5006ab
|
|/
|
|
|
|
|
|
|
|
|
|
| |
Needing an environment and throwing might depend in which
caller first tries to inline. HLoadClass has such logic. Therefore,
do not cache the non-inlineable flag for those cases.
Does not apply to aosp, as this code has been removed.
bug:20037935
Change-Id: I5e3d36ffb832fb3c3f3c604c79cdbf4f37c749e1
|
|
|
|
|
|
|
|
| |
bug:20037935
(cherry picked from commit 5ae1325048f3d2143f62735ed41acebf28ee6742)
Change-Id: I4bbec76988cfd3061084055c16d2d9ef46845f0a
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Only the case where two methods are not in the same dex
file could lead to undeterministic behavior.
bug:20037935
(cherry picked from commit ff199d84b02efe6cd7162a3c414db99240592454)
Change-Id: If1b0bff3a228be4caec9a068210b1d4d2a7bae1f
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Avoid undefined behavior for arm64 stemming from 1u << 32 in
loops with upper bound kNumberOfXRegisters.
Create iterators for enumerating bits in an integer either
from high to low or from low to high and use them for
<arch>Context::FillCalleeSaves() on all architectures.
Refactor runtime/utils.{h,cc} by moving all bit-fiddling
functions to runtime/base/bit_utils.{h,cc} (together with
the new bit iterators) and all time-related functions to
runtime/base/time_utils.{h,cc}. Improve test coverage and
fix some corner cases for the bit-fiddling functions.
Bug: 13925192
(cherry picked from commit 80afd02024d20e60b197d3adfbb43cc303cf29e0)
Change-Id: I905257a21de90b5860ebe1e39563758f721eab82
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This CL properly fixes the high word marking and reverts
https://android-review.googlesource.com/150352
which was just covering up the underlying issue. A unit test
for the encountered issue is provided, though it does not
expose the deficiency in the cover-up CL.
Bug: 20640451
(cherry picked from commit 9cacef6e811940c2f21e7e54055379a2c43f0d06)
Change-Id: I4c4ca82fe4b2e34feb38090d88a5d5c754914f89
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Change the check whether to relocate program headers in
patchoat to simply look whether there is a PT_LOAD section
with p_vaddr == 0. If there is, don't relocate the headers,
it should be an app. Otherwise, it's a boot image and needs
to be relocated.
Add overflow checking to ElfFileImpl<>::GetLoadedSize().
Bug: 21047854
(cherry picked from commit 3fc9903407c6e89ffbbc92ded9e272d9de58e9b6)
Change-Id: Ib3e1295fc06993bcfbaadd8f253ee4f5498f52e9
|
|
|
|
|
|
|
|
|
| |
The way DCE currently updates loop information does not cover all
cases. This patch removes the logic, resets loop information of live
blocks to pre-SSA state and reanalyzes the affected loops.
Change-Id: I0b996a70235b95a8db0de9a23a03f71db57a21b8
(cherry picked from commit a4b8c21dae70ae34aee13628632c39a675c06022)
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add intrinsics implementations for indexOf in the optimizing
compiler. These are mostly ported from Quick.
Bug: 20889065
(cherry picked from commit ba6fdbcb764d5a8972f5ff2d7147e4d78226b347)
Change-Id: I18ee849d41187a381f99529669e6f97040aaacf6
|
|/
|
|
|
|
|
|
| |
Bug: 20640451
(cherry picked from commit ade58e14582c6ab81978e9cfcbbf5e54cc23fe18)
Change-Id: I8ac7fea3d9d2a434ee79fb917e68a4dc96e5482f
|
|
|
|
|
|
|
|
|
|
|
| |
Previously we missed some cases of overlap with registers
coming from previous blocks.
Bug: 20640451
(cherry picked from commit 83d46ef1eaa8fdecadfdb9564d80e50b42646c37)
Change-Id: I1be879edfbc900b70cee411d9e31e5a4b524530a
|
|\ |
|
| |
| |
| |
| |
| |
| | |
Bug: 20720510
Bug: 12687968
Change-Id: Ia9edb614853bad45ec25d6e2142361a8bda1eccf
|
|\ \ |
|