History log of /art/runtime/jit/jit_code_cache.h
Revision Date Author Comments
db16f2a0a71503fe046e41fb8d249a1a25e0658e 05-Aug-2016 Mathieu Chartier <mathieuc@google.com> Card mark holding class instead of declaring class

For profiling info, we need to mark the card of the holding class
instead of declaring class. This is required for GC correctness since
the GC relies on the card table to track cross space references.

Test: test-art-host ART_TEST_JIT=true

Bug: 30655270

(cherry picked from commit 65975776f807d55c83af6cca1e447f8daa794413)

Change-Id: I3de518693d3cac1ad9770eae671db740ebdf1d8d
99c959f3868512bb95432cf02a1f0ad3971698bf 30-Jul-2016 Nicolas Geoffray <ngeoffray@google.com> Put the deletion of profiling info under a GC critical section.

Otherwise the GC could see dangling pointers.

bug:30033802

(cherry picked from commit cf48fa030780c3185f225d558b704c396f7713cc)

Change-Id: I2c43e973878f50dc147aa0af81551ecc942a790d
e2d066d0337b7c81d47e4806e6025b70d83fcd56 19-Apr-2016 Calin Juravle <calin@google.com> ProfileSaver: query profiling_infos instead of the code_map

This is the first step in being able to record profiles without jit
being active.

Bug: 27916886
Change-Id: I2fcbd03560e109e6866ad6d82c79b902a889e620
f3f9cf6b65c4bcf9ea44253188d8d910b7cf7e64 14-Apr-2016 Nicolas Geoffray <ngeoffray@google.com> Add weight to compiled/interpreter transitions.

Also:
- Cleanup logging.
- Check ArtMethod status before adding compilation requests.
- Don't request osr compilation if we know AddSamples does not come
from a back edge.

Bug: 27865109

(cherry picked from commit 71cd50fb67fa48667b0ab59aa436a582c04ba43d)

Change-Id: Icbe89fe6cc495b113616391a8f257758d34b4b60
454b3b6774fe07765273b917ccc97da2eba776ac 07-Apr-2016 buzbee <buzbee@google.com> ART: Fix race in on-stack replacement

The expected sequence of events for on-stack replacement is:

1. Method goes warm, triggering enhanced profiling
2. Method goes hot, triggering method compilation
3. Method goes really hot, triggering an osr method compilation.
4. Interpreter polls for the existence of an osr entry point,
and transitons to compiled code if found.

We have a race problem if #2 and #3 happen closely together, and
the osr method compilation begins before the regular method
compilation. In that case, the jit sees that the method is
already being compiled (the osr method - but it does not
distinguish the two), and discards the normal compilation request.
So, the osr version is compiled and the normal version is discarded.
In #4, the MaybeDoOnStackReplacement() check assumes that a normal
version of the compiled method must exist before doing an on-stack
replacement, so it keeps returning false.

This is why we were seeing sporadic timeout failures of
570-checker-osr when the mterp fast branch profiling was
introduced. The branch profiling performance enhancements
greatly reduced the time between #2 and #3, increasing the liklihood
of losing the race. Further, the new code clamped hotness to avoid
wrap-around. The race existed (and likely occurred) in the previous
version, but because hotness counters were allowed to overflow and
wrap around you'd eventually hit the threshold a second time and
try again - masking the problem.

Tip 'o the hat to Serguei Katkov for identifying the problem.

A possible solution (taken in this CL) is to differentiate osr
compilations from normal method compilations.

Bug: 27939339
Change-Id: I71044516b35dc69de9fc2d2a445e33809ac650ed
9d07e3d128ccfa0ef7670feadd424a825e447d1d 31-Mar-2016 Vladimir Marko <vmarko@google.com> Clean up OatQuickMethodHeader after Quick removal.

