)]}'
{
  "log": [
    {
      "commit": "d5d2f2ce627aa0f6920d7ae05197abd1a396e035",
      "tree": "e8e780780c832e3614a22438a23fb60ee4960ca3",
      "parents": [
        "efac0df8c738764823c637deeca1f3be33912064"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 26 12:37:26 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 10:40:51 2017 +0100"
      },
      "message": "ART: Introduce Uint8 compiler data type.\n\nThis CL adds all the necessary codegen for the Uint8 type\nbut does not add code transformations that use that code.\nVectorization codegens are modified to use Uint8 as the\npacked type when appropriate. The side effects are now\ndisconnected from the instruction\u0027s type after the graph has\nbeen built to allow changing HArrayGet/H*FieldGet/HVecLoad\nto use a type different from the underlying field or array.\n\nNote: HArrayGet for String.charAt() is modified to have\nno side effects whatsoever; Strings are immutable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --target --optimizing on Nexus 6P\nTest: Nexus 6P boots.\nBug: 23964345\nChange-Id: If2dfffedcfb1f50db24570a1e9bd517b3f17bfd0\n"
    },
    {
      "commit": "0ebe0d83138bba1996e9c8007969b5381d972b32",
      "tree": "a5ee66ebc5b587ade97e56ac8fc7d832fbbed4af",
      "parents": [
        "e1e347dace0ded83774999bb26c37527dcdb1d5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 21 22:50:39 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 25 15:45:01 2017 +0100"
      },
      "message": "ART: Introduce compiler data type.\n\nReplace most uses of the runtime\u0027s Primitive in compiler\nwith a new class DataType. This prepares for introducing\nnew types, such as Uint8, that the runtime does not need\nto know about.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 23964345\nChange-Id: Iec2ad82454eec678fffcd8279a9746b90feb9b0c\n"
    },
    {
      "commit": "f45d61c0866461c9476f17644b27dc0664d507c5",
      "tree": "95d2837a03d451cccd82cad61924980beb5fd0d4",
      "parents": [
        "83b140474aa1759739c8ee4464bf226c4fa0f6d7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 07 10:29:33 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 08 17:19:51 2017 -0700"
      },
      "message": "ART: Fix or disable some tidy warnings.\n\nAdd a strlcpy shim for the host, so we can use strlcpy instead of\nstrcpy everywhere.\n\nFixed warnings include unused-decls, (some) unreachable code, use\nafter std::move, string char append, leaks, (some) excessive padding.\n\nDisable some warnings we cannot or do not want to avoid.\n\nBug: 32619234\nTest: m\nTest: m test-art-host\nChange-Id: Ie191985eebb160d94b988b41735d4f0a1fa1b54e\n"
    },
    {
      "commit": "74da5290dd5cc040bee5430796715bd9302036c2",
      "tree": "b1dd4932ab1aa610509465e52dac09b06850650f",
      "parents": [
        "d54f43ca39dfa92f08c2d760123f185f0f65fb86"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Dec 20 11:13:03 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Dec 20 11:13:03 2016 -0800"
      },
      "message": "Fix transfer over rejected induction.\n\nRationale:\nWith the more precise rejection of narrowing\nlinear induction, parent rules should be\nprepared to reject failed transfers. Also\nadded a bit more comments to clarify rules.\nWith regression tests.\n\nBug: 33774618\nTest: test-art-host\nChange-Id: I4a206e51d4359ab383379914dd4697fc81903547\n"
    },
    {
      "commit": "e6bd0272b43bf73faabc64abc9c51ab8ed128308",
      "tree": "d75a15baadf77a859cec6540d7cd10ce998e955a",
      "parents": [
        "2c43590dc2bb7fb4a3a015b1b65543bb8705ffe8"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Dec 16 13:57:52 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Dec 19 10:57:37 2016 -0800"
      },
      "message": "Improved induction var and range analysis around types.\n\nRationale:\nLots of code should not depend on int only. This CL generalizes\nthe kinds of types that can be optimized after analysis. As part\nof the CL, however, a minor cleanup regarding type safety of the\nstored induction var analysis results is required. This further\nimproved our int benchmark, and brings the long benchmark up-to-par.\n\nTest: m test-art-host-run-test\nChange-Id: I5dfb623dabf9113de90c2f6da99328dda8f8b60b\n"
    },
    {
      "commit": "d0a022d76db4b79d105608e7bafab4c17e8ba510",
      "tree": "28fe73f251041ea8dd2ddfbb801d780fbce6968c",
      "parents": [
        "ea63e4d1c3473d1115c1aef674056d035cf67472"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Dec 13 11:22:31 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Dec 15 11:31:12 2016 -0800"
      },
      "message": "Fine tuning the induction analysis.\n\nRationale:\nBased on some self-imposed \"blind\" testing, improved\nthe induction variable analysis for typical cases\nthat provide a bit more elaborate HIR.\n\nTest: test-art-host\nChange-Id: I6e6bbf99928c29973178fa48f3942b14bf069944\n"
    },
    {
      "commit": "df7822ecf033cecf48d950f3ae34f7043c8df738",
      "tree": "f392a69377e1e281bcd85d811b656c6d14280ab4",
      "parents": [
        "6746874b84a44ab8dff18457eec546a1ebb22e93"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Dec 06 10:05:30 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Dec 09 08:42:18 2016 -0800"
      },
      "message": "Added polynomial induction variables analysis. With tests.\n\nRationale:\nInformation on polynomial sequences is nice to further enhance\nBCE and last-value assignment. In this case, this CL enables more\nloop optimizations for benchpress\u0027 Sum (80 x speedup). Also\nchanged rem-based geometric induction to wrap-around induction.\n\nTest: test-art-host\n\nChange-Id: Ie4d2659edefb814edda2c971c1f70ba400c31111\n"
    },
    {
      "commit": "c071a01a26013ab6e3dbfc4131efa95a65aeb4ed",
      "tree": "bbe75527b8ee94483e4d797c6b2372adaabd81cf",
      "parents": [
        "5eb1e1e7341f4e7febf77c04f8649a9566b31c03"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Dec 01 10:22:31 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Dec 05 16:16:42 2016 -0800"
      },
      "message": "Added geometric induction variables analysis.\n\nRationale:\nInformation on geometric and polynomial (coming soon) sequences\nare nice to have to further enhance BCE and last-value assignment.\n\nTest: test-art-host\nChange-Id: Ib5e2998c3eb1009def6fd00b82935da7c3ba7c6e\n"
    },
    {
      "commit": "384cb6674b967a9c58da9ad70fd6f98caa1d8691",
      "tree": "b75a3309609ebbcd0d9d8d8b4297db82e80e988a",
      "parents": [
        "a908348b4388854dab0b655b55dbeac1ecec2949",
        "2c45bc9137c29f886e69923535aff31a74d90829"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 27 15:44:54 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 27 15:44:55 2016 +0000"
      },
      "message": "Merge \"Remove H[Reverse]PostOrderIterator and HInsertionOrderIterator.\""
    },
    {
      "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": "cc42be074ed15235426cdbcb34f357ead2be2caf",
      "tree": "d0ac4dca432e1bb26e21634f21ffc3e05db5020e",
      "parents": [
        "a8188191477b7b5b01a3c4426c51c48cd55f6678"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 20 16:14:16 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Oct 24 12:55:48 2016 -0700"
      },
      "message": "Improved induction variable analysis and loop optimizations.\n\nRationale:\nRather than half-baked reconstructing cycles during loop optimizations,\nthis CL passes the SCC computed during induction variable analysis\nto the loop optimizer (trading some memory for more optimizations).\nThis further improves CaffeineLogic from 6000us down to 4200us (dx)\nand 2200us to 1690us (jack). Note that this is on top of prior\nimprovements in previous CLs. Also, some narrowing type concerns\nare taken care of during transfer operations.\n\nTest: test-art-host\nChange-Id: Ice2764811a70073c5014b3a05fb51f39fd2f4c3c\n"
    },
    {
      "commit": "639cc8c7bbb7d8c341173bcf24604ccb4328acb8",
      "tree": "ae8181b94ddd145edaff141a2b351478161f1559",
      "parents": [
        "3941c882ea7b54772dec36a9a1b33e0b8a7474f7"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Oct 18 13:03:31 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 20 14:14:17 2016 -0700"
      },
      "message": "Improve recognition of select-based period induction.\n\nRationale:\nSimilar to the previous CL, this helps to eliminate more dead induction.\nNow, CaffeineLogic, when compiled with dx (rather than jack) improves\nby a 1.5 speedup (9000us -\u003e 6000us).\n\nNote:\nWe need to run the simplifier before induction analysis to trigger\nthe select simplification first. Although a bit of a compile-time hit,\nit seems a good idea to run a simplifier here again anyway.\n\nTest: test-art-host\nChange-Id: I93b91ca40a4d64385c64393028e8d213f0c904a8\n"
    },
    {
      "commit": "7dc96932491dde6b5b58998254d5837dbcbbde03",
      "tree": "b2b0c7a133738823eb61871e5482aa657f2f8a2a",
      "parents": [
        "f0ab2ec6008bbd495e59bb9bf81ac399d864f38b"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Oct 12 10:01:05 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Oct 12 14:10:11 2016 -0700"
      },
      "message": "Recognize XOR-based periodic induction.\n\nRationale:\nThis is a commonly used construct (e.g. x \u003d !x for booleans\nand x ^\u003d 1 for integers). This CL prepares some upcoming\noptimizations that exploit such inductions.\n\nChange-Id: I46edffb9de1075a836995daf5c2dfff7891f3034\nTest: 530-checker-loops2 and induction_var_analysis_test\n"
    },
    {
      "commit": "009cace65f649000e46a33db26d14b2af8b5aee4",
      "tree": "47d32693b615e35b3cb60ddd54a47e18cccf8200",
      "parents": [
        "be3a3ee02f148345ba6e1a0361532a3f7e8c0002"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Sep 16 10:15:19 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Sep 16 14:33:00 2016 -0700"
      },
      "message": "Minor induction variable analysis changes.\n\nRationale:\nFew extra comments, added replacement of loop control functionality.\nAll in preparation of bigger loop optimizations CL.\n\nChange-Id: Ie2243c3c8b57b2901654b05fb200e9d80a0cb641\nTest: test-art\n"
    },
    {
      "commit": "e90049140fdfb89080e5cc9b000b0c9be8c18bcd",
      "tree": "66b45c052b6778fabd7847a44af5e610808fa867",
      "parents": [
        "a77ceae14a7be2494874d9256327efa8c522e234"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 16 16:50:52 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 01 13:26:24 2016 +0100"
      },
      "message": "Create a typedef for HInstruction::GetInputs() return type.\n\nAnd some other cleanup after\n    https://android-review.googlesource.com/230742\n\nTest: No new tests. ART test suite passed (tested on host).\nChange-Id: I4743bf17544d0234c6ccb46dd0c1b9aae5c93e17\n"
    },
    {
      "commit": "d5cc68352e84f33e90a7f8007cd0859c3c1f949d",
      "tree": "4a1bcb6164bf2179cfd7dc1884d4d8de404e1f97",
      "parents": [
        "5f5560dbce6cd81e885c0d9351c1e6d732c2e0ca"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Jun 22 16:34:46 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Jun 22 16:34:46 2016 -0700"
      },
      "message": "Fixed typo in comment.\n\nChange-Id: I818e5e67d664dfd2bddd464ed8e4f5efceb1fb22\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": "7829691e27c528ca52753dd98bcb4785e328388a",
      "tree": "5bbb034b0795a0533ce6da6cd83f44c66f36caac",
      "parents": [
        "b0b38596a4f28725b71f17e13c7b544d926f0d3e"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Mar 25 13:14:53 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Mar 25 15:35:21 2016 -0700"
      },
      "message": "Fix bug not accounting for type in induction comparison.\nExtended unit tests.\n\nRationale:\nNow that inductions are typed, comparisons should take\nthe type into account as well.\n\nChange-Id: Ie533bb728d2006390646657573fa743e6fc37ff2\n"
    },
    {
      "commit": "0e2f2ff383ecc08aabb83c62670324ee2ca28bc1",
      "tree": "144235012371f13abd5c19029bc53a1be171f12d",
      "parents": [
        "0c25da0276f5b6f6119793ae9d45d1bca8172c2b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 22 12:31:54 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 22 12:31:54 2016 +0000"
      },
      "message": "Optimizing: Fix a new valgrind error in image_test.\n\nBug: 27651442\nBug: 27151098\nChange-Id: I23a428be68ccf9f9557df01ee7e920eeeb8da2ba\n"
    },
    {
      "commit": "0d345cf8db01f40db250f80de5104e0df24234fa",
      "tree": "ebeac7adff399e908e5dcd3c855505ed02fe72b8",
      "parents": [
        "4485c6964ad414d5c6d0535622cfad1c0a6b640f"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 16 10:49:38 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Mar 21 12:53:33 2016 -0700"
      },
      "message": "Generalize induction and range analysis across type conversions.\n\nRationale:\nThis changelist implements allowing narrowing conversions within\ninductions and loop control. More induction and loops recognized,\nmore bounds eliminated. We all win. The basic idea is pretty simple\n(record type with detected induction) but one has to get all the\ndetails right, as illustrated by the many new unit tests.\n\nBUG\u003d27151098\n\nChange-Id: I254020bfa5fa623799b31bbbb5ccc97d4d5a0100\n"
    },
    {
      "commit": "358af839c60db9e178f0b0bb9d430711c071b82a",
      "tree": "bfeb6c0fe553161a6d3df57f2e35401ea36e94ff",
      "parents": [
        "4e4e64511e530db37b33f450016afe49db3c4b20"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 24 14:17:53 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Feb 25 09:26:57 2016 -0800"
      },
      "message": "Recognize for (int i \u003d 0; i !\u003d x.length; i++) loops\n\nRationale:\nIdiom occurs in real-life and is very straightforwardly\nrecognized by existing induction/range machinery.\n\nChange-Id: I965a16e9de72f3523ea5023d30ed1c4e47ed5010\n"
    },
    {
      "commit": "97412c92afb3f6630c4f0eafe6d6161862bfb4c1",
      "tree": "124411d0160da1a7f0869c29029ef4dbfac6da97",
      "parents": [
        "b4982aab07ae4cdaba13b4cb99306459d92e52d5"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Feb 19 20:14:38 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 24 11:08:32 2016 -0800"
      },
      "message": "Use range analysis for better trip count analysis\n\nRationale:\nMarking more loops as always-taken avoids generating\nunnecessary new top tests while marking more loops\nare non-infinite enables more optimizations. This\nCL helps with these improvements. Also, some more\ncode is shared between induction and range analysis\nand a bug with refining ranges has been fixed.\n\nBug: 27151190\n\nChange-Id: Iecc0d7f32ae4779ee5424cda9dcc20816220935e\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": "b35302b9f79a4b9bcc980051f67e5495a03289c3",
      "tree": "8a578febc1967aab22678814f45f355566b37ba5",
      "parents": [
        "e38e4b467bdcca1bf5f8b80adc66d3064fa9cf45"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 29 16:12:27 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 31 15:28:48 2015 +0000"
      },
      "message": "Remove bogus DCHECK in induction analysis.\n\nMethod is called during BCE, which may change the graph in non-SSA\nform temporarily.\n\nChange-Id: I84bed7d3370c6871dc2d3b883d0aca90b3a37696\n"
    },
    {
      "commit": "7d57d7f2f0328241ff07c43a93edadbc1a6697c6",
      "tree": "4a53eb14db06af2e8fc84bbebd48a462e868bfd4",
      "parents": [
        "7d5a577c1f256a7703361afb071dcd4ecc7d275f"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Dec 09 14:39:48 2015 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Dec 15 11:56:35 2015 -0800"
      },
      "message": "Various induction/range analysis improvements.\n\nRationale: this change list improves analysis of triangular loops\n           both by changing loop order for induction analysis\n           (enabling range analysis in inner loops) and by\n           some symbolic improvements during range analysis;\n           also, a mul/div bug has been fixed (with pass/fail\n           unit tests); lastly this change list prepares some\n           follow up optimizations.\n\nChange-Id: I84a03e848405009541c3fa8e3d3c2f430e100087\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": "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": "22f058726d35dd8f40b3763649e61740b3d22535",
      "tree": "987dd5df7627c2c3e8c798089083cb797627daed",
      "parents": [
        "3dca4c04170bb4c7b26609e55f3f4966d46b681a"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Oct 27 15:56:28 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Oct 28 13:57:14 2015 -0700"
      },
      "message": "Generate taken-test during trip-count analysis.\n\nRationale: for loops that may not be taken, this taken-test\n           can be used by clients of the induction variable\n           analysis to ensure trip-count evaluation is valid.\n\nChange-Id: Ia64749e2389b7224e69d6a49bb604b1964c11068\n"
    },
    {
      "commit": "e9f37600e98ba21308ad4f70d9d68cf6c057bdbe",
      "tree": "ad7953f41a35eeee68a31b4b567a08c650647bba",
      "parents": [
        "793e6fbdefb092d1dab50bca5618aed110c7e037"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Oct 09 11:15:55 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Oct 14 13:38:22 2015 -0700"
      },
      "message": "Added support for unsigned comparisons\n\nRationale: even though not directly supported in input graph,\n           having the ability to express unsigned comparisons\n           in HIR is useful for all sorts of optimizations.\n\nChange-Id: I4543c96a8c1895c3d33aaf85685afbf80fe27d72\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": "a841bc3fb000a9cdbbb7b3cedf2cb7a11e2c82ce",
      "tree": "875da22fe58b8be37e556a790fa199678f67ed3c",
      "parents": [
        "25255512bae64fefc5cb76b1590e8e9c1dd42e82",
        "5233f93ee336b3581ccdb993ff6342c52fec34b0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 30 17:46:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 30 17:46:01 2015 +0000"
      },
      "message": "Merge \"Optimizing: Tag even more arena allocations.\""
    },
    {
      "commit": "9401f5397128ddc8dc36de923dd5e6bd4e4b5be4",
      "tree": "4ff8052307da80baa89dfa80a446f48752c0e95c",
      "parents": [
        "931e26843bbb688eacfa67b40414c6b8f221a56a"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Sep 28 16:25:56 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Sep 30 09:58:53 2015 -0700"
      },
      "message": "Implemented trip-count safety information.\n\nAs shown in the induction analysis presentation, trip-counts need to\ndeal with potential taken/not-taken situations (so that trip-count\nis either valid in the full loop or just in the loop-body proper)\nand potential finite/infinite situations (the latter can still be\nanalyzed but may need to run-time test later to guard against the\ninfinite conditions). This CL provides that information.\n\nChange-Id: I0445d8e836b80a3614af217ce3e39d766e77b986\n"
    },
    {
      "commit": "5233f93ee336b3581ccdb993ff6342c52fec34b0",
      "tree": "225dc0ab491263ef56362a8d0fe2926266bd5047",
      "parents": [
        "de8a3f4dce1e9ff0e3be16956b06bafc8cd4f397"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 29 19:01:15 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 29 19:46:03 2015 +0100"
      },
      "message": "Optimizing: Tag even more arena allocations.\n\nTag previously \"Misc\" arena allocations with more specific\nallocation types. Move some native heap allocations to the\narena in BCE.\n\nBug: 23736311\nChange-Id: If8ef15a8b614dc3314bdfb35caa23862c9d4d25c\n"
    },
    {
      "commit": "cd26feb7e9f9eb36af9453f3cdb55cfc4e6e5ec4",
      "tree": "39768556d365d9830119f03aae81de1e7ee3efd3",
      "parents": [
        "a6cfe5a3acb3af782322fde734bfcf0c524d6f99"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Sep 23 17:50:50 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Sep 23 18:36:11 2015 -0700"
      },
      "message": "Minor cleanup in range analysis.\n\n(1) replaced min/max macro as previously required.\n(2) removed some redundant code by merging min/max into one.\n\nChange-Id: I610879a06d550346bfac7e6e12ec0299ba226a37\n"
    },
    {
      "commit": "f475bee067ae0f6dd2a022c823c642265f97b065",
      "tree": "a411acce47e6b60ef87bc2f873604aad1d31c318",
      "parents": [
        "15ed726eae70a479f3179de68a643ef30c777cbb"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Sep 16 12:50:25 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Sep 23 16:20:53 2015 -0700"
      },
      "message": "Various improvements in finding induction variables.\n\nRationale:\n(1) Analyze multi-way phis (requested by Nicolas, Igor, and Mingyao).\n(2) Analyze trip count for restricted !\u003d loops\n(3) Added unit test for public API of range analysis (static methods\n    were already well-tested).\n\nChange-Id: I9285d22d3bb927f141204cc4697ea6fe5120994d\n"
    },
    {
      "commit": "22af3bee34d0ab1a4bd186c71ccab00366882259",
      "tree": "793f358d498142a2e60d7d5131c347b0fd668cbd",
      "parents": [
        "fe9a1b05ea5a21b6d9a2e9e5081f5e80ff8a1ba2"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Sep 10 12:50:58 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Sep 15 17:03:13 2015 -0700"
      },
      "message": "Use induction variable range analysis in BCE (statically).\n\nRationale: Finally! After lots of very large CLs, now a small CL\n           that uses the new induction variable analysis in BCE\n           (statically, using this dynamically with de-opt is TBD).\n           Despite its relative small size, be aware though,\n           since the CL introduces a new phase to the compiler.\n\nChange-Id: If5555a173fd5d55d147c63138ef51fc296fa1414\n"
    },
    {
      "commit": "d14c59564870c910bdc823081f0ed1101f599231",
      "tree": "36a831f8c786823129bebbf03a4ca48ff6ed3c23",
      "parents": [
        "e6576390f957c82c2aede438834d028066757368"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Sep 08 15:25:15 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Sep 10 10:16:04 2015 -0700"
      },
      "message": "Induction variable range analysis.\n\nRationale: by computing an upper bound on the trip count of each\n           loop after induction var analysis has completed, a\n\t   simple range analysis yields lower and upper bounds on\n\t   all induced expressions in a loop; this analysis\n\t   plugs directly into BCE (follow-up CL).\n\nChange-Id: I46a3fe48721ca372547199b39a3498c47992597d\n"
    },
    {
      "commit": "471a2034171346dda4539b985b95aa6370531171",
      "tree": "9f04b5dd3169909953ac4e38c106287f12e0bbef",
      "parents": [
        "6b79454092582bea4a72872d04e4bc9f0a48a4b8"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Sep 04 18:22:11 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Sep 07 10:35:55 2015 -0700"
      },
      "message": "Simplify loop invariant operations during induction analysis.\n\nRationale:\nSaves some memory for nodes that are not really required, and\nyields slightly more readable debugging strings.\n\nChange-Id: I95b64b48869699137b5d49e26eb20091e264de7a\n"
    },
    {
      "commit": "e609b7cf9996389e6e693f149489737436172a2c",
      "tree": "14f1c83ea83d1b9133272af1dc6f3ad314f1fef3",
      "parents": [
        "fb32aca04cc1b5f5e8325d79664882f25f253881"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Aug 27 13:46:58 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Sep 04 17:03:39 2015 -0700"
      },
      "message": "Further development of induction variable analysis.\n\nVarious improvements:\n(1) Introduced period sequences.\n(2) Extended all transfer functions to deal with all cases;\n    also refactored these to read more compactly.\n(3) Improved debugging output for constants for readability.\n(4) Used direct pointer in mappings for clarify.\n(5) Several induction info \"constructors\" for readability.\n(6) Various other changes suggested in earlier code reviews.\n\nChange-Id: I9d5381f1676b63d30cea6f5e304d4b7bda7acb96\n"
    },
    {
      "commit": "30efb4e00c2a9aa318d44486b5eacaa7178d20ef",
      "tree": "90c4e84b5473def182fa443191ba8de80fa62d63",
      "parents": [
        "574d75597013cb12a961c0d4365d1618d8ef6977"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Jul 30 12:14:31 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Aug 26 17:20:28 2015 +0000"
      },
      "message": "Induction variable analysis (with unit tests).\n\nRationale:\nInduction variable analysis forms the basis of a wide\nvariety of compiler optimizations. This implementation\nfinds induction variables using the elegant SSA-based\nalgorithm defined by [Gerlek et al.].\n\nChange-Id: I79b8dce33ffb8b283c179699a8dff5bd196f75b2\n"
    }
  ]
}
