summaryrefslogtreecommitdiffstats
path: root/compiler/dex/quick/dex_file_method_inliner.h
Commit message (Collapse)AuthorAgeFilesLines
* Replace String CharArray with internal uint16_t array.Jeff Hao2015-04-271-1/+43
| | | | | | | | | | | | Summary of high level changes: - Adds compiler inliner support to identify string init methods - Adds compiler support (quick & optimizing) with new invoke code path that calls method off the thread pointer - Adds thread entrypoints for all string init methods - Adds map to verifier to log when receiver of string init has been copied to other registers. used by compiler and interpreter Change-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01
* Quick: Clean up temp use counting.Vladimir Marko2015-04-081-0/+5
| | | | | | | | | | | | | | | | | For the boot image on arm64 and x86-64 we're using true PC-relative addressing, so pc_rel_temp_ is nullptr and CanUsePcRelDexCacheArrayLoad() returns true, but we're not actually using the ArtMethod* so fix the AnalyzeMIR() to take it into account. Also don't count intrinsic invokes towards ArtMethod* uses. To avoid repeated method inliner inquiries about whether a method is intrinsic or special (requiring lock acquisition), cache that information in MirMethodLoweringInfo. As part of that cleanup, take quickened invokes into account for suspend check elimination. Change-Id: I5b4ec124221c0db1314c8e72675976c110ebe7ca
* Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.Ian Rogers2014-11-031-4/+4
| | | | | | | | | | | 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
* Change Reference.get() intrinsic to Reference.getReferent().Mathieu Chartier2014-09-091-1/+1
| | | | | | | | | | | | | The reference intrinsic was incorrectly inlining PhantomReference.get(). We now get around this by adding a layer of indirection. Reference.get() now calls getReferent() which is intrinsified and inlined. Requires: https://android-review.googlesource.com/#/c/107100/ Bug: 17429865 Change-Id: Ie91e70abf43cedf3c707c7bb8a5059e19d2a2577
* Added support for patching classes from different dex files.Fred Shih2014-08-061-1/+1
| | | | | | | | | 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
* AArch64: Add inlining support for ceil(), floor(), rint(), round()Serban Constantinescu2014-08-041-0/+4
| | | | | | | | | | | | | | | This patch adds inlining support for the following Math, StrictMath methods in the ARM64 backend: * double ceil(double) * double floor(double) * double rint(double) * long round(double) * int round(float) Also some cleanup. Change-Id: I9f5a2f4065b1313649f4b0c4380b8176703c3fe1 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
* Revert "Revert "Revert "Revert "Add intrinsic for Reference.get()""""Fred Shih2014-07-151-0/+3
| | | | | | | Fixed TargetReg issue causing build failure for x86. This reverts commit 9e82bd3f0ce9e5f5777bea2f752ff3e251d32f9f. Change-Id: I7e6a526954467aaf68deeed999880dfe9aa5f06e
* Revert "Revert "Revert "Add intrinsic for Reference.get()"""Sebastien Hertz2014-07-111-3/+0
| | | | | | This reverts commit d4415e8bd04c4a9367744ff0149597b4f37a0e0a. Change-Id: I34553ccbdcfea35c7742d21be2a74dc7085ab2a0
* Revert "Revert "Add intrinsic for Reference.get()""Christopher Ferris2014-07-111-0/+3
| | | | | | This reverts commit a9b870b73a155ce70c867d5b3f9758fab0b45f07. Change-Id: Ic2a9b47f2b911bef4b764d10bc33cf000e4b4211
* Revert "Add intrinsic for Reference.get()"Christopher Ferris2014-07-111-3/+0
| | | | | | This reverts commit 460503b13bc894828a2d2d47d09e5534b3e91aa1. Change-Id: Ie63f43049307e02e3b90f4e034abc9ea54ca4e24
* Add intrinsic for Reference.get()Fred Shih2014-07-101-0/+3
| | | | | | | | | | Added an intrinsic function for Reference.get(). Return immediately without going through JNI if the slow path is not currently in use. Otherwise, branch off to the the existing JNI function. Approximately 47x speedup for cases where slow path is not enabled. Change-Id: I13ad65a356fe4e104d8d83980694dc2740d7d039
* ART: Intrinsic implementation for java.lang.System.arraycopy.DaniilSokolov2014-07-081-0/+4
| | | | | | | | | | | | Implements intrinsic for java.lang.System.arraycopy(char[], int, char[], int, int) - this method is internal to android class libraries and used in such classes as StringBuffer and StringBuilder. It is not possible to call it from application code. The intrinsic for this method is implemented as inline method (assembly code is generated manually). The intrinsic is x86 32 bit only. Change-Id: Id1b1e0a20d5f6d5f5ebfe1fdc2447b6d8a515432 Signed-off-by: Daniil Sokolov <daniil.y.sokolov@intel.com>
* AArch64: Add few more inline functionsSerban Constantinescu2014-07-031-1/+5
| | | | | | | | | | | | This patch adds inlining support for the following functions: * Math.max/min(long, long) * Math.max/min(float, float) * Math.max/min(double, double) * Integer.reverse(int) * Long.reverse(long) Change-Id: Ia2b1619fd052358b3a0d23e5fcbfdb823d2029b9 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
* Add x86 inlined abs method for float/doubleYixin Shou2014-06-181-1/+1
| | | | | | | | Add the optimized implementation of inlined abs method for float/double for X86 side. Change-Id: I2f367542f321d88a976129f9f7156fd3c2965c8a Signed-off-by: Yixin Shou <yixin.shou@intel.com>
* Revert "Add x86 inlined abs method for float/double"Vladimir Marko2014-06-171-1/+1
| | | | | | This reverts commit e88b89ad1d1a583daf205c7a387ba13f549f95f1. Change-Id: I2ba21b7442ba3696482d45001e6bd32e8baf9d1f
* Add x86 inlined abs method for float/doubleYixin Shou2014-06-161-1/+1
| | | | | | | | Add the optimized implementation of inlined abs method for float/double for X86 side. Change-Id: I4e095644a90524354040174954c1e127c7bb4ee2 Signed-off-by: Yixin Shou <yixin.shou@intel.com>
* Inlining setters that return one of their arguments.Vladimir Marko2014-04-071-1/+1
| | | | | | | | 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
* Revert "Inlining setters that return one of their arguments."Mathieu Chartier2014-04-041-1/+1
| | | | | | | | Bug: 13817614 This reverts commit 8e40c3e662d852da87b6bcfe79355f96ab9e91c7. Change-Id: Ia7ed2d933514781150b2e0b9855244e383c60187
* Inlining setters that return one of their arguments.Vladimir Marko2014-04-041-1/+1
| | | | | | | | 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
* Early inlining of simple methods.Vladimir Marko2014-03-181-1/+19
| | | | | | | | Inlining "special" methods: empty methods, methods returning constants or their arguments, simple getters and setters. Bug: 8164439 Change-Id: I8c7fa9c14351fbb2470000b378a22974daaef236
* Move inline method detection to runtime.Vladimir Marko2014-03-121-114/+1
| | | | | | The debugger needs this for selective deoptimization. Change-Id: I8100000449b56e619288fb05d41ea6f02b53b334
* Enable annotalysis on clang ART builds.Ian Rogers2014-03-061-1/+0
| | | | | | | | | | | Fix clang build errors aswell as restructure locking/mutex code for correct thread safety analysis support. Reorder make dependencies so that host builds build first as they should provide better compilation errors than target. Remove host's use of -fno-omit-frame-pointer as it has no value with correct use of CFI, which we should have. Change-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90
* Fix clang to compile and run host tests.Ian Rogers2014-02-281-5/+6
| | | | | | | | | | | | | | 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
* Merge "Expose inline method identification for debugger."Vladimir Marko2014-02-181-2/+13
|\
| * Expose inline method identification for debugger.Vladimir Marko2014-02-181-2/+13
| | | | | | | | | | | | | | | | 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
* | GenSpecialCase support for x86Razvan A Lupusoru2014-02-131-1/+1
|/ | | | | | | | Moved GenSpecialCase from being ARM specific to common code to allow it to be used by x86 quick as well. Change-Id: I728733e8f4c4da99af6091ef77e5c76ae0fee850 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
* Merge "Added inlined abs method with float and double type"Ian Rogers2014-02-101-0/+3
|\
| * Added inlined abs method with float and double typeYixin Shou2014-02-071-0/+3
| | | | | | | | | | | | | | | | This patch added the implementation for inlining java.lang.Math.abs() method with float and double type. Change-Id: Ic99471b4ab4176e4a0153bef383bb49944fb636f Signed-off-by: Yixin Shou <yixin.shou@intel.com>
* | Revert "Revert "Check FastInstance() early for special getters and setters.""Vladimir Marko2014-02-101-39/+43
| | | | | | | | | | | | This reverts commit 632e458dc267fadfb8120be3ab02701e09e64875. Change-Id: I5098c41ee84fbbb39397133a7ecfd367fecebe42
* | Revert "Check FastInstance() early for special getters and setters."Ian Rogers2014-02-081-43/+39
| | | | | | | | | | | | This reverts commit 5dc5727261e87ba8a418e2d0e970c75f67e4ab79. Change-Id: I3299c8ca5c3ce3f2de994bab61ea16a734f1de33
* | Check FastInstance() early for special getters and setters.Vladimir Marko2014-02-071-39/+43
|/ | | | | | | | | | | | 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
* Avoid inliner spam wrt String.length.Ian Rogers2014-01-021-8/+9
| | | | | | | Also, remove a use of std::map for our preferred SafeMap and be more explicit with types. Change-Id: I7b9a4bb1f73c22490fe416503e050671e7c99fe0
* Fix build - style issues.Vladimir Marko2013-12-181-2/+2
| | | | Change-Id: I40540dac2a51ef326e642116b5c64fb581c849f2
* Detect special methods at the end of verification.Vladimir Marko2013-12-171-8/+81
| | | | | | | This moves special method handling to method inliner and prepares for eventual inlining of these methods. Change-Id: I51c51b940fb7bc714e33135cd61be69467861352
* Per-DexFile locking for inliner initialization.Vladimir Marko2013-12-131-4/+8
| | | | | | And clean up lock and compiler driver naming. Change-Id: I1562c7f55c4b0174a36007ba6199360da06169ff
* Get rid of platform-specific method inliners.Vladimir Marko2013-12-101-14/+14
| | | | | | | | | | | The DexFileToMethodInlinerMap dependency on CompilerDriver and its instruction set makes it impossible to implement verification-time checking for methods we want to inline. Therefore, we get rid of the platform-specific method inliners and rely on the backend's existing ability to recognize when it can actually emit an intrinsic function. Change-Id: I57947db93f13a26c1c794cb3584130321106306f
* Refactor intrinsic CAS, prepare for 64-bit version.Vladimir Marko2013-11-221-7/+7
| | | | | Bug: 11391018 Change-Id: Ic0f740e0cd0eb47f2c915f81be02f52f7721f8a3
* Rewrite intrinsics detection.Vladimir Marko2013-11-181-0/+318
Intrinsic methods should be treated as a special case of inline methods. They should be detected early and used to guide other optimizations. This CL rewrites the intrinsics detection so that it can be moved to any compilation phase. Change-Id: I4424a6a869bd98b9c478953c9e3bcaf1c6de2b33