This reduces the size of the pre-header by 8 bytes, reducing
oat file size and mmapped .text section size. The memory
needed to store a CompiledMethod by dex2oat is also reduced,
for 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The
aosp_flounder-userdebug 32-bit and 64-bit boot.oat are each
about 1.1MiB smaller.

Disable the broken StubTest.IMT, b/27991555 .

Change-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039
933330a192d43d7c7304120999907857a89c2f96 16-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Add more statistics for memory use of the JIT.

Collect data for stack maps, profiling info, and compiled code.

bug:27520994

Change-Id: Ic87361230c96ce0090027a37d750e948d806c597
07e3ca9a46801990d662c48d0fddedc63c4c053c 11-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Fix thread race when fetching the ProfilingInfo object.

Problem is:
1) Compiler fetches the ProfilingInfo of A, it's null.
2) Mutator creates the ProfilingInfo.
3) Compiler notifies it's not using A anymore, calls
ProfilingInfo::DecrementInlineUse -> Crash as we expected
ProfilingInfo::IncrementUse to be called before.

Also update some namings to better reflect what is going on.

Change-Id: I55ea4c5d81988131467095e18a0d13a8be9d0ef7
b6e20ae17d0881a66c22532e4152ce6779454a92 07-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Clear inline caches at each full GC.

This fixes occasional failures of 141-class-unload.

Also fix a bug where clearing inline caches also cleared the dex
pc associated with it.

bug:26846185
bug:23128949
Change-Id: I77bf1dee229d7764c3cc21440829c7fba7b37001
9abb2978f09643227664ab70c0677744b8f6e946 04-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Fix very rare bug around JIT code cache collection.

The bug is the following:
1) JIT thread: We start a code cache collection.
2) JIT thread: We mark all code that is in the call stack of all
threads.
3) Mutator thread: after marking its stack, resumes and does call
that pushes JIT compiled code to the call stack.
4) Mutator thread: deoptimizes compiled code of ArtMethod Foo,
and therefore updates the entry point of Foo through
JitCodeCache::InvalidateCompiledCodeFor.
(Note that updating the entrypoint could also be done through
instrumentation).
5) JIT thread: Call JitCodeCache::RemoveUnusedAndUnmarkedCode.
The method used to remove entries that were not entrypoints.
It sees the compiled code for Foo but that is not an entrypoint
anymore, so deletes it.
6) Mutator thread problem: it now has compiled code in its call
stack that is deleted.

If it's only one mutator thread, we only hit a DCHECK when walking
the stack, as we are now seeing an invalid pc. The deoptimization
will longjmp to the caller of that invalid entry anyway.

However, if multiple mutator threads are involved, one thread
might invalidate the compiled code while the other is still
running it. And we end up deleting code that is in the call
stack of a thread, and we will crash.

The fix is to mark entrypoints before marking call stacks,
so that anything a thread might jump to is marked and kept.

bug:27424509
bug:23128949
bug:26846185

Change-Id: I07cd08cedd96b9900629f7535e95404f622104ea
bcd94c8ea9bde4e075c25fbdfb3a2ef6858eed7b 03-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Refine statistics around the JIT.

- Better namings.
- Now also time the code cache collection time.
- Random cleanups.

bug:23128949
bug:27445008
bug:27442890

Change-Id: I1dd52544bea678af868e7c47907f7a0fc9a146c3
af3f5e0136277bd0c01e7e2b7c4797c63ecddca6 02-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "Revert "Use the interpreter as a heartbeat for the JIT.""

Bug: 27398183
Bug: 23128949
Bug: 26846185

This reverts commit a96917a6983a5abbe973255a3846fda549fb1657.

(cherry picked from commit 35122443e5f8606cc5a660ac32745a06aefb341b)

Change-Id: Ib02401c76bf28e1aac6bbce01f97ddd0373c1ba5
35122443e5f8606cc5a660ac32745a06aefb341b 02-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "Revert "Use the interpreter as a heartbeat for the JIT.""

