summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing
Commit message (Collapse)AuthorAgeFilesLines
* Merge tag 'android-6.0.1_r3' of ↵Steve Kondik2015-12-081-1/+3
|\ | | | | | | | | | | | | | | https://android.googlesource.com/platform/art into HEAD Android 6.0.1 release 3 Change-Id: I23fd56f2c1a3e8e8b993a151a794e18f3569912e
| * Fix in reference type propagationCalin Juravle2015-10-161-1/+3
| | | | | | | | | | | | | | | | | | | | We miss updating the type of objects if their nullability gets updated first. Bug: 25008765 (cherry picked from commit 83853392e26b2aa48328bb90c9f9c57b32c280dc) Change-Id: I81aa759d96008251d74f941494abe74aa4b52bdc
* | art: Fix whitespace errors added by cafChristopher R. Palmer2015-11-093-8/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All of these errors break compilation with GCC 4.9 and based on a spot check appear to be all CAF introduced changes. Fix these to avoid future breakage. Conflicts: compiler/dex/mir_graph.h compiler/dex/quick/arm/assemble_arm.cc compiler/dex/quick/arm/codegen_arm.h compiler/dex/quick/arm/target_arm.cc compiler/dex/quick/arm64/codegen_arm64.h compiler/dex/quick/arm64/target_arm64.cc compiler/dex/quick/mir_to_lir.h compiler/utils/growable_array.h Changes: compiler/dex/mir_graph.h compiler/dex/mir_optimization.cc compiler/dex/quick/arm/codegen_arm.h compiler/dex/quick/arm/target_arm.cc compiler/dex/quick/mir_to_lir.h compiler/dex/quick/quick_compiler.cc compiler/driver/compiler_driver.cc compiler/optimizing/inliner.cc compiler/optimizing/nodes.cc compiler/optimizing/optimizing_compiler.cc Change-Id: I3e23e1449eea0565fbe6f91251190b1e153f16cf Signed-off-by: AdrianDC <radian.dc@gmail.com>
* | Merge tag 'android-6.0.0_r26' into cm-13.0Ricardo Cerqueira2015-11-051-0/+9
|\ \ | |/ | | | | Android 6.0.0 release 26
| * Revert "Fix another source of undeterministic inlining." DO NOT MERGEBrian Carlstrom2015-09-291-0/+9
| | | | | | | | | | | | | | | | This reverts commit bd7eef17de5f3d25f411702f9f260a96455b4cf7. Bug: 24467386 Bug: 20037935 Change-Id: I04d1d0ffc67661370e4c17911d3b2b105d053bc1
* | ART: bring original constructor backWei Wang2015-10-061-0/+40
| | | | | | | | | | | | | | | | ART extension changes the constructor of some compiler classes, which confuses ART compiler test builder. Bring the original constructor back to make the test build work properly. Change-Id: I2d6f0a67c2c7bee9d8f67ba55eaa1d5c05449d31
* | ART: extensionWei Wang2015-10-066-17/+148
| | | | | | | | | | | | | | 1. add hooks for further extension 2. minor code change Change-Id: I2615013b899f5f9b3495546e6001863fb054861a
* | Optimizing: Move optimization objects to Arena.Vladimir Marko2015-10-063-36/+46
|/ | | | | | | | | | | | | This should reduce the stack size needed by the OptimizingCompiler::CompileOptimized() which was very close to our limits for clang builds, causing repeated build breakages on otherwise healthy changes: art/compiler/optimizing/optimizing_compiler.cc:395:37: error: stack frame size of 1760 bytes in function 'art::OptimizingCompiler::CompileOptimized' [-Werror,-Wframe-larger-than=] Change-Id: I2f4ab0235f4eac61823a4a320bb4fe78942a23c2
* Fix a bug in the register allocator around pair allocation.Nicolas Geoffray2015-08-081-1/+4
| | | | | | | | | | | | | We may get hints that do not work with the current implementation of register pairs, which forces the allocation of (low + 1) for the high register. For example, if the hint is EBX, we will allocate ESP for the high register. bug:23043730 (cherry picked from commit f29758111e71a7d14f3e52d78773561a5d59961f) Change-Id: Ib395e36616017a87d3055218d72417f4e9ff6501
* ART: Fix the simplifier for add/subSerguei Katkov2015-08-061-8/+16
| | | | | | | | | | | | | Instruction simplifier for add/sub should not proceed with floats because that might cause the incorrect behavior with signed zero. Bug: 23001681 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> (cherry picked from commit 115b53f609e74672fa93eea1845bb17340d5112a) Change-Id: I9928724c4158b3961e32e376b9203fe01ba2e442
* ART: x86_64 RoundDouble/Float intrinsics should initialize out value.Pavel Vyssotski2015-08-051-1/+7
| | | | | | | | | | | | | | x86_64 RoundDouble intrinsic should initialize output register for the case of "inPlusPointFive >= maxLong" as expected. The same for the RoundFloat intrinsic. Fixed also the out register type in CreateSSE41FPToIntLocations provoking a DCHECK failure. Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com> (cherry picked from commit 9ca257196b46fd7629bce0b338580e571e4113a8) Bug: 22973442 Change-Id: If974e79d33311587d0b541a01ca8a4c9c11b9468
* Allow for fine tuning the inliner.Calin Juravle2015-07-301-5/+9
| | | | | | | | | | Bug: 21868508 (cherry picked and squashed from commits ec74835a7e4f2660250a2f3f9508cbbe5269e49a and 0941b9d48a9a8c6d80a1af7a0d0fc9f80fe2b9a1) Change-Id: I1750e6bea20321d04680132281a6c2924531c5ae
* HDeoptimize should hold values live in env.Mingyao Yang2015-07-282-2/+8
| | | | | | | | | | Values that are not live in compiled code anymore may still be needed in interpreter, due to code motion, etc. (cherry-picked from commit 718493c6c3c8e380663cb8a94e57ce160a6c473f) Bug: 22665511 Change-Id: I8b85833c5c462f8fe36f86d6026a51b07563995a
* Reduce space filter threshold to 128.Nicolas Geoffray2015-07-171-2/+2
| | | | | | | | | | In order to get closer to our code increase limit. Bug:21868508 (cherry picked from commit 432bf3d525dd0736c91238d69e29b4db6a2f7b80) Change-Id: Iab19fe99a8a869b0fb841bac317016e4a3dc00e2
* ART: Boolean simplifier fixSerguei Katkov2015-07-161-5/+0
| | | | | | | | | Boolean simplifier should not remove condition instruction if it has side effects. (cherry picked from commit 108ceb48edea654c544b483c302212e43d79a472) Change-Id: I00dd595da1bba0f027f5c8647035e9fd8ba62ee1
* Do not create a HBoundType when the instruction is non-null.Nicolas Geoffray2015-07-022-0/+8
| | | | | | | | | | We don't need to refine the type after a null check, if the instruction is known non null or null. As a side effect, this avoids replacing HLoadClass instructions with HBoundType instructions. bug:22116987 Change-Id: I565ae95db5a64faec30e026674636e398e0bf445
* Merge "Do not replace a live phi with a dead phi." into mnc-devNicolas Geoffray2015-07-011-1/+7
|\
| * Do not replace a live phi with a dead phi.Nicolas Geoffray2015-06-291-1/+7
| | | | | | | | | | | | | | | | | | | | | | A dead phi is not properly typed. Therefore, always use the live phi equivalent instead. bug:21865466 (cherry picked from commit 4230e1895b915a22363452823b0e51eabe92cb60) Change-Id: If9a3313fc953c2eb4be85b625676e48112fcb1f6
* | Revert "Revert "Do not update the type of something we already know.""Nicolas Geoffray2015-06-293-0/+37
|/ | | | | | | | | | This reverts commit 63107a804ce17db9789051e1fe310d99d1dae1cb. bug:22116987 (cherry picked from commit f9a199571417b5a5a62d94d05a064077e14dd2c4) Change-Id: Ia516f2cbce6d22df37f3a0854abdd0b54d3ea72d
* Merge "MIPS: Initial version of optimizing compiler for MIPS64R6." into mnc-devRoland Levillain2015-06-299-16/+3606
|\
| * MIPS: Initial version of optimizing compiler for MIPS64R6.Roland Levillain2015-06-269-16/+3606
| | | | | | | | | | | | | | | | | | | | (cherry picked from commit 4dda3376b71209fae07f5c3c8ac3eb4b54207aa8) (amended for mnc-dev) Bug: 21555893 Change-Id: I874dc356eee6ab061a32f8f3df5f8ac3a4ab7dcf Signed-off-by: Alexey Frunze <Alexey.Frunze@imgtec.com> Signed-off-by: Douglas Leung <douglas.leung@imgtec.com>
* | ART: Bail out immediately on try/catchDavid Brazdil2015-06-261-6/+11
|/ | | | | | | | | Optimizing builds the graph even if it knows it will delegate to Quick. This patch moves the decision at the beginning of the TryCompile function to save a little bit of compile time. Bug: 22115561 Change-Id: I18b5a686e10592080ea3c49d53a0dd81aa3b3010
* Only do some checks when compiling against the core image.Nicolas Geoffray2015-06-253-2/+14
| | | | | | | | | | This will avoid false negatives when running dex2oatd on apks. bug:21865473 (cherry picked from commit 335005e2b3a179f26b7a8ae64ca60a1406b669bd) Change-Id: Iac6dbe30c9d576077a0384b88696f79937d89471
* Use a flag from the verifier to know if we should compile.Nicolas Geoffray2015-06-241-1/+2
| | | | | | | | | | | Only used for the lack of bottom type in the aget-object case for now. Could be used for more. bug:21865466 (cherry picked from commit 4824c27988c8eeb302791624bb3ce1d557b0db6c) Change-Id: I2bb7fe1d4737bd92c1076b5193607d74d8761ee7
* BCE: don't assume a bounds check always gets a HArrayLength.Nicolas Geoffray2015-06-241-2/+8
| | | | | | | | | | Deoptimizations may change it to a HPhi. bug:22056703 (cherry picked from commit 8df886b9214802ad689316a1dedb00a6d102555c) Change-Id: I8afcf88e3a12dbe4d87101e6a7cefb8b81e2bb96
* Fix codegen_test after DCE fix.Nicolas Geoffray2015-06-241-1/+4
| | | | | | | | (cherry picked from commit ea80942c39cb5e9bc3e38a388583d1646c1e2a3f) bug:22031382 Change-Id: If410045779adb9e7e611af22c988232b5bf9a902
* Recompute dominator tree after DCE.Nicolas Geoffray2015-06-244-21/+39
| | | | | | | | bug:22031382 (cherry picked from commit 1f82ecc6a0c9f88d03d6d1a6d95eeb8707bd06c1) Change-Id: I9a74edb185cb806045903dfe9695d9cc1a02e86b
* BCE: Narrow instead of unconditionnaly overwrite the range.Nicolas Geoffray2015-06-241-3/+5
| | | | | | | | bug:21862741 (cherry picked from commit a09ff9c11f07863ac57e6120a824f0d20dfaa284) Change-Id: Ia8e903e09a7f9c2b8ef7cf3522f73f154534b81f
* Fix another case of un-verified dead code.Nicolas Geoffray2015-06-241-2/+7
| | | | | | | | | bug:22042796 https://code.google.com/p/android/issues/detail?id=178008 (cherry picked from commit 1efcc22cd1895c48adccbe49270d8e8583c2b12d) Change-Id: I5c0d783e842da39cd3dcbb2f18ccf784e797a64f
* Do not overwrite an input register in shift operations.Nicolas Geoffray2015-06-232-20/+23
| | | | | | | | | | | 'second_reg' is an input register that can survive the instruction. Instead use the output register as a temporary result. bug:21667432 (cherry picked from commit a4f3581da73b83484a30ab499c4f8ad43b378dab) Change-Id: Ic1f399964911b8a9fc57352130c92b2a0a1b8e0d
* Revert "Revert "Add support for inlining already sharpened interface calls.""Nicolas Geoffray2015-06-222-12/+8
| | | | | | | | bug:21867144 This reverts commit ee39360775066e6b9920348c86ea98bf01d0facf. Change-Id: I69bf85ce7c352b1a22f36f0f2a136f95b4e73bd6
* Revert "Add support for inlining already sharpened interface calls. DO NOT ↵Nicolas Geoffray2015-06-222-8/+12
| | | | | | | | | | MERGE ANYWHERE" This reverts commit c362782609ca6fbc355ccc9ea9110fe671db9671. Reverting in order to make a commit that will merge. bug:21867144
* Revert "Revert "Use IsAssignableFrom instead of IsSubclass for robustness.""Nicolas Geoffray2015-06-221-1/+2
| | | | | | | | | | | | | | | Don't use IsAssignableFrom, but check beforehand if the referrer is an interface. Otherwise, we are being too aggressive on removing clinit checks on interfaces (being a subclass doesn't imply the interface has been initialized). bug:21870666 This reverts commit 463580ca5a1e75e27ad0207537ffc6252091326a. (cherry picked from commit b783b408112d1797da646f576a40f94bcb5162f3) Change-Id: Ida03f453c9b0d4dda87a5696098f9ffbd69a3aa3
* Use compiling class instead of outer class for access checks.Nicolas Geoffray2015-06-221-10/+13
| | | | | | | | bug:21869678 (cherry picked from commit afd06414598e011693137ba044e38756609b2179) Change-Id: I982ccdf46e3f4d0cc1901439e0bc2dcfa0fc661f
* Use compiling class instead of referrer for access checks.Nicolas Geoffray2015-06-222-14/+26
| | | | | | | | bug:21869670 (cherry picked from commit 30451743493bc2f589e96d68ab98f557461f97f9) Change-Id: Ia18986797d166470801e7a9a690c054d2dc57952
* Be careful with predecessor/successor index.Nicolas Geoffray2015-06-225-14/+29
| | | | | | | | | | | | | When we simplify the CFG, we must preserve things that were already simplified. For example, the index in the predecessor list or successor list of a block must be preserved for ensuring the first block is a loop pre header. bug:21867463 (cherry picked from commit 8b20f88b0a8d1b374dd5eaae289d19734c77b8f8) Change-Id: I2581b5a50942290da96cd9ec876f6f2573e0a6c4
* Merge "Don't check the return type in the builder." into mnc-devNicolas Geoffray2015-06-221-5/+0
|\
| * Don't check the return type in the builder.Nicolas Geoffray2015-06-221-5/+0
| | | | | | | | | | | | | | | | | | | | | | The verifier will not complain about dead code. For the compiler, it is benign. bug:21863767 (cherry picked from commit 69505f86a1a653bf86c1f2b423b3e0605137d5d1) Change-Id: I2bc7888b39c91862c6dade130eccdf92f19b3f6f
* | Do not expect 0 or 1 only when comparing a boolean.Nicolas Geoffray2015-06-221-4/+6
|/ | | | | | | | bug:21866529 (cherry picked from commit 3c4ab80c102ff1bfc0e74d4abddbf5454bf4008d) Change-Id: Ibdc0d4a9730bfc6e7307282276f084dae5ac55c1
* Run a simplification pass before code generation.Nicolas Geoffray2015-06-221-0/+5
| | | | | | | | | | | | The code generators assume things that only the instruction simplier ensures. So it has to be run last in case previous optimiziations broke those assumptions. bug:21865464 (cherry picked from commit b2bdfce7f805b00668a2521b1c939a0aafb2be49) Change-Id: Ibf4384a911e400eb7586bbf6b4edd6351034cbd8
* Merge "Bailout from compilation if an invoke is malformed." into mnc-devNicolas Geoffray2015-06-222-10/+35
|\
| * Bailout from compilation if an invoke is malformed.Nicolas Geoffray2015-06-222-10/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | Because the verifier does not check trivially dead instructions, the compilers must prepare for bogus instructions. This change fixes the case the arguments for an invoke do not match the formal parameters. bug:21865459 (cherry picked from commit 2e33525bd4eb892246b4c244c6d4ebf6c6d07501) Change-Id: I392f86eafefde28263fe35a31f17b398ff8dfc24
* | Merge "Fix wrong DCHECK in bounds check elimination." into mnc-devNicolas Geoffray2015-06-221-1/+3
|\ \
| * | Fix wrong DCHECK in bounds check elimination.Nicolas Geoffray2015-06-221-1/+3
| |/ | | | | | | | | | | | | | | | | | | | | | | The lower range of an array length instruction can be changed by other instructions than HBoundsCheck, like HNewArray. bug:21862741 (cherry picked from commit 8d82a0c2b2b12f259ccb357d3b1e699c68ad0400) Change-Id: I1bb1a4f4c6673509dd3fb5184c32992bed876250
* | Fix a bug in optimizing when the null constant has been DCE.Nicolas Geoffray2015-06-222-2/+5
|/ | | | | | | | | | | | | | If it has been DCE, we should create a new one, instead of using the old one. Also move the first DCE to a place where it could actually be useful. bug:21870788 (cherry picked from commit 18e6873c469b48aaed22148451523479eece98e3) Change-Id: I3b3ab2dafe8ce5fb60868fd1a6ef0eeefe666e0c
* Fix String Change baseline compiler errors.Nicolas Geoffray2015-06-221-2/+3
| | | | | | | | | | | | | The String Change adds multiple move results if the uninitialized string is in multiple registers. This adds StoreLocals on the same instruction, which isn't allowed. Now, a LoadLocal is added for each extra move needed. bug:21902634 (cherry picked from commit aa919207d2fb63af11d72d3b7cdbc435769565af) Change-Id: I057d14cdac437d06eec20caaddd430c304e58196
* ART: Fix BCE lint issueAndreas Gampe2015-06-191-2/+2
| | | | | | | | Bug: 21034044 (cherry picked from commit 45d68f138a31a3ff9b45cda313f0ba27f1431f26) Change-Id: I7f382a3124955eff5c0b96ca39ec67fb658fa3d0
* Remove bogus DCHECK in BCE.Nicolas Geoffray2015-06-191-5/+5
| | | | | | | | | | | | When creating a phi for the array length when we add HDeoptimization nodes, we might update accesses in inner loops to use that phi instead of the array length. The BCE phase was not expecting this case. Bug: 21034044 (cherry picked from commit 3cde6227678cf62e06bca264671d1e957456ac3d) Change-Id: I639f4ea6f5889726142041a42736183f162c7437
* Fix premature deoptimization if the loop body isn't entered.Mingyao Yang2015-06-194-165/+598
| | | | | | | | | | | | | | Add a test between initial_ and end_ to see if the loop body is entered. If the loop body isn't entered at all, we jump to the loop header. Loop header is still executed and is going to test the condition again and loop body won't be entered. This makes sure no deoptimization is triggered if the loop body isn't even entered. Bug: 21034044 (cherry picked from commit 3584bce5b1f45e5741d3a6ca24884a36320ecb6b) Change-Id: I2b6de1f22fbc4568ca419f76382ebd87806d9694
* Merge "ART stack unwinding fixes for libunwind/gdb/lldb." into mnc-devDavid Srbecky2015-06-191-3/+3
|\