)]}'
{
  "log": [
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\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": "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": "c9ef168bfabd118d112a054dffe2c27d4d4db4fc",
      "tree": "ed200763fc41291a9898f00e9bbe38cedb1f0d34",
      "parents": [
        "d8cd1c83f9fe7637494f7a65807289041d2fb7d3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 10 13:31:23 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 10 14:00:42 2016 +0100"
      },
      "message": "Reduce memory usage of SSA Phi elimination and make it faster.\n\nUse an ArenaBitVector instead of an ArenaSet\u003c\u003e that leaks\nits allocated memory on clear(). We were also erroneously\nusing the O(n) helper ContainsElement() for the ArenaSet\u003c\u003e\ninstead of the O(log n) ArenaSet\u003c\u003e::find() which made the\nmethods with large number of processed Phis also very slow\nto compile in addition to the enormous memory usage.\n\nBug: 28684584\nChange-Id: Idc7604e51cfae643debd0378baf828a1430ec14c\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": "05b3fa02ed8ef62841a92cd96526ba3a06bf1f63",
      "tree": "0107006b45bdf69894a053507d600d826881fb9a",
      "parents": [
        "a6513729ae2ad0d2f9dd21d77ea6cf9ed9fa6eef"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 04 12:05:56 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 04 12:47:41 2016 +0100"
      },
      "message": "Do not look at dead phis during SsaRedundantPhiElimination.\n\nOtherwise, we may replace a dead loop phi with its incoming input.\nThis broke an assumption during liveness analysis in the presence\nof irreducible loops.\n\nbug:28256552\nChange-Id: Ia9e82026555e6b7f6a2cd37df4b765cd3684079d\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": "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": "f5f64efda943000168d34bfe44ccbbadd284e55f",
      "tree": "7364ec231d39291af44245dc16b0ca48919862d0",
      "parents": [
        "74768fb83073a2ae84c9173d4fc53654e3092b24"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 15 14:11:59 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 16 12:22:20 2015 +0000"
      },
      "message": "Detect phi cycles.\n\nHaving reference and non-reference phi equivalent, only happened\nfor the 0/null constant. To avoid such occurences, we must\ndetect phi cycles.\n\nbug:25493693\n\nChange-Id: Ie1a8460c3abacca96c299da107fa4407e17dd792\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": "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": "2aaa4b5532d30c4e65d8892b556400bb61f9dc8c",
      "tree": "f4259c33171ec8efd945aeedab1e57feb7970f42",
      "parents": [
        "3f4b39dec9ec6b8948ed18b9d65ba49db2465004"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 17 17:03:26 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 25 12:18:02 2015 +0100"
      },
      "message": "Optimizing: Tag more arena allocations.\n\nReplace GrowableArray with ArenaVector and tag arena\nallocations with new allocation types.\n\nAs part of this, make the register allocator a bit more\nefficient, doing bulk insert/erase. Some loops are now\nO(n) instead of O(n^2).\n\nChange-Id: Ifac0871ffb34b121cc0447801a2d07eefd308c14\n"
    },
    {
      "commit": "77b022dfb8e73564b00c4724f7078cb1d5a57a65",
      "tree": "b62a68acdee9661364a6cb5e3621f27115140fbe",
      "parents": [
        "3bf1027cd09397f1c076f523de7b4553227d36d3"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 14:17:31 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 14:36:17 2015 +0100"
      },
      "message": "ART: Revisit users in phi elimination\n\nSSA phi elimination visits phis in post order so that loop phis are\nvisited after their inputs. This prevents elimination of phis with\nother phi inputs, exacerbated by the fact that the SSA builder does\ncreate catch phis even if all inputs are the same (unlike with normal\nphis). This patch revisits phi users of eliminated phis until no more\nphis can be removed.\n\nChange-Id: I403614dd46a8e6f0a5b9dd9e8ddc8832617521eb\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": "1abb4191a2e56d8dbf518efcaeefb266c1acdf2b",
      "tree": "e9cd0006df96b167c5da9f8f872713ff05b72803",
      "parents": [
        "735969139b162f9d45a3c0e47dc24a8aec63c736"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 17 18:33:36 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 23 15:12:24 2015 +0000"
      },
      "message": "Optimizing: Speed up HInstruction use removal\n\nSimilarly to a previous commit on HEnvironment use removal, this patch\nadds links from instructions to their respective inputs\u0027 use lists for\ncontant-time removal at the cost of doubling the size of input lists\n(from one pointer per entry to two). Manual testing shows that this\nsignificantly reduces the time required to transform HGraph to SSA\nform for some huge methods.\n\nChange-Id: I8dc3e4b0c48a50ac1481eb55c31093b99f4dc29f\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": "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": "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": "6b879ddc0959df1cec871f0d41f11cce35a11716",
      "tree": "7ca75abcea8c26601efe3d41d9e55bc24a835bad",
      "parents": [
        "ef3e89b9281525d6c084136c379346608b44d933"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Sep 22 17:13:44 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Sep 22 17:13:44 2014 +0100"
      },
      "message": "Add loop- and phi-related checks in the optimizing compiler.\n\n- Ensure the pre-header block is first in the list of\n  predecessors of a loop header.\n- Ensure the loop header has only two predecessors and that\n  only the second one is the back edge.\n- Ensure there is only one back edge per loop.\n- Ensure the first input of a phi is not itself.\n- Ensure the number of phi inputs is the same as the number\n  of its predecessors.\n- Ensure phi input at index I either comes from the Ith\n  predecessor or from a block that dominates this\n  predecessor.\n\nChange-Id: I4db5c68cfbc9b74d2d03125753d0143ece625378\n"
    },
    {
      "commit": "604c6e4764edb2fd244e9f47626868cda5644a7a",
      "tree": "20ce0beae7663fe8ca0a07132ecd55c7c2626d41",
      "parents": [
        "7d029af44c45c56b3b7a271c54434c2dcec1e219"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 17 12:08:44 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 17 12:08:44 2014 +0100"
      },
      "message": "Ensure the first predecessor of a loop is the pre header.\n\nNote that the check in ssa_phi_elimination.cc was very defensive:\nit does not affect the outcome of the algorithm whether the\nloop phi takes itself as the first input.\n\nIt makes things consistent to always have the pre header as first\ninput.\n\nChange-Id: Ic86248c1f38af67f7432782f6deefae1f4bf1ab6\n"
    },
    {
      "commit": "3946844c34ad965515f677084b07d663d70ad1b8",
      "tree": "0d85bfba2ff69c34a2897351d1e50a1464509305",
      "parents": [
        "e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 02 15:17:15 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 08 12:15:07 2014 +0100"
      },
      "message": "Runtime support for the new stack maps for the opt compiler.\n\nNow most of the methods supported by the compiler can be optimized,\ninstead of using the baseline.\n\nChange-Id: I80ab36a34913fa4e7dd576c7bf55af63594dc1fa\n"
    },
    {
      "commit": "3ac17fcce8773388512ce72cb491b202872ca1c1",
      "tree": "475c779c2ee973cf51a0a63c9d010c59c4b2d022",
      "parents": [
        "269c3360f8e69e9faf8bc8a51fd87ae7adadfb59"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 06 23:02:54 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 07 00:02:31 2014 +0100"
      },
      "message": "Fix SsaDeadPhiElimination in the presence of dependent phis.\n\nThis fixes the problem of having a dead loop phi taking as back-edge\ninput a phi that also has this loop phi as input. Walking backwards\ndoes not solve the problem because the loop phi will be visited last.\n\nMost of the time, dex removes dead locals like this.\n\nChange-Id: I797198cf9c15f8faa6585cca157810e23aaa4940\n"
    },
    {
      "commit": "7dc206a53a42a658f52d5cb0b7e79b47da370c9b",
      "tree": "f9940f60c132795d2f5865ba84b942916f076313",
      "parents": [
        "1cad41d900201422cedcbe7837935d17bbf28ed8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 11 09:49:49 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 14 12:35:21 2014 +0100"
      },
      "message": "Add two phi pruning phases.\n\nChange-Id: Ic4f05e3df96970d78a6938b27cdf9b58ef3849b9\n"
    }
  ]
}
