summaryrefslogtreecommitdiffstats
path: root/compiler/driver/compiler_driver.h
Commit message (Collapse)AuthorAgeFilesLines
* ART: Swap-space in the compilerAndreas Gampe2014-12-221-42/+100
| | | | | | | | | | | Introduce a swap-space and corresponding allocator to transparently switch native allocations to memory backed by a file. Bug: 18596910 (cherry picked from commit 62746d8d9c4400e4764f162b22bfb1a32be287a9) Change-Id: I131448f3907115054a592af73db86d2b9257ea33
* Remove portable.Elliott Hughes2014-12-121-12/+0
| | | | Change-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc
* Remove method verification results right after compiling a methodMathieu Chartier2014-12-031-0/+4
| | | | | | | | | | | | | | 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 (cherry picked from commit 25fda92083d5b93b38cc1f6b12ac6a44d992d6a4)
* Print memory usage in dex2oat shutdownMathieu Chartier2014-12-021-0/+3
| | | | | | | | | | | 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 (cherry picked from commit 3029df6d212894647ba0e5c23443c40912c6ecc8)
* Instruction set features for ARM64, MIPS and X86.Ian Rogers2014-11-131-1/+2
| | | | | | | | | | | | | Also, refactor how feature strings are handled so they are additive or subtractive. Make MIPS have features for FPU 32-bit and MIPS v2. Use in the quick compiler rather than #ifdefs that wouldn't have worked in cross-compilation. Add SIMD features for x86/x86-64 proposed in: https://android-review.googlesource.com/#/c/112370/ Bug: 18056890 Change-Id: Ic88ff84a714926bd277beb74a430c5c7d5ed7666
* ART: Compiled-classes list for compiler-driverAndreas Gampe2014-11-131-1/+11
| | | | | | | | | | | | 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 (cherry picked from commit 26318f722958ac1cba6a812026a1377f37c54941) Change-Id: I95f69afdb500a9defb6795803d4040bbe67c5a01
* Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.Ian Rogers2014-11-031-0/+1
| | | | | | | | | | | Fix associated errors about unused paramenters and implict sign conversions. For sign conversion this was largely in the area of enums, so add ostream operators for the effected enums and fix tools/generate-operator-out.py. Tidy arena allocation code and arena allocated data types, rather than fixing new and delete operators. Remove dead code. Change-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b
* Add support for static fields in optimizing compiler.Nicolas Geoffray2014-10-291-1/+2
| | | | Change-Id: Id2f010589e2bd6faf42c05bb33abf6816ebe9fa9
* Rewrite class initialization check elimination.Vladimir Marko2014-10-271-7/+17
| | | | | | | | Split the notion of type being in dex cache away from the class being initialized. Include static invokes in the class initialization elimination pass. Change-Id: Ie3760d8fd55b987f9507f32ef51456a57d79e3fb
* C++11 related clean-up of DISALLOW_..Ian Rogers2014-10-221-10/+0
| | | | | | | | | | | | | | | | | | Move DISALLOW_COPY_AND_ASSIGN to delete functions. By no having declarations with no definitions this prompts better warning messages so deal with these by correcting the code. Add a DISALLOW_ALLOCATION and use for ValueObject and mirror::Object. Make X86 assembly operand types ValueObjects to fix compilation errors. Tidy the use of iostream and ostream. Avoid making cutils a dependency via mutex-inl.h for tests that link against libart. Push tracing dependencies into appropriate files and mutex.cc. x86 32-bit host symbols size is increased for libarttest, avoid copying this in run-test 115 by using symlinks and remove this test's higher than normal ulimit. Fix the RunningOnValgrind test in RosAllocSpace to not use GetHeap as it returns NULL when the heap is under construction by Runtime. Change-Id: Ia246f7ac0c11f73072b30d70566a196e9b78472b
* Merge "Some code clean-up."Ian Rogers2014-10-171-1/+1
|\
| * Some code clean-up.Ian Rogers2014-10-161-1/+1
| | | | | | | | Change-Id: I4b745fd5298cd61c793e3b57514b48347bd66c0e
* | Merge "dex2oat: Add a --compile-pic option"Igor Murashkin2014-10-171-3/+4
|\ \ | |/ |/|
| * dex2oat: Add a --compile-pic optionIgor Murashkin2014-10-161-3/+4
| | | | | | | | Change-Id: I80e03613e3b6ac079bcbc7e068bbaae760c364c9
* | Make ART compile with GCC -O0 again.Ian Rogers2014-10-161-3/+3
|/ | | | | | | | | | | | | Tidy up InstructionSetFeatures so that it has a type hierarchy dependent on architecture. Add to instruction_set_test to warn when InstructionSetFeatures don't agree with ones from system properties, AT_HWCAP and /proc/cpuinfo. Clean-up class linker entry point logic to not return entry points but to test whether the passed code is the particular entrypoint. This works around image trampolines that replicate entrypoints. Bug: 17993736 Change-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23
* Implement method calls using relative BL on ARM.Vladimir Marko2014-09-251-227/+5
| | | | | | | | | | Store the linker patches with each CompiledMethod instead of keeping them in CompilerDriver. Reorganize oat file creation to apply the patches as we're writing the method code. Add framework for platform-specific relative call patches in the OatWriter. Implement relative call patches for ARM. Change-Id: Ie2effb3d92b61ac8f356140eba09dc37d62290f8
* Implement invoke virtual in optimizing compiler.Nicolas Geoffray2014-09-171-1/+1
| | | | | | | Also refactor 004 tests to make them work with both Quick and Optimizing. Change-Id: I87e275cb0ae0258fc3bb32b612140000b1d2adf8
* ART: Allow quickening in the boot imageAndreas Gampe2014-09-151-6/+13
| | | | | | | | | | | | | | 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 (cherry picked from commit 35439baf287b291b67ee406308e17fc6194facbf) Change-Id: I9ef1bfd78b0d93625b89b3d662131d7d6e5f2903
* ART fix oat debug source map operationsYevgeny Rouban2014-08-251-3/+3
| | | | | | | | | | | | | | | | | | | | | | Several places need to be fixed in OAT debug source map generation (see comments in https://android-review.googlesource.com/#/c/102610/19/compiler/compiled_method.h): 1. Source Maps are deduplicated in Compiler Driver by implicit conversion SrcMapElems to bytes. This implies incorrect operator==. 2. SrcMapElem operator < is peculiar, and cannot be applied to SrcMapElems with negative to_ fields 3. SrcMap.Arrange method is not elegant The fix is to introduce explicit conversion from SrcMapElem to one signed 64-bit value, which is used as a base of two new operators < and ==. They are correct and intuitive. DedupeHashFunc is changed to explicitly convert array elements to byte, so the explicit type conversion from SrcMapElem to byte is used. Minor fix: In Line Table Programs the file index set command is generated only if the index gets new value. Change-Id: I5e2c03404a437254fc2db3485b22bfc1799b39b7 Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
* ART: Clean up compilerAndreas Gampe2014-08-221-14/+0
| | | | | | | Clean up the compiler: less extern functions, dis-entangle compilers, hide some compiler specifics, lower global includes. Change-Id: Ibaf88d02505d86994d7845cf0075be5041cc8438
* ART source line debug info in OAT filesYevgeny Rouban2014-08-151-7/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | OAT files have source line information enough for ART runtime needs like jump to/from interpreter and thread suspension. But this information is not enough for finer grained source level debugging and low-level profiling (VTune or perf). This patch adds to OAT files two additional sections: .debug_line - DWARF formatted Elf32 section with detailed source line information (mapping from native PC to Java source lines). In addition to the debugging symbols added using the dex2oat option --include-debug-symbols, the source line information is added to the section .debug_line. The source line info can be read by many Elf reading tools like objdump, readelf, dwarfdump, gdb, perf, VTune, ... gdb can use this debug line information in x86. In 64-bit mode the information can be used if the oat file is mapped in the lower address space (address has higher 32 bits zeroed). Relocation works. Testing: 1. art/test/run-test --host --gdb [--64] 001-HelloWorld 2. in gdb: break Main.java:19 3. in gdb: break Runtime.java:111 4. in gdb: run - stops at void java.lang.Runtime.<init>() 5. in gdb: backtrace - shows call stack down to main() 6. in gdb: continue - stops at void Main.main() (only in 32-bit mode) 7. in gdb: backtrace - shows call stack down to main() 8. objdump -W <oat-file> - addresses are from VMA range of .text section reported by objdump -h <file> 9. dwarfdump -ka <oat-file> - no errors expected Size of aosp-x86-eng boot.oat increased by 11% from 80.5Mb to 89.2Mb with two sections added .debug_line (7.2Mb) and .rel.debug (1.5Mb). Change-Id: Ib8828832686e49782a63d5529008ff4814ed9cda Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
* Avoid use of std::string where we have const char*.Ian Rogers2014-08-121-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Merge "Added support for patching classes from different dex files."Mathieu Chartier2014-08-061-1/+14
|\
| * Added support for patching classes from different dex files.Fred Shih2014-08-061-1/+14
| | | | | | | | | | | | | | | | | | Added support for class patching from different dex files and moved ScopedObjectAccess from the quick compiler to driver. Slight refactoring for clarity. Bug: 16656190 Change-Id: I107fcbce75db42ca61321ea1c5d5f236680a1b3d
* | Merge "ART: Rework CFA frame initialization and writing code"Andreas Gampe2014-08-061-15/+0
|\ \
| * | ART: Rework CFA frame initialization and writing codeAndreas Gampe2014-08-061-15/+0
| |/ | | | | | | | | | | | | | | Move eh_frame initialization code and CFI writing code to elf_writer_quick to remove hard-wired dependencies on specific Quick-compiler backends. Change-Id: I27ee8ce7245da33a20c90e0086b8d4fd0a2baf4d
* | ART: Skip compiling redefined classes in appsAndreas Gampe2014-08-061-0/+4
|/ | | | | | | | If for an app a class is defined in more than one dex file, skip all classes after the first. Bug: 16057120 Change-Id: Ifd71e6f462fd691ee23724a001190e9175988069
* Support fields in optimizing compiler.Nicolas Geoffray2014-07-141-3/+10
| | | | | | | | - 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
* Improve performance of invokevirtual/invokeinterface with embedded imt/vtableMingyao Yang2014-07-111-1/+2
| | | | | | | | | 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
* Optionally add debug symbols to ELF files made by quick compiler.Alex Light2014-06-121-2/+6
| | | | | | | | | | | | | | | 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
* Fixed and refactored profiler options handlingCalin Juravle2014-06-061-2/+2
| | | | | | | | | | | | | - 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
* Clean up the sampling profilerCalin Juravle2014-06-061-1/+1
| | | | | | | | | | | | - 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
* Revert "Revert "Fix an outstanding compaction bug in interpreter.""Mathieu Chartier2014-05-231-8/+8
| | | | | | | | | | Fixed the generic trampoline to not use ToJObject when unnecessary. Bug: 15167269 This reverts commit 3bdb873122964da7937eb070cbcf2ef638a8e459. Change-Id: I0525d0e0f3afb753c770e1572070a0fa22b02271
* Revert "Fix an outstanding compaction bug in interpreter."Mathieu Chartier2014-05-221-8/+8
| | | | | | This reverts commit e09ae0920be57760fb390b6944bce420fa0b5582. Change-Id: I48036306130d5ccfec683d0dc3e9a642a02ee9c1
* Fix an outstanding compaction bug in interpreter.Mathieu Chartier2014-05-221-8/+8
| | | | | | | | | | | | | | | | 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
* Now we have a proper C++ library, use std::unique_ptr.Ian Rogers2014-05-191-4/+4
| | | | | | | Also remove the Android.libcxx.mk and other bits of stlport compatibility mechanics. Change-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61
* Add Handle/HandleScope and delete SirtRef.Mathieu Chartier2014-05-131-9/+9
| | | | | | | | | | | | | | | | 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
* Add finalizer references from the entrypoints.Mathieu Chartier2014-05-011-1/+1
| | | | | | | | | | | | | | | | | | 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
* Centralize instruction-set pointer-size, alignment, 64b-width codeAndreas Gampe2014-04-141-1/+0
| | | | | | | | | in instruction_set.h/cc This allows to clean up some places that currently make explicit comparisons. Change-Id: I0dcc924c52fa53306f706aceea93a2d4a655c5df
* Revert "Revert "Revert "Use trampolines for calls to helpers"""Dave Allison2014-04-091-117/+0
| | | | | | This reverts commit f9487c039efb4112616d438593a2ab02792e0304. Change-Id: Id48a4aae4ecce73db468587967968a3f7618b700
* Revert "Revert "Use trampolines for calls to helpers""Dave Allison2014-04-091-0/+117
| | | | | | | | | This reverts commit 081f73e888b3c246cf7635db37b7f1105cf1a2ff. Change-Id: Ibd777f8ce73cf8ed6c4cb81d50bf6437ac28cb61 Conflicts: compiler/dex/quick/mir_to_lir.h
* Tweaked profile significant_difference.Calin Juravle2014-04-071-34/+1
| | | | | | | | | | - 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
* Merge "Profile: repurposed kTresholdPercent"Calin Juravle2014-04-031-9/+15
|\
| * Profile: repurposed kTresholdPercentCalin Juravle2014-04-021-9/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | Allow mixing of thread offsets between 32 and 64bit architectures.Ian Rogers2014-04-011-0/+1
|/ | | | | | | Begin a more full implementation x86-64 REX prefixes. Doesn't implement 64bit thread offset support for the JNI compiler. Change-Id: If9af2f08a1833c21ddb4b4077f9b03add1a05147
* Early inlining of simple methods.Vladimir Marko2014-03-181-0/+4
| | | | | | | | Inlining "special" methods: empty methods, methods returning constants or their arguments, simple getters and setters. Bug: 8164439 Change-Id: I8c7fa9c14351fbb2470000b378a22974daaef236
* Merge "Allow patching between dex files in the boot classpath."Jeff Hao2014-03-131-2/+12
|\
| * Allow patching between dex files in the boot classpath.Jeff Hao2014-03-121-2/+12
| | | | | | | | Change-Id: I53f219a5382d0fcd580e96e50025fdad4fc399df
* | Merge "Move inline method detection to runtime."Vladimir Marko2014-03-131-7/+0
|\ \
| * | Move inline method detection to runtime.Vladimir Marko2014-03-121-7/+0
| |/ | | | | | | | | | | The debugger needs this for selective deoptimization. Change-Id: I8100000449b56e619288fb05d41ea6f02b53b334