summaryrefslogtreecommitdiffstats
path: root/compiler/dex/gvn_dead_code_elimination.cc
Commit message (Collapse)AuthorAgeFilesLines
* ART: Fix Quick's DCE+GVNSerguei Katkov2015-08-111-2/+16
| | | | | | | | | | | | | | | | | | DCE_GVN does not take into account the following case: mov a, b ... mov c, b when optimization tries to replace a with c it must ensure that for all uses of a there is no new definition of c before use. Otherwise that use will incorrectly substituted with new c instead of original b. Bug: 23102860 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> (cherry picked from commit 2f2f17399f6bdfc5ec94a875152c31ef79620520) Change-Id: I1f08c99cedbe4fd1b96cad11f17d60ab551c7cf7
* ART: Change UnresolvedMergedType internal representationAndreas Gampe2015-08-101-1/+1
| | | | | | | | | | Squashed cherry-picks: * 067f1ed7816cf4eb5d6258ca31b387ddb2073ab7 * 750f7c2827318f6d07620f2ef0321218ea4d8670 * 2f90b3415aadc2587d26c767c6bfb235797119a8 * 2ea7b70b2347969f3735bd0ec1b462bd6d2ff1bd Bug: 22881413
* ART: DCE should know that array-length can throw NPESerguei Katkov2015-07-161-1/+7
| | | | | | | | | | | array-length can throw NPE so it should be taking into account. Bug: 22521944 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> (cherry picked from commit b016c6dd3c30b04104a0a43dc294ce93e5f63874) Change-Id: I6232430a02f9e6d156ad2aae0eb5a630118c0e79
* Quick: Fix marking unused registers in DCE.Vladimir Marko2015-06-181-1/+4
| | | | | | | | Bug: 21702651 (cherry picked from commit 511d408909b7fe9be3c95e032cc7f426f4a01e6e) Change-Id: I059e0b841543334cd08a27431e0ea853b42e4f35
* Quick: Fix marking high words in DCE.Vladimir Marko2015-05-141-6/+3
| | | | | | | | | | | | | | This CL properly fixes the high word marking and reverts https://android-review.googlesource.com/150352 which was just covering up the underlying issue. A unit test for the encountered issue is provided, though it does not expose the deficiency in the cover-up CL. Bug: 20640451 (cherry picked from commit 9cacef6e811940c2f21e7e54055379a2c43f0d06) Change-Id: I4c4ca82fe4b2e34feb38090d88a5d5c754914f89
* Quick: Fix DCE, clear high word flag in RemoveChange().Vladimir Marko2015-05-121-1/+2
| | | | | | | | Bug: 20640451 (cherry picked from commit ade58e14582c6ab81978e9cfcbbf5e54cc23fe18) Change-Id: I8ac7fea3d9d2a434ee79fb917e68a4dc96e5482f
* Quick: Fix DCE to mark wide register overlaps correctly.Vladimir Marko2015-05-121-10/+37
| | | | | | | | | | | Previously we missed some cases of overlap with registers coming from previous blocks. Bug: 20640451 (cherry picked from commit 83d46ef1eaa8fdecadfdb9564d80e50b42646c37) Change-Id: I1be879edfbc900b70cee411d9e31e5a4b524530a
* Quick: Fix DCE to rename SSA regs for degenerate Phis.Vladimir Marko2015-05-071-2/+16
| | | | | | | | | | | If we're inserting a new Phi and all its inputs are the same SSA reg (for example, we allow a single-input Phi), some subsequent insn may actually refer to that reg, so we need to rename it to keep the graph in a consistent state. (cherry picked from commit f60715c2c0a2398822a143ffb6b75507bffca703) Change-Id: I46822b0db21c187601b79d2ff1a650494558772a
* Quick: Rely on inferred types in GVN/LVN/DCE.Vladimir Marko2015-04-281-10/+9
| | | | | | | | | | | | | | | | | | | | Fix LVN::GetEndingVregValueNumberImpl() to check whether the requested wideness matches the SSA register type as recorded in MIRGraph::reg_location_. Add DCHECKs that the wideness matches when getting/setting sreg values, update Phi handling in LVN/DCE to use the type from MIRGraph::reg_location_ instead of determining it from the sreg value maps which would now trigger the DCHECKs. Update tests to initialize MIRGraph::reg_location_. Reenable DCE. Bug: 20572509 (cherry picked from commit a5e69e87c630c08c0de1740427e60d531ce851b9) Change-Id: Ieb97ac9e3672b977e36fd7f369a975bae7d5271e
* Quick: Fix and enable DCE and improve GVN/DCE cleanup.Vladimir Marko2015-04-231-2/+23
| | | | | | | | | | | | | When eliminating a move by renaming its source register, check that it doesn't conflict with vreg usage by insns between the defining insn and the move. Improve the GVN/DCE cleanup so that it can handle cases where GVN or DCE is individually disabled in the pass driver but not in the disable_opt flags. Bug: 19419671 Change-Id: I49bb67b81509f51fbaf90c6016c509962be43736
* Revert "Revert "Quick: Rewrite type inference pass.""Vladimir Marko2015-04-231-7/+3
| | | | | | | | | Fix the type of the ArtMethod* SSA register. Bug: 19419671 This reverts commit 1b717f63847de8762e7f7bdd6708fdfae9d24a67. Change-Id: Ie4da3c03a0e0334a39a24718f6dc31f9255cfb53
* Revert "Quick: Rewrite type inference pass."Andreas Gampe2015-04-221-3/+7
| | | | | | | | Breaks arm64, as the method register is not correctly flagged as ref and thus 32bit. Bug: 19419671 This reverts commit e490b01c12d33f3bd5c247b55b47e507cc9c8fab.
* Quick: Rewrite type inference pass.Vladimir Marko2015-04-221-7/+3
| | | | | | | | | | | Use method signatures, field types and types embedded in dex insns for type inference. Perform the type inference in two phases, first a simple pass that records all types implied by individual insns, and then an iterative pass to propagate those types further via phi, move, if-cc and aget/aput insns. Bug: 19419671 Change-Id: Id38579d48a44fc5eadd13780afb6d370093056f9
* ART: Enable more Clang warningsAndreas Gampe2015-04-061-1/+0
| | | | Change-Id: Ie6aba02f4223b1de02530e1515c63505f37e184c
* Quick: Eliminate check-cast guaranteed by instance-of.Vladimir Marko2015-03-181-1/+6
| | | | | | | | | | | | | | Eliminate check-cast if the result of an instance-of with the very same type on the same value is used to branch to the check-cast's block or a dominator of it. Note that there already exists a verifier-based elimination of check-cast but it excludes check-cast on interfaces. This new optimization works for interface types and, since it's GVN-based, it can better recognize when the same reference is used for instance-of and check-cast. Change-Id: Ib315199805099d1cb0534bb4a90dc51baa409685
* Dead code elimination based on GVN results.Vladimir Marko2015-02-171-0/+1391
Change-Id: I5b77411a8f088f0b561da14b123cf6b0501c9db5