Bug: 27398183
Bug: 23128949
Bug: 26846185

This reverts commit a96917a6983a5abbe973255a3846fda549fb1657.

Change-Id: I5c4f0d87d3293a6a7ab56a33396670704b66a347
a96917a6983a5abbe973255a3846fda549fb1657 01-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "Use the interpreter as a heartbeat for the JIT."

Hits a DCHECK testing libcore.
art F 11973 12675 art/runtime/jit/jit_code_cache.cc:644] Check failed: it.second->GetProfilingInfo(sizeof(void*)) != nullptr


Bug: 27398183
Bug: 23128949
Bug: 26846185

This reverts commit 7273a5d045d3ceb3ff011ad65765356b69b155e8.

Change-Id: I6614a82e775ea71aa16f041313f67546db41eac8
1e7da9bd04bdd2664a4196f1d7e285c010f8881f 01-Mar-2016 Nicolas Geoffray <ngeoffray@google.com> Do a TryLock when allocating a ProfilingInfo from the interpreter.

This removes some thread contentions just for allocating ProfilingInfo.

bug:23128949

Change-Id: I9ff7d44c4b0ee272425cf4c6248d3065f67958f3
7273a5d045d3ceb3ff011ad65765356b69b155e8 29-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Use the interpreter as a heartbeat for the JIT.

When doing a partial code cache collection, update all entrypoints to
interpreter, so that the next full collection will remove code
that wasn't executed during that window.

bug:27398183
bug:23128949
bug:26846185

Change-Id: I4423f5c4810dac183dc8973078bf218818745e80
5b3fbd26a9f8b8c15e8e85db2403b3545536cd87 25-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Dump the number of OSR compiled code.

bug:23128949

(cherry picked from commit fcdd72941810f03460a8efca0c6255439be80c35)

Change-Id: I7f6c428511ee7fe346c665be8f02880bcc317cae
82de410ad37ea90f43e61fb5dc44ab420a159b54 23-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Introduce partial code cache collection.

It will collect code that is known unused (because it deoptimized),
and osr code.

bug:26846185

(cherry picked from commit 8d37250f7b9a7839b11488f45a1842b025026f94)

Change-Id: Iffe87e356066a3f0bd28cb3df41c17bf2ac9ea0f
fcdd72941810f03460a8efca0c6255439be80c35 25-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Dump the number of OSR compiled code.

Change-Id: I20efc80e8556da8220dab92c3a7947f883d48cf8
8d37250f7b9a7839b11488f45a1842b025026f94 23-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Introduce partial code cache collection.

It will collect code that is known unused (because it deoptimized),
and osr code.

bug:26846185

Change-Id: Ic27dfeb944efb2ca464039007ba365c1e0d4a040
812e118043357c83800aa07a1133a32c3597c7c0 23-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Don't allocate mspaces of less than a page.

Fixes jit tests in debug mode.

bug:26846185

(cherry picked from commit 7ca4b77c98ffdf7a4db26fd9f84b2cfcc274c4aa)

Change-Id: I73d357ee47f532c3d7ae65ddacbd5c88170dfe1d
7ca4b77c98ffdf7a4db26fd9f84b2cfcc274c4aa 23-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Don't allocate mspaces of less than a page.

Fixes jit tests in debug mode.

Change-Id: I34565e03683cee063e26975a461d8e75ad4a205f
65b83d875e4f9c021bc8380024455c9f1e658b14 22-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Add a new kReservedCapacity to decide when to start GC code.

Change-Id: Ib9d0ad9bc86c66ac29975f7f907f79f842342500
38ea9bd50debc63ceb77ec1e65036d8e2070ec7d 19-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Track memory usage of code cache.

Needed once we start having a strategy based on how full the code
cache is.

Change-Id: I181ad05e1c216afabf106f91ac54bbf144d7406a
b88d59ef4fe611fe47e50a6a19785e03bbd5f93b 17-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Be a bit smarter with JIT code triggering deoptimization.

