summaryrefslogtreecommitdiff
path: root/compiler/optimizing/graph_visualizer.cc
AgeCommit message (Collapse)Author
2015-07-01Merge "ART: Changes to try-catch in GraphBuilder"David Brazdil
2015-07-01ART: Changes to try-catch in GraphBuilderDavid Brazdil
This patch adds an additional case into the insertion algorithm for HTryBoundary inside HGraphBuilder in order to better handle catch blocks covered by a TryItem. Building SSA form also required to stop combining HTryBoundaries for neighbouring TryItems because it was not clear which exception handlers belong to which try block. Change-Id: Ic68bd6ef98fee784609fa593cb08dca1f00a15e0
2015-07-01Emit method name at invokes in the graph visualizer.Nicolas Geoffray
Change-Id: I832f823463569724fca9c38cd70d9dd552f15b3a
2015-06-29Revert "Revert "Do not update the type of something we already know.""Nicolas Geoffray
This reverts commit 63107a804ce17db9789051e1fe310d99d1dae1cb. bug:22116987 Change-Id: I49a376a5bd2073a69babe122ec0d26e5d2f82461
2015-06-29Revert "Do not update the type of something we already know."Calin Juravle
This reverts commit 30eb58c548bee08468f68eb140a74a51dd7d9b43. Change-Id: Icd959e868160fc3ee7031dd2927554ac5b21d40f
2015-06-29Do not update the type of something we already know.Nicolas Geoffray
This is both an optimization to avoid unneeded nodes, and correctness to avoid replacing the second input of `HInstanceOf` and `HCheckCast` to something that is not `HLoadClass`. bug:22116987 Change-Id: I4907197a9002883d7cae8265a9642512b6201396
2015-06-26Revert "Revert "ART: Implement try/catch blocks in Builder""David Brazdil
This patch enables the GraphBuilder to generate blocks and edges which represent the exceptional control flow when try/catch blocks are present in the code. Actual compilation is still delegated to Quick and Baseline ignores the additional code. To represent the relationship between try and catch blocks, Builder splits the edges which enter/exit a try block and links the newly created blocks to the corresponding exception handlers. This layout will later enable the SsaBuilder to correctly infer the dominators of the catch blocks and to produce the appropriate reverse post ordering. It will not, however, allow for building the complete SSA form of the catch blocks and consequently optimizing such blocks. To this end, a new TryBoundary control-flow instruction is introduced. Codegen treats it the same as a Goto but it allows for additional successors (the handlers). This reverts commit 3e18738bd338e9f8363b26bc895f38c0ec682824. Change-Id: I4f5ea961848a0b83d8db3673763861633e9bfcfb
2015-06-26Revert "ART: Implement try/catch blocks in Builder"David Brazdil
Causes OutOfMemory issues, need to investigate. This reverts commit 0b5c7d1994b76090afcc825e737f2b8c546da2f8. Change-Id: I263e6cc4df5f9a56ad2ce44e18932ca51d7e349f
2015-06-25ART: Implement try/catch blocks in BuilderDavid Brazdil
This patch enables the GraphBuilder to generate blocks and edges which represent the exceptional control flow when try/catch blocks are present in the code. Actual compilation is still delegated to Quick and Baseline ignores the additional code. To represent the relationship between try and catch blocks, Builder splits the edges which enter/exit a try block and links the newly created blocks to the corresponding exception handlers. This layout will later enable the SsaBuilder to correctly infer the dominators of the catch blocks and to produce the appropriate reverse post ordering. It will not, however, allow for building the complete SSA form of the catch blocks and consequently optimizing such blocks. To this end, a new TryBoundary control-flow instruction is introduced. Codegen treats it the same as a Goto but it allows for additional successors (the handlers). Change-Id: I415b985596d5bebb7b1bb358a46e08b7b04bb53a
2015-06-23ART: Fix GraphVisualizer dlopen crashDavid Brazdil
The HGraphVisualizer used to crash if it failed to dlopen the libart(d)-disassembler.so. This patch fixes that. Bug: 22001285 Change-Id: Ibe9b9af17a77e22e3571c886f77918e9491b7827
2015-06-22Opt compiler: Add disassembly to the '.cfg' output.Alexandre Rames
This is automatically added to the '.cfg' output when using the usual `--dump-cfg` option. Change-Id: I864bfc3a8299c042e72e451cc7730ad8271e4deb
2015-06-19Verifier: check an aput, even if we know it will fail.Nicolas Geoffray
bug:21867457 Change-Id: I01e333d858995d0e1e083a50cf8d460a86381f2c
2015-06-17Fix bug in optimizing around instanceof.Nicolas Geoffray
We were too aggressive when removing instanceof. We should not remove it when there is one of the two static types that is an interface. Change-Id: I1fd80915b99b094f7b4393e7adb2b160201b30d5
2015-05-29Support for inlining methods that call/throw.Nicolas Geoffray
Mostly fixes here and there to make it working. Change-Id: I1b535e895105d78b65634636d675b818551f783e
2015-05-20Add tests for InstanceOf's and CheckCast's MustDoNullCheckGuillaume "Vermeille" Sanchez
Change-Id: I6a2b9293d91d27193625f5c61b0b64733a0c0d82
2015-05-20Remove unnecessary clinit checksCalin Juravle
Bug: 20852802 Change-Id: Ia6db8017ac22d45456845704a69ddffcc6917f4e
2015-05-20Merge "Revert "Add test for Change-Id: ↵Calin Juravle
Ied0412a01922b40a3f5d89bed49707498582abc1""
2015-05-20Revert "Add test for Change-Id: Ied0412a01922b40a3f5d89bed49707498582abc1"Calin Juravle
This reverts commit 0f675d8d70934762a5ed70f0734bd19eecfe9680. The test name is too long... Change-Id: I4496501e73dcf6424e9c58b331e3d3b241aa7917
2015-05-20Merge "Add test for Change-Id: Ied0412a01922b40a3f5d89bed49707498582abc1"Calin Juravle
2015-05-20Add test for Change-Id: Ied0412a01922b40a3f5d89bed49707498582abc1Guillaume "Vermeille" Sanchez
Change-Id: I3e9cbd0f5ba55f9044ddc7c7bec67b5193b90e75
2015-05-18ART: Mark constructor 'explicit'David Brazdil
Fixes a cpp-lint error. Change-Id: Ibd2c84a6f171a5ddb9aa1a3b9e23c1e5a30537f0
2015-05-18ART: Revert change to LiveRange::DumpDavid Brazdil
Changes back the LiveRange printing format to "[start,end)" for better clarity. However, it removes the space after comma due to b/1189305 and prints the "ranges" attribute with curly brackets to improve readability. This is a resubmission of CL Ic83025fa78d6f1edb5e0e39d66160182b0198ab8 which fixes a compilation issue on target. Bug: 21189305 Change-Id: Ic232c02ba19a710ead67793a039f99c0345353c7
2015-05-18Revert "ART: Revert change to LiveRange::Dump"David Brazdil
This reverts commit 294a0509cf811061b8009ade61e76a1f94e248b2. Need to investigate a compilation error. Change-Id: I62020f6e546c9faf5f4a2ed6cc1f7e1499c2fa30
2015-05-18ART: Revert change to LiveRange::DumpDavid Brazdil
Changes back the LiveRange printing format to "[start,end)" for better clarity. However, it removes the space after comma due to b/1189305 and prints the "ranges" attribute with curly brackets to improve readability. Bug: 21189305 Change-Id: Ic83025fa78d6f1edb5e0e39d66160182b0198ab8
2015-05-15ART: Print C1vis lists as [v1,...,vN]David Brazdil
Checker interprets whitespace as a don't-care placeholder, making it easier to write assertions which test only parts of the output (e.g. "//CHECK: Add liveness:44" does not test the inputs or any other attributes apart from "liveness"). However, since the GraphVisualizer prints lists with elements separated by spaces ("[ v1 ... vN ]"), this allows for false positives caused by an occurrence elsewhere in the output. For example, the assertion: "//CHECK: [ x y ]" will match "[ x y ]" but also "[ x a y b ]" or even "[ x ] abc [ y ]". Switching to comma-separated lists works around this issue. This patch updates all test files, fixes one false positive that this change revealed (test 442, line 337) and two occurrences of a wrong match (test 462, lines 121, 149). Bug: 21189305 Change-Id: I3b22503be3d92529dac0b13f66bccbcfabea6721
2015-05-15ART: Fix a minor lint errorDavid Brazdil
Change-Id: I956656fa4c36f20d80ef885c03487970f707be8e
2015-05-15ART: Refactor GraphVisualizer attribute printingDavid Brazdil
This patch unifies the way GraphVisualizer prints instruction attributes in preparation of changes to the Checker syntax. Change-Id: I44e91e36c660985ddfe039a9f410fedc48b496ec
2015-05-12ART: Rediscover loops after deleting blocks in DCEDavid Brazdil
The way DCE currently updates loop information does not cover all cases. This patch removes the logic, resets loop information of live blocks to pre-SSA state and reanalyzes the affected loops. Change-Id: I0b996a70235b95a8db0de9a23a03f71db57a21b8
2015-05-11Add a parent environment to HEnvironment.Nicolas Geoffray
This code has no functionality change. It adds a placeholder for chaining inlined frames. Change-Id: I5ec57335af76ee406052345b947aad98a6a4423a
2015-04-20[optimizing] Add memory barriers in constructors when neededCalin Juravle
If a class has final fields we must add a memory barrier before returning from constructor. This makes sure the fields are visible to other threads. Bug: 19851497 Change-Id: If8c485092fc512efb9636cd568cb0543fb27688e
2015-04-07ART: Print C1vis header only if visualizer enabledDavid Brazdil
Setting kStringFilter currently suppresses graph dumps of non-matching methods but their headers are still printed. This fixes the issue. Change-Id: Ib33fb20fcca2bf409534a824e7f76f1feb85724d
2015-03-26[optimizing] Implement X86 intrinsic supportMark Mendell
Implement the supported intrinsics for X86. Enhance the graph visualizer to print <U> for unallocated locations, to allow calling the graph dumper from within register allocation for debugging purposes. Change-Id: I3b0319eb70a9a4ea228f67065b4c52d13a1ae775 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
2015-02-24ART: Add -WunusedAndreas Gampe
Until the global CFLAGS are fixed, add Wunused. Fix declarations in the optimizing compiler. Change-Id: Ic4553f08e809dc54f3d82af57ac592622c98e000
2015-02-19Ensure the graph is correctly typed.Nicolas Geoffray
We used to be forgiving because of HIntConstant(0) also being used for null. We now create a special HNullConstant for such uses. Also, we need to run the dead phi elimination twice during ssa building to ensure the correctness. Change-Id: If479efa3680d3358800aebb1cca692fa2d94f6e5
2015-02-04ART: Dump environment to cfg file.Zheng Xu
Environment shows additional dependency and instructions with environment should usually be a safepoint as well. Change-Id: I04606624e6ea212ab1dc7502cdb87b5d5d0e3ac2
2015-02-04Create HGraph outside Builder, print timingsDavid Brazdil
This patch refactors the way HGraph objects are created, moving the instantiation out of the Builder class and creating the CodeGenerator earlier. The patch uses this to build a single interface for printing timings info and dumping the CFG. Change-Id: I2eb63eabf28e2d0f5cdc7affaa690c3a4b1bdd21
2015-01-30Implement LICM in optimizing compiler.Nicolas Geoffray
Change-Id: I9c8afb0a58ef45e568576015473cbfd5f011c242
2015-01-27ART: Further refactor use listsDavid Brazdil
Change-Id: I9e3219575a508ca5141d851bfcaf848302480c32
2015-01-26Optimizing: Speed up HEnvironment use removalDavid Brazdil
Removal of use records from HEnvironment vregs involved iterating over potentially large linked lists which made compilation of huge methods very slow. This patch turns use lists into doubly-linked lists, stores pointers to the relevant nodes inside HEnvironment and subsequently turns the removals into constant-time operations. Change-Id: I0e1d4d782fd624e7b8075af75d4adf0a0634a1ee
2015-01-21Merge "ART: Replace NULL to nullptr in the optimizing compiler"Roland Levillain
2015-01-21ART: Replace NULL to nullptr in the optimizing compilerJean Christophe Beyler
Replace macro NULL to the nullptr variation for C++. Change-Id: Ib6e48dd4bb3c254343383011b67372622578ca76 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
2015-01-21Revert "Revert "Fully support pairs in the register allocator.""Nicolas Geoffray
This reverts commit c399fdc442db82dfda66e6c25518872ab0f1d24f. Change-Id: I19f8215c4b98f2f0827e04bf7806c3ca439794e5
2015-01-21Revert "Fully support pairs in the register allocator."Nicolas Geoffray
Libcore tests fail. This reverts commit 41aedbb684ccef76ff8373f39aba606ce4cb3194. Change-Id: I2572f120d4bbaeb7a4d4cbfd47ab00c9ea39ac6c
2015-01-21Fully support pairs in the register allocator.Nicolas Geoffray
Enabled on ARM for longs and doubles. Change-Id: Id8792d08bd7ca9fb049c5db8a40ae694bafc2d8b
2015-01-08Merge "ART: Fixed formatting in HGraphVisualizerPrinter"David Brazdil
2015-01-08ART: Fixed formatting in HGraphVisualizerPrinterDavid Brazdil
Change-Id: I06d9bb0fc03e13cfc49f2b4da07a0ee2d09a339a
2015-01-08Implement double and float support for arm in register allocator.Nicolas Geoffray
The basic approach is: - An instruction that needs two registers gets two intervals. - When allocating the low part, we also allocate the high part. - When splitting a low (or high) interval, we also split the high (or low) equivalent. - Allocation follows the (S/D register) requirement that low registers are always even and the high equivalent is low + 1. Change-Id: I06a5148e05a2ffc7e7555d08e871ed007b4c2797
2014-12-29ART: Refactored VisualizerPrinter visitor patternDavid Brazdil
This patch refactors the visitor pattern in HGraphVisualizerPrinter to output instruction-specific details. Change-Id: Icfed9cd844b973025337a6bb584e1bc88f1ddd58
2014-12-17ART: Added Checker, a pattern matching test engineDavid Brazdil
This patch adds a Python script which implements a domain-specific mini-language similar to that of LLVM's FileCheck. It is primarily intended for writing tests for the optimizing compiler but could be configured for other use cases too. It is implemented from scratch in order to avoid dependency on LLVM. Checker tests are written in Java and dex2oat is invoked with a flag which dumps the CFG before and after each pass of the optimizing compiler. The output is then compared against assertions in the test's comments parsed by Checker. See comments in tools/checker.py for more details about the currently supported language features. This initial CL implements only one type of assertion - whether the output contains lines matching a desired pattern in the given order - but supports both plain text and regex matching and allows for equivalency testing by matching for the outcome of a previous match. See the tests in compiler/optimizing/test/ConstantFolding.java for examples. Change-Id: I1ad7431b399c38dc0391ccee74d2c643ba0b0675
2014-12-15Inlining support in optimizing.Nicolas Geoffray
Currently only inlines simple things that don't require an environment, such as: - Returning a constant. - Returning a parameter. - Returning an arithmetic operation. Change-Id: Ie844950cb44f69e104774a3cf7a8dea66bc85661