History log of /art/compiler/driver/
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
6e18c0ab373f9c36b5dc86445a25fbee972ee204 23-Jan-2015 Jeff Hao <jeffhao@google.com> Merge "Allow preopted apps to have sharpened calls for non-x86 architectures." into lmp-mr1-dev
2397ad72daff0e15a64281bf4b0dd8065551d22f 23-Jan-2015 Jeff Hao <jeffhao@google.com> Allow preopted apps to have sharpened calls for non-x86 architectures.

Bug: 19100762

Change-Id: Iefd4265cb7864cdaa12c1f9e44bfaa5aa4fb93ec
ompiler_driver.cc
aa3eff991fc34d6434465bf6bf49ef2e2fb286b7 20-Jan-2015 Andreas Gampe <agampe@google.com> ART: Curb dex2oat verbosity

Only print dedupe collisions in a debug build or on verbose logging.

Bug: 19082662

(cherry picked from commit 8d295f8f0e88fa5c6373962d545020a06033b3fc)

Change-Id: I08bd04a453d95b6dba6cf6955b5741cd97daf480
ompiler_driver.cc
ompiler_driver.h
62746d8d9c4400e4764f162b22bfb1a32be287a9 09-Dec-2014 Andreas Gampe <agampe@google.com> ART: Swap-space in the compiler

Introduce a swap-space and corresponding allocator to transparently
switch native allocations to memory backed by a file.

Bug: 18596910
Change-Id: I131448f3907115054a592af73db86d2b9257ea33
ompiler_driver.cc
ompiler_driver.h
f535c69f115c61ffadca1bd2706244d0aa30f9aa 17-Dec-2014 Andreas Gampe <agampe@google.com> ART: Punt to the interpreter for VerifiedMethod errors

In case that the GC map can't be created (because of size restrictions),
do not fail the class. Instead punt to the interpreter.

Bug: 17791183
Change-Id: I348bb306dbfc85c235fa93c0c527fba6627551fe
ompiler_driver.cc
25fda92083d5b93b38cc1f6b12ac6a44d992d6a4 04-Dec-2014 Mathieu Chartier <mathieuc@google.com> Remove method verification results right after compiling a method

This saves memory since it allows the code arrays from methods
compiled in future methods to use the ram we just freed from the
verification results.

GmsCore.apk:
Before: dex2oat took 77.383s (threads: 2) arena alloc=6MB java alloc=30MB native alloc=77MB free=13KB
After: dex2oat took 72.180s (threads: 2) arena alloc=6MB java alloc=30MB native alloc=60MB free=13KB

Bug: 18596910
Change-Id: I5d6df380e4fe58751a2b304202083f4d30b33b7c
ompiler_driver.cc
ompiler_driver.h
ex_compilation_unit.h
3029df6d212894647ba0e5c23443c40912c6ecc8 03-Dec-2014 Mathieu Chartier <mathieuc@google.com> Print memory usage in dex2oat shutdown

Example on mako:
I/dex2oat (31071): dex2oat took 31.195s (threads: 2) arena alloc=1013KB java alloc=13MB native alloc=32MB free=1490KB

Bug: 18069309

Change-Id: I08eac00842be35d4e659bddc8513f2062be725c9
ompiler_driver.h
807140048f82a2b87ee5bcf337f23b6a3d1d5269 21-Nov-2014 Mathieu Chartier <mathieuc@google.com> Add fast string sharpening

String sharpening changes const strings to PC relative loads instead
of always going through the dex cache. This saves code size and
probably improves performance slightly.

Before: 49602992 system@framework@boot.oat
After: 49385904 system@framework@boot.oat

Pre-cursor to removing dex_cache_strings_ field from ArtMethod.

Bug: 17643507

Change-Id: I1787f48774631eee0accafeea257aa8d0e91e8d6
ompiler_driver.cc
ompiler_driver.h
474123dccc5aa9a0dfe566d332174877fd5b7040 18-Nov-2014 Vladimir Marko <vmarko@google.com> Do not try to sharpen super calls to abstract methods.

Bug: 18380491
Change-Id: I08bfdddb0fe698b3bbe31204b7562fbc08488a35
ompiler_driver-inl.h
26318f722958ac1cba6a812026a1377f37c54941 11-Nov-2014 Andreas Gampe <agampe@google.com> ART: Compiled-classes list for compiler-driver

Similar to the image-classes list, introduce a list of class names
that are to be compiled when creating a boot image. This defaults
to all classes.

Bug: 18336591
Change-Id: I95f69afdb500a9defb6795803d4040bbe67c5a01
ompiler_driver.cc
ompiler_driver.h
643b5df2b065ccf5bb19a183573da691e9d0311f 17-Oct-2014 Igor Murashkin <iam@google.com> dex2oat: Add a --compile-pic option

(cherry-picked from AOSP master
83c5612e69fa05610baf4f4d237fe0995a79cde5)

Bug: 18035729
Change-Id: I80e03613e3b6ac079bcbc7e068bbaae760c364c9
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
63bc11efaac0c041e849ab401f9fc368631a00f5 18-Sep-2014 Ian Rogers <irogers@google.com> DO NOT MERGE. Only have a portable entrypoint in portable builds.

Bug: 16214885

Change-Id: Iff7b7415efdbdabd7e6020e221a540f6a774c852
ompiler_driver_test.cc
ba354a97a9742774f57bad7f96ccae2dbbd59f75 16-Sep-2014 Andreas Gampe <agampe@google.com> ART: Check for exceptions from unresolved classes

In no-verify mode, classes may be unresolved because of missing
dependencies. Ignore and clear the exception.

Bug: 17506140
Change-Id: I70602b089e6631b1e177dbe8316c5fefdaf777a0
ompiler_driver.cc
508e0a8d2be15c41c4001864ffb43be6de55ddbd 13-Sep-2014 Andreas Gampe <agampe@google.com> Merge "ART: Allow quickening in the boot image" into lmp-dev
35439baf287b291b67ee406308e17fc6194facbf 28-Aug-2014 Andreas Gampe <agampe@google.com> ART: Allow quickening in the boot image

Update the class linker to accept class status from the boot image
in compiler mode. Update compiler driver to allow quickening for
boot image classes. Update method verifier to accept quickened
instructions in compiler mode when we just want to dump. Update
oatdump to the new verifier API.

Bug: 17316928
Change-Id: I9ef1bfd78b0d93625b89b3d662131d7d6e5f2903
ompiler_driver.cc
ompiler_driver.h
7fc8f90b7160e879143be5cfd6ea3df866398884 26-Aug-2014 Andreas Gampe <agampe@google.com> ART: Change access flag behavior in verifier

Note: this moves the miranda modifier to the upper 16 bit.

Bug: 16161620
Change-Id: I2f591d53b7d1559171e70aaaf22225d94b4882f5
ompiler_driver.cc
cc2f2393e69a9b1425bad1a89f41aaaf8c38f9e2 30-Aug-2014 Ian Rogers <irogers@google.com> Reduce and speed-up class def searches.