Do not re-use an OSR method that triggered deoptimization.
Also add a stack overflow check before doing OSR.

bug:27094810
Change-Id: I6ff6a7fb9b3df9b7c0ff37e3610595efa70ad067
b331febbab8e916680faba722cc84b66b84218a3 05-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "Revert "Implement on-stack replacement for arm/arm64/x86/x86_64.""

This reverts commit bd89a5c556324062b7d841843b039392e84cfaf4.

Change-Id: I08d190431520baa7fcec8fbdb444519f25ac8d44
bd89a5c556324062b7d841843b039392e84cfaf4 05-Feb-2016 David Brazdil <dbrazdil@google.com> Revert "Implement on-stack replacement for arm/arm64/x86/x86_64."

DCHECK whether loop headers are covered fails.

This reverts commit 891bc286963892ed96134ca1adb7822737af9710.

Change-Id: I0f9a90630b014b16d20ba1dfba31ce63e6648021
891bc286963892ed96134ca1adb7822737af9710 29-Jan-2016 Nicolas Geoffray <ngeoffray@google.com> Implement on-stack replacement for arm/arm64/x86/x86_64.

High-level overview:
- osr_method_threshold is used to know when to compile a method
in osr mode (-> treat all loops as irreducible).
- branch instructions in the compiler query whether they can
jump to an osr method.
- An osr entry point is found through the stack maps: if a stack
map is duplicated in the CodeInfo, it is an osr entry point.

Change-Id: Ifb39338cd281e2c7eccce67f4e18d46428be71e4
b4eddd21c364c51b6fc5c439cda6958ae255dcd5 14-Jan-2016 Calin Juravle <calin@google.com> Add profile support for apps with shared runtime.

- extend ProfileSaver to track different dex locations to different
profile files.
- allow repeated calls to Runtime::RegisterAppInfo() which will
register a new pair <profile_file, locations_to_track> with the profile
saver.

Bug: 26080105
Change-Id: I58c4587d5f462c557411ad7126a00c29cd7db3a6
0a52223d9173315aeaca05217b8c792b3088ea7d 19-Jan-2016 Nicolas Geoffray <ngeoffray@google.com> Keep track of number of JIT compilations.

Change-Id: Ic436bc3f939f6236190ddd840955cb72f76e8f85
a25dce9b452ba17ef7cef768926c884177a3025e 12-Jan-2016 Nicolas Geoffray <ngeoffray@google.com> Support --perf with jitted code.

Change-Id: I76f29d815234e9506efc59d4865780e52b2381a1
4d77b6a511659f26fdc711e23825ffa6e7feed7a 01-Dec-2015 Calin Juravle <calin@google.com> Save profile information in a separate thread.

Previously we would save the profiling information only when the app
was sent to background. This missed on an important number of updates
on the jit code cache and it didn't work for background processes.

Bug: 26080105

Change-Id: I84075629870e69b3ed372f00f4806af1e9391e0f
66f55237679db90cb0a0a265043a787932b466f8 08-Dec-2015 Calin Juravle <calin@google.com> Pass down to the runtime the application code paths.

When registering the app with the runtime the framework needs to pass
down the list of application code paths. This will be used by JIT to
know what profile info to persist.

This fixes the reliance on OatFileManager::GetPrimaryOatFile which may
produce inconsistent results based on external factors (i.e. class path
order or failing to compile the first dex file from the class path)

Bug: 26080105
Change-Id: Iadcebd2684fcd48569e8f76ef21bd4d117fedc05
aee2156e308f3f346ac4df76ba1d33ee9b11be84 15-Dec-2015 Nicolas Geoffray <ngeoffray@google.com> Add some dumping when SIGQUIT for the JIT.

