)]}'
{
  "log": [
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "2477320a8d9de58ede68e2645ea53c10f71dcd57",
      "tree": "f428a6856e10d8ebaff0bb2da544a8d41c35ab77",
      "parents": [
        "5a87e19e4bf1b6719c2aad3effde1b38d2c3085c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 26 10:28:51 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 26 10:28:51 2018 -0700"
      },
      "message": "Step 1 of 2: conditional passes.\n\nRationale:\nThe change adds a return value to Run() in preparation of\nconditional pass execution. The value returned by Run() is\nbest effort, returning false means no optimizations were\napplied or no useful information was obtained. I filled\nin a few cases with more exact information, others\nstill just return true. In addition, it integrates inlining\nas a regular pass, avoiding the ugly \"break\" into\noptimizations1 and optimziations2.\n\nBug: b/78171933, b/74026074\n\nTest: test-art-host,target\nChange-Id: Ia39c5c83c01dcd79841e4b623917d61c754cf075\n"
    },
    {
      "commit": "ceb06932313e5146c39fc80d6c3911daa10c534c",
      "tree": "1593fb926606899b7a22399d12e24da5ec6fa018",
      "parents": [
        "cb90e3a29041ea55c4b5eb3d1477aa360381a1f1"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 13 10:31:17 2017 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 20 12:46:37 2017 -0800"
      },
      "message": "Recognize countable \"break\" loops\n\nRationale:\nA particular break loop is generated by e.g. Kotlin\n(or it can be expressed in Java as well) if the upper\n(or lower) bound is inclusive, but a comparison test\nwould be too dangerous. The ART compiler often has\nbetter range analysis (e.g. after inlining) to convert\nsuch constructs back to countable loops, which are\nmore amenable to optimizations. For instance, we get\nmore than 200% improvement on the KotlinMicroLoops\nbenchmark, while close to 70 loops are recognized\nin the Kotlin support library itself.\n\nBug: 67601686\n\nTest: test-art-host test-art-target\nChange-Id: I67e5c832df57e096efe2cf43a8579d9c10ca33e6\n"
    },
    {
      "commit": "2ca10eb3f47ef3c2535c137853f7a63d10bb908b",
      "tree": "3684d1d5ef4791795b64620e97f952896c5a2011",
      "parents": [
        "02f41015a0933f146b886c62bb5b02c322ddf882"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Nov 15 15:17:53 2017 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 20 10:38:26 2017 -0800"
      },
      "message": "Refactored optimization passes setup.\n\nRationale:\nRefactors the way we set up optimization passes\nin the compiler into a more centralized approach.\nThe refactoring also found some \"holes\" in the\nexisting mechanism (missing string lookup in\nthe debugging mechanism, or inablity to set\nalternative name for optimizations that may repeat).\n\nBug: 64538565\n\nTest: test-art-host test-art-target\nChange-Id: Ie5e0b70f67ac5acc706db91f64612dff0e561f83\n"
    },
    {
      "commit": "ca6fff898afcb62491458ae8bcd428bfb3043da1",
      "tree": "195a6b16d3a4b34acc2faf91ce56f448efb15e07",
      "parents": [
        "aa7273e56fbafc2692c8d20a31b50d2f4bdd2aa1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 14:49:14 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 06 17:53:50 2017 +0100"
      },
      "message": "ART: Use ScopedArenaAllocator for pass-local data.\n\nPasses using local ArenaAllocator were hiding their memory\nusage from the allocation counting, making it difficult to\ntrack down where memory was used. Using ScopedArenaAllocator\nreveals the memory usage.\n\nThis changes the HGraph constructor which requires a lot of\nchanges in tests. Refactor these tests to limit the amount\nof work needed the next time we change that constructor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Build with kArenaAllocatorCountAllocations \u003d true.\nBug: 64312607\nChange-Id: I34939e4086b500d6e827ff3ef2211d1a421ac91a\n"
    },
    {
      "commit": "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": "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": "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": "5319d3cca5a9b8e9e3f59421818272b966575172",
      "tree": "a90bd83b7e69bbff0be601088bb1c764125d8cf6",
      "parents": [
        "9cff32df754c428ef69ddb61e7600abfd4c75266"
      ],
      "author": {
        "name": "Wojciech Staszkiewicz",
        "email": "staszkiewicz@google.com",
        "time": "Mon Aug 01 17:48:59 2016 -0700"
      },
      "committer": {
        "name": "Wojciech Staszkiewicz",
        "email": "staszkiewicz@google.com",
        "time": "Mon Aug 08 11:24:26 2016 -0700"
      },
      "message": "Implement running user defined list of passes\n\nThis change introduces new dex2oat switch --run-passes\u003d. This switch\naccepts path to a text file with names of passes to run.\nCompiler will run optimization passes specified in the file rather\nthen the default ones.\n\nThere is no verification implemented on the compiler side. It is user\u0027s\nresponsibility to provide a list of passes that leads to successful\ngeneration of correct code. Care should be taken to prepare a list\nthat satisfies all dependencies between optimizations.\n\nWe only take control of the optional optimizations. Codegen (builder),\nand all passes required for register allocation will run unaffected\nby this mechanism.\n\nChange-Id: Ic3694e53515fefcc5ce6f28d9371776b5afcbb4f\n"
    },
    {
      "commit": "52be7e759acecc3841dca0ac1b703034d8cad60d",
      "tree": "c6ed5e85c33d8938dbbe2b7ca5ecf7e00292884c",
      "parents": [
        "4dd9d82d6c1260b3da908a0d1a22b7d209b87496"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Jun 23 11:20:41 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Jun 29 09:34:28 2016 -0700"
      },
      "message": "Improvements in induction range analysis.\n\nRationale:\nUses range analysis while determining whether trip-counts\nare \"safe\", which improves analysis of triangular loops.\nAlso implements more effective triangular loop analysis\nby evaluating induction information only once and using\na top level hint (instead of the \"iterative refinement\"\nthat was used earlier). Also fixes analysis of triangular\ntrip counts that may wrap-around. All with tests.\n\nTest: see induction_var_range_test/530-checker-loops*\n\nBUG\u003d27151190\n\nChange-Id: I1877c8ce0c9a52005900eb9dfdbb1918df100278\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": "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": "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": "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": "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": "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": "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"
    }
  ]
}
