)]}'
{
  "log": [
    {
      "commit": "02ca05a5a6e3f5028c6c2987a81be481d07bc617",
      "tree": "a364c4a46c573fdfddf607b0e78e5fd3f455c17f",
      "parents": [
        "5868adaefe72cc8bcdcd8325c40f712375a506d1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 12 13:58:51 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 13 08:00:22 2020 +0000"
      },
      "message": "Move HandleCache to HGraph.\n\nThis avoids passing the `VariableSizedHandleScope*` argument\naround and eliminates HGraph::inexact_object_rti_ and its\ninitialization. The latter shall allow running Optimizing\ngtests that do not require type information without creating\na Runtime in future. (To be implemented in a separate CL.)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optmizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: I36fe9bc556c6d610d644c8c14cc74c9985a14d64\n"
    },
    {
      "commit": "0a51605ddd81635135463dab08b6f7c21b58ffb0",
      "tree": "820f338333010f4d6e4b543ffea47e9ff7d2dd3f",
      "parents": [
        "e2727154f25e0db9a5bb92af494d8e47b181dfcf"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 14 13:00:44 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 14 13:00:44 2019 +0000"
      },
      "message": "Revert \"Make compiler/optimizing/ symbols hidden.\"\n\nThis reverts commit e2727154f25e0db9a5bb92af494d8e47b181dfcf.\n\nReason for revert: Breaks ASAN tests (ODR violation).\nBug: 142365358\n\nChange-Id: I38103d74a1297256c81d90872b6902ff1e9ef7a4\n"
    },
    {
      "commit": "e2727154f25e0db9a5bb92af494d8e47b181dfcf",
      "tree": "0ddc6eec3ad9508d7eb1f2b941786dd0ed7d2cd8",
      "parents": [
        "c78860b91ae07eed92f86876e7a03132adea6fcd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 10 10:46:42 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 14 08:22:00 2019 +0000"
      },
      "message": "Make compiler/optimizing/ symbols hidden.\n\nMake symbols in compiler/optimizing hidden by a namespace\nattribute. The unit intrinsic_objects.{h,cc} is excluded as\nit is needed by dex2oat.\n\nAs the symbols are no longer exported, gtests are now linked\nwith the static version of the libartd-compiler library.\n\nlibart-compiler.so size:\n  - before:\n    arm: 2396152\n    arm64: 3345280\n  - after:\n    arm: 2016176 (-371KiB, -15.9%)\n    arm64: 2874480 (-460KiB, -14.1%)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nBug: 142365358\nChange-Id: I1fb04a33351f53f00b389a1642e81a68e40912a8\n"
    },
    {
      "commit": "7cfc8f5b2a7c1af68de5f2e79652cf55954794dc",
      "tree": "bef388a5083ed2b9cf497cd6689489828f2ae13e",
      "parents": [
        "70b93ffca22d665db661a7f15f2f1b59dc60839a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 07 10:41:09 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 07 15:49:47 2019 +0000"
      },
      "message": "Don\u0027t compile OSR methods that have phi equivalents at loop entry.\n\nWe currently don\u0027t handle this in the stack map, where we only encode\none stack slot for a dex register.\n\nBug: 136698025\nTest: 721-osr\nChange-Id: Ib395ed1165387ad5446a463c307cc0a45e365885\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": "85f1c576d228c2c43e9a0dc37f0cbb91fad59c45",
      "tree": "67d17ea5a7eb6021dabb335730402bd28d72694a",
      "parents": [
        "79c693b3133da397cec7eaff19de631b65a0cf70"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 21 13:52:48 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 21 15:22:07 2018 -0800"
      },
      "message": "ART: Some iwyu for logging.h\n\nRemove over-broad use in headers. Fix up transitive includes.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I518fa7c8bee014b260818fca1fbde6ec47d126da\n"
    },
    {
      "commit": "0846a8ffafffdf4c18d52f9896b13f40a1c9828d",
      "tree": "299636dbde6772b4d11ce9ae3a3cd5675f3d0feb",
      "parents": [
        "9ec8559bc2e18075cdcd9a2f09206b698d3c1993"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 12 15:21:07 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 03 10:21:24 2018 +0000"
      },
      "message": "Fix ReplaceUninitializedStringPhis.\n\nMove the analysis after redundant phi and dead phi elimination,\nknowing that only graphs with irreducible loops may still have\na phi as input of the invoke. In such a case, we bail.\n\nbug: 112537407\nTest: 563-checker-fake-string\nChange-Id: Ib9eefa4ce905b7fb418ca9b2a3c26ea4df74ce8f\n"
    },
    {
      "commit": "639f279a0b68234c8d5904746d8d888c81894409",
      "tree": "aa0c9eb1696788b75f2e8721bb25c4dfe98bfd25",
      "parents": [
        "26f048f48cdb1e884aab2b6fddf26d58346d29ad"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 25 00:39:48 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 25 09:29:35 2018 +0100"
      },
      "message": "Turn DCHECKs into return false in ReplaceUninitializedStringPhis.\n\nUntil https://android-review.googlesource.com/c/platform/art/+/754691,\ngets resolves, temporarily change\nthe method to return whether it fits the expecations, and bail\nto interpreter if not.\n\nTest: test.py\nbug: 112537407\nChange-Id: I60f0c3bc75f83b3b8a6c19e733c64440881a5a76\n"
    },
    {
      "commit": "8a62a4c9570b345b715a022d33d443413a634392",
      "tree": "4b34426f14301f230e9d6b5f23486a038cf6e548",
      "parents": [
        "b5271dd44a30f498689e503340d3c8d01bf31f07"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 03 09:39:07 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 03 11:22:34 2018 +0100"
      },
      "message": "Handle String.\u003cinit\u003e with a phi input.\n\nWe wrongly assumed only irreducible loops could lead\nto this situation, but any loop can actually be in between\na String NewInstance and a String.\u003cinit\u003e.\n\nbug: 109666561\nTest: 563-checker-fakestring\nChange-Id: I018a22f7e22c15e140252544415f51d544f7cc13\n"
    },
    {
      "commit": "312f3b2fd0094c028a7d243b116947a35a745806",
      "tree": "3d7ec049ded98c489098c87250c75e3f711f8290",
      "parents": [
        "0a3d5eb2ff9e70fa5785638da938439835d0337e"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 19 08:39:26 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 19 11:02:48 2018 -0700"
      },
      "message": "Move some remaining dex utilities\n\nThere were several utilities related to building/walking/testing dex\nfiles that were not in libdexfile.  This change consolidates these.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Id76e9179d03b8ec7d67f7e0f267121f54f0ec2e0\n"
    },
    {
      "commit": "dbb9aef046301940d0b253c918a5c78b277330ba",
      "tree": "8803fa971c0200d56aa8eba7386374eecda01c17",
      "parents": [
        "65e0432cdaf3ee170045b21943c24eae5d6a0357"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 23 10:44:11 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 01 13:03:29 2017 +0000"
      },
      "message": "Log at places we fail to compile.\n\nUseful when diagnosing some compiler issues / limitations.\n\nTest: test.py\n\nChange-Id: I8759d0e78b0682b300ddcadfe02793432cab2036\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": "ca6fff898afcb62491458ae8bcd428bfb3043da1",
      "tree": "195a6b16d3a4b34acc2faf91ce56f448efb15e07",
      "parents": [
        "aa7273e56fbafc2692c8d20a31b50d2f4bdd2aa1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 14:49:14 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 06 17:53:50 2017 +0100"
      },
      "message": "ART: Use ScopedArenaAllocator for pass-local data.\n\nPasses using local ArenaAllocator were hiding their memory\nusage from the allocation counting, making it difficult to\ntrack down where memory was used. Using ScopedArenaAllocator\nreveals the memory usage.\n\nThis changes the HGraph constructor which requires a lot of\nchanges in tests. Refactor these tests to limit the amount\nof work needed the next time we change that constructor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Build with kArenaAllocatorCountAllocations \u003d true.\nBug: 64312607\nChange-Id: I34939e4086b500d6e827ff3ef2211d1a421ac91a\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": "8d6768d47b66a688d35399d524ad5a5450e9d9d4",
      "tree": "0b8733baef378d9e060c8e74319a3846489590b2",
      "parents": [
        "fbe1516b91f2117bb9c7282aaea5537572f62dd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 10:13:21 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 13:55:13 2017 +0000"
      },
      "message": "Revert^6 \"Hash-based dex cache type array.\"\n\nFixed ImageWriter to write class table also if it contains\nonly boot class loader classes. Added a regression test and\nadded extra checks for debug-build to verify that dex cache\ntypes from app image are also in the class table. Removed\nsome unnecessary debug output.\n\nTest: 158-app-image-class-table\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit 0b66d6174bf1f6023f9d36dda8538490b79c2e9f.\n\nChange-Id: I6a747904940c6ebc297f4946feef99dc0adf930c\n"
    },
    {
      "commit": "0b66d6174bf1f6023f9d36dda8538490b79c2e9f",
      "tree": "1cc4d2ae868745a65fd0489a6fb2f5f2fc9e880f",
      "parents": [
        "6374c58f2ea403b3a05fb27376110fe4d0fc8e3f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 13 14:50:04 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 13 16:08:01 2017 +0000"
      },
      "message": "Revert^5 \"Hash-based dex cache type array.\"\n\nFor app images, ImageWriter does not add boot image\nclasses to the app image class table even though it\nkeeps them in the dex caches. The reason for that is\nunknown, the code looks OK.\n\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nAlso reverts \"Improve debugging output for a crash.\"\n\nThis reverts commits\n    bfb80d25eaeb7a604d5dd25a370e3869e96a33ab,\n    8dd56fcb3196f466ecaffd445397cb11ef85f89f.\n\nTest: testrunner.py --host\nChange-Id: Ic8db128207c07588c7f11563208ae1e85c8b0e84\n"
    },
    {
      "commit": "bfb80d25eaeb7a604d5dd25a370e3869e96a33ab",
      "tree": "96068dd9b9b3bc2e1bcc25d38bbd2420d5b0f1bb",
      "parents": [
        "7a49d93ee265b978ab29cae659e46d41da78459a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 14 14:08:12 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 20 14:13:14 2017 +0000"
      },
      "message": "Revert^4 \"Hash-based dex cache type array.\"\n\nAdded extra output to the abort message to collect more data\nwhen we hit the crash. Added extra check when loading an app\nimage to verify that the class table isn\u0027t already broken.\n\nTest: testrunner.py --host\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit 5812e20ff7cbc8efa0b8d7486ada2f58840a6ad5.\n\nChange-Id: I9bb442a184c236dcb75b3e42a095f39cd6bee59d\n"
    },
    {
      "commit": "5812e20ff7cbc8efa0b8d7486ada2f58840a6ad5",
      "tree": "be0e9fdeb90bcbad76b17b3aae4e746d977d80ee",
      "parents": [
        "518f373324f355f8e58440dfbc3f5a1f2244bde7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 13 18:32:04 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 13 19:34:54 2017 -0800"
      },
      "message": "Revert^3 \"Hash-based dex cache type array.\"\n\nAssert failing for \"earchbox:search\":\nF zygote64: class_linker.cc:4612] Check failed: handle_scope_iface.Get() !\u003d nullptr\n\nTest: m test-art-host\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit 85c0f2ac03417f5125bc2ff1dab8109859c67d5c.\n\nChange-Id: I39846c20295af5875b0f945be7035c73ded23135\n"
    },
    {
      "commit": "85c0f2ac03417f5125bc2ff1dab8109859c67d5c",
      "tree": "844952d237e35faa5c5a2357ab037366c8397115",
      "parents": [
        "8d4b1189639f0d8982bde681ccbdd7c03fe6ddbf"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 02 16:42:38 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 10 11:23:11 2017 +0000"
      },
      "message": "Revert^2 \"Hash-based dex cache type array.\"\n\nThe reason for the revert was fixed by\n    https://android-review.googlesource.com/332666 .\nWe now enable clearing dex cache types in test 155 from that\nCL. Also avoid an unnecessary store in LookupResolvedTypes()\nand prevent verifier from messing up the dex cache types.\n\nTest: m test-art-host\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit d16363a93053de0f32252c7897d839a46aff14ae.\n\nChange-Id: Ie8603cfa772e78e648d005b0b6eae59062ae729d\n"
    },
    {
      "commit": "90b936ddda63139ff46a6755c3b83ad6e4ab4ac5",
      "tree": "c7ce2c3004eecc16ab41ed7cde105c3019638d4b",
      "parents": [
        "b78a8af993e877d74c5938f65f95feaf2fa01321"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 31 08:58:55 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 03 10:03:52 2017 -0800"
      },
      "message": "ART: Refactor verify_object.h\n\nMove the actual VerifyObject check into a new cc file, as we\ncommonly don\u0027t enable the check at all. This allows to cut the\n-inl include from almost all current users.\n\nThis also exposes missing -inl includes. Also fix up some of our old\nmess where .h defined functions require -inl.h defined functions.\n\nTest: m\n\nChange-Id: I3dd821bbe2015564a29bf1ed9be00f7a7276ad61\n"
    },
    {
      "commit": "d16363a93053de0f32252c7897d839a46aff14ae",
      "tree": "8823c6dd4641eae333aa7001203460757a515010",
      "parents": [
        "ac240396125911b52437a460a400c8b38be43a96"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 01 14:09:13 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 01 15:27:37 2017 +0000"
      },
      "message": "Revert \"Hash-based dex cache type array.\"\n\nReverting to work around some programs crashing with\n    Check failed: handle_scope_iface.Get() !\u003d nullptr.\nthough the reason for the failure not yet understood.\n\nTest: m test-art-host\nBug: 34839984\nBug: 30627598\nBug: 34659969\nBug: 30419309\n\nThis reverts commit ec7862283dd49f5a58d0ac45960ce27c2f7671b8.\n\nChange-Id: Ifded663633082f1e59e5b6ff2e026dc559bd6b82\n"
    },
    {
      "commit": "ec7862283dd49f5a58d0ac45960ce27c2f7671b8",
      "tree": "26d6dcc1d5ed4f0ba5ac15f17ef7377215684bf6",
      "parents": [
        "c01d49091f4588777db5bf45345f388058caa99f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 20 16:24:13 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jan 30 10:21:16 2017 +0000"
      },
      "message": "Hash-based dex cache type array.\n\nTest: m test-art-host (Interpreter, Optimizing, JIT)\nTest: m test-art-target on Nexus 6P (Interpreter, Optimizing, JIT)\nTest: Nexus 6P boots\nTest: m valgrind-test-art-host\nBug: 30627598\nBug: 34659969\nBug: 30419309\nChange-Id: Ic00eda89e58088a3573fc9ec0ad04c0e69e161d1\n"
    },
    {
      "commit": "2c45bc9137c29f886e69923535aff31a74d90829",
      "tree": "90c7762c2dcb1105bf5907d6a1d068f172ea6155",
      "parents": [
        "168c58ce18b139d313cbc6131e3bb43539952c55"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 25 16:54:12 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 27 14:30:29 2016 +0100"
      },
      "message": "Remove H[Reverse]PostOrderIterator and HInsertionOrderIterator.\n\nUse range-based loops instead, introducing helper functions\nReverseRange() for iteration in reverse order in containers.\nWhen the contents of the underlying container change inside\nthe loop, use an index-based loop that better exposes the\ncontainer data modifications, compared to the old iterator\ninterface that\u0027s hiding it which may lead to subtle bugs.\n\nTest: m test-art-host\nChange-Id: I2a4e6c508b854c37a697fc4b1e8423a8c92c5ea0\n"
    },
    {
      "commit": "50a9ed014e3b4dec67246ea07727d7bec89bfb17",
      "tree": "1fcbf2173f8b7409c2feb94a372f9e8390c8bad7",
      "parents": [
        "cbb651fdf2c88052a4c556c96adac729176b61ea"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 23 15:40:41 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 26 11:49:24 2016 +0100"
      },
      "message": "Compensate in compiler for verifier shortcomings.\n\nThe verifier does not differentiate zero and null, so a move-object\nof zero can be used as a non-object later on.\n\nChange the compiler to ignore the object conversion when the input\nis zero or a phi (which might just hold zeros). The type propagation\nwill then do proper inferencing of the types.\n\nAlso remove some stalled comments in ssa_builder.cc.\n\nbug:31313170\ntest: dex2oat b31313170.apk\ntest: run-test 800\ntest: m test-art-host-run-test\nChange-Id: I579d667415a7decf8ff2c2238dae4c13eec5d0e0\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\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": "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": "3ea5a97d27468cec846d958c38d0d706ef7ec67e",
      "tree": "8895f0adeaff161be3a7101d7f11fa744ff739c6",
      "parents": [
        "60be30a353aa8515c72aa5240508128bb3ad9829"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 09 20:23:34 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 09 20:33:31 2016 +0100"
      },
      "message": "Attribute arena allocations previously marked as STL.\n\nBug: 28603175\nChange-Id: I488e39b23afb86f3ff5a2df16d2df59eb3adaa0f\n"
    },
    {
      "commit": "b4154d33eb51de747cc517dd270b58619b3a3122",
      "tree": "c7782e1bfc682b57d6267286f0eafaf265f18d40",
      "parents": [
        "20d2c9d003ea2508154dac4b8a3bfeba00b063de",
        "456307a47336e3d6576ed6d8563b67573a4238d3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 09:00:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 20 09:00:49 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Use dex cache from compilation unit in RTP.\"\"\""
    },
    {
      "commit": "456307a47336e3d6576ed6d8563b67573a4238d3",
      "tree": "35d7c3d213b942a562538a8d25129b4e27cc712f",
      "parents": [
        "814ae9448d7a620a1855d53c7b69b1b377944a67"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 14:12:13 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 19:25:00 2016 +0100"
      },
      "message": "Revert \"Revert \"Use dex cache from compilation unit in RTP.\"\"\n\nThe exposed issue has been fixed by\n    https://android-review.googlesource.com/215877\n\nBug:28210356\n\nThis reverts commit 34d9b04d8d0006967486c0ad1b221e7b632652af.\n\nChange-Id: I5288c923e45d9ef3190dabb89738350a1212a60d\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": "18b36abc7cc03076fe1c399c0bb8ec8793cc6806",
      "tree": "3e38ee71b94c7bbde6f93976e16416a2f6d33ee0",
      "parents": [
        "defccc564481c2c892792680c6abb6020e36bacd"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 13 16:41:35 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Apr 15 10:49:34 2016 -0700"
      },
      "message": "Remove the no-longer-needed F/I and D/J alias.\n\nRationale:\nNow that our HIR is type clean (yeah!), we no longer have\nto conservatively assume F/I and D/J are aliased. This\nenables more accurate side effects analysis, with improvements\nin all clients, such a LICM.\n\nRefinement:\nThe HIR is not completely clean between building and SSA.\nThis refinement takes care of that, with new tests.\n\nBUG\u003d22538329\n\nChange-Id: Id78ff0ff4e325aeebf0022d868937cff73d3a742\n"
    },
    {
      "commit": "dee58d6bb6d567fcd0c4f39d8d690c3acaf0e432",
      "tree": "5a2f20546ca3c1544c44bee560062580e22dc79c",
      "parents": [
        "391e155a6936a05bd39b171031ec21d2dee62133"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 07 09:54:26 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 07 16:03:16 2016 +0000"
      },
      "message": "Revert \"Revert \"Refactor HGraphBuilder and SsaBuilder to remove HLocals\"\"\n\nThis patch merges the instruction-building phases from HGraphBuilder\nand SsaBuilder into a single HInstructionBuilder class. As a result,\nit is not necessary to generate HLocal, HLoadLocal and HStoreLocal\ninstructions any more, as the builder produces SSA form directly.\n\nSaves 5-15% of arena-allocated memory (see bug for more data):\n  GMS      20.46MB  \u003d\u003e  19.26MB  (-5.86%)\n  Maps     24.12MB  \u003d\u003e  21.47MB  (-10.98%)\n  YouTube  28.60MB  \u003d\u003e  26.01MB  (-9.05%)\n\nThis CL fixed an issue with parsing quickened instructions.\n\nBug: 27894376\nBug: 27998571\nBug: 27995065\n\nChange-Id: I20dbe1bf2d0fe296377478db98cb86cba695e694\n"
    },
    {
      "commit": "60328910cad396589474f8513391ba733d19390b",
      "tree": "01702f6df5c39925b354a3152dd04289e7d97062",
      "parents": [
        "e3ff7b293be2a6791fe9d135d660c0cffe4bd73f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 17:47:42 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 17:47:42 2016 +0000"
      },
      "message": "Revert \"Refactor HGraphBuilder and SsaBuilder to remove HLocals\"\n\nBug: 27995065\nThis reverts commit e3ff7b293be2a6791fe9d135d660c0cffe4bd73f.\n\nChange-Id: I5363c7ce18f47fd422c15eed5423a345a57249d8\n"
    },
    {
      "commit": "e3ff7b293be2a6791fe9d135d660c0cffe4bd73f",
      "tree": "d578d27cb78e6d2caef683cd8ac94c9a9752b192",
      "parents": [
        "86ea7eeabe30c98bbe1651a51d03cb89776724e7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 02 16:48:20 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 11:21:30 2016 +0100"
      },
      "message": "Refactor HGraphBuilder and SsaBuilder to remove HLocals\n\nThis patch merges the instruction-building phases from HGraphBuilder\nand SsaBuilder into a single HInstructionBuilder class. As a result,\nit is not necessary to generate HLocal, HLoadLocal and HStoreLocal\ninstructions any more, as the builder produces SSA form directly.\n\nSaves 5-15% of arena-allocated memory (see bug for more data):\n  GMS      20.46MB  \u003d\u003e  19.26MB  (-5.86%)\n  Maps     24.12MB  \u003d\u003e  21.47MB  (-10.98%)\n  YouTube  28.60MB  \u003d\u003e  26.01MB  (-9.05%)\n\nBug: 27894376\nChange-Id: Iefe28d40600c169c5d306fd2c77034ae19476d90\n"
    },
    {
      "commit": "86ea7eeabe30c98bbe1651a51d03cb89776724e7",
      "tree": "01702f6df5c39925b354a3152dd04289e7d97062",
      "parents": [
        "0cb5c86b7021e70cbf584c1455aad1ef383af786"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 16 09:26:07 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 11:21:20 2016 +0100"
      },
      "message": "Build dominator tree before generating HInstructions\n\nSecond CL in the series of merging HGraphBuilder and SsaBuilder. This\npatch refactors the builders so that dominator tree can be built\nbefore any HInstructions are generated. This puts the SsaBuilder\nremoval of HLoadLocals/HStoreLocals straight after HGraphBuilder\u0027s\nHInstruction generation phase. Next CL will therefore be able to\nmerge them.\n\nThis patch also adds util classes for iterating bytecode and switch\ntables which allowed to simplify the code.\n\nBug: 27894376\nChange-Id: Ic425d298b2e6e7980481ed697230b1a0b7904526\n"
    },
    {
      "commit": "eda3140656dafa03dc7fd4b3f90246a8522f0c1b",
      "tree": "ab6edb78257e50da05e62b994510fe59c63d8afb",
      "parents": [
        "760efa3d01257250972ea47a00c0edb01d608c3a"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 24 15:38:56 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Mar 25 10:22:44 2016 -0700"
      },
      "message": "Avoid removing new-instance instruction twice.\nIncludes a fail-before/pass-after regression test.\n\nRationale:\nIn some corner cases, one new instance reached more than one\njava.lang.String.\u003cinit\u003e method call. As a result, the new\ninstance instruction appeared multiple times in the vector\nuninitialized_strings_. A second removal crashes the compiler.\nThis change list avoid the crash by simply skipping instructions\nthat are already removed.\n\nBUG\u003d27847265\n\nChange-Id: I7f8a4f84ea3c184e1529ec3e90bd6749c83c445b\n"
    },
    {
      "commit": "98e6ce44c700abd9375fe17f0aa31fea1e1e938b",
      "tree": "aa15b4398290918e5eb5227781b5aef5ecff9e0b",
      "parents": [
        "a1f65135cd2315159ac302f904ba0c5ba0d7fd0e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 16 18:42:15 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 09:51:40 2016 +0000"
      },
      "message": "Remove string init map.\n\nPartial revert of the String init change.\n\n- Make Quick bailout in the presence of String allocation.\n- Rely on the compiler for knowing when dex registers alias.\n\nbug:27173201\n\nChange-Id: I0bf58ba3825c71cef110b53f3a0a6f567cb2ef9a\n"
    },
    {
      "commit": "26962cc2a1e773e99c1711bef9b36e199fdc8989",
      "tree": "0841225e62c317667513d8d2f1329386a863dfa7",
      "parents": [
        "c86382a7d1685728fe000df43dd8ba7bc22278a5",
        "5e08e3643230ff89f3d7e9b5d7660db6fd94bec9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 15 16:32:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 15 16:32:16 2016 +0000"
      },
      "message": "Merge \"Expect less in the presence of a string init call.\""
    },
    {
      "commit": "5e08e3643230ff89f3d7e9b5d7660db6fd94bec9",
      "tree": "e19e6ce62b9350e52544c37dffadc4e1b8615417",
      "parents": [
        "88f4bc504c1be353e95e9d215d68c7d58eb0717f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 15 15:56:11 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 15 16:17:11 2016 +0000"
      },
      "message": "Expect less in the presence of a string init call.\n\nThe compiler currently relies on the dex cache being populated\nfor doing proper type propagation. If it hasn\u0027t, we may end up in the\nsituation where the DexMethodInliner has recognized a String.\u003cinit\u003e call\n(because DexMethodInliner only looks at signatures, and does not resolve\ntypes), but the graph builder doesn\u0027t see a type and assume it needs\nto do access checks and clinit checks on it.\n\nChange-Id: Id79313b0610b127909e3e057305b6632b0b172f7\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": "0d15f267eb9d629e26df0c603c39f9665951e970",
      "tree": "08b0635a78a64f44fd9c69dcdd1556d54e6add60",
      "parents": [
        "6c5907ad7ae1d242b90d692c478ba68b5cdcb44a",
        "6e332529c33be4d7dae5dad3609a839f4c0d3bfc"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Feb 12 16:34:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 12 16:34:49 2016 +0000"
      },
      "message": "Merge \"ART: Remove HTemporary\""
    },
    {
      "commit": "6e332529c33be4d7dae5dad3609a839f4c0d3bfc",
      "tree": "cedd2e1beb170fd5821136fe974e3f34adfcddc2",
      "parents": [
        "d3caabd4f85f86dd744da432993e12935d843a83"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 02 16:15:27 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Feb 12 15:17:50 2016 +0000"
      },
      "message": "ART: Remove HTemporary\n\nChange-Id: I21b984224370a9ce7a4a13a9652503cfb03c5f03\n"
    },
    {
      "commit": "d9994f069dfeaa32ba929ca78816b5b83e2a4134",
      "tree": "a826990f89d8f546921902933a4cc05b57196971",
      "parents": [
        "be89a6f1d9e41b154be3fe1da97cedb6964fbd35"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 11 17:35:55 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 11 21:47:46 2016 +0000"
      },
      "message": "Re-enable OSR.\n\nFixes two bugs:\n- Dealing with proxy methods, which the compiler and code cache\n  does not handle.\n- Dealing with phi types, that may have been speculatively optimized\n  but do not hold once jumping to the compiled code.\n\nChange-Id: I7dcd9976ef7b12128fff95d2b7ed3e69cc42e90a\n"
    },
    {
      "commit": "c047d94f02334b419ce532c3bf7da3e91e69dae1",
      "tree": "c9213b1efcc9062a46a18a1f0fec6a984e6a5565",
      "parents": [
        "440ef2cbc76d7e2bc76cf5f15b69fc0478d7e853"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 20 17:00:19 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 20 18:14:30 2016 +0000"
      },
      "message": "ART: DCHECK still too strong for String NewInstance\n\nEven though the presence of a irreducible loop phi is the reason why\nString.\u003cinit\u003e may see its first input not being the NewInstance, it\nmay see a different phi from the same cycle. We have to relax the\ncorresponding DCHECK.\n\nBug: 26676472\nChange-Id: Iba6fffa74833c57aad8aa07dc382ff6b93838de1\n"
    },
    {
      "commit": "bc9ab1630a198efbbf730275541291321ac3d2d4",
      "tree": "68551c86f225e15bbeba00f52236492a4c8fe576",
      "parents": [
        "c4004042ca028a3c7898f0032dcee08cddea303b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 20 14:50:19 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 20 16:35:08 2016 +0000"
      },
      "message": "ART: Cannot assume String.\u003cinit\u003e called on NewInstance\n\nIrreducible loops create uneliminatable phis for all live vregs. This\nbreaks the StringFactory optimization which assumes that the first\ninput is always a NewInstance instruction.\n\nBug: 26676472\n\nChange-Id: Ib7dfdadbafbbfef89e1f5b1a80eb75ecf792621a\n"
    },
    {
      "commit": "65902e86b91f984061657bd8cacf239edb53c39d",
      "tree": "42d2b7b9a4004b0b02c44df5f8dda14d51fb7366",
      "parents": [
        "14c2d9fd6fba4732d1a43e3288c818b8e0e049fa"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 15 09:35:13 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jan 19 11:29:20 2016 +0000"
      },
      "message": "ART: Optimize out redundant NewInstances of String\n\nNewInstance of String creates an empty String object before it is\nreplaced by the result of a StringFactory call (String.\u003cinit\u003e). If\nthe empty object is never used prior to the call, it can be safely\nremoved (replaced with null in this case).\n\nWe do not remove the instruction if:\n - it has a real use (comparison, instanceof, check-cast), or\n - we are compiling with --debuggable and there is an environment use.\n\nIf removed and execution deoptimizes before the StringFactory call,\nthe interpreter will see String.\u003cinit\u003e being called on a null object.\nSince the verifier guarantees that the call was made on new-instance\nin the input bytecode (b/26579108), the interpreter can safely assume\nthat it was optimized out rather than throw NullPointerException.\n\nResults (all without --debuggable):\n - boot.oat:     563/563 removed\n - Google Maps:  480/480 removed\n - Google Docs:  819/819 removed\n\nChange-Id: I9fdfc50e9dea6299a7327f94327cdfd2b2538079\n"
    },
    {
      "commit": "28943466954ca5d6f586bb5496f7f3f0f85fe87a",
      "tree": "56a4f7427addf50aba847ea944ec24396c7e848f",
      "parents": [
        "68c56ae9ccdb6e348501456e374ae65e74f6270c",
        "6de1938e562b0d06e462512dd806166e754035ea"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 15 09:19:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 15 09:19:12 2016 +0000"
      },
      "message": "Merge \"ART: Remove incorrect HFakeString optimization\""
    },
    {
      "commit": "6de1938e562b0d06e462512dd806166e754035ea",
      "tree": "f9df086a73860c20768d17ff7bc5be4139567941",
      "parents": [
        "f5b84ee14a3bc578f799a39dca1ae512b49356ea"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 08 17:37:10 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 14 16:22:13 2016 +0000"
      },
      "message": "ART: Remove incorrect HFakeString optimization\n\nSimplification of HFakeString assumes that it cannot be used until\nString.\u003cinit\u003e is called which is not true and causes different\nbehaviour between the compiler and the interpreter. This patch\nremoves the optimization together with the HFakeString instruction.\n\nInstead, HNewInstance is generated and an empty String allocated\nuntil it is replaced with the result of the StringFactory call. This\nis consistent with the behaviour of the interpreter but is too\nconservative. A follow-up CL will attempt to optimize out the initial\nallocation when possible.\n\nBug: 26457745\nBug: 26486014\n\nChange-Id: I7139e37ed00a880715bfc234896a930fde670c44\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": "15693bfdf9fa3ec79327a77b7e10315614d716cc",
      "tree": "918208d60ec2a5595a2b5e42791865fefdbf9692",
      "parents": [
        "87bafaf563d35616804dd0cc0dbde176aac87817"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Dec 16 10:30:45 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 06 12:44:42 2016 +0000"
      },
      "message": "ART: Resolve ambiguous ArraySets\n\nJust like aget(-wide), the value operand of aput(-wide) bytecode\ninstructions can be both int/long and float/double. This patch builds\non the previous mechanism for resolving type of ArrayGets to type the\nvalues of ArraySets based on the reference type of the array.\n\nBug: 22538329\n\nChange-Id: Ic86abbb58de146692de04476b555010b6fcdd8b6\n"
    },
    {
      "commit": "d87f3eaa80139564969433fd47c0f6abf8dc46ba",
      "tree": "45830e3ae4fa04e9dd2da2e4df554718d32a7790",
      "parents": [
        "f196a43051547e777fac9a27f1148999688fd3c5"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 04 15:55:10 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 04 15:55:10 2016 +0000"
      },
      "message": "ART: Use Primitive::Is64BitType in SsaBuilder::TypePhiFromInputs\n\nAccidentally submitted CL Ib39f3da2b92bc5be5d76f4240a77567d82c6bebe\nwithout this.\n\nBug: 26208284\nChange-Id: I2e69ca2fde72171f2ce645304c4835d8d57f4e0b\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": "809d70f5b268227dbd59432dc038c74d8351be29",
      "tree": "6482a9ce5a34c04fc14d5b5db77d5daec1ec5aad",
      "parents": [
        "dde8b8694954c0268eb12a7ccbddf07d9de262fd"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Nov 19 10:29:39 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 23 13:49:46 2015 +0000"
      },
      "message": "ART: Fix wide stores in Optimizing\n\nSsaBuilder::VisitStoreLocal did not take into account the following:\n (a) when storing a wide value, the high vreg must be invalidated,\n (b) when storing into the high vreg of a wide value, the low vreg\n     must be invalidated.\n\nBoth situations cause overestimation of liveness but only (b) has\nimplications on correctness. CodeGenerator::EmitEnvironment will skip\nthe high vreg, causing deoptimizing and try/catch to load a wrong\nvalue for that vreg.\n\nIn order to fix this bug, several changes had to be made to the\nSsaBuilder:\n (1) phis need to be initialized with a type which matches its\n     inputs\u0027 size,\n (2) eagerly created loop header phis may end up being undefined\n     because of their corresponding vregs being invalidated inside\n     the loop; these are marked dead during input setting,\n (3) the entire SSA-building algorithm should never revive an\n     undefined loop header phi.\n\nBug: 25677992\nBug: https://code.google.com/p/android/issues/detail?id\u003d194022\n\nChange-Id: Id8a852e38c3f5ff1c2e608b1aafd6d5ac8311e32\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": "2bd4c5c1b704be8a81d9b7a94b3e828afa2b0963",
      "tree": "ee1ea3271d41b9a647a7ce7e4d1a0ed94eff9fcf",
      "parents": [
        "1749e2cfb5c5ed4d6970a09aecf898ca9cdfcb75"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 04 22:48:45 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 04 22:48:45 2015 +0000"
      },
      "message": "Revert \"ART: Implement DeadPhiHandling in PrimitiveTypePropagation\"\n\nCrashes on YouTube, need to investigate\n\nThis reverts commit 1749e2cfb5c5ed4d6970a09aecf898ca9cdfcb75.\n\nChange-Id: If5f133d55dcc26b8db79a670a48fbd4af7807556\n"
    },
    {
      "commit": "1749e2cfb5c5ed4d6970a09aecf898ca9cdfcb75",
      "tree": "57ab54c48a7404abf0c9f2c919e8a6c805d98587",
      "parents": [
        "c8894ab5021aecd0fa5eba94af47f732914af33b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 28 13:49:59 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 04 18:13:45 2015 +0000"
      },
      "message": "ART: Implement DeadPhiHandling in PrimitiveTypePropagation\n\nDeadPhiHandling revives non-conflicting phis with environment uses\nbut does not properly merge types. To not duplicate code, this patch\nmodifies PrimitiveTypePropagation to deal with conflicts and thus\nreplaces DeadPhiHandling altogether.\n\nBug: 24252151\nBug: 24252100\n\nChange-Id: I198c71d1b8167fc05783a5a24aa9f1e3804acafe\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": "b11fc61d9769753ec9e4a51b88ee288923159283",
      "tree": "1a513fc5103594129a4bd716892b56c3af752f25",
      "parents": [
        "722b5a7580e2d1e7a0327f46615d4c24acba9baa"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 29 13:42:22 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 29 16:18:03 2015 +0100"
      },
      "message": "Fix a bug in DeadPhiHandling around conflicting phis.\n\nChange-Id: I44ec40f71a7e05eb4295bea55f6045cb86017329\n"
    },
    {
      "commit": "1d0a03c2eb0e26ded029b84e011458e8466f87de",
      "tree": "33943c964ae1b4aa2ed2e9d27ee5aeed5599acc2",
      "parents": [
        "6adb995d8e0177189bf77e9a0f6fce7ded87d993"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 28 14:11:09 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 28 15:31:55 2015 +0100"
      },
      "message": "ART: Fix DeadPhiHandling creating \u003e2 equivalents\n\nRun test 531 failed a DCHECK because the DeadPhiHandling algorithm\nwould generate three phis of the same type:\n  (0) loop phi [#0, ref] with equivalents void \u0026 object\n  (1) type object equivalent by its first input \u003d\u003e int \u0026 int\n  (2) request object equivalent by a user \u003d\u003e int \u0026 int \u0026 object\n  (3) type second \u003d\u003e int \u0026 object \u0026 object (dead)\n  (4) type first \u003d\u003e object \u0026 object \u0026 object\n\nThis patch fixes the issue by skipping (1) when the phi already has\na type, thus not creating the third equivalent for the phi\u0027s user.\n\nChange-Id: I00c990a5982ddc1f7de013f72bbcfb1c649a6e5f\n"
    },
    {
      "commit": "d0180f9027488b95a47b35efa9ced30aeb86ff06",
      "tree": "79e2be87d4bf561bf4a7e5bd43468626fd2eb9fe",
      "parents": [
        "0aeb7599bcd7073a5c849f413fb7a9611f5944eb"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Sep 22 14:39:58 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 25 11:00:12 2015 +0100"
      },
      "message": "ART: SsaBuilder clean up\n\nAdds DCHECKs which verify assumptions about catch blocks. Uses HPhi::\nIsVRegEquivalentOf instead of a local function.\n\nChange-Id: I1b6db5ff2da5263d61261963308b6d65453a6d56\n"
    },
    {
      "commit": "d0d11f20811f260453f6dfe2e26d7dbd6ed55f01",
      "tree": "a87eeac15fd485bb14ea8ace2b2bc839c4c253be",
      "parents": [
        "7b87ff905ada1815d9b24843cf13b6ff54240e34",
        "b701315cb7c4dfe907c27c24c819b7a14141fd2e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 21 15:44:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 21 15:44:52 2015 +0000"
      },
      "message": "Merge \"ART: Fix bug in DeadPhiHandling\""
    },
    {
      "commit": "b701315cb7c4dfe907c27c24c819b7a14141fd2e",
      "tree": "0bb83a5d10c6de112a3b105335d19b06987fc423",
      "parents": [
        "9e30c0e177adabaaf94a66c91130a19a7632fc7c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Sep 17 16:47:21 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 21 16:44:00 2015 +0100"
      },
      "message": "ART: Fix bug in DeadPhiHandling\n\nWhen reviving dead phis for --debuggable, the DeadPhiHandling algorithm\ncould produce two phis of the same type, which causes the SSAChecker\ngraph verifier to fail. This patch fixes the bug.\n\nNote that the code is currently not exercised because compilation is\ndelegated to Quick for --debuggable.\n\nBug: 24129675\nChange-Id: I26b6dcf3071b325cc7871b989a36c505279ae681\n"
    },
    {
      "commit": "eead0711984ee20a3bba7c2e2415593a520e40b3",
      "tree": "cb3b7e7330cb421005557c138d65ed43f0118473",
      "parents": [
        "819a9c5638b6d6b579c89fe36df96acc1f378182"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 18 14:58:57 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 18 15:00:28 2015 +0100"
      },
      "message": "ART: Optimize catch phi creation to save memory.\n\nCatch phis are eagerly created for all vregs and then removed as\nthrowing instructions with undefined locals are encountered. This can\nbe optimized since rougly one third of vregs is already undefined with\nthe first throwing instruction.\n\nChange-Id: Ia4e66f19ea03f9a129b4b64d4193d262fff45224\n"
    },
    {
      "commit": "3eaa32f72b6abd807964134aad4c158946dc92e3",
      "tree": "003aa2bcd15499c7ebfdc5528b607e23f4f452f0",
      "parents": [
        "9632d5a5ed8295d63fc82fe418a3b776de4e4459"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 18 10:58:32 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 18 14:14:53 2015 +0100"
      },
      "message": "ART: Delete catch phis for undefined vregs.\n\nSSA builder assumed that (eagerly created) catch phis for undefined\nvregs must be dead and will be deleted by dead phi elimination. This,\nhowever, does not hold for --debuggable because the catch phis might\nbe revived for their environment uses. This patch modifies the builder\nto delete the phis itself.\n\nBug: 24054676\nChange-Id: Iaa5f2487ff1c38353b44cb89c709bbff1ecd73cc\n"
    },
    {
      "commit": "71bf8090663d02869cafafdd530976f7f2a9db7f",
      "tree": "70f910498031be392dd1f851cf38fe68bdc3154c",
      "parents": [
        "4919c34ead9a10d6cbdaba9967952c344b32e5b9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 15 15:33:14 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 16 16:41:01 2015 +0100"
      },
      "message": "Optimizing: Tag arena allocations in SsaBuilder.\n\nReplace GrowableArray with ArenaVector in SsaBuilder and\ntag allocations with a new arena allocation type.\n\nChange-Id: I27312c51d7be9d2ad02a974cce93b365c65c5fc4\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"
    },
    {
      "commit": "145acc5361deb769eed998f057bc23abaef6e116",
      "tree": "3d66a0b44e1ac927156eec6e6488de5fd52b982b",
      "parents": [
        "91e11c0c840193c6822e66846020b6647de243d5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:33:25 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:33:25 2015 +0000"
      },
      "message": "Revert \"Optimizing: Tag basic block allocations with their source.\"\n\nReverting so that we can have more discussion about the STL API.\n\nThis reverts commit 91e11c0c840193c6822e66846020b6647de243d5.\n\nChange-Id: I187fe52f2c16b6e7c5c9d49c42921eb6c7063dba\n"
    },
    {
      "commit": "91e11c0c840193c6822e66846020b6647de243d5",
      "tree": "0c5398ef59c464c1848afd0113c74b6aeb75cf42",
      "parents": [
        "f9f6441c665b5ff9004d3ed55014f46d416fb1bb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 02 17:03:22 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:09:37 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: I984aef6e615ae2380a532f5c6726af21015f43f5\n"
    },
    {
      "commit": "ec16f79a4d0aeff319bf52139a0c82de3080d73c",
      "tree": "1306b2cbaa97bbacc2cbc100d6e157e14f9510cb",
      "parents": [
        "32f264e67afa8654a5570d38b627515fb73fc333"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 15:04:01 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 17:43:13 2015 +0100"
      },
      "message": "ART: Refactor try/catch block info, store exception type\n\nThis patch replaces HBasicBlock fields storing try/catch info with a\nsingle TryCatchInformation data structure, saving memory for the\nmajority of non-try/catch blocks. It also changes builder to store\nthe exception type for catch blocks.\n\nChange-Id: Ib3e43f7db247e6915d67c267fc62410420e230c9\n"
    },
    {
      "commit": "29fc008c9689e9036a3f5e3bd186bbfb5de3cb82",
      "tree": "373a288e3bfcc44d6af87c78a3e114eed211eca3",
      "parents": [
        "a539ec06503766fcad4be71480c194a225fb037c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 18 17:17:38 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 18 17:17:38 2015 +0100"
      },
      "message": "ART: Revert storing of exceptional predecessors\n\nAfter change of the approach for try/catch register allocation, it is\nno longer necessary to record instructions which might throw into a\ncatch block.\n\nChange-Id: I7ef12ed06c49a35280029810975fa2a50fe4a424\n"
    },
    {
      "commit": "b618adebbc19e50d7b1aa2f11b84341beb3c64dc",
      "tree": "02338a5656bb8a21b742f6506ce92a07d4a8162a",
      "parents": [
        "7b926cdacc2b67241bc9cb5f2d4b04b13ca79d0e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 29 10:31:29 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jul 30 17:02:41 2015 +0100"
      },
      "message": "ART: Store and check exceptional predecessors\n\nFuture CL on register allocation for try/catch will require the\nknowledge of instructions which throw into a catch block. This patch\nstores that information with the basic block and verifies it in the\ngraph checker.\n\nMore checks on try catch also added to the graph checker and an order\nof exception handlers is enforced in TryBoundary successors.\n\nChange-Id: I3034c610791ea51d96724bcca97f49ec6ecf2af3\n"
    },
    {
      "commit": "ffee3d33f3ea39aa6031c3d2ff29c4806c8dcc51",
      "tree": "9b990552fbf7e0ba91954758b07e2a51d95da9cd",
      "parents": [
        "045da88bd0230ddf48aaf037b3d6c16fbb97ba65"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jul 06 11:48:53 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 15 17:20:30 2015 +0200"
      },
      "message": "ART: Build SSA form when try/catch is present\n\nThis patch implements support for try/catch in the SsaBuilder.\nValues of locals are propagated from throwing sites inside try\nblocks to their respective catch blocks and phis (\"catch phis\")\nare created when necessary.\n\nChange-Id: I0736565c2c4ff3f9f0924b6e3a785a50023f875a\n"
    },
    {
      "commit": "4230e1895b915a22363452823b0e51eabe92cb60",
      "tree": "64bce7a4e8e4fcb73d15c1644f54311bd5a04483",
      "parents": [
        "b485915afd8a6396df7863b651dfe832038fd680"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 29 14:34:46 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 29 14:02:30 2015 +0000"
      },
      "message": "Do not replace a live phi with a dead phi.\n\nA dead phi is not properly typed. Therefore, always use the live phi\nequivalent instead.\n\nbug:21865466\nChange-Id: Id5e26ae4062cc18f5532d5b95cc024480652d5b2\n"
    },
    {
      "commit": "51d400d4ebd41b9fb4d67ac3179f8fb66a090fdd",
      "tree": "871fe308b90bab5226ae2f2a17c99c5fc0a992b7",
      "parents": [
        "b684aa939bd17cb43ef6ebdb7b89d175c38c79f0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 15 09:01:08 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 15 09:56:48 2015 +0100"
      },
      "message": "Fix reference comparison after redundant phi elimination.\n\nOtherwise, the graph could remain mistyped.\n\nbug:21776173\n\nChange-Id: I491f4b95e1763cbd1ade777da0a23bae319fed63\n"
    },
    {
      "commit": "d23eeef3492b53102eb8093524cf37e2b4c296db",
      "tree": "57d3e9ab2853d5b8092568bb3d29bc850c113315",
      "parents": [
        "a15c78d3cc28f514a482ffd792a767e97fe53c95"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 18 22:31:29 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 29 14:15:04 2015 +0100"
      },
      "message": "Support for inlining methods that call/throw.\n\nMostly fixes here and there to make it working.\n\nChange-Id: I1b535e895105d78b65634636d675b818551f783e\n"
    },
    {
      "commit": "b176d7c6c8c01a50317f837a78de5da57ee84fb2",
      "tree": "81ec0c16267c527bdc64923b374be915206e6af9",
      "parents": [
        "713c59e813daa92da3f1678add6c4c7e16dcff11"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 20 18:48:31 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 21 12:10:00 2015 +0100"
      },
      "message": "Also encode the InvokeType in an InlineInfo.\n\nThis will be needed to recover the call stack.\n\nChange-Id: I2fe10785eb1167939c8cce1862b2d7f4066e16ec\n"
    },
    {
      "commit": "8909bafa5d64e12eb53f3d37b984f53e7a632224",
      "tree": "6bac613ed796914ec4937a64d40d44b1888d4878",
      "parents": [
        "06675720cc274eb9d91a4ecd3fb1eef94a2d88f0"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Thu Apr 23 21:35:11 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Mon May 18 17:58:21 2015 +0100"
      },
      "message": "Mark CheckCast\u0027s and InstanceOf\u0027s input as !CanBeNull if used before in a NullCheck\n\nChange-Id: Ied0412a01922b40a3f5d89bed49707498582abc1\n"
    },
    {
      "commit": "0a23d74dc2751440822960eab218be4cb8843647",
      "tree": "39d69de5d812826c4065d0acd38a58cd983f21f0",
      "parents": [
        "cdeb0b5fede4c06488f43a212591e661d946bc78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:57:35 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 14:17:22 2015 +0100"
      },
      "message": "Add a parent environment to HEnvironment.\n\nThis code has no functionality change. It adds a placeholder\nfor chaining inlined frames.\n\nChange-Id: I5ec57335af76ee406052345b947aad98a6a4423a\n"
    },
    {
      "commit": "8c0c91a845568624815df026cfdac8c42ecccdf6",
      "tree": "48f4a1f6158234c3257ed75405122b1fb0941f96",
      "parents": [
        "46a4b26855ae9fcd14c6e4435f37f09ceb134f61"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:46:05 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:46:05 2015 +0100"
      },
      "message": "Use a growable array instead of an environment during SSA.\n\nUsing an environment was convenient because it contains\na growable array. But there\u0027s no need for the environment\nabstraction when being used as a temporary holder for values\nof locals.\n\nChange-Id: Idf2883fe4b8f97a31ee70b3627c1bdd23ebfff0e\n"
    },
    {
      "commit": "f213e05cef6d38166cfe0cce8f3b0a53225a1b39",
      "tree": "2fd9573056062ae085f84f1b63b8ec3298927da1",
      "parents": [
        "76bf84a196576f902a76a1165516a49dac15856f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 08:53:46 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 15:05:20 2015 +0100"
      },
      "message": "Add support for caching float and double constants.\n\nChange-Id: Ib5205bad1006bc5e3c9cc86bc82a6b4b1ce9bef9\n"
    },
    {
      "commit": "3192540155d51a42b340de7afebe83a5eaf23b03",
      "tree": "eccb77f011b88a3df1f3a4789d4192d509a7c6a9",
      "parents": [
        "f8bdd9f3a002970e4b8fdcf6fe6730116f1626c3"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Apr 17 10:36:57 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Apr 17 10:36:57 2015 +0100"
      },
      "message": "Cleanup unnecessary test conditions in ssa builder.\n\nChange-Id: Ic36e535aec3f977ebe36bfe20bc54a1033de62c6\n"
    },
    {
      "commit": "a4f8831d6533e4fe5aed18433099e1130d95a877",
      "tree": "914c97dd322f59b282f01ca5659a960609e0aa0b",
      "parents": [
        "e015a31e509c3f4de8a90b57b77329ba6609ce2f"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 12:57:19 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 16:48:25 2015 +0100"
      },
      "message": "Remove duplicates phis created during SSA transformation\n\nWhen creating equivalent phis we copy the inputs of the original phi\nwhich may be improperly typed. This will be fixed during the type\npropagation but as a result we may have two equivalent phis with the\nsame type for the same dex register. This is correct but generates more\ncode and prevent some optimizations.\n\nThis CL adds another step in the SSA builder to remove the extra Phi\nnodes created due to equality operators.\n\nThe graph checker verifies that for a given dex register not two phis\nhave the same type.\n\nAlso, replace zero int constant with null constant when we compare a\nreference against null.\n\nChange-Id: Id37cc11a016ea767c7e351575e003d822a9d2e60\n"
    },
    {
      "commit": "3dcd58cd54a922b864494fb7fff4a7f7a8562db9",
      "tree": "1e7b416de3dd46b0301f835632f8b3d0392beb97",
      "parents": [
        "d43f160dc294655885a2c273307d34585c4ce97b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 03 11:02:38 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 03 12:36:38 2015 +0100"
      },
      "message": "Fix a bug when creating a HDeoptimization instruction.\n\nWe need to copy the environment, instead of just pointing\nto an existing one. Otherwise, if the instruction that initially\nholds the environemnt gets removed from the graph, any update\nto an instruction in that environment will not be reflected in it.\n\nbug:20058506\n\nChange-Id: I2a62476d0851ecbc3707c0da395d8502ee437422\n"
    },
    {
      "commit": "8d5b8b295930aaa43255c4f0b74ece3ee8b43a47",
      "tree": "c26fc49bbc74615e7f0b9657aaf3757a8282d7a9",
      "parents": [
        "c8924c6ea9e83ba3832dd5551df38ab06f4aaca9"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 10:51:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 26 14:10:03 2015 +0000"
      },
      "message": "ART: Force constants into the entry block\n\nOptimizations such as GVN and BCE make the assumption that all\nconstants are located in the entry block of the CFG, but not all\npasses adhere to this rule.\n\nThis patch makes constructors of constants private and only accessible\nto friend classes - HGraph for int/long constants and SsaBuilder for\nfloat/double - which ensure that they are placed correctly and not\nduplicated.\n\nNote that the ArenaAllocatorAdapter was modified to not increment\nthe ArenaAllocator\u0027s internal reference counter in order to allow\nfor use of ArenaSafeMap inside an arena-allocated objects. Because\ntheir destructor is not called, the counter does not get decremented.\n\nChange-Id: I36a4fa29ae34fb905cdefd482ccbf386cff14166\n"
    },
    {
      "commit": "da4d79bc9a4aeb9da7c6259ce4c9c1c3bf545eb8",
      "tree": "151dd61c4b6a8fd512ea4c2c862af28b02f4ed9c",
      "parents": [
        "af87659f462ac650009fce295097cae3dabce171"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 14:36:11 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 16:02:21 2015 +0000"
      },
      "message": "Unify ART\u0027s various implementations of bit_cast.\n\nART had several implementations of art::bit_cast:\n\n1. one in runtime/base/casts.h, declared as:\n\n   template \u003cclass Dest, class Source\u003e\n   inline Dest bit_cast(const Source\u0026 source);\n\n2. another one in runtime/utils.h, declared as:\n\n   template\u003ctypename U, typename V\u003e\n   static inline V bit_cast(U in);\n\n3. and a third local version, in runtime/memory_region.h,\n   similar to the previous one:\n\n   template\u003ctypename Source, typename Destination\u003e\n   static Destination MemoryRegion::local_bit_cast(Source in);\n\nThis CL removes versions 2. and 3. and changes their callers\nto use 1. instead.  That version was chosen over the others\nas:\n- it was the oldest one in the code base; and\n- its syntax was closer to the standard C++ cast operators,\n  as it supports the following use:\n\n    bit_cast\u003cDestination\u003e(source)\n\n  since `Source\u0027 can be deduced from `source\u0027.\n\nChange-Id: I7334fd5d55bf0b8a0c52cb33cfbae6894ff83633\n"
    },
    {
      "commit": "b59dba05697b4ac6c86cb4f45c9222c9c6ad852b",
      "tree": "83cd372b86498c7a78d08be11d6e9f73d7338665",
      "parents": [
        "356286f989941ac495417195e4129aaceaf36a83"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 18:13:21 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 18:13:21 2015 +0000"
      },
      "message": "Fix a bug in the SSA builder.\n\nThe build would leave behind phis with incompatible input types\n(for example float and int). We need another dead phi run after\nthe type propagation to ensure all such phis are dead.\n\nChange-Id: I6ef1da725c7d4a1ebaf6b52dd7eb0c7bacd261b2\n"
    },
    {
      "commit": "e0fe7ae36180863e45cbb9d1e6e9c30b1b1a949c",
      "tree": "26269a55f16d8bee5b5898318fa18491fd72061c",
      "parents": [
        "3dd536ffd7e8f82e4587964545b272acbd61d68e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:02:49 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 16:20:35 2015 +0000"
      },
      "message": "Make the SSA builder honor the debuggable flag.\n\nThis requires to properly type phis that are only\nused by environments, and discard phis with incomptable types.\nThe code generators do not handle these conflicting types. In\nthe process, ensure a phi has a type that does not depend\non the order of the inputs (for example (char, short) -\u003e short),\nand set int for int-like types. We can refine this later.\n\nChange-Id: I60ab601d6d00b1cbf18623ee4ff1795aa28f84a1\n"
    },
    {
      "commit": "d6138ef1ea13d07ae555542f8898b30d89e9ac9a",
      "tree": "a8ffd5fd966512fd280bc1b3214f4e57a9e1805f",
      "parents": [
        "92095533ac28879ddd8b44b559d700527ca12b8a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 18 14:48:53 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 19 14:01:18 2015 +0000"
      },
      "message": "Ensure the graph is correctly typed.\n\nWe used to be forgiving because of HIntConstant(0) also being\nused for null. We now create a special HNullConstant for such uses.\n\nAlso, we need to run the dead phi elimination twice during ssa\nbuilding to ensure the correctness.\n\nChange-Id: If479efa3680d3358800aebb1cca692fa2d94f6e5\n"
    },
    {
      "commit": "10e244f9e7f6d96a95c910a2bedef5bd3810c637",
      "tree": "bc2b90ce716129115c05f79e21c58fe13b01fd20",
      "parents": [
        "ab7f56d9b9838811cb01773e45999e2cda4aa03a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jan 26 18:54:32 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 29 12:01:26 2015 +0000"
      },
      "message": "optimizing: NullCheck elimination\n\nHow it works:\n- run a type analysis to propagate null information on instructions\n- during the last instruction simplifier remove null checks for which\nthe input is known to be not null\n\nThe current type analysis is actually a nullability analysis but it will\nbe reused in follow up CLs to propagate type information: so it keeps\nthe more convenient name.\n\nChange-Id: I54bb1d32ab24604b4d677d1ecdaf8d60a5ff5ce9\n"
    },
    {
      "commit": "ed59619b370ef23ffbb25d1d01f615e60a9262b6",
      "tree": "6c93bb6ceff95f7aaf232825e050eecc05c7282d",
      "parents": [
        "f90eec005997f98c1a9f874fbbf68414e5f9c766"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 23 10:39:45 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 26 16:13:57 2015 +0000"
      },
      "message": "Optimizing: Speed up HEnvironment use removal\n\nRemoval of use records from HEnvironment vregs involved iterating over\npotentially large linked lists which made compilation of huge methods\nvery slow. This patch turns use lists into doubly-linked lists, stores\npointers to the relevant nodes inside HEnvironment and subsequently\nturns the removals into constant-time operations.\n\nChange-Id: I0e1d4d782fd624e7b8075af75d4adf0a0634a1ee\n"
    },
    {
      "commit": "3159674c0863f53cfbc1913d493550221ac47f02",
      "tree": "5dc34e8da8dc695cf80040ba0dbc5312060c10c1",
      "parents": [
        "4d3ed1a6f34bd31ed30faaca0433cf2a4b19bb7b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 24 15:28:45 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 25 00:55:07 2014 +0000"
      },
      "message": "Fix a bug in the type analysis phase of optimizing.\n\nDex code can lead to the creation of a phi with one\nfloat input and one integer input. Since the SSA builder trusts\nthe verifier, it assumes that the integer input must be converted\nto float. However, when the register is not used afterwards, the\nverifier hasn\u0027t ensured that. Therefore, the compiler must remove\nthe phi prior to doing type propagation.\n\nChange-Id: Idcd51c4dccce827c59d1f2b253bc1c919bc07df5\n"
    },
    {
      "commit": "21cc798cd56a069a3d51a0215020676065780939",
      "tree": "feb43656c44a12afa53c3c11d4d947ff42644adc",
      "parents": [
        "1c18d5d0141ffa76b0838fb99615186dcbefc50e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 17 17:50:33 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 17 18:48:36 2014 +0000"
      },
      "message": "Fix a bug in the type propagation phase of optimizing.\n\nThe compiler was placing phis (and their floating point equivalent),\nin a way that it did not expect.\n\nChange-Id: I974be1ee4aae5d27d68c6bba171db0ed25377b70\n"
    },
    {
      "commit": "421e9f9088b51e9680a3dfcae6965fc1854d3ee4",
      "tree": "4a9429babb514ff0d8f6772f44aa73c79ec7a773",
      "parents": [
        "d6425d7bb909b668341d9781c567f35f6d10ea16"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 11 18:21:53 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 11 18:24:48 2014 +0000"
      },
      "message": "Remove HTemporary when building the SSA graph.\n\n- They are useless afterwards. If we keep them around, they can\n  crash the dump of the graph, where they always assume a previous\n  instruction.\n\n- In the call to HTemporary::GetType, check that the previous\n  instruction exists.\n\nChange-Id: Ie7bf44d05cb61e3654a69725c1980925580dd3a6\n"
    },
    {
      "commit": "277ccbd200ea43590dfc06a93ae184a765327ad0",
      "tree": "d89712e93da5fb2748989353c9ee071102cf3f33",
      "parents": [
        "ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 21:36:10 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 04 18:40:08 2014 -0800"
      },
      "message": "ART: More warnings\n\nEnable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general,\nand -Wunused-but-set-parameter for GCC builds.\n\nChange-Id: I81bbdd762213444673c65d85edae594a523836e5\n"
    },
    {
      "commit": "102cbed1e52b7c5f09458b44903fe97bb3e14d5f",
      "tree": "cb0a433c8f284021298c8a0c4dd0da97ca9d198a",
      "parents": [
        "07f5c5edb7ef24ac35364e6ef9a8107a44e6564e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 15 18:31:05 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 21 16:03:51 2014 +0100"
      },
      "message": "Implement register allocator for floating point registers.\n\nAlso:\n- Fix misuses of emitting the rex prefix in the x86_64 assembler.\n- Fix movaps code generation in the x86_64 assembler.\n\nChange-Id: Ib6dcf6e7c4a9c43368cfc46b02ba50f69ae69cbe\n"
    },
    {
      "commit": "476df557fed5f0b3f32f8d11a654674bb403a8f8",
      "tree": "0ca72785e60b3b1152bca0908e6d134c0a30f631",
      "parents": [
        "9e878d50567f624094f3c4940ac3aedbc5eff3b9"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Oct 09 17:51:36 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Oct 09 17:59:50 2014 +0100"
      },
      "message": "Use Is*() helpers to shorten code in the optimizing compiler.\n\nChange-Id: I79f31833bc9a0aa2918381aa3fb0b05d45f75689\n"
    }
  ],
  "next": "184d640d2a3ac86d871dab58386a50cc9bb973f9"
}