Use the class linker for descriptor lookups from the compile driver so that
dex caches are populated.
Reduce the scope of functions for scanning class paths to just the class
linker where they are performed.
If we see more than a threshold number of find class def misses on a dex file
lazily compute an index, so that future lookups are constant time (part of the
collection code is taken from
https://android-review.googlesource.com/#/c/103865/3). Note that we take a lazy
approach so that we don't serialize on loading dex files, this avoids the
reason the index was removed in 8b2c0b9abc3f520495f4387ea040132ba85cae69.
Remove an implicit and unnecessary std::string creation for PrintableString.

Single threaded interpret-only dex2oat performance is improved by roughly 10%.

Bug: 16853450

Change-Id: Icf72df76b0a4328f2a24075e81f4ff267b9401f4
(cherry picked from commit 68b56858367e29461ae290fd797443a1ef6d8005)
ompiler_driver.cc
6dd35ccbfbb29201c84a54261d75977c598ef2e6 27-Aug-2014 Ian Rogers <irogers@google.com> Revert "Avoid using NanoTime for compiler and verifier"

This reverts commit c89e6edbdce97c7d199b54bf63aed7ea01ebf1ff.

Change-Id: Id3b89121a19e64bf3c457c39b375f3d3c0fcc579
ompiler_driver.cc
c89e6edbdce97c7d199b54bf63aed7ea01ebf1ff 27-Aug-2014 Mathieu Chartier <mathieuc@google.com> Avoid using NanoTime for compiler and verifier

Target timings before with -j2 --compiler-filter=interpret-only:
Approximate speedup 3%.

Before:
real 0m36.852s
real 0m36.050s
real 0m36.246s

After:
real 0m35.667s
real 0m35.779s
real 0m35.458s

Bug: 16853450

Change-Id: Id996172d8283639fe293ddfc26d01fc1a0beed0b
ompiler_driver.cc
b68c6e578a28a9717d78dfd522d9d9b8befaedf2 19-Aug-2014 Mathieu Chartier <mathieuc@google.com> Reduce interpret-only compile time.

Before:
39.04user 5.18system 0:29.24elapsed 151%CPU (0avgtext+0avgdata 164176maxresident)k
38.87user 5.16system 0:29.14elapsed 151%CPU (0avgtext+0avgdata 164144maxresident)k

After:
36.26user 3.25system 0:27.00elapsed 146%CPU (0avgtext+0avgdata 162592maxresident)k
36.25user 3.28system 0:26.28elapsed 150%CPU (0avgtext+0avgdata 162688maxresident)k

Disabled implicit stack protection for the compiler, this reduces page faults.

Added support for not timing every method compilation and verification. NanoTime is
slow and adds ~2 seconds of real time. This is currently enabled since people want
to know which methods are slow to compile.

Bug: 16853450

(cherry picked from commit 8e219ae27624116b6d23e858fb21e93342f81d66)

Change-Id: I349ffb3f36db8c437137387aa6914dc17d743f09
ompiler_driver.cc
118785c6f82ac1ec7074b5efe367b3dafd904940 26-Aug-2014 Brian Carlstrom <bdc@google.com> CheckAndClearResolveException should allow LinkageError

Bug: 16565964
Change-Id: Ibf236c627519a5cdef9479b7bc21e931d5474abf
ompiler_driver.cc
d84f916d35bb0dc74d7daa075b883e5ee1ce1109 16-Aug-2014 Andreas Gampe <agampe@google.com> ART: Avoid expensive class lookup in compiler driver

When we are not compiling multidex, avoid an expensive by-descriptor
lookup for classes when deciding whether to skip compilation.

Bug: 17072698
Change-Id: I19bcb2a2928207fcae0badd466cdc52945bd37c4
ompiler_driver.cc
a73a8b55415b544355438522524a640378698d85 11-Aug-2014 Mathieu Chartier <mathieuc@google.com> Move explicit GC after we are done initalizing all classes.

Previously we had the GC happen for each dex file, this added a
few seconds of time on boot.oat creation.

Bug: 16853450

(cherry picked from commit 093ef212b7db4c17ed62df5cac0c1ac3a24e691d)

Change-Id: Ia469838eff1550c175c3465a478d8081023601bd
ompiler_driver.cc
cb6b0f31ede2275e79e6199ec391147585a37a2a 12-Aug-2014 Ian Rogers <irogers@google.com> Avoid use of std::string where we have const char*.

Removing the ClassHelper caused std::string creation for all calls to
Class::GetDescriptor and a significant performance regression. Make the
std::string an out argument so the caller can maintain it and its life time
while allowing GetDescriptor to return the common const char* case.

Don't generate GC maps when compilation is disabled.

Remove other uses of std::string that are occuring on critical paths.
Use the cheaper SkipClass in CompileMethod in CompilerDriver.
Specialize the utf8 as utf16 comparison code for the common shorter byte
encoding.
Force a bit of inlining, remove some UNLIKELYs (they are prone to pessimizing
code), add some LIKELYs.

x86-64 host 1-thread interpret-only of 57 apks:
Before: 29.539s
After: 23.467s

Regular compile:
Before: 1m35.347s
After: 1m20.056s

Bug: 16853450
Change-Id: Ic705ea24784bee24ab80084d06174cbf87d557ad

Conflicts:
runtime/utils.cc
ompiler_driver.cc
ompiler_driver.h
0171987facdea1f4e22d0b5880dcde38a816adb1 29-Jul-2014 Andreas Gampe <agampe@google.com> ART: Skip compiling redefined classes in apps

If for an app a class is defined in more than one dex file, skip
all classes after the first.

Bug: 16057120

(cherry picked from commit de7b43626c49567cefb258669aac70a289b74b85)

Change-Id: I461942f762354b696c305dcae3a0d1c7de40f9df
ompiler_driver.cc
ompiler_driver.h
4ef12f5b0e26c6016c87866f6a33da5ed8e98d74 01-Aug-2014 Andreas Gampe <agampe@google.com> ART: Add guards to the dex cache and its shortcuts

Do not return fields, methods or classes if the (declaring) class is
erroneous.

Bug: 16692788

(cherry picked from commit 58a5af8568d224ca7eccf2483396ff9862f8d1ee)

Change-Id: I7d3e4cb8113e2e764ed7433eed25e1031e6a0f14
ompiler_driver.cc
345c4b19758703793ed31024cfb79940e2c63b75 18-Jul-2014 Alex Light <allight@google.com> Make system use patchoat to relocate during runtime.

Change dalvik_system_DexFile.cc so that isDexOptNeededInternal will be
able to indicate that a patchoat is required. Change default of relocate
option to be on.

Bug: 15358152

(cherry picked from commit 6e183f2e973a20f2eaca135c240908e1bf98c5d0)

Change-Id: Ib21f4f41b6cbf18094e3ca1a30d65a3b197b71b0
ompiler_driver.cc
c389c97ca93b73b3cb380cedfe438d153b524225 23-Jul-2014 Mingyao Yang <mingyao@google.com> Merge "Set vtable in class object to null after linking."
2cdbad7c62f126581ec5177104de961c4d71adaa 16-Jul-2014 Mingyao Yang <mingyao@google.com> Set vtable in class object to null after linking.

This is follow-up work of embedding imt and vtable for
faster interface/virtual call dispatching.
Once vtable becomes embedded, the original vtable is nulled.

Change-Id: I307696657d1e283654169dbecb8f7815c42bbabc
ompiler_driver-inl.h
a59dd80f9f48cb750d329d4d4af2d99d72b484d1 03-Jul-2014 Alex Light <allight@google.com> Runtime can now be set to require relocation

Add a pair of runtime flags -Xrelocate and -Xnorelocate that can force
the runtime to require that all files that are run are relocated, to
prevent attacks based on the known art base address.

Add support for running patchoat on oat files compiled without an image.

Change run-test to have new --prebuild and --relocate flags.

Bug: 15358152

Change-Id: I91166c62dd1ab80e5cbcb7883a2cd0d56afca32d
ompiler_driver.cc
69dfe51b684dd9d510dbcb63295fe180f998efde 11-Jul-2014 Dave Allison <dallison@google.com> Revert "Revert "Revert "Revert "Add implicit null and stack checks for x86""""

This reverts commit 0025a86411145eb7cd4971f9234fc21c7b4aced1.

Bug: 16256184
Change-Id: Ie0760a0c293aa3b62e2885398a8c512b7a946a73
ompiler_options.h
22d5e735f403c57525fe868304c7123f0ce66399 16-Jul-2014 Ian Rogers <irogers@google.com> Remove object_utils.h.

Break into object_lock, field_helper and method_helper.
Clean up header files following this.
Also tidy some of the Handle code in response to compiler errors when resolving
the changes in this CL.

Change-Id: I73e63015a0f02a754d0866bfaf58208aebcaa295
ompiler_driver-inl.h
ompiler_driver.cc
e63db27db913f1a88e2095a1ee8239b2bb9124e8 16-Jul-2014 Ian Rogers <irogers@google.com> Break apart header files.

Create libart-gtest for common runtime and compiler gtest routines.
Rename CompilerCallbacksImpl that is quick compiler specific.
Rename trace clock source constants to not use the overloaded profiler term.

Change-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933
ompiler_callbacks_impl.h
ompiler_driver_test.cc
e50383288a75244255d3ecedcc79ffe9caf774cb 04-Jul-2014 Nicolas Geoffray <ngeoffray@google.com> Support fields in optimizing compiler.

- Required support for temporaries, to be only used by baseline compiler.
- Also fixed a few invalid assumptions around locations and instructions
that don't need materialization. These instructions should not have an Out.

Change-Id: Idc4a30dd95dd18015137300d36bec55fc024cf62
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
98d1cc8033251c93786e2fa8c59a2e555a9493be 16-May-2014 Mingyao Yang <mingyao@google.com> Improve performance of invokevirtual/invokeinterface with embedded imt/vtable

Add an embedded version of imt/vtable into class object. Both tables start at
fixed offset within class object so method/entry point can be loaded directly
from class object for invokeinterface/invokevirtual.

Bug: 8142917
Change-Id: I4240d58cfbe9250107c95c0708c036854c455968
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
0025a86411145eb7cd4971f9234fc21c7b4aced1 11-Jul-2014 Nicolas Geoffray <ngeoffray@google.com> Revert "Revert "Revert "Add implicit null and stack checks for x86"""

Broke the build.

This reverts commit 7fb36ded9cd5b1d254b63b3091f35c1e6471b90e.

Change-Id: I9df0e7446ff0913a0e1276a558b2ccf6c8f4c949
ompiler_options.h
7fb36ded9cd5b1d254b63b3091f35c1e6471b90e 10-Jul-2014 Dave Allison <dallison@google.com> Revert "Revert "Add implicit null and stack checks for x86""

Fixes x86_64 cross compile issue. Removes command line options
and property to set implicit checks - this is hard coded now.

This reverts commit 3d14eb620716e92c21c4d2c2d11a95be53319791.

Change-Id: I5404473b5aaf1a9c68b7181f5952cb174d93a90d
ompiler_options.h
6b0599fc9356deaefe3c49fb883ca5b62a9f0b12 09-Jul-2014 Brian Carlstrom <bdc@google.com> Whitelist another exception during dex2oat resolving.

Bug: 15936401
Bug: 16162780
Change-Id: I7389edc8cdacd5e3c2cc7d86bbd56e8c503c34b0
ompiler_driver.cc
53cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3c 12-Jun-2014 Alex Light <allight@google.com> Add patchoat tool to Art.

Add a new executable called patchoat to art. This tool takes already
compiled images and oat files and changes their base address, acting as
a cheap form of relocation.

Add a --include-patch-information flag to dex2oat and code to add
required patch information to oat files created with the quick compiler.

Bug: 15358152

Change-Id: Ie0c580db45bb14ec180deb84930def6c3628d97d
ompiler_options.h
70b634882b523ec9795475dccc347b423cefaef6 28-Jun-2014 Mathieu Chartier <mathieuc@google.com> Only allow whitelisted exceptions during dex2oat resolving.

Previously we would clear any exceptions even though we only want
to clear NoClassDefFound and IncompatibleClassChangeError exceptions.
This meant that out of memory exceptions would incorrectly get
cleared resulting in excessively long dex2oat times when you ran out
of memory.

Bug: 15936401
Change-Id: Iba3911f2c689b8c8d7d41e8c36546f027c08e9d7
ompiler_driver.cc
f5997b4d3f889569d5a2b724d83d764bfbb8d106 20-Jun-2014 Mathieu Chartier <mathieuc@google.com> More advanced timing loggers.

The new timing loggers have lower overhead since they only push into
a vector. The new format has two types, a start timing and a stop
timing. You can thing of these as brackets associated with a
timestamp. It uses these to construct various statistics when needed,
such as: Total time, exclusive time, and nesting depth.

Changed PrettyDuration to have a default of 3 digits after the decimal
point.

Exaple of a GC dump with exclusive / total times and indenting:
I/art (23546): GC iteration timing logger [Exclusive time] [Total time]
I/art (23546): 0ms InitializePhase
I/art (23546): 0.305ms/167.746ms MarkingPhase
I/art (23546): 0ms BindBitmaps
I/art (23546): 0ms FindDefaultSpaceBitmap
I/art (23546): 0ms/1.709ms ProcessCards
I/art (23546): 0.183ms ImageModUnionClearCards
I/art (23546): 0.916ms ZygoteModUnionClearCards
I/art (23546): 0.610ms AllocSpaceClearCards
I/art (23546): 1.373ms AllocSpaceClearCards
I/art (23546): 0.305ms/6.318ms MarkRoots
I/art (23546): 2.106ms MarkRootsCheckpoint
I/art (23546): 0.153ms MarkNonThreadRoots
I/art (23546): 4.287ms MarkConcurrentRoots
I/art (23546): 43.461ms UpdateAndMarkImageModUnionTable
I/art (23546): 0ms/112.712ms RecursiveMark
I/art (23546): 112.712ms ProcessMarkStack
I/art (23546): 0.610ms/2.777ms PreCleanCards
I/art (23546): 0.305ms/0.855ms ProcessCards
I/art (23546): 0.153ms ImageModUnionClearCards
I/art (23546): 0.610ms ZygoteModUnionClearCards
I/art (23546): 0.610ms AllocSpaceClearCards
I/art (23546): 0.549ms AllocSpaceClearCards
I/art (23546): 0.549ms MarkRootsCheckpoint
I/art (23546): 0.610ms MarkNonThreadRoots
I/art (23546): 0ms MarkConcurrentRoots
I/art (23546): 0.610ms ScanGrayImageSpaceObjects
I/art (23546): 0.305ms ScanGrayZygoteSpaceObjects
I/art (23546): 0.305ms ScanGrayAllocSpaceObjects
I/art (23546): 1.129ms ScanGrayAllocSpaceObjects
I/art (23546): 0ms ProcessMarkStack
I/art (23546): 0ms/0.977ms (Paused)PausePhase
I/art (23546): 0.244ms ReMarkRoots
I/art (23546): 0.672ms (Paused)ScanGrayObjects
I/art (23546): 0ms (Paused)ProcessMarkStack
I/art (23546): 0ms/0.610ms SwapStacks
I/art (23546): 0.610ms RevokeAllThreadLocalAllocationStacks
I/art (23546): 0ms PreSweepingGcVerification
I/art (23546): 0ms/10.621ms ReclaimPhase
I/art (23546): 0.610ms/0.702ms ProcessReferences
I/art (23546): 0.214ms/0.641ms EnqueueFinalizerReferences
I/art (23546): 0.427ms ProcessMarkStack
I/art (23546): 0.488ms SweepSystemWeaks
I/art (23546): 0.824ms/9.400ms Sweep
I/art (23546): 0ms SweepMallocSpace
I/art (23546): 0.214ms SweepZygoteSpace
I/art (23546): 0.122ms SweepMallocSpace
I/art (23546): 6.226ms SweepMallocSpace
I/art (23546): 0ms SweepMallocSpace
I/art (23546): 2.144ms SweepLargeObjects
I/art (23546): 0.305ms SwapBitmaps
I/art (23546): 0ms UnBindBitmaps
I/art (23546): 0.275ms FinishPhase
I/art (23546): GC iteration timing logger: end, 178.971ms

Change-Id: Ia55b65609468f212b3cd65cda66b843da42be645
ompiler_driver.cc
ompiler_driver_test.cc
08f7a2d06b915a5e21ded648d9feee519afd2f76 23-Jun-2014 Calin Juravle <calin@google.com> Log profile info only on debug builds.

Change-Id: I80cce951bf4cce988c9ab8373be3e335860eadf3
ompiler_driver.cc
5655e84e8d71697d8ef3ea901a0b853af42c559e 18-Jun-2014 Andreas Gampe <agampe@google.com> ART: Implicit checks in the compiler are independent from Runtime

When cross-compiling, those flags are independent. This is an
initial CL that helps bypass fatal failures when cross-compiling,
as not all architectures support (and have turned on) implicit
checks.

The actual transport for the target architecture when it is
different from the runtime needs to be implemented in a follow-up
CL.

Bug: 15703710
Change-Id: Idc881a9a4abfd38643b862a491a5af9b8841f693
ompiler_options.h
073ed9ba97df41862403f64d7a2e824d09ab50ed 14-Jun-2014 Andreas Gampe <agampe@google.com> ART: Ignore timing issues in debug builds

When in debug builds, do not warn about slow verification and
compilation.

Change-Id: Ib982e1c7cf40cf624688bbf6c41f0a7cc53bbc67
ompiler_driver.cc
78382fa44ee505cf16835e4d22515e7252a90864 07-Jun-2014 Alex Light <allight@google.com> Optionally add debug symbols to ELF files made by quick compiler.

Added debug symbols to ELF files created by dex2oat using
the quick compiler. Adds two flags --include-debug-symbols and
--no-include-debug-symbols for dex2oat that control the inclusion of these
debug symbols. Debug info is added by default if kIsDebugBuild is true.

Fixed bug where Intel DWARF information would not correctly deal with
deduplicated code the binary.

Changed the portable compiler code path in dex2oat.cc so that symbols
will not be stripped when run with --include-debug-symbols.

Change-Id: Ia2eb2f654dedf0e5e8606f7744e05b8d14155fb1
ompiler_driver.h
ompiler_options.h
bfd9a4378eacaf2dc2bbe05ad48c5164fc93c9fe 22-May-2014 Mathieu Chartier <mathieuc@google.com> Change MethodHelper to use a Handle.

Added ConstHandle to help prevent errors where you modify the value
stored in the handle of the caller. Also fixed compaction bugs
related to not knowing MethodHelper::GetReturnType can resolve types.
This bug was present in interpreter RETURN_OBJECT.

Bug: 13077697

Change-Id: I71f964d4d810ab4debda1a09bc968af8f3c874a3
ompiler_driver.cc
4479ba35389b03ccc9eabd17fba6168f9505517a 07-Jun-2014 Mathieu Chartier <mathieuc@google.com> Merge "Change FieldHelper to use a handle."
61c5ebc6aee2cac1c363de6fbdac25ada1697fdb 06-Jun-2014 Mathieu Chartier <mathieuc@google.com> Change FieldHelper to use a handle.

Fixed compaction bugs related to FieldHelper::GetType in:
artSet32InstanceFromCode
SetFieldValueImpl
CheckReceiver
Field_set
interpreter::DoFieldPut
MethodVerifier::VerifyISGet
MethodVerifier::VerifyISPut
MethodVerifier::VerifyIGetQuick

Bug: 13077697

Change-Id: I7de9ded2893b5568d43e4daa86fd135bf5508b72
ompiler_driver-inl.h
20aa7cbe93d782e0e756a36e70d610fe84b4bbb4 06-Jun-2014 Calin Juravle <calin@google.com> Merge "Fixed and refactored profiler options handling"
c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6 31-May-2014 Calin Juravle <calin@google.com> Fixed and refactored profiler options handling

- extracted profiler options in a separate class
- switched from system property reading to command line arguments
- added profile based compilation options to CompilerOptions
- removed no longer used kProfile compilation filter
- optimize dex files only if the profiler is enabled
- clean up unused arguments

Bug: 12877748
Bug: 15275634
Change-Id: I37ff68e7694370950ce8db2360562e9058ecebb7
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
eab52e3318dd0ab0f357a8420f0a8ccea69d61f1 06-Jun-2014 Calin Juravle <calin@google.com> Merge "Clean up the sampling profiler"
bb0b53f58f11c628f077603b56077dfed1a18f11 23-May-2014 Calin Juravle <calin@google.com> Clean up the sampling profiler

- rename variables/fields names to match the code style (use
_underscore_names_)
- extract common property parsing in utils.cc
- fail to load profile file if any line is malformed
- added ProfileFile to manage the profile data generate in the previous
runs (replaces ProfileHelper and nests ProfileData)

Bug: 12877748
Change-Id: Ie7bda30bfdeb7e78534c986615b0649eac12a97b
ompiler_driver.cc
ompiler_driver.h
a309d76d4c9f4e5564b09708004bf4b2e3401bb3 26-May-2014 Serguei Katkov <serguei.i.katkov@intel.com> Fix GC race condition in visit roots

While GC visits roots other code can change the set pending exception
due to lack of synchronization.

Change-Id: If387944ac933a66fe176df066c3a0ea52131cad4
Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ompiler_driver_test.cc
e0099d4d4839cabfb26270a746580e9d4ec3a6c6 27-May-2014 Andreas Gampe <agampe@google.com> ART: Fix sharpening across dex files

Bug: 15196336
Change-Id: If4301bcddce0ddbc60bb33403e4a76eed35bcb2f
ompiler_driver.cc
0cd81352a7c06e381951cea1b104fd73516f4341 23-May-2014 Mathieu Chartier <mathieuc@google.com> Revert "Revert "Fix an outstanding compaction bug in interpreter.""

Fixed the generic trampoline to not use ToJObject when unnecessary.

Bug: 15167269

This reverts commit 3bdb873122964da7937eb070cbcf2ef638a8e459.

Change-Id: I0525d0e0f3afb753c770e1572070a0fa22b02271
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
3bdb873122964da7937eb070cbcf2ef638a8e459 23-May-2014 Mathieu Chartier <mathieuc@google.com> Revert "Fix an outstanding compaction bug in interpreter."

This reverts commit e09ae0920be57760fb390b6944bce420fa0b5582.

Change-Id: I48036306130d5ccfec683d0dc3e9a642a02ee9c1
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
e09ae0920be57760fb390b6944bce420fa0b5582 15-May-2014 Mathieu Chartier <mathieuc@google.com> Fix an outstanding compaction bug in interpreter.

Fixed a bug in DoFieldPut where the FieldHelper GetType could cause
thread suspension which would result in a stale obj.

Added more handles in the class linker to facilitate moving fiels
and methods in the future.

Removed un-necessarly passing handle references since these are value
types and don't need to be passed by reference.

Added a special NullHandle type which allows null handles without a
handle scope.

Change-Id: I1b51723920a2e4f4f8b2907066f578a3e879fd5b
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
7bf9c46e93c6f7551f2645cf9bbd1ec9f797c86c 22-May-2014 Vladimir Marko <vmarko@google.com> Merge "Method inlining across dex files in boot image."
a51a0b0300268b605e3ad71b0e87ff394032c5e7 21-May-2014 Vladimir Marko <vmarko@google.com> Method inlining across dex files in boot image.

Fix LoadCodeAddress() and LoadMethodAddress() to use the dex
file in addition to the method index to uniquely identify
the literal. With that fix in place, when we have both the
direct code and the direct method, we can safely pass the
actual target method id instead of the method id from the
same dex file in the method lowering info. This was already
done for calls from apps into boot image (and thus there was
a bug with a tiny risk of the wrong literal being used) and
now we also do that for calls within the boot image. The
latter allows the inlining pass to inline many more methods
than before in the boot image.

Bug: 15021903
Change-Id: Ic765ce9809b43ef07e7db32b8e3fbc9acb09147f
ompiler_driver.cc
3e5cf305db800b2989ad57b7cde8fb3cc9fa1b9e 21-May-2014 Ian Rogers <irogers@google.com> Begin migration of art::Atomic to std::atomic.

Change-Id: I4858d9cbed95e5ca560956b9dabd976cebe68333
ompiler_driver.cc
700a402244a1a423da4f3ba8032459f4b65fa18f 20-May-2014 Ian Rogers <irogers@google.com> Now we have a proper C++ library, use std::unique_ptr.

Also remove the Android.libcxx.mk and other bits of stlport compatibility
mechanics.

Change-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
f832284dd847ff077577bb5712225430bbbb3b67 16-May-2014 Mathieu Chartier <mathieuc@google.com> Delete ClassHelper and fix compaction bug in GetDirectInterface

Cleanup helps to prevent compaction bugs. Fixed a fairly serious
compaction error caused by calling ClassHelper::GetDirectInterface
without handling the case where it causes thread suspension due to
ResolveType.

Bug: 8981901

Change-Id: I82b3bb6dd48d21eb6ece7aae0733c4a23c2bc408
ompiler_driver.cc
db2633ce0358c704f97130a94b582602cb01d14a 16-May-2014 Mathieu Chartier <mathieuc@google.com> Change ObjectLock to take Handle instead of Handle pointer.

Change-Id: I9abdcdc5c9c9174634336b9250ab24c6aee434ec
ompiler_driver.cc
507dfdd147c97bfbadebfd63584d094b6a4e7b47 16-May-2014 Ian Rogers <irogers@google.com> Compatibility layer to transition from UniquePtr to std::unique_ptr.

Use ART_WITH_STLPORT (enabled for the target) to cause the use of UniquePtr,
for the host switch to std::unique_ptr. For now the type remains called
UniquePtr.
Make dalvik compile with clang on the host, move its build to C++11.

Change-Id: I5ba8d2757904bc089ed62047ea03de3c0853fb12
ompiler_driver_test.cc
20cdc069f06f34828e51bcf89597bebe5df445d5 14-May-2014 Kenny Root <kroot@google.com> Merge "Changes for vogar compatibility"
d5185344e19d9feb7ac268369e0af6a467d1cb48 13-May-2014 Kenny Root <kroot@google.com> Changes for vogar compatibility

Make sure dex2oat can make an image with an empty list of image_classes.
Add in some checks to make sure that no bad arguments sneak into
CompilerDriver.

If we're not on the ART_TARGET, we should check for the "hostdex"
versions of the libraries to substitute in our libart version.

Change-Id: I5e8485c6089d25664492f0217b43ef64ca84c061
ompiler_driver.cc
eb8167a4f4d27fce0530f6724ab8032610cd146b 08-May-2014 Mathieu Chartier <mathieuc@google.com> Add Handle/HandleScope and delete SirtRef.

Delete SirtRef and replaced it with Handle. Handles are value types
which wrap around StackReference*.

Renamed StackIndirectReferenceTable to HandleScope.

Added a scoped handle wrapper which wraps around an Object** and
restores it in its destructor.

Renamed Handle::get -> Get.

Bug: 8473721

Change-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
72d32629303f8f39362a4099481f48646aed042f 07-May-2014 Ian Rogers <irogers@google.com> Give Compiler a back reference to the driver.

The compiler driver is a single object delegating work to the compiler, rather
than passing it through to every Compiler call make it a member of Compiler so
that it maybe queried. This simplifies the Compiler API and makes the
relationship to CompilerDriver more explicit.
Remove reference arguments that contravene code style.

Change-Id: Iba47f2e3cbda679a7ec7588f26188d77643aa2c6
ompiler_driver.cc
c45b8b582be5c98941ca3869fcdc9a08d520da41 03-May-2014 Ian Rogers <irogers@google.com> Create stack traces in unstarted runtimes.

Use to diagnose failed initialization in dex2oat of boot (-verbose:compiler).
Fix identity hashCode, ArtMethod.getMethodName, IntegralToString.convertInt and
use of Void when called from a unstarted runtime.

Change-Id: I2d536174b59e2e5f19519f93fc6b5916652fb6cd
ompiler_driver.cc
8668c3cbdcf9471bd97e0da68a240051f2973074 25-Apr-2014 Mathieu Chartier <mathieuc@google.com> Add finalizer references from the entrypoints.

We now have an invariant where we never allocate finalizable
objects with the Initialized or Resolved entrypoints. This speeds up
allocation by only doing the check in the slow path.

Before:
MemAllocTest: 3625, 3707, 3641
EvaluateAndApplyChanges: 3448, 3421, 3413

After:
MemAllocTest: 3164, 3109, 3135
EvaluateAndApplyChanges: 3272, 3299, 3353

Bug: 14078487

Change-Id: I2b0534af3e7c75ea5e5257cf3647744f7abfb74e
ompiler_driver.cc
ompiler_driver.h
af13ad9fd18b6f75fe82e7995224c55654594f93 11-Apr-2014 Andreas Gampe <agampe@google.com> Centralize instruction-set pointer-size, alignment, 64b-width code
in instruction_set.h/cc

This allows to clean up some places that currently make explicit
comparisons.

Change-Id: I0dcc924c52fa53306f706aceea93a2d4a655c5df
ompiler_driver.cc
ompiler_driver.h
644789fa0e807a9aa6d6e32d36ce039ec7318a7f 10-Apr-2014 Dave Allison <dallison@google.com> Fix problem with empty profiles.

This fixes an issue where a profile file was created by the installer
but never written by the runtime. This happens when profiles are off.
This caused the compiler to think that there are no methods worthy
of compilation and skipped everything.

Bug: 13960166
Change-Id: I4c4598d4746218e21ca949112071dc1424d7d1f9
ompiler_driver.cc
d6ed642458c8820e1beca72f3d7b5f0be4a4b64b 10-Apr-2014 Dave Allison <dallison@google.com> Revert "Revert "Revert "Use trampolines for calls to helpers"""

This reverts commit f9487c039efb4112616d438593a2ab02792e0304.

Change-Id: Id48a4aae4ecce73db468587967968a3f7618b700
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
f9487c039efb4112616d438593a2ab02792e0304 09-Apr-2014 Dave Allison <dallison@google.com> Revert "Revert "Use trampolines for calls to helpers""

This reverts commit 081f73e888b3c246cf7635db37b7f1105cf1a2ff.

Change-Id: Ibd777f8ce73cf8ed6c4cb81d50bf6437ac28cb61

Conflicts:
compiler/dex/quick/mir_to_lir.h
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
0833af65c87b9f1c900e70a41c04d2dcdbd0c9c7 08-Apr-2014 Calin Juravle <calin@google.com> Merge "Tweaked profile significant_difference."
081f73e888b3c246cf7635db37b7f1105cf1a2ff 07-Apr-2014 Dave Allison <dallison@google.com> Revert "Use trampolines for calls to helpers"

This reverts commit 754ddad084ccb610d0cf486f6131bdc69bae5bc6.

Change-Id: Icd979adee1d8d781b40a5e75daf3719444cb72e8
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
9dae5b4b952824da45e9fd9c12cfcde9858f0974 07-Apr-2014 Calin Juravle <calin@google.com> Tweaked profile significant_difference.

- renamed to 'change_thr'
- now it represents how much the top K leading samples need to change
(in percents) in order to trigger compilation.
- extracted ProfileData & file parsing in profiler.h

Bug: 12877748
Change-Id: I10f66120dd5e68b8a690bfa0e9914c07f63c50d5
ompiler_driver.cc
ompiler_driver.h
754ddad084ccb610d0cf486f6131bdc69bae5bc6 19-Feb-2014 Dave Allison <dallison@google.com> Use trampolines for calls to helpers

This is an ARM specific optimization to the compiler
that uses trampoline islands to make calls to runtime
helper functions. The intention is to reduce the size
of the generated code (by 2 bytes per call) without
affecting performance.

By default this is on when generating an OAT file. It is
off when compiling to memory.

To switch this off in dex2oat, use the command line option:
--no-helper-trampolines

Enhances disassembler to print the trampoline entry on the
BL instruction like this:

0xb6a850c0: f7ffff9e bl -196 (0xb6a85000) ; pTestSuspend

Bug: 12607709
Change-Id: I9202bdb7cf21252ad807bd48701f1f6ce8e3d0fe
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
17965ed6ec29407599a0bcd4ea92532424294fed 04-Apr-2014 Sebastien Hertz <shertz@google.com> Re-enable DEX-to-DEX compilation path

Bug: 13807032
Change-Id: I6de7adb81a0f955a93257b83db9ad689ebcd90ad
ompiler_driver.cc
5a4139fd33547d09c94d9650157e3a4e4c9eede4 03-Apr-2014 Bill Buzbee <buzbee@android.com> Merge "art: Handle x86_64 architecture equal to x86"
5cc2d076cb7854ec2327895e5586f4cbe5e3ee70 03-Apr-2014 Calin Juravle <calin@google.com> Merge "Profile: renamed kThresholdPercent and make it configurable"
317055b5a75f84c09647f099efe766708da5bfb8 03-Apr-2014 Calin Juravle <calin@google.com> Merge "Profile: repurposed kTresholdPercent"
6a58cb16d803c9a7b3a75ccac8be19dd9d4e520d 02-Apr-2014 Dmitry Petrochenko <dmitry.petrochenko@intel.com> art: Handle x86_64 architecture equal to x86

This patch forces FE/ME to treat x86_64 as x86 exactly.
The x86_64 logic will be revised later when assembly will be ready.

Change-Id: I4a92477a6eeaa9a11fd710d35c602d8d6f88cbb6
Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
ompiler_driver.cc
4a200f56b7075309316b04d550c9cc50f8314edd 01-Apr-2014 Jeff Hao <jeffhao@google.com> Add support for -Xverify:none mode.

This mode skips all verification and compilation.
Public bug: https://code.google.com/p/android/issues/detail?id=67664

Change-Id: Idd00ab8e9e46d129c02988b063c41a507e07bf5b
ompiler_driver.cc
ompiler_options.h
04ff226764b125c79a0bf41e571c8311bac8a868 02-Apr-2014 Calin Juravle <calin@google.com> Profile: renamed kThresholdPercent and make it configurable

Bug: 12877748
Change-Id: If266f20f77faad4a726ef8df451a0c42f541392f
ompiler_driver.cc
f6a4cee66a173ee7ef48af5503d9899aa93b3aeb 02-Apr-2014 Calin Juravle <calin@google.com> Profile: repurposed kTresholdPercent

Previously kTresholdPercent was the percentage of samples of the total
that a method must comprise before compiling.

I changed it to mean the threshold for a running total...i.e. compile
all the methods that comprise K% of the samples cumulatively.

(in the process fixed ProfileData#percent doc and changed its name)

Bug: 12877748
Change-Id: Ib0e18e525a16c11b189afc3d840c09183ac629de
ompiler_driver.cc
ompiler_driver.h
161f71ab4449047157ad3d967a3ed4f7c6e17249 02-Apr-2014 Calin Juravle <calin@google.com> Merge "Fixed total method count in profile file parsing."
ea1e520e5a4b52b668ea2f9d3abdd9ae3a192186 02-Apr-2014 Calin Juravle <calin@google.com> Fixed total method count in profile file parsing.

Change-Id: Iae38b3ca296378d17f054ac330301035ec684084
ompiler_driver.cc
dd7624d2b9e599d57762d12031b10b89defc9807 15-Mar-2014 Ian Rogers <irogers@google.com> Allow mixing of thread offsets between 32 and 64bit architectures.

Begin a more full implementation x86-64 REX prefixes.
Doesn't implement 64bit thread offset support for the JNI compiler.

Change-Id: If9af2f08a1833c21ddb4b4077f9b03add1a05147
ompiler_driver.cc
ompiler_driver.h
6673338f41c5f2f134ae83219670d9f0b9e1a6e7 20-Mar-2014 Hiroshi Yamauchi <yamauchi@google.com> Merge "Make test-art pass with heap reference poisoning enabled."
b95a5345ae4217b70ca36f0cced92f68dda7caf5 12-Mar-2014 Stuart Monteith <stuart.monteith@arm.com> AArch64: Add arm64 runtime support.

Adds support for arm64 to ART. Assembler stubs are sufficient for
down calls into interpreter. JNI compiler and generics are not finished.

Basic Generic JNI functionality.

Change-Id: I4a07c79d1e037b9f5746673480e32cf456867b82
ompiler_driver.cc
05b15d6e896af7ae0075a690ea791e2e92ecf443 19-Mar-2014 Hiroshi Yamauchi <yamauchi@google.com> Make test-art pass with heap reference poisoning enabled.

Heap reference poisoning is currently interpreter only. This change
disables one compiler driver test that actually invokes compiled code
if heap reference poisoning is enabled.

Bug: 12687968
Change-Id: Ia9516f4067d84e9a4de50d9ff44cfbe38f282d16
ompiler_driver_test.cc
9820b7c1dc70e75ad405b9e6e63578fa9fe94e94 02-Jan-2014 Vladimir Marko <vmarko@google.com> Early inlining of simple methods.

Inlining "special" methods: empty methods, methods returning
constants or their arguments, simple getters and setters.

Bug: 8164439
Change-Id: I8c7fa9c14351fbb2470000b378a22974daaef236
ompiler_driver-inl.h
ompiler_driver.h
0188ab739c3ef8bcd521d88f84894db8c0f012c5 18-Mar-2014 Ian Rogers <irogers@google.com> Fix comment typo.

Change-Id: Ib03f4e5dbdf380f9c94f7a18c1ea755b03c1fe3e
ompiler_driver.cc
5b27149ce3cbf39f99c9d9c8ba5ebf1657c297e1 14-Mar-2014 Ian Rogers <irogers@google.com> Use quick generic JNI calls based on compiler driver options.

Change-Id: Ic70f4b9b5759eb11b35677c0039fb00eb1c4c506
ompiler_driver.cc
9545a446e99b22248099fe66f5f9431530c20851 13-Mar-2014 Jeff Hao <jeffhao@google.com> Merge "Allow patching between dex files in the boot classpath."
9758f79a6c1ef7f662caca9c1df39de1934166b8 13-Mar-2014 Ian Rogers <irogers@google.com> Implement FINAL/OVERRIDE for clang.

Separate declaration from definition in certain places to work-around issues
with clang.
Remove bogus lock annotation at definition in compilers.cc that is already
present at the declaration.
Remove duplicate definition of ClassReference.

Change-Id: I5368057bb36319a259110b2198610d9d2b2e5041
ompiler_callbacks_impl.h
b9d50a9829b795932eac4cc50a99b4ce80b0ecb4 13-Mar-2014 Vladimir Marko <vmarko@google.com> Merge "Move inline method detection to runtime."
b34f69ab43aaf7a6e6045c95f398baf566ef5023 07-Mar-2014 Nicolas Geoffray <ngeoffray@google.com> Add command line support for enabling the optimizing compiler.

Also run tests with the optimizing compiler enabled when
the file art/USE_OPTIMIZING_COMPILER is present.

Change-Id: Ibc33eed62a43547bc3b9fe786d014c0d81b5add8
ompiler_driver.cc
ompiler_driver.h
49161cef10a308aedada18e9aa742498d6e6c8c7 12-Mar-2014 Jeff Hao <jeffhao@google.com> Allow patching between dex files in the boot classpath.

Change-Id: I53f219a5382d0fcd580e96e50025fdad4fc399df
ompiler_driver.cc
ompiler_driver.h
e3e0260c23d8999b9433715ac7ee5296ee2fd633 12-Mar-2014 Vladimir Marko <vmarko@google.com> Move inline method detection to runtime.

The debugger needs this for selective deoptimization.

Change-Id: I8100000449b56e619288fb05d41ea6f02b53b334
ompiler_driver.cc
ompiler_driver.h
f096aad9203d7c50b2f9cbe1c1215a50c265a059 23-Jan-2014 Vladimir Marko <vmarko@google.com> Cache method lowering info in mir graph.

This should enable easy inlining checks. It should also
improve compilation time of methods that call the same
methods over and over - it is exactly such methods that
tend to exceed our 100ms time limit.

Change-Id: If01cd18e039071a74a1444570283c153429c9cd4
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
a03de6dbabbe857deae5b0f1e388fbd3a2420dc2 09-Mar-2014 Ian Rogers <irogers@google.com> Revert "Revert "Make clang the default compiler on host.""

This reverts commit d54f3a6219bca6ae018f4395fa0f1254bd4459be.

Change-Id: Id96bb52a0d599f8848010d1589bdf0f70fc7124b
ompiler_driver.h
d54f3a6219bca6ae018f4395fa0f1254bd4459be 08-Mar-2014 Ian Rogers <irogers@google.com> Revert "Make clang the default compiler on host."

This reverts commit 87f8b4cf0c1d6aab3eb5d1e99cc4e7cf175ef772.

Change-Id: I91a513042f0f9cf66288a296ad4a3b5da7830c7b
ompiler_driver.h
87f8b4cf0c1d6aab3eb5d1e99cc4e7cf175ef772 07-Mar-2014 Ian Rogers <irogers@google.com> Make clang the default compiler on host.

Motivation, GCC's compiler warnings are inferior to clang's. -Wthread-safety is
not supported by GCC starting with version 4.7. As this change only effects the
host, performance issues are an impact on host building and testing alone.
Fix clang gtest building on host with BUILD_HOST_64bit.
Fix clang build regressions caused by unused fields.
Fix x86-64 regression caused by requirement to fire-up quick compiler even in an
interpret-only environment. Long-term this code doesn't belong in the quick
compiler.

Change-Id: Ifc2b10177f40d0724cbbf8dab9653ac03cdd1cee
ompiler_driver.h
39c3bfbd03d85c63cfbe69f17ce5800ccc7d6c13 29-Jan-2014 Dave Allison <dallison@google.com> Make use of profiling information for dex2oat

If the profile file exists, the compiler driver will read it
and store the data in an internal map. Then, when we want to work
out whether to compile a method or not, the map is consulted and if
the method shows up with a high enough percentage of use we compile it.

The profile file itself is created by installd and is writeable by the
app. The file is in /data/dalvik-cache/profiles and is named by
the package name.

This also modifies the profiler itself to:

1. Only count runnable threads (not suspended threads) in the profile
2. Use system properties to allow tuning of the profile parameters
3. Merge profiles from multiple processes using file locking.

Bug: 12877748
Change-Id: Iab2f3a327a2860db2a80d5724277d6c626227f2b

Conflicts:
compiler/dex/frontend.cc
compiler/dex/mir_analysis.cc
compiler/dex/verification_results.cc
compiler/driver/compiler_driver.cc
dex2oat/dex2oat.cc
runtime/class_linker.cc
runtime/runtime.cc
runtime/runtime.h
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
c645f1ddb7c40bea6a38eda4b3f83f6b6dec405b 07-Mar-2014 Mathieu Chartier <mathieuc@google.com> Add more VerifyObject calls.

Added verify object calls to SirtRef, IndirectReferenceTable,
ReferenceTable.

Removed un-needed verify object in ScopedObjectAccess / DecodeJObject
since object sources are handled.

Bug: 12934910
Change-Id: I55a46a8ea61fed2a77526eda27fd2cce97a9b125
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
c0a1b18ac71ec0ff3ec0cca3cc8db9eb74e50690 05-Mar-2014 Brian Carlstrom <bdc@google.com> Reuse NoopCompilerCallbacks in oatdump

Change-Id: Icb4d3941196c1a236f0184fe4d0b7f5838bc13bd
ompiler_callbacks_impl.h
2da882315a61072664f7ce3c212307342e907207 27-Feb-2014 Andreas Gampe <agampe@google.com> Initial changes towards Generic JNI option

Some initial changes that lead to an UNIMPLEMENTED. Works
by not compiling for JNI right now and tracking native methods
which have neither quick nor portable code. Uses new trampoline.

Change-Id: I5448654044eb2717752fd7359f4ef8bd5c17be6e
ompiler_driver.cc
ompiler_driver.h
be0e546730e532ef0987cd4bde2c6f5a1b14dd2a 26-Feb-2014 Vladimir Marko <vmarko@google.com> Cache field lowering info in mir_graph.

Change-Id: I9f9d76e3ae6c31e88bdf3f59820d31a625da020f
ompiler_driver-inl.h
ompiler_driver.cc
ompiler_driver.h
ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4 11-Feb-2014 Mark Mendell <mark.p.mendell@intel.com> Tell GDB about Quick ART generated code

This is actually a lot of work. To do this, we need:
.debug_info
.debug_abbrev
.debug_frame
.debug_str

These are generated into the OAT file by OatWriter and ElfWriterQuick.

Since the Quick ART runtime doesn't use dlopen to load the OAT files,
GDB can't find this information. Use the alternate GDB JIT interface,
which can be invoked at runtime. To use this interface, an ELF image
needs to be built in memory. Read the information from the OAT file,
fixup the addresses to point to the real locations, add a symbol table
to hold the .text symbol, and then let GDB know about the information,
which will be read from the runtime address space.

This is quite primitive now, and could be cleaned up considerably. It
probably needs symbol table entries for the methods, and descriptions of
parameters and return types.

Currently only supported for X86.

This defaults to enabled for debug builds. Added dexoat --gen-gdb-info
and --no-gen-gdb-info flags to override.

Change-Id: I4d18b2370f6dfaa00c8cc1925f10717be3bd1a62
Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
3d504075f7c1204d581923460754bf6d3714b13f 01-Mar-2014 Ian Rogers <irogers@google.com> Make out arguments non-reference types.

Also, tidy some portable related code.

Change-Id: I67c8aa52eef8b556ca117ecda1b1e75465ba06a5
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
b48b9eb6d181a1f52e2e605cf26a21505f1d46ed 01-Mar-2014 Ian Rogers <irogers@google.com> Fix clang to compile and run host tests.

Don't use the computed goto interpreter with clang 3.4 as it causes compilation
to hang.
Avoid inclusion of LLVM_(HOST|DEVICE)_BUILD_MK except for with portable as it
sets clang incompatible cflags.
Most fixes are self-evident, for the quick dex file method inliner the enums
were being used with ostreams, so fix the enums and operator out python script
to allow this.
Note this change effects portable but this is untestable as portable was broken
by ELF file and mc linker changes.

Change-Id: Ia54348f6b1bd3f76d3b71c6e8c5f97626386b903
ompiler_driver.h
a1ce1fef2d49d1d537776a5308ace7102a815fe5 25-Feb-2014 Brian Carlstrom <bdc@google.com> Split up CommonTest into CommonRuntimeTest and CommonCompilerTest

Change-Id: I8dcf6b29a5aecd445f1a3ddb06386cf81dbc9c70
ompiler_driver_test.cc
ae7083dac2db59dcdef869e35ac44a039d888ee9 25-Feb-2014 Brian Carlstrom <bdc@google.com> Add additional const

Change-Id: Ibf60cd4cfbb445189efe2439899f2a7084f1ea63
ompiler_callbacks_impl.h
ompiler_driver.h
fffb0b7e23796e5470f4fab4611f2fcc4a16979c 25-Feb-2014 Brian Carlstrom <bdc@google.com> Merge "Create CompilerOptions"
9837939678bb5dcba178e5fb00ed59b5d14c8d9b 25-Feb-2014 Ian Rogers <irogers@google.com> Avoid std::string allocations for finding an array class.

Introduce ClassLinker::FindArrayClass which performs an array class lookup
given the element/component class. This has a 16 element cache of recently
looked up arrays.
Pass the current thread to ClassLinker Find .. Class routines to avoid calls
to Thread::Current().
Avoid some uses of FindClass in the debugger where WellKnownClasses is a
faster and more compacting GC friendly alternative.

Change-Id: I60e231820b349543a7edb3ceb9cf1ce92db3c843
ompiler_driver.cc
ompiler_driver_test.cc
6449c62e40ef3a9bb75f664f922555affb532ee4 11-Feb-2014 Brian Carlstrom <bdc@google.com> Create CompilerOptions

Package up most compiler related options in CompilerOptions. Details include:
- Includes compiler filter, method thresholds, SEA IR mode.
- Excludes those needed during Runtime::Init such as CompilerCallbacks and VerificationResults.
- Pass CompilerOptions to CompilerDriver.
- Remove CompilerOptions from Runtime.
- Add ability to pass options for app and image dex2oat to runtime via
-Xcompiler-option and -Ximage-compiler-option respectively.

Other
- Replace 2x CompilerCallbacks implementations with one.
- Factor out execv code for use by both image and oat generation.
- More OatFile error_msg reporting.
- DCHECK for SuspendAll found trying to run valgrind.

Change-Id: Iecb57da907be0c856d00c3cd634b5042a229e620
ompiler_callbacks_impl.h
ompiler_driver.cc
ompiler_driver.h
ompiler_options.h
9c86a0279aaf953377aa9e2277592e68bf814989 21-Feb-2014 Ian Rogers <irogers@google.com> Revert "Annotate used fields."

This reverts commit 7f6cf56942c8469958b273ea968db253051c5b05.

Change-Id: Ic389a194c3404ecb5bb563a405bf4a0d6336ea0d
ompiler_driver.cc
ompiler_driver.h
7f6cf56942c8469958b273ea968db253051c5b05 29-Jan-2014 Vladimir Marko <vmarko@google.com> Annotate used fields.

Annotate all fields used by a method early during the
compilation, check acces rights and record field offset,
volatility, etc. Use these annotations when generating code
for IGET/IPUT/SGET/SPUT instructions.

Change-Id: I4bbf5cca4fecf53c9bf9c93ac1793e2f40c16b5f
ompiler_driver.cc
ompiler_driver.h
f3e2cc4a38389aa75eb8ee3973a535254bf1c8d2 18-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Code cleanup to avoid LLVM dependency when building with quick only.

Change-Id: I0985c227d775c72fd23975d4c9bf673ba32615c2
ompiler_driver.cc
ompiler_driver.h
818f2107e6d2d9e80faac8ae8c92faffa83cbd11 18-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Re-apply: Initial check-in of an optimizing compiler.

The classes and the names are very much inspired by V8/Dart.
It currently only supports the RETURN_VOID dex instruction,
and there is a pretty printer to check if the building of the
graph is correct.

Change-Id: I28e125dfee86ae6ec9b3fec6aa1859523b92a893
ompiler_driver.h
1af0c0b88a956813eb0ad282664cedc391e2938f 19-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Revert "Initial check-in of an optimizing compiler."

g++ warnings turned into errors.

This reverts commit 68a5fefa90f03fdf5a238ac85c9439c6b03eae96.

Change-Id: I09bb95d9cc13764ca8a266c41af04801a34b9fd0
ompiler_driver.h
68a5fefa90f03fdf5a238ac85c9439c6b03eae96 18-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Initial check-in of an optimizing compiler.

The classes and the names are very much inspired by V8/Dart.
It currently only supports the RETURN_VOID dex instruction,
and there is a pretty printer to check if the building of the
graph is correct.

Change-Id: Id5ef1b317ab997010d4e3888e456c26bef1ab9c0
ompiler_driver.h
2befd09cf4fe89a18a655f3e1dd310831bfa769f 18-Feb-2014 Vladimir Marko <vmarko@google.com> Merge "Expose inline method identification for debugger."
84c072c348006d87a370ad6e746e2d976cbe62f2 17-Feb-2014 Vladimir Marko <vmarko@google.com> Expose inline method identification for debugger.

Also, record only those getter/setter functions which
we really intend to inline in the short term (and which
actually have a special implementation emitted).

Change-Id: Icb8d71707a65cb6fabae5bc9118e5f3eaf7b63dd
ompiler_driver.cc
df8d416733642347c92ae2b4175b8fd0af401f31 18-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Merge "Rewrite the compiler interface for CompilerDriver."
f5df8974173124faddb8e2b6a331959afdb94fdf 14-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Rewrite the compiler interface for CompilerDriver.

Change-Id: I15fa9afe7ffb7283ebda8d788a1e02793e3f75a6
ompiler_driver.cc
ompiler_driver.h
d2fe10a3a34af171bf1631219cd2d6ff6b7778b5 15-Jan-2014 Sebastien Hertz <shertz@google.com> Remove blacklist

Removes the class initialization blacklist and use transaction to detect and
revert class initialization attempting to invoke native method. This only
concerns class initialization happening at compilation time when generating an
image (like boot.art for the system).

In transactional mode, we log every object's field assignment and array update.
Therefore we're able to abort a transaction to restore values of fields and
array as they were before the transaction starts. We also log changes to the
intern string table so we can restore its state prior to transaction start.

Since transactional mode only happens at compilation time, we don't need to log
all these changes at runtime. In order to reduce the overhead of testing if
transactional mode is on/off, we templatize interfaces of mirror::Object and
mirror::Array, respectively responsible for setting a field and setting an
array element.

For various reasons, we skip some specific fields from transaction:
- Object's class and array's length must remain unchanged so garbage collector
can compute object's size.
- Immutable fields only set during class loading: list of fields, method,
dex caches, vtables, ... as all classes have been loaded and verified before a
transaction occurs.
- Object's monitor for performance reason.

Before generating the image, we browse the heap to collect objects that need to
be written into it. Since the heap may still holds references to unreachable
objects due to aborted transactions, we trigger one collection at the end of
the class preinitialization phase.

Since the transaction is held by the runtime and all compilation threads share
the same runtime, we need to ensure only one compilation thread has exclusive
access to the runtime. To workaround this issue, we force class initialization
phase to run with only one thread. Note this is only done when generating image
so application compilation is not impacted. This issue will be addressed in a
separate CL.

Bug: 9676614
Change-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9
ompiler_driver.cc
ab4a4f2c6eb7ad5ddb7b63677ee12a5efb16d35c 13-Feb-2014 Vladimir Marko <vmarko@google.com> Merge "Pass correct is_static to ResolveField."
1f26fb175bf3a10b5e1eb495d22778b47400f323 12-Feb-2014 Brian Carlstrom <bdc@google.com> Merge changes I41dcb9f8,I8bc80275

* changes:
Revert "Add a script for running art standalone."
Add StandardSocketOptions to the black list.
707c96a9d3b23182d1515a7e683c0885eee08a06 12-Feb-2014 Brian Carlstrom <bdc@google.com> Add StandardSocketOptions to the black list.

Change-Id: I8bc80275412b730df0e955b809a889b4b2635db5
ompiler_driver.cc
e549da59446a9fb986fbf02fe4cd2e3d610bd051 12-Feb-2014 Vladimir Marko <vmarko@google.com> Pass correct is_static to ResolveField.

Change-Id: I35ca25cd1b80b09c4e1e34d30c835d7dbd249b9e
ompiler_driver.cc
c7ac649e6ddcf322de48abcddfde63b3e0832aea 12-Feb-2014 Vladimir Marko <vmarko@google.com> Check IsStatic() on special accessor fields.

Change-Id: I48aebff3c3200540195eea863a52790ed4b5819e
ompiler_driver.cc
bbcc0c0a17262f3d2a70fc0a82e1783862f708cc 03-Feb-2014 Vladimir Marko <vmarko@google.com> Speed up method lookup in a different dex file.

Use already known name and proto.

Change-Id: I4505b81724bd6a0f3cf21ee6fed44774d38c4e15
ompiler_driver.cc
abaf927f29f6feceb3df3e6ced7d01970ba0dbe9 11-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Merge "Re-apply: Implement cumulative timings for CompilerDriver."
ea3fa0b4ba13d7bd7f7c1cd85202ccbe141a35ae 10-Feb-2014 Nicolas Geoffray <ngeoffray@google.com> Re-apply: Implement cumulative timings for CompilerDriver.

The bug was due to how the test infrastructure works:
a compiler driver surives the stack where it is allocated.

Change-Id: I345fe0e4afb2bd15937233db8afb350f09429558
ompiler_driver.cc
ompiler_driver.h
55d0eac918321e0525f6e6491f36a80977e0d416 06-Feb-2014 Mark Mendell <mark.p.mendell@intel.com> Support Direct Method/Type access for X86

Thumb generates code to optimize calls to methods within core.oat.
Implement this for X86 as well, but take advantage of mov with 32 bit
immediate and call relative with 32 bit immediate.

Fix some incorrect return locations for long inlines.

Change-Id: I1907bdfc7574f3d0aa76c7fad13dc537acdf1ed3
Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ompiler_driver.cc
ompiler_driver.h
2bc47809febcf36369dd40877b8226318642b428 10-Feb-2014 Vladimir Marko <vmarko@google.com> Revert "Revert "Check FastInstance() early for special getters and setters.""

This reverts commit 632e458dc267fadfb8120be3ab02701e09e64875.

Change-Id: I5098c41ee84fbbb39397133a7ecfd367fecebe42
ompiler_driver.cc
ompiler_driver.h
632e458dc267fadfb8120be3ab02701e09e64875 08-Feb-2014 Ian Rogers <irogers@google.com> Revert "Check FastInstance() early for special getters and setters."

This reverts commit 5dc5727261e87ba8a418e2d0e970c75f67e4ab79.

Change-Id: I3299c8ca5c3ce3f2de994bab61ea16a734f1de33
ompiler_driver.cc
ompiler_driver.h
5dc5727261e87ba8a418e2d0e970c75f67e4ab79 05-Feb-2014 Vladimir Marko <vmarko@google.com> Check FastInstance() early for special getters and setters.

Perform the FastInstance() check for getters and setters
when they are detected by the inliner. This will help avoid
the FastInstance() check for inlining.

We also record the field offset and whether the field is
volatile and whether the method is static for use when
inlining or generating the special accessors.

Change-Id: I3f832fc9ae263883b8a984be89a3b7793398b55a
ompiler_driver.cc
ompiler_driver.h
ef7d42fca18c16fbaf103822ad16f23246e2905d 06-Jan-2014 Ian Rogers <irogers@google.com> Object model changes to support 64bit.

Modify mirror objects so that references between them use an ObjectReference
value type rather than an Object* so that functionality to compress larger
references can be captured in the ObjectRefererence implementation.
ObjectReferences are 32bit and all other aspects of object layout remain as
they are currently.

Expand fields in objects holding pointers so they can hold 64bit pointers. Its
expected the size of these will come down by improving where we hold compiler
meta-data.
Stub out x86_64 architecture specific runtime implementation.
Modify OutputStream so that reads and writes are of unsigned quantities.
Make the use of portable or quick code more explicit.
Templatize AtomicInteger to support more than just int32_t as a type.
Add missing, and fix issues relating to, missing annotalysis information on the
mutator lock.
Refactor and share implementations for array copy between System and uses
elsewhere in the runtime.
Fix numerous 64bit build issues.

Change-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
89786437f4c0176b35ca0376153dd18ab7df4924 31-Jan-2014 Vladimir Marko <vmarko@google.com> Don't assume resolved type has the same dex cache.

When we resolve a type with a certain DexCache that type's
GetDexCache() doesn't necessarily return the same DexCache.
This could have led to the wrong DexFile being used in
access checks by the CompilerDriver.

Change-Id: I2c836477f69f142bcbff902207dc0ad83854a398
ompiler_driver.cc
2730db03beee4d6687ddfb5000c33c0370fbc6eb 27-Jan-2014 Vladimir Marko <vmarko@google.com> Add VerfiedMethod to DexCompilationUnit.

Avoid some mutex locking and map lookups.

Change-Id: I8e0486af77e38dcd065569572a6b985eb57f4f63
ompiler_driver.cc
ompiler_driver.h
ex_compilation_unit.cc
ex_compilation_unit.h
c7f832061fea59fd6abd125f26c8ca1faec695a5 24-Jan-2014 Vladimir Marko <vmarko@google.com> Refactor verification results.

Rename VerificationMethodsData to VerificationResults.
Create new class VerifiedMethod to hold all the data for
a given method.

Change-Id: Ife1ac67cede20f3a2f9c7f5345f08a851cf1ed20
ompiler_driver.cc
ompiler_driver.h
be1ca55db3362f5b100c4c65da5342fd299520bb 15-Jan-2014 Hiroshi Yamauchi <yamauchi@google.com> Use direct class pointers at allocation sites in the compiled code.

- Rather than looking up a class from its type ID (and checking if
it's resolved/initialized, resolving/initializing if not), use
direct class pointers, if possible (boot-code-to-boot-class pointers
and app-code-to-boot-class pointers.)
- This results in a 1-2% speedup in Ritz MemAllocTest on Nexus 4.
- Embedding the object size (along with class pointers) caused a 1-2%
slowdown in MemAllocTest and isn't implemented in this change.
- TODO: do the same for array allocations.
- TODO: when/if an application gets its own image, implement
app-code-to-app-class pointers.
- Fix a -XX:gc bug.
cf. https://android-review.googlesource.com/79460/
- Add /tmp/android-data/dalvik-cache to the list of locations to
remove oat files in clean-oat-host.
cf. https://android-review.googlesource.com/79550
- Add back a dropped UNLIKELY in FindMethodFromCode().
cf. https://android-review.googlesource.com/74205

Bug: 9986565
Change-Id: I590b96bd21f7a7472f88e36752e675547559a5b1
ompiler_driver.cc
ompiler_driver.h
23a282146042a0d171aec2a415176f5d0621a90c 09-Jan-2014 Vladimir Marko <vmarko@google.com> Clean up access checks.

Change-Id: Ia62ba6c8f1d0a9bfbbfde2d7be4c52c0f982b9d2
ompiler_driver.cc
650be76eb3c38ff905ec1d9675d73e5cb9a82dac 20-Jan-2014 Brian Carlstrom <bdc@google.com> Revert "Implement cumulative timings for CompilerDriver."

This reverts commit df013175d1aa04641e5c6175f8c786e547d31654.
ompiler_driver.cc
ompiler_driver.h
df013175d1aa04641e5c6175f8c786e547d31654 13-Jan-2014 Nicolas Geoffray <ngeoffray@google.com> Implement cumulative timings for CompilerDriver.

Change-Id: I3b04de7f2717273f356b8120f68d69e2379bab2f
ompiler_driver.cc
ompiler_driver.h
5ddb4104ac605d66693b55b79f26f8b8a5505e63 07-Jan-2014 Ian Rogers <irogers@google.com> Remove intialized static storage from dex cache.

The initialized static storage array is used by compiled code to determine if
for a sget/sput class initialization is necessary. The compiled code typically
doesn't require this test as the class is pre-initialized or the class being
accessed is the same as the current method.

Change-Id: Icbc45e692b3d0ac61e559e69edb6c9b29439e571
ompiler_driver.cc
ompiler_driver.h
b122a4bbed34ab22b4c1541ee25e5cf22f12a926 20-Nov-2013 Ian Rogers <irogers@google.com> Tidy up memory barriers.

Change-Id: I937ea93e6df1835ecfe2d4bb7d84c24fe7fc097b
ompiler_driver.cc
5816ed48bc339c983b40dc493e96b97821ce7966 27-Nov-2013 Vladimir Marko <vmarko@google.com> Detect special methods at the end of verification.

This moves special method handling to method inliner
and prepares for eventual inlining of these methods.

Change-Id: I51c51b940fb7bc714e33135cd61be69467861352
ompiler_driver.cc
ompiler_driver.h
2b5eaa2b49f7489bafdadc4b4463ae27e4261817 13-Dec-2013 Vladimir Marko <vmarko@google.com> Move compiler code out of method verifier.

We want to detect small methods for inlining at the end of
the method verification. Instead of adding more compiler
code to the runtime, we create a callback from the runtime
into the compiler, so that we can keep the code there.
Additionally, we move the compiler-related code that was
already in the method verifier to the compiler since it
doesn't really belong to the runtime in the first place.

Change-Id: I708ca13227c809e07917ff3879a89722017e83a9
ompiler_driver.cc
ompiler_driver.h
07dc96d370c4844c7a279c01cedf24a272b9f4f3 16-Dec-2013 Vladimir Marko <vmarko@google.com> Merge "Per-DexFile locking for inliner initialization."
d5c0587bc26a820646950b634275ba10ab06c995 16-Dec-2013 Sebastien Hertz <shertz@google.com> Merge "Cleanup thread pool tasks creation."
e13717e796d338b08ea66f6a7e3470ca44de707f 20-Nov-2013 Vladimir Marko <vmarko@google.com> Per-DexFile locking for inliner initialization.

And clean up lock and compiler driver naming.

Change-Id: I1562c7f55c4b0174a36007ba6199360da06169ff
ompiler_driver.cc
501baec5f2de2156bb5ed7f66d23f1b1ad026267 13-Dec-2013 Sebastien Hertz <shertz@google.com> Cleanup thread pool tasks creation.

Removes unused vector when adding new ForAllClosure tasks to the thread pool.

Change-Id: Ie0c8067bc5cbfac45db04a6242bc98f89c3efc8d
ompiler_driver.cc
460536209b741bc469f1b0857775449abb2102fb 12-Dec-2013 Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org> Don't rely on gcc extensions

Make the code more compatible with different compilers.
clang doesn't allow extra static qualifiers on template
specializations, const qualifiers on function types,
or inline attributes on lambda functions, and is more
picky about casting away constness with reinterpret_cast.

These modifications are compatible with both gcc and
clang.

Change-Id: I739b10df2780bec537827a13679fd2bcc2cc7188
Signed-off-by: Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org>
ompiler_driver.cc
c528dba35b5faece51ca658fc008b688f8b690ad 26-Nov-2013 Mathieu Chartier <mathieuc@google.com> Enable moving classes.

Slight reduction in Zygote size, memory savings are in the noise.
Before: Zygote size: 8739224
After: Zygote size: 8733568

Fixed a bug where we didn't set the concurrent start bytes after
switching the allocator from bump pointer to ROSAlloc in the
zygote. This caused excessive memory usage.

Added the method verifiers as roots to fix an issue caused by
RegTypes holding a Class*.

Added logic to clear card table in the SemiSpace collector, this
reduces DalvikOther from ~2400k -> ~1760k when using the SemiSpace
collector.

Added a missing lock to the timing loggers which caused a rare
one time crash in std::set.

Bug: 11771255
Bug: 8499494
Bug: 10802951

Change-Id: I99d2b528cd51c1c5ed7012e3220b3aefded680ae
ompiler_driver.cc
e9c36b34efb7460f59c6766e526c9b0de8da70b3 21-Nov-2013 Vladimir Marko <vmarko@google.com> Avoid some string allocations.

Also avoid building a string one character at a time.

Change-Id: I3db26226c620a730b95637d5bfc23e2d4715cfb9
ompiler_driver.cc
5fe9af720048673e62ee29597a30bb9e54c903c5 14-Nov-2013 Ian Rogers <irogers@google.com> Fix memory leaks relating to timing logger.

Bug: 11670287.
We use pointers to uninitialized values for control-flow in the timing logger
code, add TODO comments to clean this up later.
Remove base namespace and other bits of tidying.

Change-Id: I1e6600a1e92f974c8f58f3a405a4e4abb4d9f80f
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
bcd5e9daecad39f0dab3246808b4835caec29ea6 13-Nov-2013 Mathieu Chartier <mathieuc@google.com> Manually manage thread pool stacks.

We now allocate the thread pool worker stack using a MemMap. This
enables us to name the maps so that we get more descriptive output
for debugging leaks.

Appears to fix the mips build 5/5 successful clean-oat and builds.
This is probably since glibc caches up to 40 MB of thread stacks
before releasing them.

Change-Id: I1df2de50cb95838aa0d272a09807021404ba410c
ompiler_driver.cc
590fee9e8972f872301c2d16a575d579ee564bee 13-Sep-2013 Mathieu Chartier <mathieuc@google.com> Compacting collector.

The compacting collector is currently similar to semispace. It works by
copying objects back and forth between two bump pointer spaces. There
are types of objects which are "non-movable" due to current runtime
limitations. These are Classes, Methods, and Fields.

Bump pointer spaces are a new type of continuous alloc space which have
no lock in the allocation code path. When you allocate from these it uses
atomic operations to increase an index. Traversing the objects in the bump
pointer space relies on Object::SizeOf matching the allocated size exactly.

Runtime changes:
JNI::GetArrayElements returns copies objects if you attempt to get the
backing data of a movable array. For GetArrayElementsCritical, we return
direct backing storage for any types of arrays, but temporarily disable
the GC until the critical region is completed.

Added a new runtime call called VisitObjects, this is used in place of
the old pattern which was flushing the allocation stack and walking
the bitmaps.

Changed image writer to be compaction safe and use object monitor word
for forwarding addresses.

Added a bunch of added SIRTs to ClassLinker, MethodLinker, etc..

TODO: Enable switching allocators, compacting on background, etc..

Bug: 8981901

Change-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
bcdbbfebc8f32566d4cb3f66405e89cdb7351992 09-Nov-2013 Jeff Hao <jeffhao@google.com> resolved conflicts for merge of b9098c33 to master

Change-Id: Iecaf82e9939fee9d05c162999e1be449991f760e
0e49b42e03af56521d8ce2c9c84ac5b79e6241c9 08-Nov-2013 Jeff Hao <jeffhao@google.com> Fix handling of duplicate class definitions in boot classpath.

The compiler driver would get the wrong class references if a class
is defined multiple times in the boot classpath. It will now skip the
extra definitions.

Bug: 11598481
Samsung bug: 11539656
Change-Id: I4d9ae2b6d11190e6e6b89261d5f87c802def8810
ompiler_driver.cc
d3c20c1a46863841c866b64a4c21e8bf9396b54c 30-Oct-2013 Jeff Hao <jeffhao@google.com> Update compiler blacklist to include java.net.NetworkInterface.

Bug: 11411129
Change-Id: Ib93d2f75024b3def54eadc11547990150deccf4d
(cherry picked from commit a52454455048d04d12e4da637a103412a55e579b)
ompiler_driver.cc
7020278bce98a0735dc6abcbd33bdf1ed2634f1d 23-Oct-2013 Dave Allison <dallison@google.com> Support hardware divide instruction

Bug: 11299025

Uses sdiv for division and a combo of sdiv, mul and sub for modulus.
Only does this on processors that are capable of the sdiv instruction, as determined
by the build system.

Also provides a command line arg --instruction-set-features= to allow cross compilation.
Makefile adds the --instruction-set-features= arg to build-time dex2oat runs and defaults
it to something obtained from the target architecture.

Provides a GetInstructionSetFeatures() function on CompilerDriver that can be
queried for various features. The only feature supported right now is hasDivideInstruction().

Also adds a few more instructions to the ARM disassembler

b/11535253 is an addition to this CL to be done later.

Change-Id: Ia8aaf801fd94bc71e476902749cf20f74eba9f68
ompiler_driver.cc
ompiler_driver.h
a52454455048d04d12e4da637a103412a55e579b 30-Oct-2013 Jeff Hao <jeffhao@google.com> Update compiler blacklist to include java.net.NetworkInterface.

Change-Id: Ib93d2f75024b3def54eadc11547990150deccf4d
ompiler_driver.cc
7195dd860e424057bd9a17d501269d9b50673f11 30-Oct-2013 Ian Rogers <irogers@google.com> Merge "Don't use UTF16 length as length for MUTF8." into dalvik-dev
dfb325e0ddd746cd8f7c2e3723b3a573eb7cc111 30-Oct-2013 Ian Rogers <irogers@google.com> Don't use UTF16 length as length for MUTF8.

Bug 11367555.

Change-Id: Ia0b07072a1a49d435c3b71ed9a668b316b7ff5d8
ompiler_driver.cc
ompiler_driver.h
88474b416eb257078e590bf9bc7957cee604a186 24-Oct-2013 Jeff Hao <jeffhao@google.com> Implement Interface Method Tables (IMT).

Change-Id: Idf7fe85e1293453a8ad862ff2380dcd5db4e3a39
ompiler_driver.cc
ompiler_driver.h
f88727f4138a69b6fbc8185cde507452234d1b71 28-Oct-2013 Brian Carlstrom <bdc@google.com> am 48088672: am 58a9cd11: am 39d0c0d0: Update black list with android.os.Bundle

* commit '48088672582f5084c056562b04bb14e1dec85454':
Update black list with android.os.Bundle
39d0c0d02dc11d10974d368ffd18068ad7d2029a 28-Oct-2013 Brian Carlstrom <bdc@google.com> Update black list with android.os.Bundle

Bug: 11415283
Change-Id: I5a8c580f0e1d029c995faac3ec332083de7b8646
ompiler_driver.cc
83883d7fddf30fdb8b6903560fa1337ab991e74c 22-Oct-2013 Ian Rogers <irogers@google.com> Populate dex cache for sharpened calls.

We ensured the resolved method was in the dex cache, but for a sharpened call
this is abstract. Ensure that the concrete method is also resolved.
Limit the use of direct dex cache based dispatch to cases where we know how to
patch the dex cache.

Bug 11389002

Change-Id: I08252686a53b5948650632837c74bcd5cbf8a862
ompiler_driver.cc
ompiler_driver.h
e732ef1c0192acd71925bd0ff1ab09640d45531d 10-Oct-2013 Ian Rogers <irogers@google.com> Make compiler stat dumping easier to use.

Previous needed -verbose:compiler + a debug build. Now specify --dump-stats to
dex2oat.

Change-Id: Ifde379e7cd06bbb0fe20149ce89c3b3789221eac
ompiler_driver.cc
d91d6d6a80748f277fd938a412211e5af28913b1 26-Sep-2013 Ian Rogers <irogers@google.com> Introduce Signature type to avoid string comparisons.

Method resolution currently creates strings to then compare with strings formed
from methods in other dex files. The temporary strings are purely created for
the sake of comparisons. This change creates a new Signature type that
represents a method signature but not as a string. This type supports
comparisons and so can be used when searching for methods in resolution.

With this change malloc is no longer the hottest method during dex2oat (now its
memset) and allocations during verification have been reduced. The verifier is
commonly what is populating the dex cache for methods and fields not declared
in the dex file itself.

Change-Id: I5ef0542823fbcae868aaa4a2457e8da7df0e9dae
ompiler_driver.cc
fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f 24-Sep-2013 Ian Rogers <irogers@google.com> StringPiece clean up.

Profile guided clean up.
Try to avoid creating StringPieces with the contents of a dex file where
the length is known.
Try to avoid RegTypeCache::FromDescriptor when there's a class available.
Make ConstantType::ConstantValue inlinable.
Saving of about 50ms from a 2 threaded ThinkFree compile on host.

Change-Id: I47a12c3c76f46e2c9805be1c3a3e3870fe1f5d85
ompiler_driver.cc
ompiler_driver.h
4ce9e68bd648551379648df34d2267cd3d75e46c 24-Sep-2013 Brian Carlstrom <bdc@google.com> am e2ef8795: am 4b166f3e: am cb5f5e53: Make sure CompilerDriver actually resolves types

* commit 'e2ef879534e0eb7365f1997d0935c8eccb9d28fb':
Make sure CompilerDriver actually resolves types
cb5f5e53b580023fa2c1d8235c2e9aa1ff67d1dc 24-Sep-2013 Brian Carlstrom <bdc@google.com> Make sure CompilerDriver actually resolves types

Bug: 10750824
Change-Id: Ie61881f24196e851d87822798a7e9abdf9678aa3
ompiler_driver.cc
ee39a10e45a6a0880e8b829525c40d6055818560 19-Sep-2013 Ian Rogers <irogers@google.com> Use class def index from java.lang.Class.

Bug: 10244719
This removes the computation of the dex file index, when necessary this is
computed by searching the dex file. Its only necessary in
dalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the
latter not showing up significantly in profiling with this change.

(cherry-picked from 8b2c0b9abc3f520495f4387ea040132ba85cae69)
Change-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c
ompiler_driver.cc
ompiler_driver.h
ex_compilation_unit.cc
ex_compilation_unit.h
8b2c0b9abc3f520495f4387ea040132ba85cae69 19-Sep-2013 Ian Rogers <irogers@google.com> Use class def index from java.lang.Class.

Bug: 10244719
Depends on:
https://googleplex-android-review.git.corp.google.com/362363
This removes the computation of the dex file index, when necessary this is
computed by searching the dex file. Its only necessary in
dalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the
latter not showing up significantly in profiling with this change.

Change-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c
ompiler_driver.cc
ompiler_driver.h
ex_compilation_unit.cc
ex_compilation_unit.h
9b297bfc588c7d38efd12a6f38cd2710fc513ee3 06-Sep-2013 Ian Rogers <irogers@google.com> Refactor CompilerDriver::Compute..FieldInfo

Don't use non-const reference arguments.
Move ins before outs.

Change-Id: I7b251156388d8f07513b3da62ebfd29e5fd9ff76
ompiler_driver.cc
ompiler_driver.h
65ec92cf13c9d11c83711443a02e4249163d47f1 06-Sep-2013 Ian Rogers <irogers@google.com> Refactor CompilerDriver::ComputeInvokeInfo

Don't use non-const reference arguments.
Move ins before outs.

Change-Id: I4a7b8099abe91ea60f93a56077f4989303fa4876
ompiler_driver.cc
ompiler_driver.h
866709c85da0c0d2c76968713e4dc4a35dce27fd 06-Sep-2013 Sebastien Hertz <shertz@google.com> Merge "Disable devirtualization detection in DEX-to-DEX compiler." into dalvik-dev
936bf024b26f84f9332d195a581912e95d9cbe4b 06-Sep-2013 Ian Rogers <irogers@google.com> Tweak dedupe hash function.

Change-Id: I6c3450e53a3654969aa7627cea1474835bfc52d7
ompiler_driver.h
1e54d68ce8e77dfe63340275d11a072c5184c89a 06-Sep-2013 Sebastien Hertz <shertz@google.com> Disable devirtualization detection in DEX-to-DEX compiler.

This CL allows the DEX-to-DEX compiler to disable devirtualization detection.
This allows to quicken invoke-virtual/range instructions that used to be
eligible for devirtualization.

Bug: 10632943
Change-Id: I6c9f4d3249cf42b47f004be5825b3186fa83501e
ompiler_driver.cc
ompiler_driver.h
d133b97b1ccae88f6ee7040e288fd7a239ee4492 05-Sep-2013 Ian Rogers <irogers@google.com> Shard dedupe set locks.

We're seeing contention during compilation on the dedupe locks, sharding 4 ways
on an occam brings down contention by > 5x.
Improve dedupe hash function to have a FNV hash function at its heart.
Improve naming of dedupe locks.
Tidy portable JNI compiler paramters to be pointers, given that's their primary
use.

Change-Id: I95d905f2ca5fee4e83a0034926a5f6501b4aeb79
ompiler_driver.cc
ompiler_driver.h
df6931437880e1f7da9f777f5e54474d7ed7a630 04-Sep-2013 Anwar Ghuloum <anwarg@google.com> Remove memory leaks

Change-Id: I13a74791b1d39edfbba7c7884057fa163c343a9a
ompiler_driver.cc
193bad9b9cfd10642043fa2ebbfc68bd5f9ede4b 30-Aug-2013 Mathieu Chartier <mathieuc@google.com> Multi threaded hashed deduplication during compilation.

Moved deduplication to be in the compiler driver instead of oat
writer. This enables deduplication to be performed on multiple
threads. Also added a hash function to avoid excessive comparison
of byte arrays.

Improvements:
Before (alloats host):
real 1m6.967s
user 4m22.940s
sys 1m22.610s

Thinkfree.apk (target mako):
0m23.74s real 0m50.95s user 0m9.50s system
0m24.62s real 0m50.61s user 0m10.07s system
0m24.22s real 0m51.44s user 0m10.09s system
0m23.70s real 0m51.05s user 0m9.97s system
0m23.50s real 0m50.74s user 0m10.63s system

After (alloats host):
real 1m5.705s
user 4m44.030s
sys 1m29.990s

Thinkfree.apk (target mako):
0m23.32s real 0m51.38s user 0m10.00s system
0m23.49s real 0m51.20s user 0m9.80s system
0m23.18s real 0m50.80s user 0m9.77s system
0m23.52s real 0m51.22s user 0m10.02s system
0m23.50s real 0m51.55s user 0m9.46s system

Bug: 10552630

Change-Id: Ia6d06a747b86b0bfc4473b3cd68f8ce1a1c7eb22
ompiler_driver.cc
ompiler_driver.h
4bf1c8d4f2127caf769573d7c762a5d460a2781f 29-Aug-2013 Brian Carlstrom <bdc@google.com> Update blacklist for klp-dev

Change-Id: I5308f71b4c2ccdd7f6ac422ccb2a2d78141d1ce3
ompiler_driver.cc
a436fde2762664a3ecdda5eefcadd20b2e104f59 28-Aug-2013 Ian Rogers <irogers@google.com> Handle OOMEs in class linker with grace.

Check for OOMEs and then fail due to them in class loading.
Make the compiler driver spot OOMEs during resolution and abort compilation to
avoid needless GC thrash then eventual death.
Allocate the pre-allocated OOME during Runtime::Init as Runtime::Start isn't
called in the context of the compiler/tools.

Change-Id: Id72199d0fe82001b5bf22758b3cdc9cc4b8efbb9
ompiler_driver.cc
f6c4b3ba3825de1dbb3e747a68b809c6cc8eb4db 25-Aug-2013 Mathieu Chartier <mathieuc@google.com> New arena memory allocator.

Before we were creating arenas for each method. The issue with doing this
is that we needed to memset each memory allocation. This can be improved
if you start out with arenas that contain all zeroed memory and recycle
them for each method. When you give memory back to the arena pool you do
a single memset to zero out all of the memory that you used.

Always inlined the fast path of the allocation code.

Removed the "zero" parameter since the new arena allocator always returns
zeroed memory.

Host dex2oat time on target oat apks (2 samples each).
Before:
real 1m11.958s
user 4m34.020s
sys 1m28.570s

After:
real 1m9.690s
user 4m17.670s
sys 1m23.960s

Target device dex2oat samples (Mako, Thinkfree.apk):
Without new arena allocator:
0m26.47s real 0m54.60s user 0m25.85s system
0m25.91s real 0m54.39s user 0m26.69s system
0m26.61s real 0m53.77s user 0m27.35s system
0m26.33s real 0m54.90s user 0m25.30s system
0m26.34s real 0m53.94s user 0m27.23s system

With new arena allocator:
0m25.02s real 0m54.46s user 0m19.94s system
0m25.17s real 0m55.06s user 0m20.72s system
0m24.85s real 0m55.14s user 0m19.30s system
0m24.59s real 0m54.02s user 0m20.07s system
0m25.06s real 0m55.00s user 0m20.42s system

Correctness of Thinkfree.apk.oat verified by diffing both of the oat files.

Change-Id: I5ff7b85ffe86c57d3434294ca7a621a695bf57a9
ompiler_driver.h
0b3eb39f8bc92f955f875ef50929c439aafe35fb 23-Aug-2013 Mathieu Chartier <mathieuc@google.com> Use atomic integer for compiler driver work balancing.

Before, we divided the work by dividing the total work by the number
of threads. This did not balance work well since some threads could
finish much earlier than others. The new method uses a shared atomic
integer to balance work. This makes it that a thread can process at
most one item after the other worker threads are finished.

Changed the number of threads to take into account the main thread
also doing work. This means that we subtract one from the number of
threads when we make the thread pool.

Change-Id: I0147b0403c6214800ed6bfcdac4f1e5486330996
ompiler_driver.cc
7dfb28c066159e6cde8181720f0c451a700ef966 22-Aug-2013 Ian Rogers <irogers@google.com> Don't scan image space when starting runtime.

Bug 10432288.
Find Classes and Strings from dex caches lazily rather than when the image is
loaded.
Make class status changes do notifies when there can be waiters.
For Class lookup there's a pathology if we always search dex caches and
so after 1000 failures move all classes into the class table.
Be consistent in using "const char*" for class linker descriptors as this
most easily agrees with the type in the dex file.
Improve the intern run-test so that it has a case of a literal contained in the
image.
Modify image_test to allow any valid lock word rather than expecting 0, ideally
we wouldn't see inflated monitors but we do due to NotifyAll (see bug 6961405).

Change-Id: Ia9bfa748eeccb9b4498784b97c6823141b1f6db8
ompiler_driver.cc
2213ac60891aae4a05232663182bcb75137c7623 22-Aug-2013 Brian Carlstrom <bdc@google.com> am 42b32404: Update black list with Landroid/webkit/WebViewFactory;

* commit '42b32404abdd9f66b4b168ad8b17bccebfeb99f3':
Update black list with Landroid/webkit/WebViewFactory;
42b32404abdd9f66b4b168ad8b17bccebfeb99f3 22-Aug-2013 Brian Carlstrom <bdc@google.com> Update black list with Landroid/webkit/WebViewFactory;

Change-Id: I6689d116930e862826527adad9a4000ebe9a5d28
ompiler_driver.cc
8f3c9ae38df2460940a26dff889a84430b6c38d3 21-Aug-2013 Ian Rogers <irogers@google.com> Don't allow class status to go backward except for error.

Allow greater parallelism of initialization.
Bug 10393546.

Change-Id: Ic194ed490bb0a986250c09fcf335eb1be9714657
ompiler_driver.cc
ompiler_driver.h
be7149fc2e7cc607937209f2819e3c1d672e2668 20-Aug-2013 Ian Rogers <irogers@google.com> Avoid throwing NoClassDefFoundError at compile time.

Change-Id: I8ba56a8750e1718babcb1f94e0408d89f58ea9b5
ompiler_driver.cc
884cf3d55229988e7d72cf38c756b427d47c9e48 20-Aug-2013 Ian Rogers <irogers@google.com> Merge "Reduce AOT initialization." into dalvik-dev
e6bb3b2ce5a69c31c2adfc7eb2705633b7f966eb 20-Aug-2013 Ian Rogers <irogers@google.com> Reduce AOT initialization.

When compiling apps there is no need to resolve all types in the dex file, just
those declared in the dex file. There's also no need to initialize static
fields if we can only leave the class in a verified state.

Increase use of CompilerDriver::IsImage.
Move timing of dex2oat setup to before Runtime::Create.

On run-test 056 the performance improvement is an order of magnitude, for
ThinkFree dex2oat time is dominated by compilation and this change has no
effect.

Bug 10316099.

Change-Id: Ibdd7caa43284e7448e6a56d810967100ae4a7898
ompiler_driver.cc
ompiler_driver.h
f96b21728e8b10e2060ad2d0de46fcacf5974260 20-Aug-2013 Brian Carlstrom <bdc@google.com> Tolerate both old and new java.util.concurrent.ConcurrentHashMap

Change-Id: I87397bbb662d7dd8cb0683fc08bd35b401034357
ompiler_driver.cc
65530499a0169b3b0b153008e2d187c9f4939541 19-Aug-2013 Ian Rogers <irogers@google.com> Build fix.

A static field was moved from an inner to an outer class in ConcurrentHashMap
leading to a disallowed call.
Also, tidy comments on other java.util.concurrent black listed classes.

Change-Id: Iccd808766dcd5406a5bb49a4b98f570606730250
ompiler_driver.cc
3eeda8fe5a481226b246d08e1c645f3ee3b48cf2 17-Aug-2013 Ian Rogers <irogers@google.com> Merge "Get SEA fibonacci running in interpreter mode." into dalvik-dev
90af14d2743614e3e1453984b14258a6f145501d 16-Aug-2013 Dragos Sbirlea <dragoss@google.com> Get SEA fibonacci running in interpreter mode.

Android.mk: Added new file to build.
compile_driver.cc: Moved SE_IR usage test in the block
protected by bool compile, which is enabled by
adding a sepatate test in IsCnadidateForCompilation.
class_linker.cc: Added check in NeedsInterpreter to enable SEA_IR.
art_method-inl.h: DIsabled check in SEA_IR mode.
method_verifier.cc: Added check for SEA_IR mode.
method_verifier.h: Chenged IsCandidateForCompilation signature to
allow testing the function name (for SEA_IR selective
compilation).
dot_gen.h: Updated ART file API usage to altest version.
sea_ir/frontend.cc: Passing function symbol name to CompileMethod.
instruction_Nodes.h: Added accessor for method index for
InvokeStatic IR node.
sea.cc: Added additional IR SignatureNode for function calls (extra
Method parameter). Fixed UnnamedConstant constant value.
sea.h: Passing function_name to GenerateLLVM.
type_inference_visitor.cc: Aded type for first (placeholder) method
parameter.

Change-Id: I295858ea0761a3dffb36f35748d8b93d4919d6a9
ompiler_driver.cc
d2b0f33cf01601f040494f4f882e60f70b527930 16-Aug-2013 Mathieu Chartier <mathieuc@google.com> Merge "Fix up TODO: c++0x, update cpplint." into dalvik-dev
02e25119b15a6f619f17db99f5d05124a5807ff3 15-Aug-2013 Mathieu Chartier <mathieuc@google.com> Fix up TODO: c++0x, update cpplint.

Needed to update cpplint to handle const auto.

Fixed a few cpplint errors that were being missed before.

Replaced most of the TODO c++0x with ranged based loops. Loops which
do not have a descriptive container name have a concrete type instead
of auto.

Change-Id: Id7cc0f27030f56057c544e94277300b3f298c9c5
ompiler_driver.cc
bd136a29f08486525d6abc7d0a0006ce5b4011c1 14-Aug-2013 Dragos Sbirlea <dragoss@google.com> Get PORTABLE + SMALL on x86.

Implemented the portable resolution trampoline and
the portable to interpreter bridge.
Also work on integrating SEA_IR in the PORTABLE+SMALL framework.
Refactor some naming and correct indenting.

Change-Id: Ibd97da5e5b6f5148274c9bff368e3654b661ef51
ompiler_driver.cc
1d1e267136732c2b123470b05c06fa536fa6dbbb 14-Aug-2013 Ian Rogers <irogers@google.com> Merge "Refactor java.lang.reflect implementation" into dalvik-dev
75a43f10f55e2aa550de51e969cc1e60d583b632 14-Aug-2013 Anwar Ghuloum <anwarg@google.com> Clean up logcat spam from compiler and verifier

Moved to VLOG(...), adding verifer tag for VLOG.

Change-Id: Ia9ac8aeaf5aa1f4881e384003e82a66e560c5692
ompiler_driver.cc
ea46f950e7a51585db293cd7f047de190a482414 30-Jul-2013 Brian Carlstrom <bdc@google.com> Refactor java.lang.reflect implementation

Cherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.

Move to ArtMethod/Field instead of AbstractMethod/Field and have
java.lang.reflect APIs delegate to ArtMethod/ArtField.

Bug: 10014286.

Change-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
67f99418f648c3a95256ed3dcd8e8b64eef0b372 12-Aug-2013 Anwar Ghuloum <anwarg@google.com> Yet more timing logger cleanup

Some cleanup of timing logger placement, additional systrace placement for
threaded compilation work, tweaking/hiding of some type names per previous
review comments.

Change-Id: Ic7db2e02747282ac7f474b9a060df9803bfdfa5e
ompiler_driver.cc
155ecba1c9b56ce1b468135e6a591a3fe9258c52 13-Aug-2013 buzbee <buzbee@google.com> Fix SMALL_ART

On all art builds, the images classes must be compiled. When doing
a small art build, it is necessary to override the default compiler
filter to force compilation. A merge mistake broke this logic
for dalvik-dev.

Change-Id: I88186bd89d0ccb4316ee0910e9324ddc3e6a1f75
ompiler_driver.cc
c9f9444a0d58f395fee5ddd9f55ff32f92cb7b57 08-Aug-2013 buzbee <buzbee@google.com> am a024a068: Compilation filter

* commit 'a024a0686c3b0fea13f362bff70d65981e5febc5':
Compilation filter
a024a0686c3b0fea13f362bff70d65981e5febc5 31-Jul-2013 buzbee <buzbee@google.com> Compilation filter

This CL introduces a static compilation filter mechanism intended
to allow us to reduce compilation time and space requirements until
we have a profiling mechanism in place.

It supports 5 modes of filtering:

o interpret-only (compile nothing)
o deferred-compilation (compile only those methods believe to be
compute-intensive)
o space (optimized for space)
o balanced (best return on space investment)
o speed (compile everything)

A future CL will allow the default filtering mode to be set
via system property. For now, you can pass it in via command
line as follows:

dalvikvm -compiler-filter:[interpret-only|defer-compilation|
space|balanced|speed]

or dex2oat --runtime-arg -compiler-filter:[one of the above modes]

Creating a file named art/SMALL_ART will force the filter
default to interpret-only. Later on we'll move this capability
to a persistent system property.

or modify kDefaultCompilerFilter in runtime.h

It also changes the compiler driver to allow the compilers to
decline to compile a method by return NULL.

Change-Id: Ic73411818f8bb845a4a19a05b0395c50902c534f
ompiler_driver.cc
848871b4d8481229c32e0d048a9856e5a9a17ef9 05-Aug-2013 Ian Rogers <irogers@google.com> Entry point clean up.

Create set of entry points needed for image methods to avoid fix-up at load time:
- interpreter - bridge to interpreter, bridge to compiled code
- jni - dlsym lookup
- quick - resolution and bridge to interpreter
- portable - resolution and bridge to interpreter

Fix JNI work around to use JNI work around argument rewriting code that'd been
accidentally disabled.
Remove abstact method error stub, use interpreter bridge instead.
Consolidate trampoline (previously stub) generation in generic helper.
Simplify trampolines to jump directly into assembly code, keeps stack crawlable.
Dex: replace use of int with ThreadOffset for values that are thread offsets.
Tidy entry point routines between interpreter, jni, quick and portable.

Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e
ompiler_driver.cc
ompiler_driver.h
9fc16eb43fe938f0cddb13638bd7cbc2ea9534a2 31-Jul-2013 Ian Rogers <irogers@google.com> Don't add barriers to clinit methods.

Change-Id: I13e6c008feb8c19e452d6e2f88b2bbbcac997de5
ex_compilation_unit.h
75021222d9c03a80fa5c136db0d5fb8d82d04031 16-Jul-2013 Sebastien Hertz <shertz@google.com> Adds a DEX-to-DEX compilation level.

This CL adds a DEX-to-DEX compilation level which allows the DEX-to-DEX
compiler to ensure correctness on classes with soft-failed verification.

Bug: 9307738
Change-Id: If051336bf81370bca55872c8c75ccd573d8ca391
ompiler_driver.cc
ompiler_driver.h
0f055d11096cb02563e9c040cd03c791fd8f69a3 26-Jul-2013 Brian Carlstrom <bdc@google.com> resolved conflicts for merge of 7934ac28 to dalvik-dev

Change-Id: I8798a6f154463d3f92f6aca62f14130aec82d273
7934ac288acfb2552bb0b06ec1f61e5820d924a4 26-Jul-2013 Brian Carlstrom <bdc@google.com> Fix cpplint whitespace/comments issues

Change-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496
ompiler_driver.cc
ex_compilation_unit.cc
ex_compilation_unit.h
4d4adb1dae07bb7421e863732ab789413a3b43f0 24-Jul-2013 Sebastien Hertz <shertz@google.com> Prevent verifier from creating unused compilation data.

The verifier used to create data which may be unused like GC map. This is the
case for non-compiled method (which are interpreted). This CL aims to optimize
this.

Here are the changes:
- Move compilation selection to MethodVerifier::IsCandidateForCompilation.
- Compiler and verifier use this method to know if a method must be compiled.
- Only create compilation data while compiling using Runtime::IsCompiler.
- Do not create internal structures concerning GC map, ... in Runtime::Init and
Runtime::Shutdown when we are not compiling.
- Checks we are compiling when accessing these structures.
- Add missing destruction of MethodVerifier::safecast_map_lock_ and
MethodVerifier::safecast_map_ in Runtime::Shutdown.
- Call Runtime::Shutdown just before Runtime instance is destroyed to avoid a
crash.
- Add missing "GUARDED_BY" macro for MethodVerifier::rejected_classes_ field.
- Add "has_check_casts" to avoid the safecast pass if there is no check-cast
instruction.
- Add "has_virtual_or_interface_invokes" to avoid the devirtualization pass if
there is no invoke-virtual/range nor invoke-interface/range instructions.

Bug: 9987437
Change-Id: I418ee99f63e4203409cf5b7d2c2295b22fcf24c1
ompiler_driver.cc
bd2c19f4d74668d5c950e522db85c1fd0b17b08c 26-Jul-2013 Ian Rogers <irogers@google.com> Fix compiler_driver_test/image_test.

Fixes post TimingLogger change.

Change-Id: If57f12d7cb6a449e3f3a8ba6f48e9180cd153ede
ompiler_driver_test.cc
6f28d91aab952e3244fbb4e707fa38f85538f374 25-Jul-2013 Anwar Ghuloum <anwarg@google.com> Add systrace support to NewTimingLogger, migrate compiler timing logging to NewTimingLogger

Rpleaced old TimingLogger by NewTimingLogger, renamed NewTimingLogger to TimingLogger, added systrace support to TimingLogger.
Tests passing, phone booting, systrace working.

Change-Id: I2aeffb8bcb7f0fd979d8a2a3a8bcfbaa02413679
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
d792cc1569c3505d68352c11a72447419ee6eaaf 25-Jul-2013 Brian Carlstrom <bdc@google.com> Add art support for Zygote NoPreloadHolder which black lists early initialization.

Change-Id: I9c68f6d7a1f230aba6382b1331d413d4cb92be12
ompiler_driver.cc
8f20ff4354fd3fdd7604a299b7bf4446e5f4584c 24-Jul-2013 Brian Carlstrom <bdc@google.com> Update blacklist with HttpsURLConnection$DefaultHolder

Change-Id: Ib0a8b9511dc8e63d14f11ba48b80dfb78e32d25e
ompiler_driver.cc
c50d8e11a098cc5c6239aa86b47d4fcf8cbb4899 24-Jul-2013 Brian Carlstrom <bdc@google.com> Remove OatWriter buffering to memory for ElfWriterQuick

This allows the oat contents to be directly written to the file.

Change-Id: Ibc7ddf57477b152f07784b52f7334be73fd22833
ompiler_driver.cc
ompiler_driver.h
669af5ff17793ba9dcb61570cc762ff33ba47468 22-Jul-2013 Brian Carlstrom <bdc@google.com> am 4560248d: Move TimingLogger creation to dex2oat

* commit '4560248d4c85cade7f4fc7b30c3fb41b95a04a7f':
Move TimingLogger creation to dex2oat
4560248d4c85cade7f4fc7b30c3fb41b95a04a7f 22-Jul-2013 Brian Carlstrom <bdc@google.com> Move TimingLogger creation to dex2oat

Change-Id: I4fdb6afd4ce2ac0d91c6c968893606d593b6ea18
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
49ed57499b918553e2d3db922ca2826dffa5bcd1 22-Jul-2013 Brian Carlstrom <bdc@google.com> am 75b13a9c: Merge "Remove CompilerDriver::IsDebuggingSupported"

* commit '75b13a9cb4df1dee19c459341df1697e196f20f7':
Remove CompilerDriver::IsDebuggingSupported
0177fe200efc1bf4d433955ee7920c683fdf5901 21-Jul-2013 Brian Carlstrom <bdc@google.com> Remove CompilerDriver::IsDebuggingSupported

Change-Id: Ib67e3ef67462fe5dae81148f7fe8cc76b3887f11
ompiler_driver.cc
ompiler_driver.h
08524597899d0bb021c9165218deff51dc88da50 18-Jul-2013 Brian Carlstrom <bdc@google.com> am 0cd7ec2d: Fix cpplint whitespace/blank_line issues

* commit '0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c':
Fix cpplint whitespace/blank_line issues
0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c 18-Jul-2013 Brian Carlstrom <bdc@google.com> Fix cpplint whitespace/blank_line issues

Change-Id: Ice937e95e23dd622c17054551d4ae4cebd0ef8a2
ompiler_driver.cc
b267c89acd0fcda0e8e2a9eeaeeed9ee048d1abc 18-Jul-2013 Brian Carlstrom <bdc@google.com> am 93ba893c: Fix cpplint runtime/explicit issues

* commit '93ba893c20532990a430741e0a97212900094e8c':
Fix cpplint runtime/explicit issues
98c19d201b83119cbadd9aa3966fd0fb86064813 18-Jul-2013 Brian Carlstrom <bdc@google.com> am 2ce745c0: Fix cpplint whitespace/braces issues

* commit '2ce745c06271d5223d57dbf08117b20d5b60694a':
Fix cpplint whitespace/braces issues
93ba893c20532990a430741e0a97212900094e8c 18-Jul-2013 Brian Carlstrom <bdc@google.com> Fix cpplint runtime/explicit issues

Change-Id: I352ba0b427f1ff9b22887693952b180eae0839ba
ex_compilation_unit.h
2ce745c06271d5223d57dbf08117b20d5b60694a 18-Jul-2013 Brian Carlstrom <bdc@google.com> Fix cpplint whitespace/braces issues

Change-Id: Ide80939faf8e8690d8842dde8133902ac725ed1a
ompiler_driver.cc
42425b3a8befe092199fde69c95833e31db8fec9 18-Jul-2013 Brian Carlstrom <bdc@google.com> am fc0e3219: Fix multiple inclusion guards to match new pathnames

* commit 'fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d':
Fix multiple inclusion guards to match new pathnames
fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d 17-Jul-2013 Brian Carlstrom <bdc@google.com> Fix multiple inclusion guards to match new pathnames

Change-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43
ompiler_driver.h
ex_compilation_unit.h
5081c0f9aec26bb36ea5eb8e5df0404f02dec0d9 17-Jul-2013 Brian Carlstrom <bdc@google.com> am 56d947fb: Add verification of boot.oat generated on device

* commit '56d947fbc9bc2992e2f93112fafb73e50d2aaa7a':
Add verification of boot.oat generated on device
56d947fbc9bc2992e2f93112fafb73e50d2aaa7a 15-Jul-2013 Brian Carlstrom <bdc@google.com> Add verification of boot.oat generated on device

Change-Id: I069586205a9a92fc7375ccf5cdde136bbbcfc800
ompiler_driver.cc
ompiler_driver.h
1db9113bcc12368e405583804ceb8aa7c80cc0cd 13-Jul-2013 Brian Carlstrom <bdc@google.com> resolved conflicts for merge of 7940e44f to dalvik-dev

Change-Id: I6529b2fc27dfaedd2cb87b3697d049ccabed36ee
7940e44f4517de5e2634a7e07d58d0fb26160513 12-Jul-2013 Brian Carlstrom <bdc@google.com> Create separate Android.mk for main build targets

The runtime, compiler, dex2oat, and oatdump now are in seperate trees
to prevent dependency creep. They can now be individually built
without rebuilding the rest of the art projects. dalvikvm and jdwpspy
were already this way. Builds in the art directory should behave as
before, building everything including tests.

Change-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81
ompiler_driver.cc
ompiler_driver.h
ompiler_driver_test.cc
ex_compilation_unit.cc
ex_compilation_unit.h