)]}'
{
  "log": [
    {
      "commit": "3f1dcd39e134d994ac88dcc4f30ec8cabcd8decf",
      "tree": "365d20ad6b68ff1dbd4903764b63880324136e4d",
      "parents": [
        "0f0a4e40667c87fbd4ae5480eddbfd701bfabfa2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 28 09:39:56 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 10:32:25 2019 -0800"
      },
      "message": "ART: Move dex structs into own header\n\nSeparating out the structs from DexFile allows them to be forward-\ndeclared, which reduces the need to include the dex_file header.\n\nBug: 119869270\nTest: m\nChange-Id: I32dde5a632884bca7435cd584b4a81883de2e7b4\n"
    },
    {
      "commit": "3db70689e3e1c92344d436a8ea4265046bdef449",
      "tree": "3db08743e968062ed5bdc143233cdb3c4564696b",
      "parents": [
        "1650dafad62578a1766bd617d78458a4cf1e2a9a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 26 15:12:03 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 27 12:56:39 2018 -0800"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles compiler.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: I5cdfe73c31ac39144838a2736146b71de037425e\n"
    },
    {
      "commit": "1ffa7ce292eaf9d1da0ec2758c92ed1bc0cd4410",
      "tree": "d9fdc6421f869ed0b6e4dd8b6010d08963172bc3",
      "parents": [
        "3fd73b11c7df9fe576622211d6fd151e8504fe04",
        "aaac0e3cbfe72217cad204d0122f2b73a602d2dd"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 25 16:14:21 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 25 16:14:21 2018 +0000"
      },
      "message": "Merge \"ART: ARM64: Support DotProd SIMD idiom.\""
    },
    {
      "commit": "aaac0e3cbfe72217cad204d0122f2b73a602d2dd",
      "tree": "d148274452b3a409c9d6b8ef749c34185375d2ea",
      "parents": [
        "7dca45b9677c16a54347cdc0d08bfa2bdd94b464"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Aug 07 00:52:22 2018 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Sep 25 14:47:48 2018 +0100"
      },
      "message": "ART: ARM64: Support DotProd SIMD idiom.\n\nImplement support for vectorization idiom which performs dot\nproduct of two vectors and adds the result to wider precision\ncomponents in the accumulator.\n\nviz. DOT_PRODUCT([ a1, .. , am], [ x1, .. , xn ], [ y1, .. , yn ]) \u003d\n                 [ a1 + sum(xi * yi), .. , am + sum(xj * yj) ],\n     for m \u003c\u003d n, non-overlapping sums,\n     for either both signed or both unsigned operands x, y.\n\nThe patch shows up to 7x performance improvement on a micro\nbenchmark on Cortex-A57.\n\nTest: 684-checker-simd-dotprod.\nTest: test-art-host, test-art-target.\n\nChange-Id: Ibab0d51f537fdecd1d84033197be3ebf5ec4e455\n"
    },
    {
      "commit": "c55bb390d88b8eb62a50932f7f9b47c2a3733f16",
      "tree": "ec2e74f3f8404dffcb9bfde4e7ffa3416a35543d",
      "parents": [
        "89468aeaa6a67ae4025b30d427391186306d6522"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 21 00:02:02 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 20 18:37:12 2018 -0700"
      },
      "message": "Revert^2 \"ART: Refactor typedef to using\"\n\nThis reverts commit ee07743e03042c2ca36e0c9513847a9e7d2509f1.\n\nReason for revert: fixed attributes.\n\nBug: 32619234\nTest: m test-art-host\nTest: m test-art-target-gtest-unstarted_runtime_test\nChange-Id: I6f0a775adfdf6ecd132b470f7c5446e949872e20\n"
    },
    {
      "commit": "ee07743e03042c2ca36e0c9513847a9e7d2509f1",
      "tree": "66867d7443a3798f6d882ef2715ddeb7baf3e771",
      "parents": [
        "9a20ff06f7ccee08a742c315ec6d351ab56ba1cd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 20 15:05:17 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 20 15:05:17 2018 +0000"
      },
      "message": "Revert \"ART: Refactor typedef to using\"\n\nThis reverts commit 9a20ff06f7ccee08a742c315ec6d351ab56ba1cd.\n\nReason for revert: Attributes on the wrong side.\n\nBug: 32619234\nChange-Id: I8fd2abef619b22c02ccfbf5ae629339f1a60918b\n"
    },
    {
      "commit": "9a20ff06f7ccee08a742c315ec6d351ab56ba1cd",
      "tree": "7e55557e118eb5fffe03ad3456e00d8469a36232",
      "parents": [
        "70dfb6983492aff1c52cc1b52044258aef51f47f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 19 10:58:18 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 19 21:56:32 2018 -0700"
      },
      "message": "ART: Refactor typedef to using\n\nAdd clang-tidy\u0027s modernize-use-using.\n\nBug: 32619234\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: If50d37b5152af4270784e3cde7951292a9e19033\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "dbaa5c7ba8935cf87ceb40a4054f9842929e9a51",
      "tree": "5037625c80cb97a0e13026dc450db28e59ff72ca",
      "parents": [
        "51dda39549033b3c50a7fce5522ffc81325db54b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 08:22:46 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri May 11 11:55:30 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-handle\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I67f461c819a7d528d7455afda8b4a59e9aed381c\n"
    },
    {
      "commit": "18259d7fb7164a5e029df4f883b3a79ccc2403e8",
      "tree": "ba378bfdef4127bb0607215186e3b150fd38bcdf",
      "parents": [
        "922501b4bbf724e4259477a27764291684eedffb"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Apr 12 11:18:23 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 15:04:09 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-type\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I4b3d3969d455d0198cfe122eea8abd54e0ea20ee\n"
    },
    {
      "commit": "b006e1fb48bbda59da6029fb7cdb2abae3429a8e",
      "tree": "96e8d32c2b64c888936a98c07b69d864ce1cf400",
      "parents": [
        "55ceb9ad5ef998c3b708ccbbd2966f16141f758c",
        "175e7862dbdb44089ef327fc43ba00c791fd3838"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 27 11:36:29 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 27 11:36:29 2018 +0000"
      },
      "message": "Merge \"Revert^4 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "175e7862dbdb44089ef327fc43ba00c791fd3838",
      "tree": "7b7ff4327b51b57e47e4b22af8d771edb9d462c1",
      "parents": [
        "77c6fc7341143dd27c74cddd786398688d7b4c91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 09:03:13 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 10:04:25 2018 +0100"
      },
      "message": "Revert^4 \"Compiler changes for bitstring based type checks.\"\n\nDisabled the build time flag. (No image version bump needed.)\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\n\nThis reverts commit 3fbd3ad99fad077e5c760e7238bcd55b07d4c06e.\n\nChange-Id: I5d83c4ce8a7331c435d5155ac6e0ce1c77d60004\n"
    },
    {
      "commit": "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e",
      "tree": "e8bc33fa60c38f7e1c85f8d4acf6a738df9b426a",
      "parents": [
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "message": "Revert^3 \"Compiler changes for bitstring based type checks.\"\n\nThis reverts commit 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d.\n\nReason for revert: Fails sporadically.\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\nChange-Id: I84d1e9e46c58aeecf17591ff71fbac6a1e583909\n"
    },
    {
      "commit": "fe94875d94ef8c06f6322021d501d58bd64c1606",
      "tree": "0376957503f936cd87411957cb08c5852041974e",
      "parents": [
        "b87dcc1c0bcc819cf7b7109c6427cd98b84f6342"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 23 18:11:43 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 26 11:37:23 2018 +0100"
      },
      "message": "ART: Fix infinite recursion for deopt at dex pc 0.\n\nPreviously, the interpreter checked for dex pc 0 to see if\nthe method was just entered. If we deopt at dex pc 0, the\ninstrumentation would emit an erroneous MethodEnteredEvent\nand the JIT would have received a MethodEntered() call. For\nJIT-on-first-use, the method would be compiled the same way\nas before, leading to the same deopt until stack overflow.\nWe fix this by using a new `from_deoptimize` flag passed\nby the caller.\n\nTest: 680-checker-deopt-dex-pc-0\nTest: testrunner.py --host \\\n      --jit --runtime-option\u003d-Xjitthreshold:0\nBug: 62611253\n\nChange-Id: I50b88f15484aeae16e1375a1d80f6563fb9066e7\n"
    },
    {
      "commit": "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d",
      "tree": "ce41c620d2cd411da3c20aa95fb9a69328e77c42",
      "parents": [
        "9ec1e24ebc683b15bb9c6db5554ac2ff9458adae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 12 18:39:15 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 12:12:39 2018 +0000"
      },
      "message": "Revert^2 \"Compiler changes for bitstring based type checks.\"\n\nAdd extra output for debugging failures and re-enable\nthe bitstring type checks.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 26687569\n\nThis reverts commit bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb.\n\nChange-Id: I090e241983f3ac6ed8394d842e17716087d169ac\n"
    },
    {
      "commit": "b2ec9f5c128673c43f776cbe12c8eeb0a6884ebb",
      "tree": "724022162a4f3de021cebab32ee5ac67ec860f32",
      "parents": [
        "f13343eb8b2738e2812fd7bd9d5592f529e93c21"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 21 13:20:31 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Feb 21 13:51:15 2018 -0800"
      },
      "message": "Remove duplication, split tests\n\nThe code move to libdexfile/dex/descriptors_names.cc apparently did not\nremove the original code from runtime/utils.cc.  Fix that duplication\nand all the header mentions needed.  Also, split the test files to go\nalong with the new locations for the code to be tested.\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host-gtest\n      flash \u0026 boot marlin\n\nChange-Id: Ie734672c4bca2c647d8016291f910b5608674545\n"
    },
    {
      "commit": "2c148f096f2784acd3fb78c4dea8b9f136b94b1b",
      "tree": "cf45443f228867c4c32161fc201710b74e759b3c",
      "parents": [
        "3e7110755fdbcd754aac32aa86d5d54b2476c9b4"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Feb 02 14:30:35 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 07 07:52:47 2018 -0800"
      },
      "message": "Don\u0027t analyze methods with verification errors.\n\nWith regression test!\n\nBug: 72874888\n\nTest: test-art-host\n\nChange-Id: Icb3ec5dbfa14a1f77da681ba7e100ec9a5ab9ba6\n"
    },
    {
      "commit": "66c158ef6b2a16257f1590b3ace78848a7c2407b",
      "tree": "f17f7eee70aa43711c7eb764c1789f4ec17aef37",
      "parents": [
        "92d0c8b68c24a2fa21f95d63a1ff2fb00fdb9aaf"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Jan 31 12:55:04 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Feb 01 13:26:03 2018 -0800"
      },
      "message": "Clean up signed/unsigned in vectorizer.\n\nRationale:\nCurrently we have some remaining ugliness around signed and unsigned\nSIMD operations due to lack of kUint32 and kUint64 in the HIR. By\n\"softly\" introducing these types, ABS/MIN/MAX/HALVING_ADD/SAD_ACCUMULATE\noperations can solely rely on the packed data types to distinguish\nbetween signed and unsigned operations. Cleaner, and also allows for\nsome code removal in the current loop optimizer.\n\nBug: 72709770\n\nTest: test-art-host test-art-target\nChange-Id: I68e4cdfba325f622a7256adbe649735569cab2a3\n"
    },
    {
      "commit": "bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb",
      "tree": "e281a8dde61e396ed5f20c31d41086b1b1b18389",
      "parents": [
        "83af48e9f4cdfcf3f0069c63561bab4c176bd2f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 13:33:07 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 15:05:16 2018 +0000"
      },
      "message": "Revert \"Compiler changes for bitstring based type checks.\"\n\nBug: 64692057\nBug: 71853552\nBug: 26687569\n\nThis reverts commit eb0ebed72432b3c6b8c7b38f8937d7ba736f4567.\n\nChange-Id: I7daeaa077960ba41b2ed42bc47f17501621be4be\n"
    },
    {
      "commit": "eb0ebed72432b3c6b8c7b38f8937d7ba736f4567",
      "tree": "74d95eb4bfbf01ef6fd3a68695f5d7cec69338d7",
      "parents": [
        "e57043081e6b091a9fd23a84043373148ae72f1f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 10 18:26:38 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 23 13:02:59 2018 +0000"
      },
      "message": "Compiler changes for bitstring based type checks.\n\nWe guard the use of this feature with a compile-time flag,\nset to true in this CL.\n\nBoot image size for aosp_taimen-userdebug in AOSP master:\n  - before:\n    arm boot*.oat: 63604740\n    arm64 boot*.oat: 74237864\n  - after:\n    arm boot*.oat: 63531172 (-72KiB, -0.1%)\n    arm64 boot*.oat: 74135008 (-100KiB, -0.1%)\n\nThe new TypeCheckBenchmark yields the following changes\nusing the little cores of taimen fixed at 1.4016GHz:\n                               32-bit        64-bit\n  timeCheckCastLevel1ToLevel1  11.48-\u003e15.80 11.47-\u003e15.78\n  timeCheckCastLevel2ToLevel1  15.08-\u003e15.79 15.08-\u003e15.79\n  timeCheckCastLevel3ToLevel1  19.01-\u003e15.82 17.94-\u003e15.81\n  timeCheckCastLevel9ToLevel1  42.55-\u003e15.79 42.63-\u003e15.81\n  timeCheckCastLevel9ToLevel2  39.70-\u003e14.36 39.70-\u003e14.35\n  timeInstanceOfLevel1ToLevel1 13.74-\u003e17.93 13.76-\u003e17.95\n  timeInstanceOfLevel2ToLevel1 17.02-\u003e17.95 16.99-\u003e17.93\n  timeInstanceOfLevel3ToLevel1 24.03-\u003e17.95 24.45-\u003e17.95\n  timeInstanceOfLevel9ToLevel1 47.13-\u003e17.95 47.14-\u003e18.00\n  timeInstanceOfLevel9ToLevel2 44.19-\u003e16.52 44.27-\u003e16.51\nThis suggests that the bitstring typecheck should not be\nused for exact type checks which would be equivalent to the\n\"Level1ToLevel1\" benchmark. Whether the implementation is\na beneficial replacement for the kClassHierarchyCheck and\nkAbstractClassCheck on average depends on how many levels\nfrom the target class (or Object for a negative result) is\na typical object\u0027s class.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 71853552\nBug: 26687569\nChange-Id: I538d7e036b5a8ae2cc3fe77662a5903d74854562\n"
    },
    {
      "commit": "33bff25bcd7a02d35c54f63740eadb1a4833fc92",
      "tree": "553db4f60878acf2a0fa7036a739d406df9a29b7",
      "parents": [
        "321b3ca9a36d769283c64d4bdee0798db80af524"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 01 14:35:42 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 02 10:11:02 2017 +0000"
      },
      "message": "ART: Make InstructionSet an enum class and add kLast.\n\nAdding InstructionSet::kLast shall make it easier to encode\nthe InstructionSet in fewer bits using BitField\u003c\u003e. However,\nintroducing `kLast` into the `art` namespace is not a good\nidea, so we change the InstructionSet to an enum class.\nThis also uncovered a case of InstructionSet::kNone being\nerroneously used instead of vixl32::Condition::None(), so\nit\u0027s good to remove `kNone` from the `art` namespace.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I6fa6168dfba4ed6da86d021a69c80224f09997a6\n"
    },
    {
      "commit": "38a3f21959d5c68d3034d4d3cef0cc231ebce78a",
      "tree": "fae9ab2b683bd2494a1480c7453e1beeace0e836",
      "parents": [
        "df12b6fbd98883cc1714f731847b7628f2fb7f11"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Oct 20 17:02:21 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Oct 27 10:50:36 2017 -0700"
      },
      "message": "Alignment optimizations in vectorizer.\n\nRationale:\nSince aligned data access is generally better (enables more efficient\naligned moves and prevents nasty cache line splits), computing and/or\nenforcing alignment has been added to the vectorizer:\n\n  (1) If the initial alignment is known completely and suffices,\n      then a static peeling factor enforces proper alignment.\n  (2) If (1) fails, but the base alignment allows, dynamically peeling\n      until total offset is aligned forces proper aligned access patterns.\n\nBy using ART conventions only, any forced alignment is preserved\nover suspends checks where data may move.\n\nNote 1:\nCurrent allocation convention is just 8 byte alignment on arrays/strings,\nso only ARM32 benefits. However, all optimizations are implemented in\na general way, so moving to a 16 byte alignment will immediately\ntake advantage of any new convention!!\n\nNote 2:\nThis CL also exposes how bad the choice of 12 byte offset of arrays\nreally is. Even though the new optimizations fix the misaligned, it\nrequires peeling for the most common case: 0 indexed loops. Therefore,\nwe may even consider moving to a 16 byte offset. Again the optimizations\nin this CL will immediately take advantage of that new convention!!\n\nTest: test-art-host test-art-target\n\nChange-Id: Ib6cc0fb68c9433d3771bee573603e64a3a9423ee\n"
    },
    {
      "commit": "69d310e0317e2fce97bf8c9c133c5c2c0332e61d",
      "tree": "fba05a1530e6fc4a2e6950303c1f7c6b0ffbb936",
      "parents": [
        "e764d2e50c544c2cb98ee61a15d613161ac6bd17"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 09 14:12:23 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 09:44:26 2017 +0100"
      },
      "message": "Use ScopedArenaAllocator for building HGraph.\n\nMemory needed to compile the two most expensive methods for\naosp_angler-userdebug boot image:\n  BatteryStats.dumpCheckinLocked() : 21.1MiB -\u003e 20.2MiB\n  BatteryStats.dumpLocked(): 42.0MiB -\u003e 40.3MiB\nThis is because all the memory previously used by the graph\nbuilder is reused by later passes.\n\nAnd finish the \"arena\"-\u003e\"allocator\" renaming; make renamed\nallocator pointers that are members of classes const when\nappropriate (and make a few more members around them const).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 64312607\nChange-Id: Ia50aafc80c05941ae5b96984ba4f31ed4c78255e\n"
    },
    {
      "commit": "d5d2f2ce627aa0f6920d7ae05197abd1a396e035",
      "tree": "e8e780780c832e3614a22438a23fb60ee4960ca3",
      "parents": [
        "efac0df8c738764823c637deeca1f3be33912064"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 26 12:37:26 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 10:40:51 2017 +0100"
      },
      "message": "ART: Introduce Uint8 compiler data type.\n\nThis CL adds all the necessary codegen for the Uint8 type\nbut does not add code transformations that use that code.\nVectorization codegens are modified to use Uint8 as the\npacked type when appropriate. The side effects are now\ndisconnected from the instruction\u0027s type after the graph has\nbeen built to allow changing HArrayGet/H*FieldGet/HVecLoad\nto use a type different from the underlying field or array.\n\nNote: HArrayGet for String.charAt() is modified to have\nno side effects whatsoever; Strings are immutable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --target --optimizing on Nexus 6P\nTest: Nexus 6P boots.\nBug: 23964345\nChange-Id: If2dfffedcfb1f50db24570a1e9bd517b3f17bfd0\n"
    },
    {
      "commit": "0ebe0d83138bba1996e9c8007969b5381d972b32",
      "tree": "a5ee66ebc5b587ade97e56ac8fc7d832fbbed4af",
      "parents": [
        "e1e347dace0ded83774999bb26c37527dcdb1d5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 21 22:50:39 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 25 15:45:01 2017 +0100"
      },
      "message": "ART: Introduce compiler data type.\n\nReplace most uses of the runtime\u0027s Primitive in compiler\nwith a new class DataType. This prepares for introducing\nnew types, such as Uint8, that the runtime does not need\nto know about.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 23964345\nChange-Id: Iec2ad82454eec678fffcd8279a9746b90feb9b0c\n"
    },
    {
      "commit": "bf3243b6150337d47b8238b484858062d7d1c1e6",
      "tree": "b8697eb5e235f86cf1c6c5798d254b49d2425b4c",
      "parents": [
        "60f734443d54d48fad86dce6d80d8cef22a134d0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 30 14:06:54 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 30 14:18:36 2017 +0100"
      },
      "message": "ART: Describe static fields in GraphVisualizer.\n\nTest: Rely on TreeHugger.\nChange-Id: I3388a469a96c665abc51abe2cf7d2b2004db7d78\n"
    },
    {
      "commit": "5ceac0e41bdf8d486f978c43800f493bce83f5d4",
      "tree": "6d0f266e85405afc88ebc28b70dd09a91bb85ddb",
      "parents": [
        "d1c983a5bc3ae50eab3af405ae8a415e1f36f532"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 26 13:19:09 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 26 16:17:43 2017 +0100"
      },
      "message": "Don\u0027t use the graph\u0027s dex file when printing HInvoke.\n\nIt\u0027s not the right dex file if the invokes come from inlined\nmethods.\n\nTest: manual\nChange-Id: I4e3fb35e2bddc67510c39e12075c9a5ca0498a3a\n"
    },
    {
      "commit": "82b0740f03b1a6acab4558214d3edc362e27e238",
      "tree": "c19ec7ad047fbbef0c0f4dcd46905604b75841b5",
      "parents": [
        "8144b1ebea42feaa798419eaf53a6bbbf37822a9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 01 19:02:04 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 01 20:37:10 2017 +0100"
      },
      "message": "Use IntrusiveForwardList\u003c\u003e for Env-/UsePosition.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: I2b720e2ed8f96303cf80e9daa6d5278bf0c3da2f\n"
    },
    {
      "commit": "c8e93c736c149ce41be073dd24324fb08afb9ae4",
      "tree": "8e7154cf1bbcee8f5837ee9cb930174e2516ac03",
      "parents": [
        "92f4672f811a4eccdc596f7c2235804abd196fde"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@ajcbik2.mtv.corp.google.com",
        "time": "Wed May 10 10:49:22 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon May 15 11:44:58 2017 -0700"
      },
      "message": "Min/max SIMDization support.\n\nRationale:\nThe more vectorized, the better!\n\nTest: test-art-target, test-art-host\n\nChange-Id: I758becca5beaa5b97fab2ab70f2e00cb53458703\n"
    },
    {
      "commit": "f34dd206d0073fb3949be872224420a8488f551f",
      "tree": "b24b451af6efdd9f67c4cbd5c37ebb4ec6a4aaad",
      "parents": [
        "1f56cb5c594f5757085820b1042988d10f02bb0b"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Mon Apr 10 17:41:46 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Apr 20 00:21:29 2017 +0100"
      },
      "message": "ARM64: Support MultiplyAccumulate for SIMD.\n\nTest: test-art-host, test-art-target.\n\nChange-Id: I06af8415e15352d09d176cae828163cbe99ae7a7\n"
    },
    {
      "commit": "f3e61ee363fe7f82ef56704f06d753e2034a67dd",
      "tree": "a00f1fce4a2e284b0a03f941f530afc5b5c56b59",
      "parents": [
        "741a81af441cbcb7255229bf250bc009d2894e92"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 12 17:09:20 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 19 10:30:57 2017 -0700"
      },
      "message": "Implement halving add idiom (with checker tests).\n\nRationale:\nFirst of several idioms that map to very efficient SIMD instructions.\nNote that the is-zero-ext and is-sign-ext are general-purpose utilities\nthat will be widely used in the vectorizer to detect low precision\nidioms, so expect that code to be shared with many CLs to come.\n\nTest: test-art-host, test-art-target\nChange-Id: If7dc2926c72a2e4b5cea15c44ef68cf5503e9be9\n"
    },
    {
      "commit": "7359649f638859e265f252b2301a15c4b7bbafa4",
      "tree": "5ea16cb6e50976e4754ea092f9761cb0eba97bd4",
      "parents": [
        "da3f60aed24d6e804f3b6393e74c62b8de0b4a26",
        "6f8e2c9913b24f746a154dda700f609cee3095f9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 28 07:55:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 28 07:55:31 2017 +0000"
      },
      "message": "Merge \"Make data dependency around HDeoptimize correct.\""
    },
    {
      "commit": "6f8e2c9913b24f746a154dda700f609cee3095f9",
      "tree": "463b5925a1c87ef75ceab807e4c238a3e44a555a",
      "parents": [
        "3bd2346db702894ef6c61372e7a83930b1c613ac"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 23 14:37:26 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 27 15:14:40 2017 +0100"
      },
      "message": "Make data dependency around HDeoptimize correct.\n\nWe use HDeoptimize in a few places, but when it comes to data\ndependency we either:\n- don\u0027t have any (BCE, CHA), in which case we should make sure no\n  code that the deoptimzation guards moves before the HDeoptimize\n- have one on the receiver (inline cache), in which case we can\n  update the dominated users with the HDeoptimize to get the data\n  dependency correct.\n\nbug:35661819\nbug:36371709\ntest: 644-checker-deopt\nChange-Id: I4820c6710b06939e7f5a59606971693e995fb958\n"
    },
    {
      "commit": "5576f3741c58cb8b5fb2f68f3b3a9415efe05f4f",
      "tree": "2187c109d24ae3634416b551e83fef310e975a74",
      "parents": [
        "6efac9929f8952e4871e8c423c923989fc6f2ad2"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 23 16:17:37 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 23 16:51:52 2017 -0700"
      },
      "message": "Implement a SIMD spilling slot.\n\nRationale:\nThe last ART vectorizer break-out CL    \\O/\nThis ensures spilling on x86 and x86_4 is correct.\nAlso, it paves the way to wider SIMD on ARM and MIPS.\n\nTest: test-art-host\nBug: 34083438\n\nChange-Id: I5b27d18c2045f3ab70b64c335423b3ff2a507ac2\n"
    },
    {
      "commit": "74234daabb28a4b9c804bf8bf908e7334bd4d400",
      "tree": "0b60cb00ab117c1a9a4b92983514962198b548bf",
      "parents": [
        "a7e9bfafeb64b1142433a41b05ddc263cadc61e3"
      ],
      "author": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri Jan 13 14:42:47 2017 +0000"
      },
      "committer": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri Feb 17 14:59:27 2017 +0000"
      },
      "message": "ARM: Merge data-processing instructions and shifts/(un)signed extensions\n\nThis commit mirrors the work that has already been done for ARM64.\n\nTest: m test-art-target-run-test-551-checker-shifter-operand\nChange-Id: Iec8c1563b035f40f0e18dcffde28d91dc21922f8\n"
    },
    {
      "commit": "ac141397dc29189ad2b2df41f8d4312246beec60",
      "tree": "a2f481463a14695bf9327fd2f549878ecf30c77b",
      "parents": [
        "5c9f90c5ecf2ff6f93ada0f7b18b46d866c59ea1"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jan 13 11:53:47 2017 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Sun Jan 15 15:18:07 2017 +0000"
      },
      "message": "Revert \"Revert \"ART: Compiler support for invoke-polymorphic.\"\"\n\nThis reverts commit 0fb5af1c8287b1ec85c55c306a1c43820c38a337.\n\nThis takes us back to the original change and attempts to fix the\nissues encountered:\n\n- Adds transition record push/pop around artInvokePolymorphic.\n- Changes X86/X64 relocations for MacSDK.\n- Implements MIPS entrypoint for art_quick_invoke_polymorphic.\n- Corrects size of returned reference in art_quick_invoke_polymorphic\n  on ARM.\n\nBug: 30550796,33191393\nTest: art/test/run-test 953\nTest: m test-art-run-test\n\nChange-Id: Ib6b93e00b37b9d4ab743a3470ab3d77fe857cda8\n"
    },
    {
      "commit": "0fb5af1c8287b1ec85c55c306a1c43820c38a337",
      "tree": "66239e7f745fae54e1630e91fb44a859bff615d6",
      "parents": [
        "02e3092f8d98f339588e48691db77f227b48ac1e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 11 18:58:15 2017 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 11 19:17:33 2017 +0000"
      },
      "message": "Revert \"ART: Compiler support for invoke-polymorphic.\"\n\nThis reverts commit 02e3092f8d98f339588e48691db77f227b48ac1e.\n\nReasons for revert:\n\n- Breaks MIPS/MIPS64 build.\n- Fails under GCStress test on x64.\n- Different x64 build configuration doesn\u0027t like relocation.\n\nChange-Id: I512555b38165d05f8a07e8aed528f00302061001\n"
    },
    {
      "commit": "02e3092f8d98f339588e48691db77f227b48ac1e",
      "tree": "127dd23346206b0547b7c6453a776253252b3c6e",
      "parents": [
        "bc7d0deda4549f314e68ee3e0e6afd68c4a8fd06"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Dec 01 10:33:51 2016 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 11 16:26:43 2017 +0000"
      },
      "message": "ART: Compiler support for invoke-polymorphic.\n\nAdds basic support to invoke method handles in compiled code.\n\nEnables method verification for methods containing invoke-polymorphic.\n\nAdds k45cc/k45rc output to Instruction::DumpString() which\nwas found to be missing when enabling verification.\n\nInclude stack traces in test 957-methodhandle-transforms for\nfailures so they can be easily identified.\n\nBug: 30550796,33191393\nTest: art/test/run-test 953\nTest: m test-art-run-test\nChange-Id: Ic9a96ea24906087597d96ad8159a5bc349d06950\n"
    },
    {
      "commit": "709b070044354d9f47641f273edacaeeb0240ab7",
      "tree": "3a8ac051d7c35076303984d0d892cdd396b60427",
      "parents": [
        "1a4de6a2453a3ad0310aca1a44e7e2d3b6f53bc1"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Oct 13 09:12:37 2016 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Oct 18 14:10:04 2016 -0700"
      },
      "message": "Remove mirror:: and ArtMethod deps in utils.{h,cc}\n\nThe latest chapter in the ongoing saga of attempting to dump a DEX\nfile without having to start a whole runtime instance.  This episode\nfinds us removing references to ArtMethod/ArtField/mirror.\n\nOne aspect of this change that I would like to call out specfically\nis that the utils versions of the \"Pretty*\" functions all were written\nto accept nullptr as an argument.  I have split these functions up as\nfollows:\n1) an instance method, such as PrettyClass that obviously requires\nthis !\u003d nullptr.\n2) a static method, that behaves the same way as the util method, but\ncalls the instance method if p !\u003d nullptr.\nThis requires using a full class qualifier for the static methods,\nwhich isn\u0027t exactly beautiful.  I have tried to remove as many cases\nas possible where it was clear p !\u003d nullptr.\n\nBug: 22322814\nTest: test-art-host\nChange-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24\n"
    },
    {
      "commit": "5e4e11e171f90d9a3ea178fc8e72aac909de55d5",
      "tree": "53314d1139ac797d55258f39097ecfb5cef45920",
      "parents": [
        "ca8bad9136d1389deeebc8652fb17063388de6b2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 22 13:17:41 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 23 09:08:00 2016 +0100"
      },
      "message": "Clean-up sharpening and compiler driver.\n\nRemove dependency on compiler driver for sharpening\nand dex2dex (the methods called on the compiler driver were\ndoing unnecessary work), and remove the now unused methods\nin compiler driver.\n\nAlso remove test that is now invalid, as sharpening always\nsucceeds.\n\ntest: m test-art-host m test-art-target\nChange-Id: I54e91c6839bd5b0b86182f2f43ba5d2c112ef908\n"
    },
    {
      "commit": "372f3a374681ef11f003460e14249adb7bc8313d",
      "tree": "b6d2bd95975a0ce1096dc2aa761f8e6b30e42b18",
      "parents": [
        "9c07ab332b8ebbcb1586c311bfcb75e19b8a35b4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 19 10:49:06 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 19 16:46:56 2016 -0700"
      },
      "message": "ART: Add thread offset printing hook to disassembler\n\nTo prepare separation of disassembler from libart, add a function\nhook to the disassembler options for thread offset name printing.\n\nBug: 15436106\nChange-Id: I9e9b7e565ae923952c64026f675ac527b560f51b\n"
    },
    {
      "commit": "c2c52a18a210b3c3c2a2a4345019b9d961a29f49",
      "tree": "47b4e7923ba4fcf83367a699f90a53d5abb61ee7",
      "parents": [
        "3d6094531e3790b25c43e59fd6cd0b6b99d3447c"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Tue Aug 02 13:45:28 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Tue Aug 02 13:45:58 2016 +0100"
      },
      "message": "Improve the graph visualizer\u0027s output for constant locations.\n\nChange-Id: I423fb378ee61fb53c3b328fc74f4e95cdef0992a\n"
    },
    {
      "commit": "e9288851eb6b62ece28f510d978d3793723b9a51",
      "tree": "3d422c4dfa7437b4891504ee452bf50b4852a9c5",
      "parents": [
        "161c866ca742049f5c916696e1503c697be30e87"
      ],
      "author": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Thu Jul 14 14:08:16 2016 -0700"
      },
      "committer": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Fri Jul 15 18:09:46 2016 -0700"
      },
      "message": "Rename current register allocator implementation\n\nThis will allow a cleaner commit in an upcoming\nrefactoring of register allocation.\n\nTest: m test-art-host\n\nChange-Id: If420c97b088b3c934411ff83373e024003120746\n"
    },
    {
      "commit": "ee8d971b14edfc1e0af9436fd223277df966e4c2",
      "tree": "2dc16ca40980cc716aba24d793eaa8731846a180",
      "parents": [
        "dedde3f10d7801ad862d1ca1de89135decff6a60"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue Jul 12 11:13:15 2016 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Jul 13 10:40:45 2016 -0400"
      },
      "message": "X86: Use memory to do array range checks\n\nCurrently, an HBoundsCheck is fed by an HArrayLength, causing a load of\nthe array length, followed by a register compare.\n\nAvoid the load when we can by comparing directly with the array length\nin memory.  Implement this by marking the HArrayLength as \u0027emitted at\nuse site\u0027, and then generating the code in the HBoundsCheck.\n\nOnly do this replacement when we are the only user of the ArrayLength\nand it isn\u0027t visible to the environment.\n\nHandle the special case where the array is \u0027null\u0027 and where an implicit\nnull check can\u0027t be eliminated.\n\nThis code moves the load of the length to the slow code for the failed\ncheck, which is what we want.\n\nTest: 609-checker-x86-bounds-check\n\nChange-Id: I9cdb183301e048234bb0ffeda940eedcf4a655bd\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "e90049140fdfb89080e5cc9b000b0c9be8c18bcd",
      "tree": "66b45c052b6778fabd7847a44af5e610808fa867",
      "parents": [
        "a77ceae14a7be2494874d9256327efa8c522e234"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 16 16:50:52 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 01 13:26:24 2016 +0100"
      },
      "message": "Create a typedef for HInstruction::GetInputs() return type.\n\nAnd some other cleanup after\n    https://android-review.googlesource.com/230742\n\nTest: No new tests. ART test suite passed (tested on host).\nChange-Id: I4743bf17544d0234c6ccb46dd0c1b9aae5c93e17\n"
    },
    {
      "commit": "4692c35c151951aa1fa901ca24bfa302a9beeacf",
      "tree": "8d28d7714dd7fa0ae1ff44888ae61f3c8786bfeb",
      "parents": [
        "f6d4f6e0e61977777b7a9ca18b75bcd26e98e9f9",
        "87f3fcbd0db352157fc59148e94647ef21b73bce"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 21 16:18:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 21 16:18:10 2016 +0000"
      },
      "message": "Merge \"Replace String.charAt() with HIR.\""
    },
    {
      "commit": "87f3fcbd0db352157fc59148e94647ef21b73bce",
      "tree": "5bdeabb246f5de86704333b3fcbccc6e9146d246",
      "parents": [
        "b94b5706f0b8e2e1c7e1db22274f9f4bae0c4b5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 28 15:52:11 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 21 15:17:38 2016 +0100"
      },
      "message": "Replace String.charAt() with HIR.\n\nReplace String.charAt() with HArrayLength, HBoundsCheck and\nHArrayGet. This allows GVN on the HArrayLength and BCE on\nthe HBoundsCheck as well as using the infrastructure for\nHArrayGet, i.e. better handling of constant indexes than\nthe old intrinsic and using the HArm64IntermediateAddress.\n\nBug: 28330359\nChange-Id: I32bf1da7eeafe82537a60416abf6ac412baa80dc\n"
    },
    {
      "commit": "dbb7f5bef10138ade0fb202da1d61f562b2df649",
      "tree": "f0aa4b390c534b215a6e000c865783cdd9852353",
      "parents": [
        "b94b5706f0b8e2e1c7e1db22274f9f4bae0c4b5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 30 13:23:58 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 21 15:11:57 2016 +0100"
      },
      "message": "Improve HLoadClass code generation.\n\nFor classes in the boot image, use either direct pointers\nor PC-relative addresses. For other classes, use PC-relative\naccess to the dex cache arrays for AOT and direct address of\nthe type\u0027s dex cache slot for JIT.\n\nFor aosp_flounder-userdebug:\n  - 32-bit boot.oat: -252KiB (-0.3%)\n  - 64-bit boot.oat: -412KiB (-0.4%)\n  - 32-bit dalvik cache total: -392KiB (-0.4%)\n  - 64-bit dalvik-cache total: -2312KiB (-1.0%)\n    (contains more files than the 32-bit dalvik cache)\nFor aosp_flounder-userdebug forced to compile PIC:\n  - 32-bit boot.oat: -124KiB (-0.2%)\n  - 64-bit boot.oat: -420KiB (-0.5%)\n  - 32-bit dalvik cache total: -136KiB (-0.1%)\n  - 64-bit dalvik-cache total: -1136KiB (-0.5%)\n    (contains more files than the 32-bit dalvik cache)\n\nBug: 27950288\nChange-Id: I4da991a4b7e53c63c92558b97923d18092acf139\n"
    },
    {
      "commit": "372f10e5b0b34e2bb6e2b79aeba6c441e14afd1f",
      "tree": "1f29c2467c8909ef0e0147f37f176caa1bcd2ccc",
      "parents": [
        "1b66fdf3f33c72dfdda4d31f6f17b6a0d8607402"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 17 16:30:10 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 02 19:04:20 2016 +0100"
      },
      "message": "Refactor handling of input records.\n\nIntroduce HInstruction::GetInputRecords(), a new virtual\nfunction that returns an ArrayRef\u003c\u003e to all input records.\nImplement all other functions dealing with input records as\nwrappers around GetInputRecords(). Rewrite functions that\npreviously used multiple virtual calls to deal with input\nrecords, especially in loops, to prefetch the ArrayRef\u003c\u003e\nonly once for each instruction.  Besides avoiding all the\nextra calls, this also allows the compiler (clang++) to\nperform additional optimizations.\n\nThis speeds up the Nexus 5 boot image compilation by ~0.5s\n(4% of \"Compile Dex File\", 2% of dex2oat time) on AOSP ToT.\n\nChange-Id: Id8ebe0fb9405e38d918972a11bd724146e4ca578\n"
    },
    {
      "commit": "893a1d36aec93fabb85ea4a6d4f45019046a6b74",
      "tree": "8c858628f4bda1608f4fd821bba9a9c966b57665",
      "parents": [
        "812927748d9d017fdbd2d1741c37f3028f72e1de",
        "d3059e77818a058513ed92557160bdb6d5102b67"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu May 12 18:53:32 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 12 18:53:33 2016 +0000"
      },
      "message": "Merge \"Fix oatdump crash on arm64/arm code. Also adds 16 bit literal information.\""
    },
    {
      "commit": "d3059e77818a058513ed92557160bdb6d5102b67",
      "tree": "cff82528de3dd71104d9b3fa4e1a57f2c9fc81dc",
      "parents": [
        "b0fca360a081eff1a44c6f055c628e2dba44c003"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed May 11 10:30:47 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu May 12 10:01:08 2016 -0700"
      },
      "message": "Fix oatdump crash on arm64/arm code.\nAlso adds 16 bit literal information.\n\nRationale:\nWhen \"run-away\" instructions are disassembled, the literal\naddresses may go out of range, causing oatdump to crash.\nThis CL guards memory access against the full memory range\nallocated to assembly instructions and data (it is possible\nbut not really necessary to refine this a bit). Out of range\narguments are now displayed as (?) to denote the issue, which\nis a lot nicer than crashing.\n\nBUG\u003d28670871\n\nChange-Id: I51e9b6a6a99162546fe31059f14278e8980451c2\n"
    },
    {
      "commit": "d7c2fdc939bb7efb3e7204d62e54c6a3f7d77f9b",
      "tree": "692eb754d2cf5fdb81809529f02a50f2e4747a62",
      "parents": [
        "b2b55596e605bef315b615cb89e4515f360548f2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 10 14:35:34 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 12 08:58:12 2016 +0100"
      },
      "message": "Fix another case of live_in at irreducible loop entry.\n\nGVN was implicitly extending the liveness of an instruction across\nan irreducible loop.\n\nFix this problem by clearing the value set at loop entries that contain\nan irreducible loop.\n\nbug:28252896\n\n(cherry picked from commit 77ce6430af2709432b22344ed656edd8ec80581b)\n\nChange-Id: Ie0121e83b2dfe47bcd184b90a69c0194d13fce54\n"
    },
    {
      "commit": "dce016eab87302f02b0bd903dd2cd86ae512df2d",
      "tree": "3af3c0e6b9d845e611b560484882e6b438ef439a",
      "parents": [
        "a246510965fc57ec51d1b202649304535adfe9f3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 28 13:10:02 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 09 20:40:32 2016 +0100"
      },
      "message": "Intrinsify String.length() and String.isEmpty() as HIR.\n\nUse HArrayLength for String.length() in anticipation of\nchanging the String.charAt() to HBoundsCheck+HArrayGet to\nallow the existing BCE to seamlessly work for strings.\nUse HArrayLength+HEqual for String.isEmpty().\n\nWe previously relied on inlining but we now want to apply\nthe new intrinsics even when we do not inline, i.e. when\ncompiling debuggable (as is currently the case for boot\nimage) or when we hit inlining limits, i.e. depth, size,\nor the number of accumulated dex registers.\n\nBug: 28330359\nChange-Id: Iab9d2f6d2967bdd930a72eb461f27efe8f37c103\n"
    },
    {
      "commit": "46817b876ab00d6b78905b80ed12b4344c522b6c",
      "tree": "6715bee60b0682a10437866c9617cb442146aa2f",
      "parents": [
        "f59149a151ee694484e21da7b3b207920dead5a6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 29 12:21:58 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 18:33:06 2016 +0100"
      },
      "message": "Use iterators \"before\" the use node in HUserRecord\u003c\u003e.\n\nCreate a new template class IntrusiveForwardList\u003c\u003e that\nmimicks std::forward_list\u003c\u003e except that all allocations\nare handled externally. This is essentially the same as\nboost::intrusive::slist\u003c\u003e but since we\u0027re not using Boost\nwe have to reinvent the wheel.\n\nUse the new container to replace the HUseList and use the\niterators to \"before\" use nodes in HUserRecord\u003c\u003e to avoid\nthe extra pointer to the previous node which was used\nexclusively for removing nodes from the list. This reduces\nthe size of the HUseListNode by 25%, 32B to 24B in 64-bit\ncompiler, 16B to 12B in 32-bit compiler. This translates\ndirectly to overall memory savings for the 64-bit compiler\nbut due to rounding up of the arena allocations to 8B, we\ndo not get any improvement in the 32-bit compiler.\n\nCompiling the Nexus 5 boot image with the 64-bit dex2oat\non host this CL reduces the memory used for compiling the\nmost hungry method, BatteryStats.dumpLocked(), by ~3.3MiB:\n\nBefore:\n  MEM: used: 47829200, allocated: 48769120, lost: 939920\n  Number of arenas allocated: 345,\n  Number of allocations: 815492, avg size: 58\n  ...\n  UseListNode    13744640\n  ...\nAfter:\n  MEM: used: 44393040, allocated: 45361248, lost: 968208\n  Number of arenas allocated: 319,\n  Number of allocations: 815492, avg size: 54\n  ...\n  UseListNode    10308480\n  ...\n\nNote that while we do not ship the 64-bit dex2oat to the\ndevice, the JIT compilation for 64-bit processes is using\nthe 64-bit libart-compiler.\n\nBug: 28173563\nChange-Id: I985eabd4816f845372d8aaa825a1489cf9569208\n"
    },
    {
      "commit": "085055f933d76579c32586488951a4497ffcf10e",
      "tree": "df7d6180b13430de8f255884b12f29f191d1468e",
      "parents": [
        "a1eff4f279253bbc90d2697d7c15390bcab65d1e",
        "cac5a7e871f1f346b317894359ad06fa7bd67fba"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 30 13:47:59 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 30 13:48:00 2016 +0000"
      },
      "message": "Merge \"Optimizing: Improve const-string code generation.\""
    },
    {
      "commit": "fa02c9d460b300c26849b453c430297df46ce904",
      "tree": "8dd8e2cc5f181bbcf41fa8d79da182fa974b906c",
      "parents": [
        "a923025e08e61fd2ff26e3d60c26e9db29637736"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 30 09:41:02 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 30 10:30:49 2016 +0100"
      },
      "message": "ART: Flush ostream less frequently in GraphVisualizer\n\nWe have seen Checker tests timing out on debug-GC configurations after\nhaving switched to Optimizing because its GraphVisualizer makes too\nmany syscalls which the configuration keeps track of.\n\nThis patch replaces std::endl with \"\\n\" across GraphVisualizer so as\nto not flush the stream after every line of output.\n\nBug: 27826765\nChange-Id: I5e3f1e92f8a84f36d324d56945e2d420b2d36a5d\n"
    },
    {
      "commit": "cac5a7e871f1f346b317894359ad06fa7bd67fba",
      "tree": "2df7d4892216a7c976dfe848c9893cb5eb8fa6a5",
      "parents": [
        "6f51d7756a9c66007fe7666b19399e1f60ff6092"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 22 10:39:50 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 29 19:27:40 2016 +0100"
      },
      "message": "Optimizing: Improve const-string code generation.\n\nFor strings in the boot image, use either direct pointers\nor pc-relative addresses. For other strings, use PC-relative\naccess to the dex cache arrays for AOT and direct address of\nthe string\u0027s dex cache slot for JIT.\n\nFor aosp_flounder-userdebug:\n  - 32-bit boot.oat: -692KiB (-0.9%)\n  - 64-bit boot.oat: -948KiB (-1.1%)\n  - 32-bit dalvik cache total: -900KiB (-0.9%)\n  - 64-bit dalvik cache total: -3672KiB (-1.5%)\n    (contains more files than the 32-bit dalvik cache)\nFor aosp_flounder-userdebug forced to compile PIC:\n  - 32-bit boot.oat: -380KiB (-0.5%)\n  - 64-bit boot.oat: -928KiB (-1.0%)\n  - 32-bit dalvik cache total: -468KiB (-0.4%)\n  - 64-bit dalvik cache total: -1928KiB (-0.8%)\n    (contains more files than the 32-bit dalvik cache)\n\nBug: 26884697\nChange-Id: Iec7266ce67e6fedc107be78fab2e742a8dab2696\n"
    },
    {
      "commit": "11edec7e7e8ac93f826d687b644fe700fab68993",
      "tree": "7a1a1bbbc7ae37a31f8301038f56f19b20be62f4",
      "parents": [
        "843a65556616183a36792bbcc1632c6d8d0e78b2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 12:40:52 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 14:21:46 2016 +0000"
      },
      "message": "ART: Loosen a GraphChecker rule on Boolean inputs\n\nGraphChecker tries to verify that Boolean inputs are properly typed.\nThis is non-trivial in the presence of simplifying optimizations\nwhich capitalize on the fact that a Boolean value is internally\nrepresented as an integer.\n\nThis patch removes the test from GraphChecker.\n\nBug: 27625564\nChange-Id: Ic61ea2193765b4578550538e965ca4f80fa4b287\n"
    },
    {
      "commit": "b133ec6c39b4c953ed815ec731b0270f0d8f0ed9",
      "tree": "1829ea0aa9d8351cf28e0ff55cc6aa25c7a248d6",
      "parents": [
        "6fa06e6f5a92cd318021afad9b036126438b2de4"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 23 12:40:35 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 23 12:40:35 2016 +0000"
      },
      "message": "Ensure object ArraySet with null value does not need a type check.\n\nThe art::PrepareForRegisterAllocation visitor can remove an\nart::BoundType instruction as value input of an\nart::ArraySet instruction, possibly replacing it with an\nart::NullConstant.  If this happens, remove the need for a\ntype check in this art::ArraySet.\n\nBug: 27638110\nChange-Id: I6270f8a8e22822a24d8a5919df427ca9c64d121b\n"
    },
    {
      "commit": "7fc6350f6f1ab04b52b9cd7542e0790528296cbe",
      "tree": "26a33ef7bb2e49a9b7c7d9436194a92cb447b317",
      "parents": [
        "b7f257f353b1eb2db2732939a0404c118316891d"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Feb 09 17:15:29 2016 +0000"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Fri Mar 11 12:49:27 2016 +0000"
      },
      "message": "Integrate BitwiseNegated into shared framework.\n\nShare implementation between arm and arm64.\n\nChange-Id: I0dd12e772cb23b4c181fd0b1e2a447470b1d8702\n"
    },
    {
      "commit": "9ff0d205fd60cba6753a91f613b198ca2d67f04d",
      "tree": "86689672064d66d2c473045f934f948211ba0389",
      "parents": [
        "950d063395c7cecbbe372fd607468018d661a35c"
      ],
      "author": {
        "name": "Kevin Brodsky",
        "email": "kevin.brodsky@linaro.org",
        "time": "Mon Jan 11 13:43:31 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 25 16:26:13 2016 +0000"
      },
      "message": "Optimizing: ARM64 negated bitwise operations simplification\n\nUse negated instructions on ARM64 to replace [bitwise operation + not]\npatterns, that is:\na \u0026 ~b (BIC)\na | ~b (ORN)\na ^ ~b (EON)\n\nThe simplification only happens if the Not is only used by the bitwise\noperation. It does not happen if both inputs are Not\u0027s (this should be\nhandled by a generic simplification applying De Morgan\u0027s laws).\n\nChange-Id: I0e112b23fd8b8e10f09bfeff5994508a8ff96e9c\n"
    },
    {
      "commit": "4a0dad67867f389e01a5a6c0fe381d210f687c0d",
      "tree": "91f1e70f4a2d0bd32aa7eb51e546f5330d72f772",
      "parents": [
        "d15ede2df7d157ea5480614fd18c2bf0d37a6c2a"
      ],
      "author": {
        "name": "Artem Udovichenko",
        "email": "artem.u@samsung.com",
        "time": "Tue Jan 26 12:28:31 2016 +0300"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 25 10:14:30 2016 +0000"
      },
      "message": "Revert \"Revert \"ARM/ARM64: Extend support of instruction combining.\"\"\n\nThis reverts commit 6b5afdd144d2bb3bf994240797834b5666b2cf98.\n\nChange-Id: Ic27a10f02e21109503edd64e6d73d1bb0c6a8ac6\n"
    },
    {
      "commit": "31dd3d60491148d345c1edae1ccd090a1b67dd2b",
      "tree": "57e6fc0663a39dd5abd6284adc822e8782c4bdf0",
      "parents": [
        "88f38e9b4e9ba0aca3d6fd4823be3a7226c87f33"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Feb 16 12:21:02 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Feb 17 13:52:33 2016 +0000"
      },
      "message": "Extend constant folding to float and double operations.\n\nChange-Id: I2837064b2ceea587bc171fc520507f13355292c6\n"
    },
    {
      "commit": "badd826664896d4a9628a5a89b78016894aa414b",
      "tree": "a30e8b3e62126ae1e1df1152ac643cfc5f2b074a",
      "parents": [
        "47a2a45a6673ddf3322115ff5058763f82a9368f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 02 16:28:56 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 15 10:21:07 2016 +0000"
      },
      "message": "ART: Run SsaBuilder from HGraphBuilder\n\nFirst step towards merging the two passes, which will later result in\nHGraphBuilder directly producing SSA form. This CL mostly just updates\ntests broken by not being able to inspect the pre-SSA form.\n\nUsing HLocals outside the HGraphBuilder is now deprecated.\n\nBug: 27150508\nChange-Id: I00fb6050580f409dcc5aa5b5aa3a536d6e8d759e\n"
    },
    {
      "commit": "86503785cd6414b8692e5c83cadaa2972b6a099b",
      "tree": "a242e28bd3605dce65c9f5e94b5fc13f06f07d19",
      "parents": [
        "be89a6f1d9e41b154be3fe1da97cedb6964fbd35"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 11 19:07:30 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 11 19:07:30 2016 +0000"
      },
      "message": "Fix x86-64 Baker\u0027s read barrier fast path for CheckCast.\n\nUse an art::x86_64::Label instead of an\nart::x86_64::NearLabel as end label when emitting code for a\nHCheckCast instruction, as the range of the latter may\nsometimes be too short when Baker\u0027s read barriers are\nenabled.\n\nBug: 12687968\nChange-Id: Ia9742dce65be7d4fb104688f3c4717b65df1fb54\n"
    },
    {
      "commit": "ad4ed08d557ff24bd7c66d3f36687d2035367ad0",
      "tree": "8322b51a8551c7805427b19f058a68659374b710",
      "parents": [
        "902838d865eaed9fa4df6414c706e5f6787d02ea"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 27 14:15:23 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 28 09:11:42 2016 +0000"
      },
      "message": "Revert \"Revert \"Lift the spill at each irreducible loop block restriction.\"\"\n\nThis reverts commit 2818dbcd75ea9beadcba9d18e2f68523108d0cf5.\n\nChange-Id: I92b2b60b4f08f50cacfea4132f1c28cfbd628f1a\n"
    },
    {
      "commit": "09e8d5ffe52c738c6a74984b1cbc7ad4bc8f5e2c",
      "tree": "c48431e449a0bb23c8959bac451a4ff77d538c16",
      "parents": [
        "8881c422743ac4ffd3d594420fec078d896dd05f"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Jan 22 16:49:55 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Jan 26 10:05:40 2016 -0800"
      },
      "message": "Some minor simplifications in code and tests.\n\nBackground:\nThis is actually a resubmit of an earlier cl that was\nreverted because was test was less robust against\ninlining changes (it assumed a virtual call would\nnever be inlined).\n\noriginal cl: If8ada79dfd70bea991c11d2b18661b951b6c4cd4\nrevert cl:   I739aaaccd0509d02a62ef01e797a6d45bfe941df\n\nChange-Id: I952680d60ff488874907f066bfdf156a45b409ba\n"
    },
    {
      "commit": "2818dbcd75ea9beadcba9d18e2f68523108d0cf5",
      "tree": "5e4a1f49fe8e59c105397b53da3a5a963a22a9ff",
      "parents": [
        "79e9f43951c3cfa9ab3b0fea93e5bfdfa7aa5950"
      ],
      "author": {
        "name": "Bart Sears",
        "email": "bsears@google.com",
        "time": "Tue Jan 26 17:38:19 2016 +0000"
      },
      "committer": {
        "name": "Bart Sears",
        "email": "bsears@google.com",
        "time": "Tue Jan 26 17:38:19 2016 +0000"
      },
      "message": "Revert \"Lift the spill at each irreducible loop block restriction.\"\n\nThis reverts commit 79e9f43951c3cfa9ab3b0fea93e5bfdfa7aa5950.\n\nChange-Id: I0670618b4076e06bd3f6bf8c385abfd1b651393c\n"
    },
    {
      "commit": "79e9f43951c3cfa9ab3b0fea93e5bfdfa7aa5950",
      "tree": "ff436caee8e272f520628237553b5a490384b362",
      "parents": [
        "5d5dbeb0344fa57f34cee40f01f96829eae4b514"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 23:00:45 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 26 13:38:41 2016 +0000"
      },
      "message": "Lift the spill at each irreducible loop block restriction.\n\nIt was not intended to have it this way anyway. This also\nrequired to fix GetSiblingAt, to take into account interval\nholes, and ConnectSplitSibling to re-materialize a constant\nor a method.\n\nChange-Id: Ia5534a93a5413cd0458a251c022d0b655369502b\n"
    },
    {
      "commit": "69fd1b56021ac62c17e188bd0d4dd22fc911558e",
      "tree": "0fb450426591148401bb76b854a7a8fe4e69f993",
      "parents": [
        "bf03fcd10a3ffa15468d335f26697b0473e45b36"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 10:43:39 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 10:43:39 2016 +0000"
      },
      "message": "Revert \"Some minor simplifications in code and tests.\"\n\nFails 530-checker-loops on arm\n\nThis reverts commit bf03fcd10a3ffa15468d335f26697b0473e45b36.\n\nChange-Id: I739aaaccd0509d02a62ef01e797a6d45bfe941df\n"
    },
    {
      "commit": "bf03fcd10a3ffa15468d335f26697b0473e45b36",
      "tree": "4b2a6572ba079093e928aa7d04152d8596eff807",
      "parents": [
        "0021c310e2e613d6d180acda0d9d422dba8688b0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jan 04 12:32:24 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Jan 20 16:23:22 2016 -0800"
      },
      "message": "Some minor simplifications in code and tests.\n\nRationale: fell through the cracks of previous \"intrinsics\" CL.\n\nChange-Id: If8ada79dfd70bea991c11d2b18661b951b6c4cd4\n"
    },
    {
      "commit": "15bd22849ee6a1ffb3fb3630f686c2870bdf1bbc",
      "tree": "a261601589163faa4538bcf1c9d156e8ec4a42b3",
      "parents": [
        "5b7b5ddb515828c93f0c2aec67aa513c32d0de22"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 05 15:55:41 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 14 15:00:20 2016 +0000"
      },
      "message": "Implement irreducible loop support in optimizing.\n\nSo we don\u0027t fallback to the interpreter in the presence of\nirreducible loops.\n\nImplications:\n- A loop pre-header does not necessarily dominate a loop header.\n- Non-constant redundant phis will be kept in loop headers, to\n  satisfy our linear scan register allocation algorithm.\n- while-graph optimizations, such as gvn, licm, lse, and dce\n  need to know when they are dealing with irreducible loops.\n\nChange-Id: I2cea8934ce0b40162d215353497c7f77d6c9137e\n"
    },
    {
      "commit": "4833f5a1990c76bc2be89504225fb13cca22bedf",
      "tree": "8e096f222368f30bf821b154bc78bac12d5cd2e5",
      "parents": [
        "bb41b250153308ef51664d7a6cc26c6a2e588fb7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Dec 16 10:37:39 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Dec 31 09:58:33 2015 +0000"
      },
      "message": "ART: Refactor SsaBuilder for more precise typing info\n\nThis reverts commit 68289a531484d26214e09f1eadd9833531a3bc3c.\n\nNow uses Primitive::Is64BitType instead of Primitive::ComponentSize\nbecause it was incorrectly optimized by GCC.\n\nBug: 26208284\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: Ib39f3da2b92bc5be5d76f4240a77567d82c6bebe\n"
    },
    {
      "commit": "68289a531484d26214e09f1eadd9833531a3bc3c",
      "tree": "6f87852b9d14e479ea2c7ef92de35c3118a0fd1e",
      "parents": [
        "bc90a0538e56f98b8e138cb622e6b9d834244ad9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 15 17:30:30 2015 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 15 17:40:08 2015 -0800"
      },
      "message": "Revert \"ART: Refactor SsaBuilder for more precise typing info\"\n\nThis reverts commit d9510dfc32349eeb4f2145c801f7ba1d5bccfb12.\n\nBug: 26208284\n\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: I5f491becdf076ff51d437d490405ec4e1586c010\n"
    },
    {
      "commit": "d9510dfc32349eeb4f2145c801f7ba1d5bccfb12",
      "tree": "9f4e4ffb5fae25c4f14059fd1d772726e9d96170",
      "parents": [
        "ceec5a3c81925cf80a18954b2e585316450c575c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 04 23:30:22 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 13:03:19 2015 +0000"
      },
      "message": "ART: Refactor SsaBuilder for more precise typing info\n\nThis patch refactors the SsaBuilder to do the following:\n\n1) All phis are constructed live and marked dead if not used or proved\nto be conflicting.\n\n2) Primitive type propagation, now not a separate pass, identifies\nconflicting types and marks corresponding phis dead.\n\n3) When compiling --debuggable, DeadPhiHandling used to revive phis\nwhich had only environmental uses but did not attempt to resolve\nconflicts. This pass was removed as obsolete and is now superseded\nby primitive type propagation (identifying conflicting phis) and\nSsaDeadPhiEliminiation (keeping phis live if debuggable + env use).\n\n4) Resolving conflicts requires correct primitive type information\non all instructions. This was not the case for ArrayGet instructions\nwhich can have ambiguous types in the bytecode. To this end,\nSsaBuilder now runs reference type propagation and types ArrayGets\nfrom the type of the input array.\n\n5) With RTP being run inside the SsaBuilder, it is not necessary to\nrun it as a separate optimization pass. Optimizations can now assume\nthat all instructions of type kPrimNot have reference type info after\nSsaBuilder (with the exception of NullConstant).\n\n6) Graph now contains a reference type to be assigned to NullConstant.\nAll reference type instructions therefore have RTI, as now enforced\nby the SsaChecker.\n\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: I7a3aee1ff66c82d64b4846611c547af17e91d260\n"
    },
    {
      "commit": "47229aa5848df7d45578dbdd9285f57dfa9399a8",
      "tree": "9d90b04780b632d21c6b51a7ba473bfe5605bb3d",
      "parents": [
        "b5cdc5dfdbc68aa30625a1464c6378d43bb5941d",
        "e523423a053af5cb55837f07ceae9ff2fd581712"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 02 14:39:43 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 02 14:39:43 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Don\u0027t use the compiler driver for method resolution.\"\"\""
    },
    {
      "commit": "e523423a053af5cb55837f07ceae9ff2fd581712",
      "tree": "6c2d9c570bf0d9a0e2cd056e052c0be618b03fc5",
      "parents": [
        "08a84acc7adb1bb076595eb961bd4667896e5075"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 02 09:06:11 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 02 13:01:25 2015 +0000"
      },
      "message": "Revert \"Revert \"Don\u0027t use the compiler driver for method resolution.\"\"\n\nThis reverts commit c88ef3a10c474045a3476a02ae75d07ddd3230b7.\n\nChange-Id: I0ed88a48b313a8d28bc39fae40631123aadb13ef\n"
    },
    {
      "commit": "f64242a30c6e05a8e4302a64eab4bcc28297dc9e",
      "tree": "98cbceab543c81f523c5bb676e10853ddfbc9881",
      "parents": [
        "b1aa617639c01c0dffaafd1641e0304ad179b6a2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 01 14:58:23 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Dec 02 10:48:16 2015 +0000"
      },
      "message": "Optimizing: Add checker tests for sharpening.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/184116 .\n\nChange-Id: Ib03c424fb673afc5ccce15d7d072b7572b47799a\n"
    },
    {
      "commit": "c88ef3a10c474045a3476a02ae75d07ddd3230b7",
      "tree": "cd23e1e0a3cea10cc9a9ae8269a01f75ada8ef0e",
      "parents": [
        "4db0bf9c4db6a09716c3388b7d2f88d534470339"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 01 16:28:10 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 01 16:28:10 2015 +0000"
      },
      "message": "Revert \"Don\u0027t use the compiler driver for method resolution.\"\n\nFails 425 in debuggable mode.\n\nThis reverts commit 4db0bf9c4db6a09716c3388b7d2f88d534470339.\n\nChange-Id: I346df8f75674564fc4fb241c60f23e250fc7f0a7\n"
    },
    {
      "commit": "4db0bf9c4db6a09716c3388b7d2f88d534470339",
      "tree": "71feab1b20d4d773f881e0afc26dfcd236c177d1",
      "parents": [
        "d1744d449cf2b56af7e0896b3729fac2a414e3af"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 23 09:35:04 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 01 14:23:01 2015 +0000"
      },
      "message": "Don\u0027t use the compiler driver for method resolution.\n\nThe compiler driver makes assumptions that don\u0027t hold for\nthe optimizing compiler, and will for example always go to\nslow path for an invoke-super when there\u0027s no verified method.\n\nAlso fix GenerateInvokeVirtual in the presence of intrinsics.\n\nNext change will address some of the TODOs in sharpening.cc.\n\nChange-Id: I2b0e543ee9b9bebcadb2d26de29e850c59ad58b9\n"
    },
    {
      "commit": "8626b741716390a0119ffeb88b5b9fcf08e13010",
      "tree": "28d261dbb8fa3018cba8a5d829319604508ea0a1",
      "parents": [
        "0c32fdeaeda2a1e388e280da12662d1d18c834a2"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Nov 25 16:28:08 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Nov 25 16:28:08 2015 +0000"
      },
      "message": "ARM64: Use the shifter operands.\n\nThis introduces architecture-specific instruction simplification.\nOn ARM64 we try to merge shifts and sign-extension operations into\narithmetic and logical instructions.\n\nFor example for the Java code\n\n    int res \u003d a + (b \u003c\u003c 5);\n\nwe would generate\n\n    lsl w3, w2, #5\n    add w0, w1, w3\n\nand we now generate\n\n    add w0, w1, w2, lsl #5\n\nChange-Id: Ic03bdff44a1c12e21ddff1b0513bd32a730742b7\n"
    },
    {
      "commit": "418318f4d50e0cfc2d54330d7623ee030d4d727d",
      "tree": "46afabf57409a5208be4eebf31e1dcbf63dc8fde",
      "parents": [
        "60c4c6ad2b892bb00a6016a147b1cc089ba6bcb5"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Nov 20 15:55:47 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Nov 20 15:55:47 2015 +0000"
      },
      "message": "ARM64: Add support for multiply-accumulate.\n\nChange-Id: I88dc313df520480f3fd16bbabda27f9435d25368\n"
    },
    {
      "commit": "33a9a16a7fe21d37125853e888634d9de0b71a98",
      "tree": "f5dbcdd61cb70f1c61c700e90264868b3dedb477",
      "parents": [
        "34053d1f5a9a3d98b5e45d395ed95ba66b518d4d",
        "b2d38fdb968c818e53a4f82ce0a513cbd3bfa299"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Nov 19 17:46:50 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 19 17:46:50 2015 +0000"
      },
      "message": "Merge \"Allow NullConstant to be untyped in GraphVisualiser.\""
    },
    {
      "commit": "b2d38fdb968c818e53a4f82ce0a513cbd3bfa299",
      "tree": "7f605ad4cef6b95d01380d778680d9dfc217265d",
      "parents": [
        "9231730cd0e285373afd73331168b289309ebee4"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Nov 16 12:21:53 2015 -0500"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Nov 19 17:46:00 2015 +0000"
      },
      "message": "Allow NullConstant to be untyped in GraphVisualiser.\n\nThe NullConstant may be added to the graph during other passes that\nhappen between ReferenceTypePropagation and Inliner (e.g.\nInstructionSimplifier). If the inliner doesn\u0027t run or doesn\u0027t inline\nanything, the NullConstant remains untyped.\n\nThe infrastructure to properly type NullConstants everywhere is to\ncomplex to add for the benefits\n\nBug: 25786318\n\nChange-Id: I904a3e605b57f8cac9936e82f19a4994c7b1a82a\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "fbb184a1c6df22d9302b32b55206396c8278edcf",
      "tree": "c1a952cec4b5c15e30728f83da0cc5ac20c0bad9",
      "parents": [
        "2f49b0a90720fe9f4cab040c376aab5f387967e3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 13 14:47:00 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 19 11:58:41 2015 +0000"
      },
      "message": "Fix ClinitCheck pruning.\n\nMake sure we merge the ClinitCheck only with LoadClass and\nHInvokeStaticOrDirect that is a part of the very same dex\ninstruction. This fixes incorrect stack traces from class\ninitializers (wrong dex pcs).\n\nRewrite the pruning to do all the ClinitCheck merging when\nwe see the ClinitCheck, instead of merging ClinitCheck into\nLoadClass and then LoadClass into HInvokeStaticOrDirect.\nWhen we later see an HInvokeStaticOrDirect with an explicit\ncheck (i.e. not merged), we know that some other instruction\nis doing the check and the invoke doesn\u0027t need to, so we\nmark it as not requiring the check at all. (Previously it\nwould have been marked as having an implicit check.)\n\nRemove the restriction on merging with inlined invoke static\nas this is not necessary anymore. This was a workaround for\n    X.test():\n       invoke-static C.foo() [1]\n    C.foo():\n       invoke-static C.bar() [2]\nAfter inlining and GVN we have\n    X.test():\n       LoadClass C (from [1])\n       ClinitCheck C (from [1], to be merged to LoadClass)\n       InvokeStaticOrDirect C.bar() (from [2])\nand the LoadClass must not be merged into the invoke as this\nwould cause the resolution trampoline to see an inlined\nframe from the not-yet-loaded class C during the stack walk\nand try to load the class. However, we\u0027re not allowed to\nload new classes at that point, so an attempt to do so leads\nto an assertion failure. With this CL, LoadClass is not\nmerged when it comes from a different instruction, so we can\nguarantee that all inlined frames seen by the stack walk in\nthe resolution trampoline belong to already loaded classes.\n\nChange-Id: I2b8da8d4f295355dce17141f0fab2dace126684d\n"
    },
    {
      "commit": "cdfed3dc422d0e1a9a0a948863308e58c39d01ba",
      "tree": "8c9ff8a3afd88ffb64a70e8c44869a41806661a0",
      "parents": [
        "ea30daef253f4b616ec7c9d4c7e134f33454d19d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Oct 26 14:05:01 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Nov 11 12:50:15 2015 +0000"
      },
      "message": "Revert \"Revert \"Run type propagation after inliner only when needed.\"\"\n\nThis reverts commit 271743601650308c7ac5c7a3ec35025d8130a298.\n\nChange-Id: I173e27a0a4d7d54f90ca459eb48d280d1d40ab70\n"
    },
    {
      "commit": "d26a411adee1e71b3f09dd604ab9b23018037138",
      "tree": "7e9267d50fb0a9bcd6b14a97653c8e0baf91a575",
      "parents": [
        "8a6463a7052ec69e7c0b94a65b26807f570e6359"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 11:07:31 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 18:28:21 2015 +0000"
      },
      "message": "ART: Refactor iteration over normal/exceptional successors\n\nAdd helper methods on HBasicBlock which return ArrayRef with the\nsuitable sub-array of the `successors_` list.\n\nChange-Id: I66c83bb56f2984d7550bf77c48110af4087515a8\n"
    },
    {
      "commit": "271743601650308c7ac5c7a3ec35025d8130a298",
      "tree": "cd75b95462144f35835a64e442541e778ea24fe7",
      "parents": [
        "4e5dd521063beae1706410419f19c7e224db50fe"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Oct 26 12:38:43 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Oct 26 12:38:43 2015 +0000"
      },
      "message": "Revert \"Run type propagation after inliner only when needed.\"\n\nThis reverts commit 4e5dd521063beae1706410419f19c7e224db50fe.\n\nChange-Id: I0de261d14dd3f71abe05f9bc71744820cf23b937\n"
    },
    {
      "commit": "4e5dd521063beae1706410419f19c7e224db50fe",
      "tree": "734842d330aca6b97ec2e042d54d32ac004288a3",
      "parents": [
        "9926d886573d13ab3f97befae4c526b936de8a53"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Oct 19 16:19:23 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Oct 23 17:18:35 2015 +0100"
      },
      "message": "Run type propagation after inliner only when needed.\n\nCurrently we run a type propagation pass unconditionally after the\ninliner. This change looks at the returned value (if any) and runs a\nminimal type propagation only if its type has changed.\n\nChange-Id: I0dd72bd481219081e8a978d2632426afc980d73a\n"
    },
    {
      "commit": "359f77c44dafef7ebed027180422ee75eef1467c",
      "tree": "b4b7fd4f8bf646dcd106351aaf2f5c1e6d719911",
      "parents": [
        "64d8d93aa9359b1126513dba92e27dbe184bfe3a",
        "ec7802a102d49ab5c17495118d4fe0bcc7287beb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 08 15:47:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 08 15:47:08 2015 +0000"
      },
      "message": "Merge \"Add DCHECKs to ArenaVector and ScopedArenaVector.\""
    },
    {
      "commit": "386062d13ce20d036555a9e24b73a67b4156b5cb",
      "tree": "6003846384f7aa5a8f6d8819926482034b70efb5",
      "parents": [
        "e53fb5582f8f6ece5d0ce3b9c0d5b1cdb654b254"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Oct 07 18:55:43 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Oct 08 14:18:39 2015 +0100"
      },
      "message": "Make sure classes with different access checks are not GVN-ed\n\nChange-Id: I89f72fef3be35a4dd9585d97d03a3150386e0891\n"
    },
    {
      "commit": "ec7802a102d49ab5c17495118d4fe0bcc7287beb",
      "tree": "08649609604b9c96bc48ca071c48b0af5abb1a3f",
      "parents": [
        "b2e436ffcda1d7a87e7bf9133d8ed878388c73c2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 01 20:57:57 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 08 11:10:18 2015 +0100"
      },
      "message": "Add DCHECKs to ArenaVector and ScopedArenaVector.\n\nImplement dchecked_vector\u003c\u003e template that DCHECK()s element\naccess and insert()/emplace()/erase() positions. Change the\nArenaVector\u003c\u003e and ScopedArenaVector\u003c\u003e aliases to use the new\ntemplate instead of std::vector\u003c\u003e. Remove DCHECK()s that\nhave now become unnecessary from the Optimizing compiler.\n\nChange-Id: Ib8506bd30d223f68f52bd4476c76d9991acacadc\n"
    },
    {
      "commit": "98893e146b0ff0e1fd1d7c29252f1d1e75a163f2",
      "tree": "a14bb10d039fcee10a7e0cacb494bb60d08b2039",
      "parents": [
        "7b5c395e9a50f988ca2275a429df17b6abbcc475"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Oct 02 21:05:03 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Oct 06 13:42:55 2015 +0100"
      },
      "message": "Add support for unresolved classes in optimizing.\n\nChange-Id: I0e299a81e560eb9cb0737ec46125dffc99333b54\n"
    },
    {
      "commit": "e460d1df1f789c7c8bb97024a8efbd713ac175e9",
      "tree": "3511036fb18828dd0ee140d33a8bcd0535ebeab6",
      "parents": [
        "25217af2a7cae96b32ba566aaf697288f3374c99"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 29 04:52:17 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Oct 02 02:25:18 2015 +0100"
      },
      "message": "Revert \"Revert \"Support unresolved fields in optimizing\"\n\nThe CL also changes the calling convetion for 64bit static field set\nto use kArg2 instead of kArg1. This allows optimizing to keep\nthe asumptions:\n- arm pairs are always of form (even_reg, odd_reg)\n- ecx_edx is not used as a register on x86.\n\nThis reverts commit e6f49b47b6a4dc9c7684e4483757872cfc7ff1a1.\n\nChange-Id: I93159917565824084abc96775f31be1a4249f2f3\n"
    },
    {
      "commit": "6e7455e90411c77088af5fcbf828219842bd2182",
      "tree": "739174a530e18aebcc9ebedba906c1de4e541234",
      "parents": [
        "85e5207ef094f99081539333bd868ce721c6fd73"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 28 16:25:37 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 29 10:01:07 2015 +0100"
      },
      "message": "Use dominance information for null optimization in write barrier.\n\nChange-Id: I8b57dafcd321c9afa1bbfc6a0674cbea15cbf10c\n"
    },
    {
      "commit": "e6f49b47b6a4dc9c7684e4483757872cfc7ff1a1",
      "tree": "6a5f45136832f73138ced75fcd3c6110b74116ea",
      "parents": [
        "23a8e35481face09183a24b9d11e505597c75ebb"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 14:04:33 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 14:04:33 2015 +0000"
      },
      "message": "Revert \"Support unresolved fields in optimizing\"\nbreaks debuggable tests.\n\nThis reverts commit 23a8e35481face09183a24b9d11e505597c75ebb.\n\nChange-Id: I8e60b5c8f48525975f25d19e5e8066c1c94bd2e5\n"
    },
    {
      "commit": "23a8e35481face09183a24b9d11e505597c75ebb",
      "tree": "bcaafb6ea001349acbf160c2cc89334fab4a38dc",
      "parents": [
        "175dc732c80e6f2afd83209348124df349290ba8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 08 19:56:31 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 12:29:59 2015 +0100"
      },
      "message": "Support unresolved fields in optimizing\n\nChange-Id: I9941fa5fcb6ef0a7a253c7a0b479a44a0210aad4\n"
    },
    {
      "commit": "175dc732c80e6f2afd83209348124df349290ba8",
      "tree": "6a5f45136832f73138ced75fcd3c6110b74116ea",
      "parents": [
        "5d01db1aa7634a012109d43e6403451b76de1daa"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Aug 25 15:42:32 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 12:29:51 2015 +0100"
      },
      "message": "Support unresolved methods in Optimizing\n\nChange-Id: If2da02b50d2fa668cd58f134a005f1752e7746b1\n"
    },
    {
      "commit": "fa6b93c4b69e6d7ddfa2a4ed0aff01b0608c5a3a",
      "tree": "3528c88e104dac8e58ae5370ab066b8b1dd0218f",
      "parents": [
        "e295be4a95d7861f6ec179edf6565f58cad747cc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 15 10:15:55 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 16 13:21:33 2015 +0100"
      },
      "message": "Optimizing: Tag arena allocations in HGraph.\n\nReplace GrowableArray with ArenaVector in HGraph and related\nclasses HEnvironment, HLoopInformation, HInvoke and HPhi,\nand tag allocations with new arena allocation types.\n\nChange-Id: I3d79897af405b9a1a5b98bfc372e70fe0b3bc40d\n"
    },
    {
      "commit": "6058455d486219994921b63a2d774dc9908415a2",
      "tree": "3d205227f3ff54cd3a50bc5c0e7cb3ad6c175b86",
      "parents": [
        "637ee0b9c10ab7732a7ee7b8335f3fff4ac1549c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:35:12 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 08 18:09:49 2015 +0100"
      },
      "message": "Optimizing: Tag basic block allocations with their source.\n\nReplace GrowableArray with ArenaVector in HBasicBlock and,\nto track the source of allocations, assign one new and two\nQuick\u0027s arena allocation types to these vectors. Rename\nkArenaAllocSuccessor to kArenaAllocSuccessors.\n\nBug: 23736311\nChange-Id: Ib52e51698890675bde61f007fe6039338cf1a025\n"
    }
  ],
  "next": "145acc5361deb769eed998f057bc23abaef6e116"
}