Change-Id: Iad68bdc8a4ab53e810feb3bc8507b7f42e79b1f7
e6465bc8a52cfa3995b4072810cdb7ab397a7793 15-Dec-2015 Dimitry Ivanov <dimitry@google.com> Remove references to dlmalloc specific functions

Remove references to internal libc dlmalloc_* functions
so that we can hide them for lp64

Change-Id: I13977bea63d900e1819052140e3bd6bc1f2fc759
73be1e8f8609708f6624bb297c9628de44fd8b6f 17-Sep-2015 Nicolas Geoffray <ngeoffray@google.com> Inline monomorphic calls.

Change-Id: If38171c2dc7d4a4378df5d050afc4fff4499c98f
31f2c155975c5794d481df03eb0947cb48d2c6b5 23-Oct-2015 Calin Juravle <calin@google.com> Save jit profiling info to file.

Currently saves only the hot method references and omits the inline
cache.

Change-Id: I79e91f855f6b52dc19a9a86662604f2eee16613c
0a3be1620a3560253cfa789cb9819013293c5654 18-Nov-2015 Nicolas Geoffray <ngeoffray@google.com> Increase code cache after 1 full collection.

Also add a max capacity option.

Change-Id: Icd442b72e9be0c6b091b588b4c4473c69b7cde10
a5891e81a2fb833307cf7c7e7267070dc0223dc8 06-Nov-2015 Nicolas Geoffray <ngeoffray@google.com> Fix interaction between JIT and instrumentation.

- The JIT needs to go through the instrumentation to update
entry points.
- The instrumention needs to know if a method got JITted
to know if needs to deoptimize.

bug:25438583

Change-Id: I4b186a1da9f4a3fb329efd052a774d5502a902a1
d28b969c273ab777ca9b147b87fcef671b4f695f 04-Nov-2015 Nicolas Geoffray <ngeoffray@google.com> Code cleanup to avoid CompilerDriver abstractions in JIT.

Avoids allocating a CompiledMethod.

Change-Id: I35b4aa0d7c74daba68e827a01e71c300fce3b3bf
26705e2b1245b65989a0341b24c5dbf2658d4bb6 28-Oct-2015 Nicolas Geoffray <ngeoffray@google.com> Add support for collection ProfilingInfo objects.

Change-Id: I8bb6069530253a7372acdf2b5aee71e1de644822
1dad3f68b7f5a4a4cb2b281413357adc2309a8fd 23-Oct-2015 Nicolas Geoffray <ngeoffray@google.com> Support garbage collection of JITted code.

Change-Id: I9afc544460ae4fb31149644b6196ac7f5182c784
0c3c2668ef44fdbd18d97f9134a85d1a7d561aa4 15-Oct-2015 Nicolas Geoffray <ngeoffray@google.com> Use DlMallocSpace for the JIT code cache.

- Also tidy up some code in the JIT compiler.
- And mprotect code space to be writable only when allocating.

Change-Id: I46ea5c029aec489f2af63452de31db3736aebc20
5550ca8bcc742b109d77e62f3a0877c667d894d3 21-Aug-2015 Nicolas Geoffray <ngeoffray@google.com> Record profiling information before Jitting.

- Add a new instrumentation kind to record dynamic invokes.
- Use the JNI entry point field to store the profiling data.
- Record seen receivers for every dynamic invoke.

Change-Id: I2c1738ab2a72052d45964d055dc16b44b906e54c
90443477f9a0061581c420775ce3b7eeae7468bc 17-Jul-2015 Mathieu Chartier <mathieuc@google.com> Move to newer clang annotations

Also enable -Wthread-safety-negative.

Changes:
Switch to capabilities and negative capabilities.

Future work:
Use capabilities to implement uninterruptible annotations to work
with AssertNoThreadSuspension.

