summaryrefslogtreecommitdiff
path: root/runtime/quick/inline_method_analyser.cc
AgeCommit message (Collapse)Author
2017-04-21ART: Move InlineMethodAnalyzer into compiler Andreas Gampe
Move the infrastructure, which is now only used by the compiler. Test: mmma art Change-Id: I4a61e35f23736b226523d7349f49208ad852ad2f
2017-03-14Revert^2 "Hash-based DexCache field array." Vladimir Marko
Test: testrunner.py --host --interpreter Bug: 30627598 This reverts commit 6374c58f2ea403b3a05fb27376110fe4d0fc8e3f. Change-Id: I275508e288a85d3aa08f7405a1a4f362af43b775
2017-03-13Revert "Hash-based DexCache field array." Vladimir Marko
Reverting to allow rebasing the revert https://android-review.googlesource.com/351689 without too many conflicts. Bug: 30627598 This reverts commit 1aea3510b8dd0c512cec61c91c5ef1f1e5d53d64. Change-Id: I4af65e9f41c8bad8106c028947eca7c5a9534c53
2017-03-10Hash-based DexCache field array. Vladimir Marko
Test: m test-art-host, both AOT and interpreter Test: m test-art-target, both AOT and interpreter Test: m valgrind-test-art-host Bug: 30627598 Change-Id: If992f091aadd862d17b09928d21659573dd285a0
2016-10-03Move ArtField to ObjPtr Mathieu Chartier
Added EXPECT_OBJ_PTR_EQ and variants to gtests. Fixed moving GC bugs in: ClassLinker::CreatePathClassLoader ClassLinkerTest: StaticFields ObjPtr Decode call sites: 186 -> 181. Some tests fail due to ResolvedFieldAccessTest, will fix in follow up CL. Bug: 31113334 Test: test-art-host CC baker Change-Id: I8b266ad00f3c20c8cbe7cfdf280d175083df0b88
2016-08-30ART: SHARED_REQUIRES to REQUIRES_SHARED Andreas Gampe
This coincides with the actual attribute name and upstream usage. Preparation for deferring to libbase. Test: m Test: m test-art-host Change-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518
2016-08-01ART: Convert pointer size to enum Andreas Gampe
Move away from size_t to dedicated enum (class). Bug: 30373134 Bug: 30419309 Test: m test-art-host Change-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269
2016-04-28Split profile recording from jit compilation Calin Juravle
We still use ProfileInfo objects to record profile information. That gives us the flexibility to add the inline caches in the future and the convenience of the already implemented GC. If UseJIT is false and SaveProfilingInfo true, we will only record the ProfileInfo and never launch compilation tasks. Bug: 27916886 (cherry picked from commit e5de54cfab5f14ba0b8ff25d8d60901c7021943f) Change-Id: I68afc181d71447895fb12346c1806e99bcab1de2
2016-03-23Revert "ART: Weaken DCHECK" Nicolas Geoffray
Change that triggered this got reverted. This "fix" needs more investigation. This reverts commit 1ee29d3dd3fbbf5df7821b70f45c49275c878e63. Change-Id: Iee9e88f0e993edc0c7212e36d48ded1d31209156
2016-03-22ART: Weaken DCHECK Andreas Gampe
Returns may be either plain or quickened. Change-Id: Iee343c02fe3e02512c0ed60508525495a7cd5efb
2016-03-09ART: Write bit fields together in ComputeSpecialAccessorInfo(). Vladimir Marko
Avoid function calls between storing individual bit fields to allow the compiler (gcc/clang) to merge those writes together. Valgrind then marks the memory as "defined" while individual bit field writes would leave it "undefined" and later trigger the valgrind error: Conditional jump or move depends on uninitialised value(s) on DCHECK()s using the bit fields. Bug: 27552451 Change-Id: If6de5cbe231f99da0f974a0fc9a36c14e3dc071e
2016-02-09Try to substitute constructor chains for IPUTs. Vladimir Marko
Match a constructor chain where each constructor either forwards some or all of its arguments to the next (i.e. superclass constructor or a constructor in the same class) and may pass extra zeros (of any type, including null), followed by any number of IPUTs on "this", storing either arguments or zeros, until we reach the contructor of java.lang.Object. When collecting IPUTs from the constructor chain, remove any IPUTs that store the same field as an IPUT that comes later. This is safe in this case even if those IPUTs store volatile fields because the uninitialized object reference wasn't allowed to escape yet. Also remove any IPUTs that store zero values as the allocated object is already zero initialized. Change-Id: If93022310bf04fe38ee741665ac4a65d4c2bb25f
2016-02-02ART: Fix bad manual rename of local variable. Vladimir Marko
Follow up to https://android-review.googlesource.com/198621 . Bug: 26929002 Change-Id: I11c5000d7b7bfaa866d45603c8c21d4ab8599a0e
2016-01-28Optimizing: Try pattern substitution when we cannot inline. Vladimir Marko
Change-Id: I7c01f4494bac8498accc0f087044ec509fee4c98
2015-10-27Remove stalled DCHECK. Nicolas Geoffray
Change-Id: I446f3f6b6da6a3f2c883f794b2e6ffb379a89c95
2015-05-29Move mirror::ArtMethod to native Mathieu Chartier
Optimizing + quick tests are passing, devices boot. TODO: Test and fix bugs in mips64. Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS. Some of the savings are from removal of virtual methods and direct methods object arrays. Bug: 19264997 Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d
2015-05-06Quick: Inline synthetic accessors generated by jack. Vladimir Marko
While javac names synthetic accessors "access$nnn", jack names them "-getN", "-putN" and "-wrapN". For simplicity, treat all methods starting with "-" as synthetic accessors. Bug: 20873367 Change-Id: I67990a6c2ef1d25dafe460ef70143a113bb5b7da
2015-04-13ART: Clean up includes. Vladimir Marko
Reduce dependencies to improve incremental build times. Break up circular dependency involving class_linker-inl.h. Change-Id: I4be742c5c2b5cd9855beea86630fd68aab76b0db
2015-04-10Move ArtField to native Mathieu Chartier
Add linear alloc. Moved ArtField to be native object. Changed image writer to put ArtFields after the mirror section. Savings: 2MB on low ram devices 4MB on normal devices Total PSS measurements before (normal N5, 95s after shell start): Image size: 7729152 bytes 23112 kB: .NonMoving 23212 kB: .NonMoving 22868 kB: .NonMoving 23072 kB: .NonMoving 22836 kB: .NonMoving 19618 kB: .Zygote 19850 kB: .Zygote 19623 kB: .Zygote 19924 kB: .Zygote 19612 kB: .Zygote Avg: 42745.4 kB After: Image size: 7462912 bytes 17440 kB: .NonMoving 16776 kB: .NonMoving 16804 kB: .NonMoving 17812 kB: .NonMoving 16820 kB: .NonMoving 18788 kB: .Zygote 18856 kB: .Zygote 19064 kB: .Zygote 18841 kB: .Zygote 18629 kB: .Zygote 3499 kB: .LinearAlloc 3408 kB: .LinearAlloc 3424 kB: .LinearAlloc 3600 kB: .LinearAlloc 3436 kB: .LinearAlloc Avg: 39439.4 kB No reflection performance changes. Bug: 19264997 Bug: 17643507 Change-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c
2015-02-24Revert "Revert "Add JIT"" Mathieu Chartier
Added missing EntryPointToCodePointer. This reverts commit a5ca888d715cd0c6c421313211caa1928be3e399. Change-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af
2015-02-24Revert "Add JIT" Nicolas Geoffray
Sorry, run-test crashes on target: 0-05 12:15:51.633 I/DEBUG (27995): Abort message: 'art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast<uintptr_t>(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc=71e3366b code=0x71e3362d size=ad000000' 10-05 12:15:51.633 I/DEBUG (27995): r0 00000000 r1 0000542b r2 00000006 r3 00000000 10-05 12:15:51.633 I/DEBUG (27995): r4 00000006 r5 b6f9addc r6 00000002 r7 0000010c 10-05 12:15:51.633 I/DEBUG (27995): r8 b63fe1e8 r9 be8e1418 sl b6427400 fp b63fcce0 10-05 12:15:51.633 I/DEBUG (27995): ip 0000542b sp be8e1358 lr b6e9a27b pc b6e9c280 cpsr 40070010 10-05 12:15:51.633 I/DEBUG (27995): Bug: 17950037 This reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4. Change-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3
2015-02-23Add JIT Mathieu Chartier
Currently disabled by default unless -Xjit is passed in. The proposed JIT is a method JIT which works by utilizing interpreter instrumentation to request compilation of hot methods async during runtime. JIT options: -Xjit / -Xnojit -Xjitcodecachesize:N -Xjitthreshold:integervalue The JIT has a shared copy of a compiler driver which is accessed by worker threads to compile individual methods. Added JIT code cache and data cache, currently sized at 2 MB capacity by default. Most apps will only fill a small fraction of this cache however. Added support to the compiler for compiling interpreter quickened byte codes. Added test target ART_TEST_JIT=TRUE and --jit for run-test. TODO: Clean up code cache. Delete compiled methods after they are added to code cache. Add more optimizations related to runtime checks e.g. direct pointers for invokes. Add method recompilation. Move instrumentation to DexFile to improve performance and reduce memory usage. Bug: 17950037 Change-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca
2014-12-12Remove portable. Elliott Hughes
Change-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc
2014-11-03ART: Replace COMPILE_ASSERT with static_assert (runtime) Andreas Gampe
Replace all occurrences of COMPILE_ASSERT in the runtime tree. Change-Id: I01e420899c760094fb342cc6cb9e692dd670a0b2
2014-05-02Move DecodedInstruction into MIR. Ian Rogers
Change-Id: I188dc7fef4f4033361c78daf2015b869242191c6
2014-04-07Inlining synthetic accessors. Vladimir Marko
Bug: 11549140 Change-Id: I0d6a38c51887f55563414c240ac42ee64bdb5426
2014-04-07Inlining setters that return one of their arguments. Vladimir Marko
Useful for builder classes and synthetic setters. The latter are not inlined yet since they are static methods, i.e. they don't use "this" as the object for IPUT. Change-Id: I3d34156c3629b837a0a95ccc34a8aae3f4a636d5
2014-04-04Revert "Inlining setters that return one of their arguments." Mathieu Chartier
Bug: 13817614 This reverts commit 8e40c3e662d852da87b6bcfe79355f96ab9e91c7. Change-Id: Ia7ed2d933514781150b2e0b9855244e383c60187
2014-04-04Revert "Inlining synthetic accessors." Mathieu Chartier
This reverts commit 505ebb0e7b42e7facc8354515b06333ee8b84b10.
2014-04-04Inlining synthetic accessors. Vladimir Marko
Bug: 11549140 Change-Id: Ie0034a6840b1beaa3df92f26bf9d315119c81e34
2014-04-04Inlining setters that return one of their arguments. Vladimir Marko
Useful for builder classes and synthetic setters. The latter are not inlined yet since they are static methods, i.e. they don't use "this" as the object for IPUT. Change-Id: I946cf570195be83ecec5fb32851bcaefad45f8a5
2014-03-21Support inlining detection from debugger. Sebastien Hertz
In the context of the compiler, every method and field should be resolved. The InlineMethodAnalyser uses that property so we don't inline unresolved methods or methods accessing unresolved fields. In the context of the debugger, this is not true. We may install a breakpoint in a method that's never been resolved yet for instance. This CL weaks that property so we can detect getter/setter methods can be inlined even if they're not resolved yet. To differentiate both contexts, we pass a null inline method pointer to InlineMethodAnalyser::AnalyseIGetMethod. Bug: 12187616 Change-Id: I247f315b9abd6b065d5a7ec4116de15a6cce7649
2014-03-12Move inline method detection to runtime. Vladimir Marko
The debugger needs this for selective deoptimization. Change-Id: I8100000449b56e619288fb05d41ea6f02b53b334