)]}'
{
  "log": [
    {
      "commit": "5a620590e5cf6d6817693edffd661371555de88b",
      "tree": "16f93fac9b5ec42bd8574acb6535ddd1dcc9f61f",
      "parents": [
        "a69ae8ab13d07fb3b03596a9b9049b3292dd0b20"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 05 11:27:03 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 05 16:44:29 2016 +0100"
      },
      "message": "Stop populating irreducible loop at header\n\nRecent CL modified the (previously exponential) algorithm for\npopulating irreducible loops so as to not visit blocks multiple times.\nHowever, the new condition for an early exit did not take into account\nthat it is not necessary to visit predecessors of the loop header.\n\nThe algorithm remains correct but does unnecessary work.\n\nBug: 27856014\nChange-Id: If72f8be82e79838f0dd9678082a3bbaabb51e43b\n"
    },
    {
      "commit": "f417ff44d1eb111854d7a213f106912b3dd9e3d4",
      "tree": "be69b00348b8d296a5bae7dd2c17d9f9a2b8ba0e",
      "parents": [
        "dbea8b4eacb62b357bce1bc299c8442788b288a1"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 25 12:51:37 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 25 16:21:34 2016 -0700"
      },
      "message": "Test component type for errors too.\nWith regression test.\n\nRationale:\nMoved erroneous check in convenience method, so we\nput all the same logic in one place. When testing\nfor erroneous T[], check both the array type\nas well at the component type T for errors\n(it is possible T[] is not marked erroneous\neven though T is eventually).\n\nBUG\u003d28358598\n\nChange-Id: I11339a976dc83e0493a99e6bb97f3a058ca3f796\n"
    },
    {
      "commit": "c6b5627c25ff5653e97ccff8c5ccf6ac967b6f83",
      "tree": "8cec0d66bdd5e5a9be14bbb881eb36d09868ab39",
      "parents": [
        "a584db5460a31198bf621cdacf5bc304a984efa4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 18:45:25 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 19:40:35 2016 +0100"
      },
      "message": "Fix HInstruction::ReplaceInput(), allow no-op.\n\nAllow HInstruction::ReplaceInput() to be called with\na `replacement` being the same as the old input and\ndo nothing in that case.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/216923\nwhere I erroneously assumed that it never happens.\n\nAlso adhere to the standard C++ std::forward_list\u003c\u003e\nsemantics in the single-element overload of\n`IntrusiveForwardList\u003c\u003e::splice_after()`.\n\nBug: 28173563\nChange-Id: I5cea14c212b1083f90ffe6b5b53324ad663d57d8\n"
    },
    {
      "commit": "3c19d3e029a9fcc123d2c6fd1e5e13867d2cfe1f",
      "tree": "6cd3dcb90f5ee163b08d933299d5b821c03c6a73",
      "parents": [
        "6435910a65067fb38477232b2620cc53978b13c7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 14:36:35 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 19:43:31 2016 +0100"
      },
      "message": "Reuse HUseListNode\u003c\u003es when replacing instruction or input.\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 ~5.6MiB:\n\nBefore:\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  ...\nAfter:\n  MEM: used: 38554536, allocated: 39463008, lost: 908472\n  Number of arenas allocated: 274,\n  Number of allocations: 572221, avg size: 67\n  ...\n  UseListNode     4469976\n  ...\n\nWith 32-bit dex2oat, the UseListNode would be 2/3 of the\nvalues for 64-bit dex2oat (both before and after).\n\nBug: 28173563\nChange-Id: Ia4fabe03568f0e0dbf2cdf2b031863602aea3530\n"
    },
    {
      "commit": "6435910a65067fb38477232b2620cc53978b13c7",
      "tree": "d607c9103f46242bce5ed75297c20087c0e3f8cd",
      "parents": [
        "814ae9448d7a620a1855d53c7b69b1b377944a67",
        "46817b876ab00d6b78905b80ed12b4344c522b6c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 18:26:22 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 19 18:26:22 2016 +0000"
      },
      "message": "Merge \"Use iterators \"before\" the use node in HUserRecord\u003c\u003e.\""
    },
    {
      "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": "5f6b90824628504813cd174b90eaaad8c8031726",
      "tree": "53f7230957dc30bbc5505a946d7281d4a8d97863",
      "parents": [
        "35a38d1e250fc3237c79fafa96ec69d6f07c1f3d",
        "8b3f9b246d5bdbf67faeb2b872b75b8d72777bc0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 19 16:21:46 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 19 16:21:47 2016 +0000"
      },
      "message": "Merge \"Avoid constructing types with errors.\""
    },
    {
      "commit": "fd66c50d64c38e40bafde83b4872e27bbff7546d",
      "tree": "e77ea1374211042d5eca3d1a62a81293a29eb108",
      "parents": [
        "c4d445a40bf00ab497b5e4d43a6b43eaafb5fa50"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 18 15:37:01 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 13:59:15 2016 +0100"
      },
      "message": "Fix inlining loops in OSR mode.\n\nWhen compiling a method in OSR mode and the method does not\ncontain a loop (arguably, a very odd case) but we inline\nanother method with a loop and then the final DCE re-runs\nthe loop identification, the inlined loop would previously\nbe marked as irreducible. However, the SSA liveness analysis\nexpects irreducible loop to have extra loop Phis which were\nalready eliminated from the loop before the inner graph was\ninlined to the outer graph, so we would fail a DCHECK().\n\nWe fix this by not marking inlined loops as irreducible when\ncompiling in OSR mode.\n\nBug: 28210356\nChange-Id: If10057ed883333c62a878ed2ae3fe01bb5280e33\n"
    },
    {
      "commit": "8b3f9b246d5bdbf67faeb2b872b75b8d72777bc0",
      "tree": "6cceffd4ee15b9c67f67083851769980cc8988a7",
      "parents": [
        "c4d445a40bf00ab497b5e4d43a6b43eaafb5fa50"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 06 11:22:12 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 18 20:29:08 2016 -0700"
      },
      "message": "Avoid constructing types with errors.\n\nBUG\u003d27626735\n\nRationale:\nDo not construct classes with a link error. Without this,\nthe error type thought it was Object (mirror\u0027s method\nIsObjectClass() returns true if there is no superclass).\n\nChange-Id: I55ca8cc8cfc042210edf748aab10da4c6e345980\n"
    },
    {
      "commit": "c2e8af9659db7e456b26febb1b971900057ad427",
      "tree": "af35981588f2995d8bb3a570e2f7244c8c22373a",
      "parents": [
        "04c2b2de69460d41e0c39c1f7d9fb77376c3aa8b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 05 17:15:19 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 12 15:17:28 2016 +0100"
      },
      "message": "ART: Speed up HGraph::PopulateIrreducibleRecursive\n\nPopulating an irreducible loop can potentially traverse all possible\npaths through the HGraph, leading to an exponential algorithm.\nThis patch adds a bit vector of nodes whose membership in the loop\nhas been decided and need not be revisited again.\n\nBug: 27856014\nChange-Id: I3696f08c846e6f40e5de44cb771811bac7e3e08a\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": "cac5a7e871f1f346b317894359ad06fa7bd67fba",
      "tree": "2df7d4892216a7c976dfe848c9893cb5eb8fa6a5",
      "parents": [
        "6f51d7756a9c66007fe7666b19399e1f60ff6092"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 22 10:39:50 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 29 19:27:40 2016 +0100"
      },
      "message": "Optimizing: Improve const-string code generation.\n\nFor strings in the boot image, use either direct pointers\nor pc-relative addresses. For other strings, use PC-relative\naccess to the dex cache arrays for AOT and direct address of\nthe string\u0027s dex cache slot for JIT.\n\nFor aosp_flounder-userdebug:\n  - 32-bit boot.oat: -692KiB (-0.9%)\n  - 64-bit boot.oat: -948KiB (-1.1%)\n  - 32-bit dalvik cache total: -900KiB (-0.9%)\n  - 64-bit dalvik cache total: -3672KiB (-1.5%)\n    (contains more files than the 32-bit dalvik cache)\nFor aosp_flounder-userdebug forced to compile PIC:\n  - 32-bit boot.oat: -380KiB (-0.5%)\n  - 64-bit boot.oat: -928KiB (-1.0%)\n  - 32-bit dalvik cache total: -468KiB (-0.4%)\n  - 64-bit dalvik cache total: -1928KiB (-0.8%)\n    (contains more files than the 32-bit dalvik cache)\n\nBug: 26884697\nChange-Id: Iec7266ce67e6fedc107be78fab2e742a8dab2696\n"
    },
    {
      "commit": "62e78a7ea8221f3fbe848fa883fb86c9d87ba50b",
      "tree": "665cac33ba8de588707155f0ac9450cf11b9d5c5",
      "parents": [
        "308640fd439f6e0867770d74600ad4d8edda7093",
        "9eeebf646b118269b3f5bd6fc6c1b0a58c26c6d4"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 15:35:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 24 15:35:10 2016 +0000"
      },
      "message": "Merge \"ART: Fix order of operations in HBasicBlock::DisconnectAndDelete\""
    },
    {
      "commit": "9eeebf646b118269b3f5bd6fc6c1b0a58c26c6d4",
      "tree": "90dfa9c619cdf18935e9acfd045a977a8e0ae48c",
      "parents": [
        "843a65556616183a36792bbcc1632c6d8d0e78b2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 11:18:15 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 15:33:49 2016 +0000"
      },
      "message": "ART: Fix order of operations in HBasicBlock::DisconnectAndDelete\n\nThe method would remove predecessors before successors. As a result,\ninstructions used by dead loop phis would see dangling uses, causing\na DCHECK to fail.\n\nSteps were reordered to remove dependencies in post order.\n\nBug: 27683071\nChange-Id: I8e0e976443fb410908321a065276f1340b757c41\n"
    },
    {
      "commit": "0ced281ae6216c29f57ca0f8b7388a722e8da97b",
      "tree": "b7f8273bb117c8ec8f8546ed937a8c0a96d2e5de",
      "parents": [
        "843a65556616183a36792bbcc1632c6d8d0e78b2",
        "1a65388f1d86bb232c2e44fecb44cebe13105d2e"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 24 10:25:51 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 24 10:25:51 2016 +0000"
      },
      "message": "Merge \"Clean up art::HConstant predicates.\""
    },
    {
      "commit": "c9b21f83c2eab8bdd16241992193c3049dc68e43",
      "tree": "00a4b12cac09c7ba84db7508ce22ab1fd939c571",
      "parents": [
        "7ee5bc54fbe1bf5218696e63a80e76cd0c8ea387"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 23 16:36:59 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 23 16:38:24 2016 +0000"
      },
      "message": "Fix some typos in art/compiler/optimizing/nodes.cc.\n\nChange-Id: I11be5a9b73da207c9eb497bcaffc49d614c1ca89\n"
    },
    {
      "commit": "f6a35de9eeefb20f6446f1b4815b4dcb0161d09c",
      "tree": "cf484acbd6889b92a7fe3e8615611129088c3894",
      "parents": [
        "459898dc4470559ba1e1d578bc52a914d1f573f5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 21 12:01:50 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 21 16:50:08 2016 +0000"
      },
      "message": "Optimizing: Fix register allocator validation memory usage.\n\nAlso attribute ArenaBitVector allocations to appropriate\npasses. This was used to track down the source of the\nexcessive memory alloactions.\n\nBug: 27690481\n\nChange-Id: Ib895984cb7c04e24cbc7abbd8322079bab8ab100\n"
    },
    {
      "commit": "1a65388f1d86bb232c2e44fecb44cebe13105d2e",
      "tree": "515e3000b3ad6d195101f20f33f3c9498e536593",
      "parents": [
        "f808e8a0cc218c2b98023ef0e91f3c5b74ad2962"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 18:05:57 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 18:05:57 2016 +0000"
      },
      "message": "Clean up art::HConstant predicates.\n\n- Make the difference between arithmetic zero and zero-bit\n  pattern non ambiguous.\n- Introduce Boolean predicates in art::HIntConstant for when\n  they are used as Booleans.\n- Introduce aritmetic positive and negative zero predicates\n  for floating-point constants.\n\nBug: 27639313\nChange-Id: Ia04ecc6f6aa7450136028c5362ed429760c883bd\n"
    },
    {
      "commit": "18401b748a3180f52e42547ede22d1b184fe8c43",
      "tree": "aebee923635cc2563c74033b00ffc90ceadafed4",
      "parents": [
        "b7f257f353b1eb2db2732939a0404c118316891d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 11 13:35:51 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 11 13:36:19 2016 +0000"
      },
      "message": "Fix invariant in reference type propagation.\n\nAlso some cleanups.\n\nChange-Id: I7f0ec7d06b4bab10dbfa230c757447d311658f93\n"
    },
    {
      "commit": "7ba9966b76bbf818513018fa1da72c89330fe384",
      "tree": "adb082660168b9c50319d861cba664374d55d5a5",
      "parents": [
        "e4cec517faf1c74d6895e0e5b512a6e2f83a0e06"
      ],
      "author": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Wed Mar 02 16:25:36 2016 +0600"
      },
      "committer": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Thu Mar 03 16:54:31 2016 +0600"
      },
      "message": "ART: cleanup exit_block_ in graph if exit block is removed\n\nIf we remove the exit block from the graph (for example method\ncontains infinite loop) we should also clean the field exit_block_\nin graph. At least inliner expects it.\n\nChange-Id: Icda668da2233cdd6cd673635a1949f5ed34cf270\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "3f52306b259caed1c654c4b3fd5b594d5ec8d46c",
      "tree": "8a94e537ee9c17ce8591e1775fb232ee1af09425",
      "parents": [
        "757701fc80dfe35ff9677c858b3d85e946e1ae36"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 29 16:53:33 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 01 22:54:29 2016 +0000"
      },
      "message": "ART: Fix overlapping instruction IDs in inliner\n\nInliner creates the inner graph so that it generates instruction IDs\nhigher than the outer graph. This was broken because the inliner\nwould create instructions in the outer graph before the inner graph\nis inlined.\n\nThe bug cannot be triggered because the offending instruction would\nshare the same ID as the first inner HLocal, which is removed before\nthe inner graph is inlined. The added DCHECKs reveal the hidden problem\nand make it safe for HLocals to be removed in the future.\n\nChange-Id: I486eb0f3987e20c50cbec0fb06332229e07fbae9\n"
    },
    {
      "commit": "a1d8ddfaf09545f99bc326dff97ab604d4574eb6",
      "tree": "c4a9893ac195928397c91a84223e2e011cd059bd",
      "parents": [
        "a48224f32797b234f07d78fbbede5edbb212ceab"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 29 11:46:58 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 29 12:17:52 2016 +0000"
      },
      "message": "Bug fix for polymorphic inlining.\n\nThe code used to wrongly propagate try/catch information to\nnew blocks. Since it has the same logic as Hraph::InlineInto,\nextract the code that updates loop and try/catch information\nto blocks to a shared method.\n\nbug:27330865\nbug:27372101\nbug:27360329\n\nChange-Id: I4386f724d8d412bde5bcc04fda6955bc3bacf5a9\n"
    },
    {
      "commit": "a1de9188a05afdecca8cd04ecc4fefbac8b9880f",
      "tree": "a671c8aef814ccf194e5c3950a551f2711516c53",
      "parents": [
        "950d063395c7cecbbe372fd607468018d661a35c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 25 11:37:38 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 26 16:01:59 2016 +0000"
      },
      "message": "Optimizing: Reduce memory usage of HInstructions.\n\nPack narrow fields and flags into a single 32-bit field.\n\nChange-Id: Ib2f7abf987caee0339018d21f0d498f8db63542d\n"
    },
    {
      "commit": "e53bd8160ad2892f33849108d3b1099992a311fd",
      "tree": "2e2c33e50fa871174273799d09689d669f4c0561",
      "parents": [
        "d15ede2df7d157ea5480614fd18c2bf0d37a6c2a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Feb 24 14:54:18 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Feb 24 14:54:45 2016 +0000"
      },
      "message": "Remove unreachable code paths in constant folding.\n\nChange-Id: I7ffb361711c87f6b1b98d172d2cfdf9b2ba65607\n"
    },
    {
      "commit": "f8a08735f6c60ddee2bb5646dcad561361cce079",
      "tree": "36111e04c122c0c4f58dc1ea24a327c9069f72d6",
      "parents": [
        "99da8cd8818e015b21d1c2af73ac40749698c930",
        "916cc1d504f10a24f43b384e035fdecbe6a74b4c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 15:56:59 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 18 15:56:59 2016 +0000"
      },
      "message": "Merge \"Implement polymorphic inlining.\""
    },
    {
      "commit": "916cc1d504f10a24f43b384e035fdecbe6a74b4c",
      "tree": "a68f7276cba6cd75bc0b200337edde8eafccccc7",
      "parents": [
        "442643920a6c539e98aad76594e99b932b5631ba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 11:12:31 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 14:41:25 2016 +0000"
      },
      "message": "Implement polymorphic inlining.\n\nFor example, before:\nHInvokeVirtual\n\nAfter:\nIf (receiver \u003d\u003d Foo) {\n  // inlined code.\n} else if (receiver \u003d\u003d Bar) {\n  // inlined code\n} else {\n  // HInvokeVirtual or HDeoptimize(receiver !\u003d Baz)\n}\n\nChange-Id: I5ce305aef8f39f8294bf2b2bcfe60e0dddcfdbec\n"
    },
    {
      "commit": "31dd3d60491148d345c1edae1ccd090a1b67dd2b",
      "tree": "57e6fc0663a39dd5abd6284adc822e8782c4bdf0",
      "parents": [
        "88f38e9b4e9ba0aca3d6fd4823be3a7226c87f33"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Feb 16 12:21:02 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Feb 17 13:52:33 2016 +0000"
      },
      "message": "Extend constant folding to float and double operations.\n\nChange-Id: I2837064b2ceea587bc171fc520507f13355292c6\n"
    },
    {
      "commit": "55bd749991f9a0a73f612696e1a93e739380546b",
      "tree": "7bfe5a6565e728468fa67cb9ce7c62907d9ce0f8",
      "parents": [
        "7dc277b171b4d8294c4d152d8a6020995dc95f98"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 16 15:37:12 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 16 16:05:11 2016 +0000"
      },
      "message": "Refactor the inliner.\n\nIn preparation for more polymorphic inlining, refactor the inliner\na bit.\n\nChange-Id: Ie3fd6c1ef205f1089989c67a527e6f57ff3c8b5d\n"
    },
    {
      "commit": "badd826664896d4a9628a5a89b78016894aa414b",
      "tree": "a30e8b3e62126ae1e1df1152ac643cfc5f2b074a",
      "parents": [
        "47a2a45a6673ddf3322115ff5058763f82a9368f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 02 16:28:56 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 15 10:21:07 2016 +0000"
      },
      "message": "ART: Run SsaBuilder from HGraphBuilder\n\nFirst step towards merging the two passes, which will later result in\nHGraphBuilder directly producing SSA form. This CL mostly just updates\ntests broken by not being able to inspect the pre-SSA form.\n\nUsing HLocals outside the HGraphBuilder is now deprecated.\n\nBug: 27150508\nChange-Id: I00fb6050580f409dcc5aa5b5aa3a536d6e8d759e\n"
    },
    {
      "commit": "86503785cd6414b8692e5c83cadaa2972b6a099b",
      "tree": "a242e28bd3605dce65c9f5e94b5fc13f06f07d19",
      "parents": [
        "be89a6f1d9e41b154be3fe1da97cedb6964fbd35"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 11 19:07:30 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 11 19:07:30 2016 +0000"
      },
      "message": "Fix x86-64 Baker\u0027s read barrier fast path for CheckCast.\n\nUse an art::x86_64::Label instead of an\nart::x86_64::NearLabel as end label when emitting code for a\nHCheckCast instruction, as the range of the latter may\nsometimes be too short when Baker\u0027s read barriers are\nenabled.\n\nBug: 12687968\nChange-Id: Ia9742dce65be7d4fb104688f3c4717b65df1fb54\n"
    },
    {
      "commit": "b331febbab8e916680faba722cc84b66b84218a3",
      "tree": "35f985b021e476914bfe91492da23fee218014a7",
      "parents": [
        "586996afc905518ed926e4680aab67bedabec9b7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 05 16:51:53 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 05 17:11:54 2016 +0000"
      },
      "message": "Revert \"Revert \"Implement on-stack replacement for arm/arm64/x86/x86_64.\"\"\n\nThis reverts commit bd89a5c556324062b7d841843b039392e84cfaf4.\n\nChange-Id: I08d190431520baa7fcec8fbdb444519f25ac8d44\n"
    },
    {
      "commit": "3f1a8be7c9511afbc1ea0ce2e76a018269382336",
      "tree": "98511fb06ea5912a56289c7c564484af03baa66f",
      "parents": [
        "c5b76b9328d77b83c80afed14a5b6e7009136e15"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 03 12:56:02 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 03 12:56:02 2016 -0800"
      },
      "message": "Fixed bug on premature DCHECK.\nWith fail-before/pass-after test\n\nbug\u003d26947011\n\nRationale:\nDuring BCE, the phi structure is under construction,\nto be fixed by InsertPhiNodes() and carefully checked\nwith the SSA checker. So utilities should not overly\nDCHECK on SSA consistency during the modifications.\n\nChange-Id: Ia9df9ee5aac0c1dd2c3e3a447c730246d5e48bbb\n"
    },
    {
      "commit": "74eb1b264691c4eb399d0858015a7fc13c476ac6",
      "tree": "0b6fc4f3003d50bf6c388601013cdfc606e53859",
      "parents": [
        "75fd2a8ab9b4aff59308034da26eb4986d10fa9e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 11:44:01 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 28 15:50:27 2016 +0000"
      },
      "message": "ART: Implement HSelect\n\nThis patch adds a new HIR instruction to Optimizing. HSelect returns\none of two inputs based on the outcome of a condition.\n\nThis is only initial implementation which:\n - defines the new instruction,\n - repurposes BooleanSimplifier to emit it,\n - extends InstructionSimplifier to statically resolve it,\n - updates existing code and tests accordingly.\n\nCode generators currently emit fallback if/then/else code and will be\nupdated in follow-up CLs to use platform-specific conditional moves\nwhen possible.\n\nChange-Id: Ib61b17146487ebe6b55350c2b589f0b971dcaaee\n"
    },
    {
      "commit": "09e8d5ffe52c738c6a74984b1cbc7ad4bc8f5e2c",
      "tree": "c48431e449a0bb23c8959bac451a4ff77d538c16",
      "parents": [
        "8881c422743ac4ffd3d594420fec078d896dd05f"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Jan 22 16:49:55 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Jan 26 10:05:40 2016 -0800"
      },
      "message": "Some minor simplifications in code and tests.\n\nBackground:\nThis is actually a resubmit of an earlier cl that was\nreverted because was test was less robust against\ninlining changes (it assumed a virtual call would\nnever be inlined).\n\noriginal cl: If8ada79dfd70bea991c11d2b18661b951b6c4cd4\nrevert cl:   I739aaaccd0509d02a62ef01e797a6d45bfe941df\n\nChange-Id: I952680d60ff488874907f066bfdf156a45b409ba\n"
    },
    {
      "commit": "788f2f05c3e5b0e5bda247b00e34f0094585546f",
      "tree": "7e8b578b60bed6e550b62767f1fbc43651755798",
      "parents": [
        "c24b8df48be848af1f4cb54e9caef2b7d6afe680"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 12:41:38 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 13:33:57 2016 +0000"
      },
      "message": "Revert \"Revert \"Inline methods with loops.\"\"\n\nBug: 26689526\n\nThis reverts commit 451ad8d1be9a1949ea3c3e3a713a9e76198a8b2d.\n\nChange-Id: If484fe4c0744254dd7568fd5006e574d621a1855\n"
    },
    {
      "commit": "69fd1b56021ac62c17e188bd0d4dd22fc911558e",
      "tree": "0fb450426591148401bb76b854a7a8fe4e69f993",
      "parents": [
        "bf03fcd10a3ffa15468d335f26697b0473e45b36"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 10:43:39 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 10:43:39 2016 +0000"
      },
      "message": "Revert \"Some minor simplifications in code and tests.\"\n\nFails 530-checker-loops on arm\n\nThis reverts commit bf03fcd10a3ffa15468d335f26697b0473e45b36.\n\nChange-Id: I739aaaccd0509d02a62ef01e797a6d45bfe941df\n"
    },
    {
      "commit": "bf03fcd10a3ffa15468d335f26697b0473e45b36",
      "tree": "4b2a6572ba079093e928aa7d04152d8596eff807",
      "parents": [
        "0021c310e2e613d6d180acda0d9d422dba8688b0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jan 04 12:32:24 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Jan 20 16:23:22 2016 -0800"
      },
      "message": "Some minor simplifications in code and tests.\n\nRationale: fell through the cracks of previous \"intrinsics\" CL.\n\nChange-Id: If8ada79dfd70bea991c11d2b18661b951b6c4cd4\n"
    },
    {
      "commit": "451ad8d1be9a1949ea3c3e3a713a9e76198a8b2d",
      "tree": "4a1bb8da95ff9b971f2ef9f3941b645bcaf211d3",
      "parents": [
        "82fc9bb45dbf8ff728122fb7ab72d1eb7b2f4869"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 20 21:23:30 2016 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 20 21:23:30 2016 +0000"
      },
      "message": "Revert \"Inline methods with loops.\"\n\nThis reverts commit 82fc9bb45dbf8ff728122fb7ab72d1eb7b2f4869.\n\nLoop inlining exposes issues with BCE.\n\nBug: 26689526\nChange-Id: Id9983d7f9d3c5579d91e56e4699d4d939517b2dc\n"
    },
    {
      "commit": "82fc9bb45dbf8ff728122fb7ab72d1eb7b2f4869",
      "tree": "3a22cf5bb2e0012723ecdc7640e4db0dd5be2f0a",
      "parents": [
        "17ccfff2de292fd2b4a78aef87d79b662381f920"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 19 14:08:02 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 20 16:28:39 2016 +0000"
      },
      "message": "Inline methods with loops.\n\nCompiling Gms/Fb/Framework/Docs:\n- Overall compilation-time increase: 2.2%\n- Overall code size increase: 1.1%\n\nPerformance improvements:\n- Richards with jit: +6%\n- Takl: +11%\n\nChange-Id: I0a6fcf2a360e5ad193cd95b5c4fe92227ac6bd96\n"
    },
    {
      "commit": "09aa147f0891ef28a95d89e8ad61c429f82ddd5b",
      "tree": "dbf7ee48d5aa06dc4ba1ca88702e5e667e17a9db",
      "parents": [
        "a65ff5e0576ace8ffeb1a6dc8784a61cd2498fba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 19 10:52:54 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 19 13:24:07 2016 +0000"
      },
      "message": "Disable DCE when there are irreducible loops.\n\nAlso ensure an instruction that requires an environment\ndoes have one.\n\nChange-Id: I41a8460e05ef320f872197d3be7847e7ffaa6ee8\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": "947cb4f5582d1f57270b48d3c47ea95e7f9085b5",
      "tree": "6f6aed8f8cca3177b06521a8db6ca845d18623ad",
      "parents": [
        "7b4199a5fa9f151fbf3af2a34f26d04215a1016c",
        "15bd22849ee6a1ffb3fb3630f686c2870bdf1bbc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 14 21:25:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 14 21:25:16 2016 +0000"
      },
      "message": "Merge \"Implement irreducible loop support in optimizing.\""
    },
    {
      "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": "a3eca2d7300f35c66cf4b696d788a8b7ba74eb99",
      "tree": "18ea775d51bfc71d90407bd801e8b56fb5309868",
      "parents": [
        "3da15f8b1097905e06a59149c3a4a9658cbb7d5e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 12 16:03:16 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 12 16:05:38 2016 +0000"
      },
      "message": "Do not leave intermediate addresses across Java calls.\n\nbug:26472446\nChange-Id: Ie4a9b5fe6f1d61a76c71eceaa2299fe55512c612\n"
    },
    {
      "commit": "c928591f5b2c544751bb3fb26dc614d3c2e67bef",
      "tree": "b6c8a5e08c4d4c7a66a70f4d91e209ededf22334",
      "parents": [
        "5ee288c9dd99614e3a238f5efceeec6456e3499d"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Dec 18 10:38:42 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jan 08 12:55:31 2016 +0000"
      },
      "message": "ARM Baker\u0027s read barrier fast path implementation.\n\nIntroduce an ARM fast path implementation in Optimizing for\nBaker\u0027s read barriers (for both heap reference loads and GC\nroot loads).  The marking phase of the read barrier is\nperformed by a slow path, invoking the runtime entry point\nartReadBarrierMark.\n\nOther read barrier algorithms continue to use the original\nslow path based implementation, which has been renamed as\nGenerateReadBarrierSlow/GenerateReadBarrierForRootSlow.\n\nBug: 12687968\nChange-Id: Ie7ee85b1b4c0564148270cebdd3cbd4c3da51b3a\n"
    },
    {
      "commit": "f555258861aea7df8af9c2241ab761227fd2f66a",
      "tree": "1317545f50f78eb7c9e4dd44ebfb256bdff0af11",
      "parents": [
        "c917d195d8d8d05f90796b1e0842883fc608346d"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sun Dec 27 13:36:12 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 06 10:33:30 2016 +0000"
      },
      "message": "ART: Create BoundType for CheckCast early\n\nReferenceTypePropagation creates a BoundType for each CheckCast and\nreplaces all dominated uses of the casted object with it. This does\nnot include Phi uses on the boundary of the dominated scope, reducing\ntyping precision. This patch creates the BoundType in Builder, causing\nSsaBuilder to replace uses of the object automatically.\n\nBug: 26081304\n\nChange-Id: I083979155cccb348071ff58cb9060a896ed7d2ac\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": "5d75afe333f57546786686d9bee16b52f1bbe971",
      "tree": "ee203dd8ff8c4c6257b6c1ae1db1a432a8a8682f",
      "parents": [
        "1e65a78577ed71f5e3d79edaa0e6735ea4a3371b"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Dec 14 11:57:01 2015 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Dec 30 10:52:51 2015 -0800"
      },
      "message": "Improved side-effects/can-throw information on intrinsics.\n\nRationale: improved side effect and exception analysis gives\n           many more opportunities for GVN/LICM/BCE.\n\nChange-Id: I8aa9b757d77c7bd9d58271204a657c2c525195b5\n"
    },
    {
      "commit": "5f7b58ea1adfc0639dd605b65f59198d3763f801",
      "tree": "04556e673cdd3967cc967ff79931eab49e523956",
      "parents": [
        "1201804d1813d7db0accead9721d67c40b3de564"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 23 19:49:34 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Dec 23 09:59:07 2015 +0000"
      },
      "message": "Rewrite HInstruction::Is/As\u003ctype\u003e().\n\nMake Is\u003ctype\u003e() and As\u003ctype\u003e() non-virtual for concrete\ninstruction types, relying on GetKind(), and mark GetKind()\nas PURE to improve optimization opportunities. This reduces\nthe number of relocations in libart-compiler.so\u0027s .rel.dyn\nsection by ~4K, or ~44%, and in .data.rel.ro by ~18K, or\n~65%. The file is 96KiB smaller for Nexus 5, including 8KiB\nreduction of the .text section.\n\nUnfortunately, the g++/clang++ __attribute__((pure)) is not\nstrong enough to avoid duplicated virtual calls and we would\nneed the C++ [[pure]] attribute proposed in n3744 instead.\nTo work around this deficiency, we introduce an extra\nnon-virtual indirection for GetKind(), so that the compiler\ncan optimize common expressions such as\n    instruction-\u003eIsAdd() || instruction-\u003eIsSub()\nor\n    instruction-\u003eIsAdd() \u0026\u0026 instruction-\u003eAsAdd()-\u003e...\nwhich contain two virtual calls to GetKind() after inlining.\n\nChange-Id: I83787de0671a5cb9f5b0a5f4a536cef239d5b401\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": "04ff4e8463ac68752638d305eeb84b457fd8289c",
      "tree": "109240fb049a9713af5a6de9a6668b61929c2b2b",
      "parents": [
        "70a33905e90c655cb17303b238bace2a2f4d5bf9"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Dec 10 13:54:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Dec 10 15:11:25 2015 +0000"
      },
      "message": "ART: Fix bug in DCE not removing phis from catch phi uses\n\nDue to the missing edges between throwing instructions and catch phis\nDCE needs to manually remove dead instructions from catch phi users,\nbeing overly conservative if the inputs are not in the dead blocks.\nDCE used to do this for normal instructions, but it needs to do the\nsame for phis.\n\nChange-Id: I7edfcb84ec6ff7303945d5d5cd436b1d1e95df2a\n"
    },
    {
      "commit": "4b467ed97bc5886fb800209c0ee94df10163b88d",
      "tree": "13b2d0b144c65e91243f3aa50ce9514276e52c64",
      "parents": [
        "eb5ddd7b02ce2d25d4f28f85a13aac628526e1c1"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 19 17:04:22 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Dec 08 17:02:15 2015 -0800"
      },
      "message": "Simplify and rename IsLoopInvariant() test.\n\nSimplify IsLoopInvariant() test. Also rename it to IsDefinedOutOfTheLoop()\nso there is no ambiguity for example whether a instruction after the loop counts\nas a loop invariant. It\u0027s up to the caller to make the interpretation.\n\nChange-Id: I999139032b0e4d815dd1e2276f2bd428cf558686\n"
    },
    {
      "commit": "f64242a30c6e05a8e4302a64eab4bcc28297dc9e",
      "tree": "98cbceab543c81f523c5bb676e10853ddfbc9881",
      "parents": [
        "b1aa617639c01c0dffaafd1641e0304ad179b6a2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 01 14:58:23 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Dec 02 10:48:16 2015 +0000"
      },
      "message": "Optimizing: Add checker tests for sharpening.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/184116 .\n\nChange-Id: Ib03c424fb673afc5ccce15d7d072b7572b47799a\n"
    },
    {
      "commit": "b1aa617639c01c0dffaafd1641e0304ad179b6a2",
      "tree": "cae80877a94ad82e3fdecb5ff32a9d99d21c6edc",
      "parents": [
        "1965328f598854bfdf2d41cea582460d11aeba48",
        "fb337ea53d1e6fe68b24217a9ea95e9f544ef697"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 01 14:15:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 01 14:15:52 2015 +0000"
      },
      "message": "Merge \"Move PC-relative addressing bases to a better position.\""
    },
    {
      "commit": "fb337ea53d1e6fe68b24217a9ea95e9f544ef697",
      "tree": "b1d6f4225473c613b1df7f179d0146e7d208c297",
      "parents": [
        "b4536b7de576b20c74c612406c5d3132998075ef"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 25 15:25:10 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 01 11:38:59 2015 +0000"
      },
      "message": "Move PC-relative addressing bases to a better position.\n\nMove the platform-specific HX86ComputeBaseMethodAddress and\nHArmDexCacheArraysBase to the latest dominator of their uses\noutside any loop. This brings the base closer to the first\nuse (previously, it was in the entry block) and relieves\nsome pressure on the register allocator while avoiding\nrecalculation of the base in a loop.\n\nChange-Id: I231aa81eb5b4de9af2d0167054d06b65eb18a636\n"
    },
    {
      "commit": "584bc170492216c6e3117eb895a6a12bcc9dcf42",
      "tree": "4f69f42234cd5b0cd9edd8d47e4b6b6b51f957e8",
      "parents": [
        "d42dd1abbeba1bc93499026484f5f44f9dde1858",
        "3fc7f357170311689c4c31007a5e168ddea321d5"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 30 17:28:16 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 30 17:28:16 2015 +0000"
      },
      "message": "Merge \"Accept synthetic phi nodes and general names for blocks.\""
    },
    {
      "commit": "5c0048565e78ff53fd2b3a2e446c72ea2fffe239",
      "tree": "f75c288d909fc7b86b005e6780113273249bd9e3",
      "parents": [
        "2171e2ab84baa41770489d01df9197a3ce871262"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 23 09:44:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 23 09:44:52 2015 +0000"
      },
      "message": "ART: Fix uninitialized variable\n\nChange-Id: I906de334b3c3cb1e36eff4944457f4598b7c174f\n"
    },
    {
      "commit": "3fc7f357170311689c4c31007a5e168ddea321d5",
      "tree": "c10753139e577cd0fecf9f600228730282bb201f",
      "parents": [
        "d83b9042d67f2a7d5ca5a1f63819c97940033336"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Nov 20 22:03:03 2015 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Nov 20 22:03:03 2015 -0800"
      },
      "message": "Accept synthetic phi nodes and general names for blocks.\n\nRationale: these changes were already approved as part of the dynamic\n           bce changes, but I am now sending them out separately.\n\nChange-Id: I3564bac9f6a0b6a89466457836ff54ad09164faf\n"
    },
    {
      "commit": "d59c70627cc42878cc30b46bd29ff497b4483b22",
      "tree": "b0b7013ea78b10f23fae75ef145e53a696ff797c",
      "parents": [
        "0b5849be045c5683d4a6b6b6c306abadba5f0fcc"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Sat Nov 21 05:21:52 2015 +0000"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Sat Nov 21 05:21:52 2015 +0000"
      },
      "message": "Revert \"Dynamic BCE (based on induction range analysis)\"\n\nThis reverts commit 0b5849be045c5683d4a6b6b6c306abadba5f0fcc.\n\n\nChange-Id: Id33f5da42bbdfb1aff7e2281417c8a7aa492df05\nRationale: so close :-( but bullhead-userdebug (linux) build in git_mnc-dr-dev-plus-aosp reported a breakage with a type inconsistency (long vs int in probably the codegen of dynamic bce); no time to investigate and fix this fully before my trip, so rolling back for now\n"
    },
    {
      "commit": "0b5849be045c5683d4a6b6b6c306abadba5f0fcc",
      "tree": "87245845c05ddef6fb53ac4c3774607a89fa5db4",
      "parents": [
        "3944f7175dcf60316ba58a42698ccf23c65ac57c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Oct 19 14:59:26 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Nov 20 17:00:04 2015 -0800"
      },
      "message": "Dynamic BCE (based on induction range analysis)\n\nRationale: A rewritten dynamic BCE that uses induction variable analysis\n           to generate the run-time tests before a loop in order to\n           eliminate bounds-checks from its body. This CL removes now\n           obsoleted induction related code inside the BCE module.\n           Also, the dynamic test generation is placed more strategically,\n           since we missed a few cases where static analysis does better.\n\nMost significant performance improvements (after filtering noise) is about:\n  Linpack +20%\n  LU    \u003e +10%\n\nChange-Id: I4e7b8bab0288beff6f98a14856e3536103d32742\n"
    },
    {
      "commit": "f652917de5634b30c974c81d35a72871915b352a",
      "tree": "c50bcaf37c246df633d42a166334c9b6332e5394",
      "parents": [
        "60c4c6ad2b892bb00a6016a147b1cc089ba6bcb5"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue Nov 17 11:16:56 2015 -0500"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 20 16:48:04 2015 +0000"
      },
      "message": "Simplify boolean condition compared to 0\n\nCaffeineMarkRR Logic has some boolean flipping which can be helped by\nsome simplification.\n\nSimplify non-FP (A COND_OP B) !\u003d 0 to A OPPOSITE_COND_OP B.\nThis is better than the original code, which would use a HBooleanNot\nafter the condition.\n\nAlso simplify non-FP (A COND_OP B) \u003d\u003d 1 to A OPPOSITE_COND_OP B.\n\nMove GetOppositeCondition to nodes.h/nodes.cc to share with Boolean\nSimplification, renaming it to InsertOppositeCondition, as it inserts\nthe new HInstruction (unless it is a constant).\n\nChange-Id: I34ded7758836e375de0d6fdba9239d2d451928d0\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "fbb184a1c6df22d9302b32b55206396c8278edcf",
      "tree": "c1a952cec4b5c15e30728f83da0cc5ac20c0bad9",
      "parents": [
        "2f49b0a90720fe9f4cab040c376aab5f387967e3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 13 14:47:00 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 19 11:58:41 2015 +0000"
      },
      "message": "Fix ClinitCheck pruning.\n\nMake sure we merge the ClinitCheck only with LoadClass and\nHInvokeStaticOrDirect that is a part of the very same dex\ninstruction. This fixes incorrect stack traces from class\ninitializers (wrong dex pcs).\n\nRewrite the pruning to do all the ClinitCheck merging when\nwe see the ClinitCheck, instead of merging ClinitCheck into\nLoadClass and then LoadClass into HInvokeStaticOrDirect.\nWhen we later see an HInvokeStaticOrDirect with an explicit\ncheck (i.e. not merged), we know that some other instruction\nis doing the check and the invoke doesn\u0027t need to, so we\nmark it as not requiring the check at all. (Previously it\nwould have been marked as having an implicit check.)\n\nRemove the restriction on merging with inlined invoke static\nas this is not necessary anymore. This was a workaround for\n    X.test():\n       invoke-static C.foo() [1]\n    C.foo():\n       invoke-static C.bar() [2]\nAfter inlining and GVN we have\n    X.test():\n       LoadClass C (from [1])\n       ClinitCheck C (from [1], to be merged to LoadClass)\n       InvokeStaticOrDirect C.bar() (from [2])\nand the LoadClass must not be merged into the invoke as this\nwould cause the resolution trampoline to see an inlined\nframe from the not-yet-loaded class C during the stack walk\nand try to load the class. However, we\u0027re not allowed to\nload new classes at that point, so an attempt to do so leads\nto an assertion failure. With this CL, LoadClass is not\nmerged when it comes from a different instruction, so we can\nguarantee that all inlined frames seen by the stack walk in\nthe resolution trampoline belong to already loaded classes.\n\nChange-Id: I2b8da8d4f295355dce17141f0fab2dace126684d\n"
    },
    {
      "commit": "cff81076cbb4bbe3841942f14326f4401fa3c8df",
      "tree": "f0a85a6059ff289ccb4b6e43b2b9b3924d481a31",
      "parents": [
        "fe0ec35c68d57205bd8fe13bd195ae0b5a3ed180",
        "0f7dca4ca0be8d2f8776794d35edf8b51b5bc997"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 12 15:20:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 12 15:20:08 2015 +0000"
      },
      "message": "Merge \"Optimizing/X86: PC-relative dex cache array addressing.\""
    },
    {
      "commit": "0f7dca4ca0be8d2f8776794d35edf8b51b5bc997",
      "tree": "cb2d99a0e9b7c50eb853a64b477268baaa77c11b",
      "parents": [
        "ce0f43b97ffb5e4d14c5df6607d8efb46a5dc9d2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 02 14:36:43 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 12 10:43:47 2015 +0000"
      },
      "message": "Optimizing/X86: PC-relative dex cache array addressing.\n\nAdd PC-relative dex cache array addressing for X86 and use\nit for better invoke-static/-direct dispatch. Also delay\nthe initialization to the PC-relative base until needed.\n\nChange-Id: Ib8634d5edce4920cd70172fd13211809cf6948d1\n"
    },
    {
      "commit": "feaf26db63a62bce5a80550f500efa67ff64424f",
      "tree": "4df965d3e647ae9a6d62b28e747e6da03c30c052",
      "parents": [
        "969670298516b9316b36270fcc4c21bfcd499595",
        "9e23df5c21bed53ead79e3131b67105abc8871e4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 10 18:31:55 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 10 18:31:55 2015 +0000"
      },
      "message": "Merge \"Optimizing: Improve constant folding + DCE for inlining.\""
    },
    {
      "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": "9e23df5c21bed53ead79e3131b67105abc8871e4",
      "tree": "b04e042b8de54e631f8f2452eb8ae4de9e23e39e",
      "parents": [
        "8a6463a7052ec69e7c0b94a65b26807f570e6359"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 10 17:14:35 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 10 18:19:47 2015 +0000"
      },
      "message": "Optimizing: Improve constant folding + DCE for inlining.\n\nRun constant folding before DCE in inliner to eliminate more\ncode that can prevent inlining. Improve the constant folding\nto evaluate Equals and NotEquals for null inputs.\n\nChange-Id: I876ffb903ef39484370b6c8793f0f8467a977362\n"
    },
    {
      "commit": "8a6463a7052ec69e7c0b94a65b26807f570e6359",
      "tree": "5da26d13991fe0c7d930bd6f87537d014569b227",
      "parents": [
        "ee57104951acf3dc5f6343f1d3022e3cd73016f5",
        "59a850ee63a637660599f215901058b059f3a4b4"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 13:10:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 10 13:10:08 2015 +0000"
      },
      "message": "Merge \"ART: Improve comment about inlining into try/catch\""
    },
    {
      "commit": "59a850ee63a637660599f215901058b059f3a4b4",
      "tree": "ba9998821cbacced17a01b9a367c9e7f399ad22e",
      "parents": [
        "1963759e84664b51b617b00e15728f439895033b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 13:04:30 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 13:06:29 2015 +0000"
      },
      "message": "ART: Improve comment about inlining into try/catch\n\nChange-Id: I66a4fd3206847c8d5bb57b1678d9d3dc94331294\n"
    },
    {
      "commit": "83dcccb96ff8424fb4ab46bcda7c422d59a8c135",
      "tree": "8951c2aeef6489bdd53b26f78d3ff2400154b81a",
      "parents": [
        "1963759e84664b51b617b00e15728f439895033b",
        "8a7c0fe837bb00b02dfcfc678910d81d07fb2136"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 13:01:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 10 13:01:28 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"ART: Update DCE to work with try/catch\"\"\""
    },
    {
      "commit": "dc0d1eb8a4b033db4acf136cd563de865542098a",
      "tree": "fc40b96ed4d0f88eb7a278fdeb2564a43ad39ff3",
      "parents": [
        "1b87033ed83ba03983b49237da89ce36d319b68e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 09:43:28 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 09:43:28 2015 +0000"
      },
      "message": "ART: Add clarifying comment\n\nChange-Id: I189ec4cae0aa1a5245a79e86d1ec0592e38eac4a\n"
    },
    {
      "commit": "8a7c0fe837bb00b02dfcfc678910d81d07fb2136",
      "tree": "9d1a44fa3dd16ed93efb84f5c4e4e5bf1231f5c3",
      "parents": [
        "44612873bb02be8a59e16aa50f61cce9e9cc9547"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 02 20:24:55 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 09:38:37 2015 +0000"
      },
      "message": "Revert \"Revert \"ART: Update DCE to work with try/catch\"\"\n\nThe previous CL failed because it did not update inputs of catch phis.\nSince phi input indices cannot be easily mapped back to throwing\ninstructions, this new implementation at least removes catch phi uses\nof values defined in the removed blocks to preserve graph consistency.\n\nThis reverts commit fb552d7061746f7a90fdd5002696e255e2e15c35.\n\nChange-Id: I63d95915d1ef50e71d3bcf0cd10aaded554035b4\n"
    },
    {
      "commit": "31f1584b6bc3fc39dfb396edb24ec42f193f587c",
      "tree": "2ca4b4d5dac80f08b51ecdff1b04949a176429d4",
      "parents": [
        "934ea11065c0806d3f57a632fac9032707afbfc6",
        "391d01f3e8dedf3af3727bdf5d5b76ab35d52795"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 09 13:53:13 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 09 13:53:13 2015 +0000"
      },
      "message": "Merge \"Optimizing: Rewrite search for common dominators.\""
    },
    {
      "commit": "391d01f3e8dedf3af3727bdf5d5b76ab35d52795",
      "tree": "dcc38980d5a16551f7056894be9c5fb083f146ae",
      "parents": [
        "2fa684206b0a8bd203d07e1edf74a839b498f74f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 06 11:02:08 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 09 13:47:03 2015 +0000"
      },
      "message": "Optimizing: Rewrite search for common dominators.\n\nProvide a utility class that can be used to quickly search\nfor common dominators of two or more blocks. Change the\nalgorithm to avoid memory allocations.\n\nChange-Id: Id72c975fc42377cb7622902f87c4262ea7b3cc38\n"
    },
    {
      "commit": "f11f5ebe321fde9f6efb49d75b861606391b6502",
      "tree": "c2cfc64f7cafa0d9a570d99f2c0c03adb92c6dc9",
      "parents": [
        "df7029f2254f67230362c4bdfaddac00c342e660",
        "db51efb3617d15f1cd9e5ff0cc2d934777014e9a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 09 12:47:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 09 12:47:19 2015 +0000"
      },
      "message": "Merge \"ART: Fix critical edge splitting under try/catch\""
    },
    {
      "commit": "db51efb3617d15f1cd9e5ff0cc2d934777014e9a",
      "tree": "fa70acb9f8d090def2cae550db8c2e1f630f31c4",
      "parents": [
        "2649cba0fb7cdbd8fa60cb4f2fb320fb2b18ee37"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 06 01:36:20 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 09 10:27:08 2015 +0000"
      },
      "message": "ART: Fix critical edge splitting under try/catch\n\nA critical edge would not be split if the predecessor ends with\nTryBoundary. This would eventually trip liveness analysis because\na back edge block would have smaller liveness position than a nested\nloop.\n\nAnother implication of this change is that an edge between a loop\u0027s\npre-header ending with TryBoundary and the header will be split,\nguaranteeing that a pre-header always has just one successor.\n\nBug: 25493695\nBug: 25454012\nChange-Id: I5a13b8bb74509b48f5d628906f7158af007f99ae\n"
    },
    {
      "commit": "3e5b3c982a5837384829ffd6726c5a30714cbfcb",
      "tree": "0ad109f906aaf8d427bd6ed6ba2e9f50a348016b",
      "parents": [
        "2649cba0fb7cdbd8fa60cb4f2fb320fb2b18ee37",
        "b554b5a5ae3cdc66969d61be20783a8af816206e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 09 10:14:35 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 09 10:14:35 2015 +0000"
      },
      "message": "Merge \"Optimizing: Remove unused ArtMethod* input from HInvokeStaticOrDirect.\""
    },
    {
      "commit": "b554b5a5ae3cdc66969d61be20783a8af816206e",
      "tree": "c52c69c7e4a3950e4c24065c70b19eebdfc10f29",
      "parents": [
        "2fa684206b0a8bd203d07e1edf74a839b498f74f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 06 12:57:55 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 06 19:54:53 2015 +0000"
      },
      "message": "Optimizing: Remove unused ArtMethod* input from HInvokeStaticOrDirect.\n\nChange-Id: Iea99fa683440673ff517e246f35fade96600f229\n"
    },
    {
      "commit": "9bc436160b4af99067973affb0b1008de9a2b04c",
      "tree": "160fba56aa8ba53a5db624c42c1936dd15a3cdf7",
      "parents": [
        "ef7ef4ce04a46405e15cd91115c6e657235adf83"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Nov 05 21:25:24 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 06 19:20:46 2015 +0000"
      },
      "message": "ART: Fix simplification of catch blocks in the presence of dead code\n\nSimplification of catch blocks transforms the code so that catch\nblocks have only exceptional predecessors. However, it is invoked\nbefore trivially dead code is eliminated which breaks simple\nassumptions such as the fact that a catch block cannot start with\nmove-exception if it has non-exceptional predecessors. This patch\nfixes the algorithm to work under these relaxed conditions.\n\nBug: 25494450\nBug: 25492628\nChange-Id: Idc8d010102a4b8b9a6cd918b98d6e11d1838db0c\n"
    },
    {
      "commit": "fb552d7061746f7a90fdd5002696e255e2e15c35",
      "tree": "6ac0a1698ef53c7bb7258d471816b4edf6fb9212",
      "parents": [
        "ce52901e2c8377fc1c331ae0faf7fbcb46b9da97"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 02 20:24:24 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 02 20:24:24 2015 +0000"
      },
      "message": "Revert \"ART: Update DCE to work with try/catch\"\n\nThis reverts commit ce52901e2c8377fc1c331ae0faf7fbcb46b9da97.\n\nChange-Id: I6b3a1f2a3dc036030b089b0df2005ecefa66b949\n"
    },
    {
      "commit": "ce52901e2c8377fc1c331ae0faf7fbcb46b9da97",
      "tree": "19dca428a4e5e30d70c9e96d85acc99ae01ba8e4",
      "parents": [
        "49560fcce5b9a07108f7cc75a3fb0fa265e5fa0e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Oct 28 19:25:55 2015 -0500"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 02 13:22:19 2015 -0600"
      },
      "message": "ART: Update DCE to work with try/catch\n\nDead block elimination was previously disabled because it needed\nto be updated. With this patch, try/catch blocks can be removed\nas a result of a dead if/switch branch.\n\nChange-Id: I3261060bf24fd5fe7bb0f989247f0ef62ec5fd7b\n"
    },
    {
      "commit": "951779839f0d35ed5336f399c8f521fd9a6b7c27",
      "tree": "eb678f58590287e04585bc92202c45b4120c9a0e",
      "parents": [
        "34e38c43d4728fb1d3a011f8c142bff94927f6fb"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Oct 30 12:56:58 2015 -0500"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Oct 30 15:02:37 2015 -0500"
      },
      "message": "ART: Enable inlining under try/catch\n\nThis patch updates the inliner to set try/catch information\nwhen inlining into a method with try/catch. It does not yet\nallow inlining of methods with try/catch because that will\nrequire generating catch stack maps with inline info.\n\nChange-Id: I7d57e1454e7da537d75c5c7eda60b22f3a30fa60\n"
    },
    {
      "commit": "d13f2b35546d421f570c64654ad8479caf1165d6",
      "tree": "535c21c9a181b87d15839151b26f65266c418a9f",
      "parents": [
        "8cb0bc28b1161dad0d2c2c1e75318b7e504faa46",
        "771e5cc519665ce0cc76985bb4803f0dd50c3b40"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Oct 29 22:47:59 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 29 22:47:59 2015 +0000"
      },
      "message": "Merge \"Revert \"ART: Enable more passes under try/catch\"\""
    },
    {
      "commit": "771e5cc519665ce0cc76985bb4803f0dd50c3b40",
      "tree": "2f6934bc6cb0286d327b7a653be410cf8df43c00",
      "parents": [
        "39fabd6bb6fcf7a712b370d3b6fd0ada83e2e5d8"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Oct 29 22:47:39 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Oct 29 22:47:39 2015 +0000"
      },
      "message": "Revert \"ART: Enable more passes under try/catch\"\n\nBCE does not set TryCatchInformation when creating new blocks.\nWill be fixed with DynamicBCE CL.\n\nThis reverts commit 39fabd6bb6fcf7a712b370d3b6fd0ada83e2e5d8.\n\nChange-Id: I76ae707ac132bb1a4a9f64f4916ffcd786ef730c\n"
    },
    {
      "commit": "c65d1f3d26a47e2fce3c3f8872e7942fec23f9b9",
      "tree": "1b81ca0d711ca0561e933563aee255b516a4191f",
      "parents": [
        "5ad27592e2317b4c7932885eff702099f7cbe0f1",
        "73f1f3be46652d3f6df61b4234c366ebbf81274a"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 29 21:00:17 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 29 21:00:17 2015 +0000"
      },
      "message": "Merge \"Move loop invariant utility to more general place.\""
    },
    {
      "commit": "73f1f3be46652d3f6df61b4234c366ebbf81274a",
      "tree": "0d6c2f9eb2331fd5de5aa4c43ebcb45e857a4682",
      "parents": [
        "f7b7f9984da66149e5fe05713845961d7b069a23"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Oct 28 15:28:08 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 29 13:29:50 2015 -0700"
      },
      "message": "Move loop invariant utility to more general place.\n\nChange-Id: I15ebfbf9684f0fcce9e63d078ff8dc1381fd1ca3\n"
    },
    {
      "commit": "39fabd6bb6fcf7a712b370d3b6fd0ada83e2e5d8",
      "tree": "09d20062204dedd87c7a7a1163bcdf6d549b39a7",
      "parents": [
        "59cc4e8306879ee7066d51dad4cba140e58c7292"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Oct 26 14:34:30 2015 -0500"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Oct 29 12:07:27 2015 -0500"
      },
      "message": "ART: Enable more passes under try/catch\n\nLICM, BCE, LSE are all safe under try/catch. Inliner and DCE\nneed updating and will be enabled in follow-up CLs.\n\nChange-Id: I86db5f811257d5e765fea91666a2a2af0fb24ec3\n"
    },
    {
      "commit": "dc151b2346bb8a4fdeed0c06e54c2fca21d59b5d",
      "tree": "391d8ccb44ff9e6fc1c8fa8975e534e20cc002ff",
      "parents": [
        "823e693aa946ba75cd047429e1290011a2ed8729"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 15 18:02:30 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 23 14:45:32 2015 +0100"
      },
      "message": "Optimizing: Determine invoke-static/-direct dispatch early.\n\nDetermine the dispatch type of invoke-static/-direct in a\nspecial pass right after the type inference. This allows the\ninliner to pass the \"needs dex cache\" check and inline more.\nIt also allows the code generator to avoid requesting a\nregister location for the ArtMethod* for kDexCachePcRelative\nand direct methods.\n\nThe supported dispatch check handles also situations that\nthe CompilerDriver currently doesn\u0027t allow. The cleanup of\nthe CompilerDriver and required changes to Quick will come\nin a separate change.\n\nChange-Id: I3f8e903a119949e95871d8ab0a995f4731a13a07\n"
    },
    {
      "commit": "214bbcd1d7454197427c13cc082860619357d847",
      "tree": "ec08d244ae002d85b7537ca9921618be1b4a387d",
      "parents": [
        "a5903e622c0c11c1513a62e128a26d3cefd16c6f"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Oct 20 14:54:07 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Oct 20 20:06:44 2015 +0100"
      },
      "message": "Inliner: make sure the returned value is in the outer graph.\n\nThe returned value may be a constant or a parameter value. If so, it\nwill be in the inlined entry_block and (before this CL) we would not\nupdate its block or graph. This CL fixes this and makes sure that the\nreturned value belongs to the outer graph.\n\nChange-Id: Ie296f0d5a320c33f39eb187df6d328371ccf6500\n"
    },
    {
      "commit": "805b3b56c6eb542298db33e0181f135dc9fed3d9",
      "tree": "664d3ca2039805aa326c9e5e02dfae703ba7e634",
      "parents": [
        "df3456007702b0dea01ffd1adfa74244857712af"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Sep 18 14:10:29 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Oct 14 09:54:31 2015 -0400"
      },
      "message": "X86 jump tables for PackedSwitch\n\nImplement X86PackedSwitch using a jump table of offsets to blocks. The\nX86PackedSwitch version just adds an input to address the constant area.\n\nChange-Id: Id2752a1ee79222493040c6fd0e59aee9a544b76a\nBug: 21119474\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\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": "a83a54d7f2322060f08480f8aabac5eb07268912",
      "tree": "67b7ecc4d35e7f5cb59f81c3d021fd6e1c10545f",
      "parents": [
        "cc245eab2148547f9df37ddc5f767656dc033b81"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 02 17:30:26 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 07 10:50:24 2015 +0100"
      },
      "message": "Add support for intrinsic optimizations.\n\nChange-Id: Ib5a4224022f9360e60c09a19ac8642270a7f3b64\n"
    },
    {
      "commit": "225b6464a58ebe11c156144653f11a1c6607f4eb",
      "tree": "3f1c6067c3841c892edaa1a60a61af9c559cb4e4",
      "parents": [
        "6a9984e62c08bcd78c8e49dd40b1f0f9d53513b7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 28 12:17:40 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 29 10:49:35 2015 +0100"
      },
      "message": "Optimizing: Tag arena allocations in code generators.\n\nAnd completely remove the deprecated GrowableArray.\n\nReplace GrowableArray with ArenaVector in code generators\nand related classes and tag arena allocations.\n\nLabel arrays use direct allocations from ArenaAllocator\nbecause Label is non-copyable and non-movable and as such\ncannot be really held in a container. The GrowableArray\nnever actually constructed them, instead relying on the\nzero-initialized storage from the arena allocator to be\ncorrect. We now actually construct the labels.\n\nAlso avoid StackMapStream::ComputeDexRegisterMapSize() being\npassed null references, even though unused.\n\nChange-Id: I26a46fdd406b23a3969300a67739d55528df8bf4\n"
    },
    {
      "commit": "d7558daaa86decf5a38f4f9bcd82267ab6e3e17f",
      "tree": "abfbc97a44e301f850b775eaa1d63aaa5efd1a0e",
      "parents": [
        "c7e0da5292e841f6a864dd010bd6e0b06e0ece73"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Sep 22 13:04:14 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 25 10:40:08 2015 +0100"
      },
      "message": "ART: Preserve loop headers with try/catch\n\nAlgorithm for inserting HTryBoundary instructions would generate a\nnon-natural loop when a loop header block was covered by a TryItem.\nThis patch changes the approach to fix the issue.\n\nBug: 23895756\nChange-Id: I0e1ee6cf135cea326a96c97954907d202c9793cc\n"
    },
    {
      "commit": "1f8695ca0c0d443a3d2754637ea5c9459147af55",
      "tree": "7a16895e4618be3889bff3945e07b1bfb406249c",
      "parents": [
        "d76d1390b04a4db9ca1f74eb4873d926643d979b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 24 13:11:31 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 24 18:02:04 2015 +0100"
      },
      "message": "Optimizing: Rewrite HGraph::FindBackEdges().\n\nReplace a recursive implementation with a loop using a work\nlist to avoid stack overflow for 702-LargeBranchOffset in\nhost debug build with -O0, 512KiB thread pool worker stack.\n\nChange-Id: Iaa91f006fa1099913aeffc9c764879bd004d56de\n"
    }
  ],
  "next": "d76d1390b04a4db9ca1f74eb4873d926643d979b"
}