Bug: 20072211

Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
3d21bdf8894e780d349c481e5c9e29fe1556051c 22-Apr-2015 Mathieu Chartier <mathieuc@google.com> Move mirror::ArtMethod to native

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
e401d146407d61eeb99f8d6176b2ac13c4df1e33 22-Apr-2015 Mathieu Chartier <mathieuc@google.com> Move mirror::ArtMethod to native

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
Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d
414369a2e3f23e1408fc1cbf4f623014bd95cb8f 04-May-2015 Mathieu Chartier <mathieuc@google.com> Add some more DISALLOW_COPY_AND_ASSIGN

May help prevent bugs maybe.

(cherry picked from commit 3130cdf29eb203be0c38d1107a65d920ec39c106)

Change-Id: Ie73d469dfcd078492ecb3aa28682b42707221202
3130cdf29eb203be0c38d1107a65d920ec39c106 04-May-2015 Mathieu Chartier <mathieuc@google.com> Add some more DISALLOW_COPY_AND_ASSIGN

May help prevent bugs maybe.

Change-Id: Ie73d469dfcd078492ecb3aa28682b42707221202
2cebb24bfc3247d3e9be138a3350106737455918 22-Apr-2015 Mathieu Chartier <mathieuc@google.com> Replace NULL with nullptr

Also fixed some lines that were too long, and a few other minor
details.

Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
bce416f7f22f1e73250f020be1178a1c7db72330 23-Mar-2015 Mathieu Chartier <mathieuc@google.com> Add code cache test

Bug: 17950037
Change-Id: I13913667517db5bb9b7224f0639c2b39cf3a1973
e5f13e57ff8fa36342beb33830b3ec5942a61cca 24-Feb-2015 Mathieu Chartier <mathieuc@google.com> Revert "Revert "Add JIT""

Added missing EntryPointToCodePointer.

This reverts commit a5ca888d715cd0c6c421313211caa1928be3e399.

Change-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af
a5ca888d715cd0c6c421313211caa1928be3e399 24-Feb-2015 Nicolas Geoffray <ngeoffray@google.com> Revert "Add JIT"

Sorry, run-test crashes on target:
0-05 12:15:51.633 I/DEBUG (27995): Abort message: 'art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast<uintptr_t>(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc=71e3366b code=0x71e3362d size=ad000000'
10-05 12:15:51.633 I/DEBUG (27995): r0 00000000 r1 0000542b r2 00000006 r3 00000000
10-05 12:15:51.633 I/DEBUG (27995): r4 00000006 r5 b6f9addc r6 00000002 r7 0000010c
10-05 12:15:51.633 I/DEBUG (27995): r8 b63fe1e8 r9 be8e1418 sl b6427400 fp b63fcce0
10-05 12:15:51.633 I/DEBUG (27995): ip 0000542b sp be8e1358 lr b6e9a27b pc b6e9c280 cpsr 40070010
10-05 12:15:51.633 I/DEBUG (27995):

Bug: 17950037
This reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4.

Change-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3
2535abe7d1fcdd0e6aca782b1f1932a703ed50a4 17-Feb-2015 Mathieu Chartier <mathieuc@google.com> Add JIT

Currently disabled by default unless -Xjit is passed in.

The proposed JIT is a method JIT which works by utilizing interpreter
instrumentation to request compilation of hot methods async during
runtime.

JIT options:
-Xjit / -Xnojit
-Xjitcodecachesize:N
-Xjitthreshold:integervalue

The JIT has a shared copy of a compiler driver which is accessed
by worker threads to compile individual methods.

Added JIT code cache and data cache, currently sized at 2 MB
capacity by default. Most apps will only fill a small fraction of
this cache however.

Added support to the compiler for compiling interpreter quickened
byte codes.

Added test target ART_TEST_JIT=TRUE and --jit for run-test.

TODO:
Clean up code cache.
Delete compiled methods after they are added to code cache.
Add more optimizations related to runtime checks e.g. direct pointers
for invokes.
Add method recompilation.
Move instrumentation to DexFile to improve performance and reduce
memory usage.

Bug: 17950037

Change-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca