)]}'
{
  "log": [
    {
      "commit": "3cd4fc8bbb40a57d2ffde85f543c124f53237c1d",
      "tree": "97eee6cc70206f605e251ad85f6f2941f4eb0383",
      "parents": [
        "2f9d1379fdebcdeeac52eaeff25ad5697c6b6ffb"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 14 15:15:42 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue May 19 15:54:19 2015 +0100"
      },
      "message": "Eliminate redundant constructor barriers when inlining.\n\nBug: 20410297\nChange-Id: I2097743d00eb795d050d390b1918e38c7f41d506\n"
    },
    {
      "commit": "e82549b14c7def0a45461183964f7e6a34cbb70c",
      "tree": "9293e5bf58657883923fe08ff1964e92e81e8851",
      "parents": [
        "c3912c8a2db109a15603554fd456f56cd0a69ad0"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed May 06 10:55:34 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed May 13 16:20:48 2015 -0400"
      },
      "message": "[optimizing] Fold HTypeConversion of constants\n\nWhile looking into optimizing long shifts on x86, I found that the\ncompiler wasn\u0027t folding HTypeConversion of constants.  Add simple\nconversions of constants, taking care of float/double values\nwith NaNs and small/large values, ensuring Java conversion semantics.\n\nAdd checker cases to see that constant folding of HTypeConversion is\ndone.\n\nEnsure 422-type-conversion type conversion routiness don\u0027t get\ninlined to avoid compile time folding.\n\nChange-Id: I5a4eb376b64bc4e41bf908af5875bed312efb228\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "f3962119654ac1f02e7ec891e1526ca8045542aa",
      "tree": "9494724c2a11d3369d3dddc1057de2e31190b74f",
      "parents": [
        "527145b4c9cc28788c17791bda62607bf596cb7b",
        "a4b8c21dae70ae34aee13628632c39a675c06022"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 12 17:14:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 12 17:14:22 2015 +0000"
      },
      "message": "Merge \"ART: Rediscover loops after deleting blocks in DCE\""
    },
    {
      "commit": "a4b8c21dae70ae34aee13628632c39a675c06022",
      "tree": "3a72a4fcb64d61b7913f6ee3599a46b3248437b6",
      "parents": [
        "faf935eb3a8565de98d9ec1f79c8c43c5c6eb2a7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 07 09:59:30 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue May 12 11:37:53 2015 +0100"
      },
      "message": "ART: Rediscover loops after deleting blocks in DCE\n\nThe way DCE currently updates loop information does not cover all\ncases. This patch removes the logic, resets loop information of live\nblocks to pre-SSA state and reanalyzes the affected loops.\n\nChange-Id: I0b996a70235b95a8db0de9a23a03f71db57a21b8\n"
    },
    {
      "commit": "987b2e66de00d754d19b6f59a17891dd34e04e61",
      "tree": "88da338c72c34eeacea294a9792b5bdc69c4a363",
      "parents": [
        "faf935eb3a8565de98d9ec1f79c8c43c5c6eb2a7",
        "3b55ebb22156e1f3496cd1ee4a05e03b4780e579"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue May 12 09:47:34 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 12 09:47:35 2015 +0000"
      },
      "message": "Merge \"Simplify floating-point comparisons with NaN in Optimizing.\""
    },
    {
      "commit": "0a23d74dc2751440822960eab218be4cb8843647",
      "tree": "39d69de5d812826c4065d0acd38a58cd983f21f0",
      "parents": [
        "cdeb0b5fede4c06488f43a212591e661d946bc78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:57:35 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 14:17:22 2015 +0100"
      },
      "message": "Add a parent environment to HEnvironment.\n\nThis code has no functionality change. It adds a placeholder\nfor chaining inlined frames.\n\nChange-Id: I5ec57335af76ee406052345b947aad98a6a4423a\n"
    },
    {
      "commit": "3b55ebb22156e1f3496cd1ee4a05e03b4780e579",
      "tree": "a358c1f6338828068bdd6df0eab3aba71eb2d7ab",
      "parents": [
        "2e8da8ecb94134081c3ea18a217294db367888a3"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri May 08 13:13:19 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri May 08 13:13:19 2015 +0100"
      },
      "message": "Simplify floating-point comparisons with NaN in Optimizing.\n\nThis change was suggested by Ian.\n\nAlso, simplify some art::HFloatConstant and\nart::HDoubleConstant methods.\n\nChange-Id: I7908df23581a7f61c8ec79c290fe5f70798ac3be\n"
    },
    {
      "commit": "8c0c91a845568624815df026cfdac8c42ecccdf6",
      "tree": "48f4a1f6158234c3257ed75405122b1fb0941f96",
      "parents": [
        "46a4b26855ae9fcd14c6e4435f37f09ceb134f61"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:46:05 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:46:05 2015 +0100"
      },
      "message": "Use a growable array instead of an environment during SSA.\n\nUsing an environment was convenient because it contains\na growable array. But there\u0027s no need for the environment\nabstraction when being used as a temporary holder for values\nof locals.\n\nChange-Id: Idf2883fe4b8f97a31ee70b3627c1bdd23ebfff0e\n"
    },
    {
      "commit": "db216f4d49ea1561a74261c29f1264952232728a",
      "tree": "8b7914435ad1ba519a3d88b5cca7f0f6e842cd4f",
      "parents": [
        "bc3b93eadd155342b6124d2d5ef3806ecec5dfd6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 05 17:02:20 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 09:54:09 2015 +0100"
      },
      "message": "Relax the only one back-edge restriction.\n\nThe rule is in the way for better register allocation, as\nit creates an artificial join point between multiple paths.\n\nChange-Id: Ia4392890f95bcea56d143138f28ddce6c572ad58\n"
    },
    {
      "commit": "5d7b7f81ed5455893f984752c00571ef27cc97c5",
      "tree": "a497582ae4ab5a69ba7035c1f95af0ee0f0b025b",
      "parents": [
        "01ce498499eed47e87fceb8736d26fe49b2a4346"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 28 00:52:43 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 01 10:07:52 2015 +0100"
      },
      "message": "Update the remaining input index of phis after deleting an input.\n\nbug:20715803\nbug:20690906\n\nChange-Id: Iaf08f0c30d629e766be2b04815dc3e38b6e7ff35\n"
    },
    {
      "commit": "fd5f56d4604eeeacdf6be5189187b6ef49157280",
      "tree": "b53a3ba3a8a4978e372a4e9a657b2c4c5ace7648",
      "parents": [
        "56784f887bad1219f326e9e6d110f785f31a5968",
        "2af2307f3903a75a379029c049b86f9903fc81a5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:16:06 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 30 11:16:06 2015 +0000"
      },
      "message": "Merge \"Revert \"GVN final fields even with side effects.\"\""
    },
    {
      "commit": "2af2307f3903a75a379029c049b86f9903fc81a5",
      "tree": "89168f24337d7ec41648568c48b0dd5fb5194c39",
      "parents": [
        "781733632637db98d79dfffad72bf063be3259be"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:15:40 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:15:40 2015 +0000"
      },
      "message": "Revert \"GVN final fields even with side effects.\"\n\nThis reverts commit 781733632637db98d79dfffad72bf063be3259be.\n\nChange-Id: Id7c4591f6b8190921852044b278d11627457c570\n"
    },
    {
      "commit": "56784f887bad1219f326e9e6d110f785f31a5968",
      "tree": "42225647869863b4c79d537639bc1fb4ea5fdf7f",
      "parents": [
        "0a50264b30a0c61099e8388015cccfa417a6bd18",
        "781733632637db98d79dfffad72bf063be3259be"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 10:21:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 30 10:21:20 2015 +0000"
      },
      "message": "Merge \"GVN final fields even with side effects.\""
    },
    {
      "commit": "781733632637db98d79dfffad72bf063be3259be",
      "tree": "a4ea455e89adb9db77e25525a81737f3b0ab0c58",
      "parents": [
        "36ad3f1c3c08a49680a8f5d34bba43199ab9dd5b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 29 16:46:27 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:20:21 2015 +0100"
      },
      "message": "GVN final fields even with side effects.\n\nTwo accesses of a final field can be GVN\u0027ed even if there are\nside effects between them.\n\nChange-Id: I04495ae83c7858f4216b083ad1c29851954320ad\n"
    },
    {
      "commit": "ed51747ae96a0c7fac452e95a1607200a5494b28",
      "tree": "0c639e611ffb5a1931617f8e36cc74fa8ec735e0",
      "parents": [
        "0430fc9216dddf6a6967cfffd37dfa99d73c2c68",
        "579026039080252878106118645ed70706f4838e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 29 17:10:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 29 17:10:09 2015 +0000"
      },
      "message": "Merge \"Add synthesize uses at back edge.\""
    },
    {
      "commit": "579026039080252878106118645ed70706f4838e",
      "tree": "cfedba53d8e8b04e81b855560e388f3f691ee837",
      "parents": [
        "2d01066db24c19f9384f50ff71806cbb4835c7f9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 21 14:28:41 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 29 18:02:36 2015 +0100"
      },
      "message": "Add synthesize uses at back edge.\n\nThis reduces the cost of linearizing the graph (hence removing\nthe notion of back edge). Since linear scan allocates/spills registers\nbased on next use, adding a use at a back edge ensures we do count\nfor loop uses.\n\nChange-Id: Idaa882cb120edbdd08ca6bff142d326a8245bd14\n"
    },
    {
      "commit": "69a2804c3bb48cf4fd00a66080f613a4fd96c422",
      "tree": "aab3f079d972bae71bbfa27fdca139738f41dbf0",
      "parents": [
        "f073a36d1ed866e786f7d7784c709c86b00bc58e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 29 17:16:07 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 29 17:36:52 2015 +0100"
      },
      "message": "ART: Fix loop information after dead code elimination\n\nCompilation failed when only some blocks of a loop were removed during\ndead code elimination.\n\nBug: 20680703\nChange-Id: If31025169ca493f0d7f7f2788576e98d05f03394\n"
    },
    {
      "commit": "fadf977d85bfbf3f9d5d4730afb660cbed34f989",
      "tree": "d64b1cd421d92a52930c44fc96cc822b19ff1430",
      "parents": [
        "d474b1d0fd69fdeb481adda8c0814512956f2d51",
        "2967ec6c3dad1c1dc15fc827188bd5ecfa75493b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Apr 29 10:23:07 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 29 10:23:07 2015 +0000"
      },
      "message": "Merge \"Add InsertInstructionAfter in HBasicBlock.\""
    },
    {
      "commit": "80613ffd5699e6207d6b1264d600a0fc168074ce",
      "tree": "dbe8971e367e2529586821f3caa223fd22c28ce3",
      "parents": [
        "a94fb1f99ee3390bca9531b2512f8fc65f13ceee",
        "3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 28 10:31:38 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 28 10:31:38 2015 +0000"
      },
      "message": "Merge \"Have HInvoke instructions know their number of actual arguments.\""
    },
    {
      "commit": "3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28",
      "tree": "69ad3378263c9a4b967cb7e27de0027264c12eb6",
      "parents": [
        "a0ee862288b702468f8c2b6d0ad0f1c61be0b483"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 28 11:00:54 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 28 11:00:54 2015 +0100"
      },
      "message": "Have HInvoke instructions know their number of actual arguments.\n\nAdd an art::HInvoke::GetNumberOfArguments routine so that\nart::HInvoke and its subclasses can return the number of\nactual arguments of the called method.  Use it in code\ngenerators and intrinsics handlers.\n\nConsequently, no longer remove a clinit check as last input\nof a static invoke if it is still present during baseline\ncode generation, but ensure that static invokes have no such\ncheck as last input in optimized compilations.\n\nChange-Id: Iaf9e07d1057a3b15b83d9638538c02b70211e476\n"
    },
    {
      "commit": "848f70a3d73833fc1bf3032a9ff6812e429661d9",
      "tree": "b0349b3a40aab5a915af491b100659a5ca9fbbf6",
      "parents": [
        "d14438f0c5071962be7fab572b54687d32d9d087"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 15 13:49:50 2014 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 27 18:54:52 2015 -0700"
      },
      "message": "Replace String CharArray with internal uint16_t array.\n\nSummary of high level changes:\n  - Adds compiler inliner support to identify string init methods\n  - Adds compiler support (quick \u0026 optimizing) with new invoke code path\n    that calls method off the thread pointer\n  - Adds thread entrypoints for all string init methods\n  - Adds map to verifier to log when receiver of string init has been\n    copied to other registers. used by compiler and interpreter\n\nChange-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01\n"
    },
    {
      "commit": "d14438f0c5071962be7fab572b54687d32d9d087",
      "tree": "8ca608de342922f73d98586495ef0eceee36a754",
      "parents": [
        "a0ee862288b702468f8c2b6d0ad0f1c61be0b483",
        "769c9e539da8ca80aa914cd12276aa5bd79148ee"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 16:02:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 27 16:02:03 2015 +0000"
      },
      "message": "Merge \"ART: Simplify Ifs with BooleanNot condition\""
    },
    {
      "commit": "769c9e539da8ca80aa914cd12276aa5bd79148ee",
      "tree": "9aadf98a3fcbf7909f76c53fa2ee036ebda00304",
      "parents": [
        "0fbfe6f92a2481daf914043262b5854e65d8c3cc"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 13:54:09 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 17:00:58 2015 +0100"
      },
      "message": "ART: Simplify Ifs with BooleanNot condition\n\nIf statements with negated condition can be simplified by removing the\nnegation and swapping the true and false branches.\n\nChange-Id: I197afbc79fb7344d73b7b85d3611e7ca2519717f\n"
    },
    {
      "commit": "a0ee862288b702468f8c2b6d0ad0f1c61be0b483",
      "tree": "9917112ec01e4b734900cde975e465cf3bb2b670",
      "parents": [
        "0fbfe6f92a2481daf914043262b5854e65d8c3cc",
        "f213e05cef6d38166cfe0cce8f3b0a53225a1b39"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 14:12:24 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 27 14:12:25 2015 +0000"
      },
      "message": "Merge \"Add support for caching float and double constants.\""
    },
    {
      "commit": "f213e05cef6d38166cfe0cce8f3b0a53225a1b39",
      "tree": "2fd9573056062ae085f84f1b63b8ec3298927da1",
      "parents": [
        "76bf84a196576f902a76a1165516a49dac15856f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 08:53:46 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 15:05:20 2015 +0100"
      },
      "message": "Add support for caching float and double constants.\n\nChange-Id: Ib5205bad1006bc5e3c9cc86bc82a6b4b1ce9bef9\n"
    },
    {
      "commit": "c7508e93fa3df3a3890f6b62550cbd5e35bdd8df",
      "tree": "85795f0df38a741ab14c34e0403ba4bc3c317371",
      "parents": [
        "76bf84a196576f902a76a1165516a49dac15856f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 13:28:57 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 13:40:06 2015 +0100"
      },
      "message": "ART: Fix removing a Phi with RemoveInstruction\n\nBoolean simplifier might attempt to remove a Phi from the Instruction\nlist.\n\nChange-Id: I698cc616549bd88dac96395cb2e5d09b5433d157\n"
    },
    {
      "commit": "2967ec6c3dad1c1dc15fc827188bd5ecfa75493b",
      "tree": "f923c51b3a6aaa2a05e6fcf6fe0c68cbab718cef",
      "parents": [
        "9f3565a632d12c9cadd7d966da308fd26dbc899c"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Fri Apr 24 16:36:52 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Mon Apr 27 13:04:35 2015 +0100"
      },
      "message": "Add InsertInstructionAfter in HBasicBlock.\n\nChange-Id: I56e4e6edb39d1aab747877b7e517e94f0393f296\n"
    },
    {
      "commit": "f382eff130a5d90c34b3f09c4c61cb50cacd4c54",
      "tree": "07dd1b8e0cdf5c078776d6b64aa3813a80182bb6",
      "parents": [
        "adf15974e0a0a2b0e6dc311ff5701b87ca15964a",
        "206d6fd6cae5ba8c4d5f0e230111fe77b9d5c0a5"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Sun Apr 26 18:23:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Apr 26 18:23:02 2015 +0000"
      },
      "message": "Merge \"Deoptimization-based BCE for unknown loop bounds.\""
    },
    {
      "commit": "206d6fd6cae5ba8c4d5f0e230111fe77b9d5c0a5",
      "tree": "0684e7dd7ca2768991a839a5ddbe78f20bf1e4bf",
      "parents": [
        "76f1413492c228bfa710e1eaa4c60370eaffbb8a"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Apr 13 16:46:28 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Sun Apr 26 10:47:01 2015 -0700"
      },
      "message": "Deoptimization-based BCE for unknown loop bounds.\n\nFor loop like:\n  for (int i \u003d start; i \u003c end; i++) {\n    array[i] \u003d 1;\n  }\nWe add the following to the loop pre-header:\n  if (start \u003c 0) deoptimize();\n  if (end \u003e array.length) deoptimize();\nThen we can eliminate bounds-check of array[i] inside the loop.\n\nWe also take care of indexing with induction variable plus some offsets,\nlike array[i - 1]/array[i + 1] inside the loop, and adjust the condition\nfor deoptimization accordingly.\n\nChange-Id: I9e24c6b5e134ff95eff5b5605ff8f95d6546616f\n"
    },
    {
      "commit": "adf15974e0a0a2b0e6dc311ff5701b87ca15964a",
      "tree": "65cc0394a15ea82df9ccb680b1ec6b3be72a1a87",
      "parents": [
        "5ff903a589af282f516bbcf6844ff2656ce76b02",
        "067cae2c86627d2edcf01b918ee601774bc76aeb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 16:43:18 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Apr 26 16:43:19 2015 +0000"
      },
      "message": "Merge \"Revert \"[optimizing] Replace FP divide by power of 2\"\""
    },
    {
      "commit": "067cae2c86627d2edcf01b918ee601774bc76aeb",
      "tree": "170607d1194943f4eff92e70170da36e06b68a9c",
      "parents": [
        "b0bd8915cb257cdaf46ba663c450a6543bca75af"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 16:43:00 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 16:43:00 2015 +0000"
      },
      "message": "Revert \"[optimizing] Replace FP divide by power of 2\"\n\nFails compiling docs.\n\nThis reverts commit b0bd8915cb257cdaf46ba663c450a6543bca75af.\n\nChange-Id: I47d32525c83a73118e2163eb58c68bbb7a28bb38\n"
    },
    {
      "commit": "5ff903a589af282f516bbcf6844ff2656ce76b02",
      "tree": "853e7f348c7299f32021a7f0f60ca95ef4f04b24",
      "parents": [
        "2c31b5ac1d45f2f96932c8ff0d299abb2dbde862",
        "b0bd8915cb257cdaf46ba663c450a6543bca75af"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 15:05:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Apr 26 15:05:29 2015 +0000"
      },
      "message": "Merge \"[optimizing] Replace FP divide by power of 2\""
    },
    {
      "commit": "940c65d6757130d2e9f864d4c2220838f0312bea",
      "tree": "c62ba17fb96bdd15dd61b0193c5047c91015e0b6",
      "parents": [
        "808db5276827c909818d5595a5600e64b97f66e0",
        "1152c926076a760490085c4497c3f117fa8da891"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Apr 25 03:38:14 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 25 03:38:15 2015 +0000"
      },
      "message": "Merge \"[optimizing] Rename HasArrayAccesses and check it\""
    },
    {
      "commit": "1152c926076a760490085c4497c3f117fa8da891",
      "tree": "215d3f45a946f51ae680ec50239ebc48f929aed7",
      "parents": [
        "76f1413492c228bfa710e1eaa4c60370eaffbb8a"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 24 17:06:35 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 24 19:25:51 2015 -0400"
      },
      "message": "[optimizing] Rename HasArrayAccesses and check it\n\nSince the flag is only used to see if there is a HBoundsCheck, rename\nHasArrayAccesses() to HasBoundsChecks().\n\nAdd a check in graph_checker to see that the flag is set if we see a\nHBoundsCheck instruction.\n\nChange-Id: I10fe92897374fb247082152dd75c3611cc40ff30\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "0379f82393237798616d485ad99952e73e480e12",
      "tree": "87f5ccd1fd0f4fa8156c31191040b7433c9ec907",
      "parents": [
        "3507b795c034617e1c94fc9544a208d6c6f75735"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 23:01:24 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 23:29:06 2015 +0100"
      },
      "message": "Fix DCHECKs about clinit checks in Optimizing\u0027s code generators.\n\nThese assertions are not true for the baseline compiler.  As\na temporary workaround, remove a clinit check as last input\nof a static invoke if it is still present at the stage of\ncode generation.\n\nChange-Id: I5655f4a0873e2e7ee7790b6a341c18b4b7b52af1\n"
    },
    {
      "commit": "eb5459ca861b58ee8a9907789f11400dcdddb87b",
      "tree": "36c1f328c48f0ec111ee31702cc4a82ddb2ad784",
      "parents": [
        "ae803f6efbe8378b5423c51ee3c5564cae0e6e59",
        "4c0eb42259d790fddcd9978b66328dbb3ab65615"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 18:17:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 24 18:17:41 2015 +0000"
      },
      "message": "Merge \"Ensure inlined static calls perform clinit checks in Optimizing.\""
    },
    {
      "commit": "4c0eb42259d790fddcd9978b66328dbb3ab65615",
      "tree": "9d1ac505dfd4d0225f479d860b72a58747c8f6ce",
      "parents": [
        "223f2f5b2a20ca8246da1523494900a2424d5956"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 16:43:49 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 16:43:49 2015 +0100"
      },
      "message": "Ensure inlined static calls perform clinit checks in Optimizing.\n\nCalls to static methods have implicit class initialization\n(clinit) checks of the method\u0027s declaring class in\nOptimizing.  However, when such a static call is inlined,\nthe implicit clinit check vanishes, possibly leading to an\nincorrect behavior.\n\nTo ensure that inlining static methods does not change the\nbehavior of a program, add explicit class initialization\nchecks (art::HClinitCheck) as well as load class\ninstructions (art::HLoadClass) as last input of static\ncalls (art::HInvokeStaticOrDirect) in Optimizing\u0027 control\nflow graphs, when the declaring class is reachable and not\nknown to be already initialized.  Then when considering the\ninlining of a static method call, proceed only if the method\nhas no implicit clinit check requirement.\n\nThe added explicit clinit checks are already removed by the\nart::PrepareForRegisterAllocation visitor.  This CL also\nextends this visitor to turn explicit clinit checks from\nstatic invokes into implicit ones after the inlining step,\nby removing the added art::HLoadClass nodes mentioned\nhereinbefore.\n\nChange-Id: I9ba452b8bd09ae1fdd9a3797ef556e3e7e19c651\n"
    },
    {
      "commit": "2d7352ba5311b8f57427b91b7a891e61497373c1",
      "tree": "3f3426f4f30663ee252ebc1f02ecd0eb114bad85",
      "parents": [
        "c5cb691ca6a746a193bfbe3525aafa7cbb281d40"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 20 14:52:42 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 24 16:19:31 2015 +0100"
      },
      "message": "ART: Dead block removal\n\nAdds a new pass which finds all unreachable blocks, typically due to\nsimplifying an if-condition to a constant, and removes them from the\ngraph. The patch also slightly generalizes the graph-transforming\noperations.\n\nChange-Id: Iff7c97f1d10b52886f3cd7401689ebe1bfdbf456\n"
    },
    {
      "commit": "322b389a74177c9d938f1f73d53110623dfc61b6",
      "tree": "b2437d4cdce399ce462d587d9c9c47a8fceb8953",
      "parents": [
        "272bf7e60add5f741fb9a2589eaa71945257afcc",
        "af88835231c2508509eb19aa2d21b92879351962"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 23 17:19:34 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 23 17:19:34 2015 +0000"
      },
      "message": "Merge \"Remove unnecessary null checks in CheckCast and InstanceOf\""
    },
    {
      "commit": "af88835231c2508509eb19aa2d21b92879351962",
      "tree": "4ef1c8fb3c5b78175767999a888b0c2cb1ea6485",
      "parents": [
        "da93333d568f3c5bd8eeb58341d10a332e1d42bf"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Mon Apr 20 14:41:30 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Thu Apr 23 17:53:17 2015 +0100"
      },
      "message": "Remove unnecessary null checks in CheckCast and InstanceOf\n\nChange-Id: I6fd81cabd8673be360f369e6318df0de8b18b634\n"
    },
    {
      "commit": "c1b829b8d52affb1b6789550d2ffcc6689389209",
      "tree": "95de716149b02afa0011c4e3c200917b3874ba97",
      "parents": [
        "84c5f9986dfaab881d4c66b2f3cb214e6152e9f7",
        "edad8add1f1216850cb3f179ba6f57b0d885b016"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 23 13:39:17 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 23 13:39:19 2015 +0000"
      },
      "message": "Merge \"Remove ActAsNullConstant\""
    },
    {
      "commit": "edad8add1f1216850cb3f179ba6f57b0d885b016",
      "tree": "0467b99624818ead8a86a192d05c7a28dad18311",
      "parents": [
        "be52c68dca2f146a571ffa65624acf2e6c7adeb2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 23 14:34:33 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 23 14:38:07 2015 +0100"
      },
      "message": "Remove ActAsNullConstant\n\nWe now properly type null constants during ssa builder so this is not\nneeded anymore.\n\nBug: 20322006\nChange-Id: Ic060a52d4fa2d4f00755dd6427f822d368392d7b\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "c3d743fa2a26effcb35627d8a1338029c86e582a",
      "tree": "cf883e9b7f707ac2e6c2a6627e462b20e634c17c",
      "parents": [
        "8d1ba74fe48703fc2b5a5920dd5eea0c65db5b15"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 22 13:40:50 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 22 14:43:19 2015 +0100"
      },
      "message": "ART: Update last_instruction when adding Phis\n\nHBasicBlock::InsertPhiAfter would not update the last_instruction\npointer when adding at the end of the list. This could cause problems\nwhen iterating over phis backwards. Fortunately, we don\u0027t do that\nanywhere in the existing code.\n\nChange-Id: I4487265bf2cf3d3819623fafd7ce7c359bac190e\n"
    },
    {
      "commit": "641547a5f18ca2ea54469cceadcfef64f132e5e0",
      "tree": "441e325fc9bea377c549101756d9e8dc68f95779",
      "parents": [
        "296c6cc2e5e90a81bdfc5f5486eae6b64d80e595"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Apr 21 22:08:51 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 22 11:40:25 2015 +0100"
      },
      "message": "[optimizing] Fix a bug in moving the null check to the user.\n\nWhen taking the decision to move a null check to the user we did not\nverify if the next instruction checks the same object.\n\nChange-Id: I2f4533a4bb18aa4b0b6d5e419f37dcccd60354d2\n"
    },
    {
      "commit": "769f2d32e4b04758e4dd6ce967f779cbfa74dbcb",
      "tree": "b0c764ec60cf2f6d7e06babad59e8d8bb32dd98d",
      "parents": [
        "3d052ba48f84901e89b5ea94c133093dc80bad06",
        "1ba1981ee9d28f87f594b157566d09e973fa5bce"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 21 10:19:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 21 10:19:21 2015 +0000"
      },
      "message": "Merge \"Linear scan: Use FirstUse instead of FirstRegisterUse.\""
    },
    {
      "commit": "1ba1981ee9d28f87f594b157566d09e973fa5bce",
      "tree": "f131757efaab85fb2a1efbac786c968a1f4a0283",
      "parents": [
        "f8bdd9f3a002970e4b8fdcf6fe6730116f1626c3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 21 09:12:40 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 21 10:48:57 2015 +0100"
      },
      "message": "Linear scan: Use FirstUse instead of FirstRegisterUse.\n\nThis is in preparation for introducing synthesized used at back edges.\n\nChange-Id: Ie28d6725d2dde982cf2137f2110daabcbab9f789\n"
    },
    {
      "commit": "b0bd8915cb257cdaf46ba663c450a6543bca75af",
      "tree": "0af66cce65abb2958d03579bd7fb660ffdda929b",
      "parents": [
        "b9791aa606834160b085dec7c5b32ccbeaf9a186"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Apr 15 19:57:22 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Apr 20 14:26:10 2015 -0400"
      },
      "message": "[optimizing] Replace FP divide by power of 2\n\nReplace a floating point division by a power of two by a multiplication\nof the reciprocal.  This is guarenteed to have the exact same result as\nit is exactly representable.\n\nAdd routines to allow generation of float and double constants after the\nSSA Builder.  I was unsure if float and double caches should be\nimplemented.  Under the assumption that there is probably not a lot of\nrepetition of FP values.  Please let me know.\n\nChange-Id: I3a6c3847b49b4e747a7e7e8843ca32bb174b1584\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "27eac12a66a73eb38b5ccb45b62350cf341299d0",
      "tree": "7cc7eea6dd543720da2921c11f68296f5df37b07",
      "parents": [
        "e40d82ffe388458c2674ec051f1dd897362692eb",
        "ad4450e5c3ffaa9566216cc6fafbf5c11186c467"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 20 15:20:15 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 20 15:20:15 2015 +0000"
      },
      "message": "Merge \"Opt compiler: Implement parallel move resolver without using swap.\""
    },
    {
      "commit": "27df758e2e7baebb6e3f393f9732fd0d064420c8",
      "tree": "261207281fd574deffb4dc1c1bc6bea8f150993e",
      "parents": [
        "f8bdd9f3a002970e4b8fdcf6fe6730116f1626c3"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Apr 17 19:12:31 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Apr 20 14:02:51 2015 +0100"
      },
      "message": "[optimizing] Add memory barriers in constructors when needed\n\nIf a class has final fields we must add a memory barrier before\nreturning from constructor. This makes sure the fields are visible to\nother threads.\n\nBug: 19851497\nChange-Id: If8c485092fc512efb9636cd568cb0543fb27688e\n"
    },
    {
      "commit": "ad4450e5c3ffaa9566216cc6fafbf5c11186c467",
      "tree": "eecf36e8e9d8112e765ad8840eb2d27f8d0415ab",
      "parents": [
        "f8bdd9f3a002970e4b8fdcf6fe6730116f1626c3"
      ],
      "author": {
        "name": "Zheng Xu",
        "email": "zheng.xu@arm.com",
        "time": "Fri Apr 17 18:48:56 2015 +0800"
      },
      "committer": {
        "name": "Zheng Xu",
        "email": "zheng.xu@arm.com",
        "time": "Fri Apr 17 18:54:08 2015 +0800"
      },
      "message": "Opt compiler: Implement parallel move resolver without using swap.\n\nThe algorithm of ParallelMoveResolverNoSwap() is almost the same with\nParallelMoveResolverWithSwap(), except the way we resolve the circular\ndependency. NoSwap() uses additional scratch register to resolve the\ncircular dependency. For example, (0-\u003e1) (1-\u003e2) (2-\u003e0) will be performed\nas (2-\u003escratch) (1-\u003e2) (0-\u003e1) (scratch-\u003e0).\n\nOn architectures without swap register support, NoSwap() can reduce the\nnumber of moves from 3x(N-1) to (N+1) when there is circular dependency\nwith N moves.\n\nAnd also, NoSwap() algorithm does not depend on architecture register\nlayout information, which means it can support register pairs on arm32\nand X/W, D/S registers on arm64 without additional modification.\n\nChange-Id: Idf56bd5469bb78c0e339e43ab16387428a082318\n"
    },
    {
      "commit": "e7bee3b7d307508243f4a00b5cf8a8867fcaaff5",
      "tree": "b9d350a3d1432d7546e5feab77e25807d328300a",
      "parents": [
        "59bb47675b1f1bafbcababadb4a6ba1c345fec1a",
        "a4f8831d6533e4fe5aed18433099e1130d95a877"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 15:53:22 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 16 15:53:23 2015 +0000"
      },
      "message": "Merge \"Remove duplicates phis created during SSA transformation\""
    },
    {
      "commit": "a4f8831d6533e4fe5aed18433099e1130d95a877",
      "tree": "914c97dd322f59b282f01ca5659a960609e0aa0b",
      "parents": [
        "e015a31e509c3f4de8a90b57b77329ba6609ce2f"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 12:57:19 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 16:48:25 2015 +0100"
      },
      "message": "Remove duplicates phis created during SSA transformation\n\nWhen creating equivalent phis we copy the inputs of the original phi\nwhich may be improperly typed. This will be fixed during the type\npropagation but as a result we may have two equivalent phis with the\nsame type for the same dex register. This is correct but generates more\ncode and prevent some optimizations.\n\nThis CL adds another step in the SSA builder to remove the extra Phi\nnodes created due to equality operators.\n\nThe graph checker verifies that for a given dex register not two phis\nhave the same type.\n\nAlso, replace zero int constant with null constant when we compare a\nreference against null.\n\nChange-Id: Id37cc11a016ea767c7e351575e003d822a9d2e60\n"
    },
    {
      "commit": "ee2da343bb2a54d9d77e29226e0317ccc913c8c1",
      "tree": "1bac4253382eb605c3904f3bc00807dd85e15424",
      "parents": [
        "8e8bb8aab6f19ccb5b5869a632d9bc882891e17e",
        "f776b92a0d52bb522043812dacb9c21ac11858e2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 16 08:00:07 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 16 08:00:08 2015 +0000"
      },
      "message": "Merge \"Remove dead blocks for the blocks_ array.\""
    },
    {
      "commit": "f776b92a0d52bb522043812dacb9c21ac11858e2",
      "tree": "619ae49853b201fc4ea9d0ac4b113c6226e3c339",
      "parents": [
        "acf9b7b7616a9b104e6f2146051d8e14d9cb9030"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 18:22:45 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 21:51:12 2015 +0100"
      },
      "message": "Remove dead blocks for the blocks_ array.\n\nThis prevents crashing because of structurally incorrect\nblocks. Also we now don\u0027t need to remove its instructions.\n\nTest case courtesy of Serguei I Katkov.\n\nChange-Id: Ia3ef9580549fc3546e8cd5f346079b1f0ceb2a61\n"
    },
    {
      "commit": "a76a08fed88bd081bcc4d240f1ba3472a2acbbab",
      "tree": "cd016bb007c3757ab2a6df28bc1a65d6a8e78e44",
      "parents": [
        "acf9b7b7616a9b104e6f2146051d8e14d9cb9030",
        "9021825d1e73998b99c81e89c73796f6f2845471"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 14:10:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 15 14:10:29 2015 +0000"
      },
      "message": "Merge \"Type MoveOperands.\""
    },
    {
      "commit": "acf9b7b7616a9b104e6f2146051d8e14d9cb9030",
      "tree": "14ce120d10571c187a2c6bdc87b350cb9a7e3ad6",
      "parents": [
        "e1d0b80eef04606e426377f30e7e862b3337e2c6",
        "0d9f17de8f21a10702de1510b73e89d07b3b9bbf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 13:29:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 15 13:29:03 2015 +0000"
      },
      "message": "Merge \"Move the linear order to the HGraph.\""
    },
    {
      "commit": "0d9f17de8f21a10702de1510b73e89d07b3b9bbf",
      "tree": "3d58a2a165ee2bc5af0e813b1ffa893fba72ed6d",
      "parents": [
        "9bb3e8e10d7d9230a323511094a9e260062a1473"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 14:17:44 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 14:17:44 2015 +0100"
      },
      "message": "Move the linear order to the HGraph.\n\nBug found by Zheng Xu: SsaLivenessAnalysis being a stack allocated\nobject, we should not refer to it in later phases of the compiler.\nSpecifically, the code generator was using the linear order, which\nwas stored in the liveness analysis object.\n\nChange-Id: I574641f522b7b86fc43f3914166108efc72edb3b\n"
    },
    {
      "commit": "9021825d1e73998b99c81e89c73796f6f2845471",
      "tree": "13e1038931cbb8bf8b8d0f4e3f51553ba1bfa983",
      "parents": [
        "858d28ca2e73a785977f53141e775a7d4841b89d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 11:56:51 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 15 12:53:42 2015 +0100"
      },
      "message": "Type MoveOperands.\n\nThe ParallelMoveResolver implementation needs to know if a move\nis for 64bits or not, to handle swaps correctly.\n\nBug found, and test case courtesy of Serguei I. Katkov.\n\nChange-Id: I9a0917a1cfed398c07e57ad6251aea8c9b0b8506\n"
    },
    {
      "commit": "66d126ea06ce3f507d86ca5f0d1f752170ac9be1",
      "tree": "8e247db17ef085b55725b21c64d292414fd00b32",
      "parents": [
        "9bb3e8e10d7d9230a323511094a9e260062a1473"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 03 16:02:44 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 15 12:51:49 2015 +0100"
      },
      "message": "ART: Implement HBooleanNot instruction\n\nOptimizations simplifying operations on boolean values (boolean\nsimplifier, instruction simplifier) can benefit from having a special\nHInstruction for negating booleans in order to perform more transforms\nand produce faster machine code.\n\nThis patch implements HBooleanNot as \u0027x xor 1\u0027, assuming that booleans\nare 1-bit integers and allowing for a single-instruction negation on\nall supported platforms.\n\nChange-Id: I33a2649c1821255b18a86ca68ed16416063c739f\n"
    },
    {
      "commit": "188d4316a880ae24aed315aa52dc503c4fcb1ec7",
      "tree": "a480bdc4a80f63d46abcde2ef7a36e1ad072d624",
      "parents": [
        "27ef3177fb164b5e1a3b8a6fd43d25f3074e586d"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Thu Apr 09 18:30:21 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 10 16:19:55 2015 +0000"
      },
      "message": "Opt compiler: Instruction simplification for HAdd, HNeg, HNot, HSub.\n\nUnder assumptions for the \u0027cost\u0027 of each IR (eg. neither HAdd nor HSub\nare faster than the other), transformations are only applied if they\n(locally) cannot degrade the quality of the graph. The code could be\nextended to look at uses of the IRs and detect more opportunities for\noptimisations.  The optimisations in this patch do not look at other\nuses for their inputs.\n\nChange-Id: Ib60dab007af30f43421ef5bb55db2ec32fb8fc0c\n"
    },
    {
      "commit": "3dcd58cd54a922b864494fb7fff4a7f7a8562db9",
      "tree": "1e7b416de3dd46b0301f835632f8b3d0392beb97",
      "parents": [
        "d43f160dc294655885a2c273307d34585c4ce97b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 03 11:02:38 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 03 12:36:38 2015 +0100"
      },
      "message": "Fix a bug when creating a HDeoptimization instruction.\n\nWe need to copy the environment, instead of just pointing\nto an existing one. Otherwise, if the instruction that initially\nholds the environemnt gets removed from the graph, any update\nto an instruction in that environment will not be reflected in it.\n\nbug:20058506\n\nChange-Id: I2a62476d0851ecbc3707c0da395d8502ee437422\n"
    },
    {
      "commit": "e4285226d1d4d7c4feee16a968540fb2e363339f",
      "tree": "835b91c05b39cdb1053c2cd28e0e23c202dc020b",
      "parents": [
        "79bdb47d8c87ca3ee7da4aa2ca56105728257a32",
        "d43b3ac88cd46b8815890188c9c2b9a3f1564648"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Apr 01 23:15:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 01 23:15:53 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Deoptimization-based bce.\"\"\""
    },
    {
      "commit": "0c365e674545159fd77b998081207f0685a605e5",
      "tree": "038e68e264ee0a25f898cbf313140d793bab4708",
      "parents": [
        "a109632b240f3c9355ca95500f6f48e4478e3c51"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Mar 31 15:09:29 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Apr 01 15:00:47 2015 -0700"
      },
      "message": "CanThrow() of HNewArray should return true.\n\nChange-Id: I9950f1c391dfeb26cf59cee769705d01d8e283d5\n"
    },
    {
      "commit": "d43b3ac88cd46b8815890188c9c2b9a3f1564648",
      "tree": "6c599c3f40d57e92786bd7f41c0541d9eaa2643b",
      "parents": [
        "a109632b240f3c9355ca95500f6f48e4478e3c51"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Apr 01 14:03:04 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Apr 01 14:05:13 2015 -0700"
      },
      "message": "Revert \"Revert \"Deoptimization-based bce.\"\"\n\nThis reverts commit 0ba627337274ccfb8c9cb9bf23fffb1e1b9d1430.\n\nChange-Id: I1ca10d15bbb49897a0cf541ab160431ec180a006\n"
    },
    {
      "commit": "a0466e1773ec1db32c4b3d04b0416ffef5005b39",
      "tree": "83901e77017d4fdd89b00936a76390b2c0c32c05",
      "parents": [
        "c4181826dcd2b2e484a5b01871f49680881ad379"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 27 15:00:40 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 27 15:00:40 2015 +0000"
      },
      "message": "GVN HClinitCheck nodes.\n\nChange-Id: I5c79caadd57d10214a44149fda53e9e185ac7eca\n"
    },
    {
      "commit": "8d5b8b295930aaa43255c4f0b74ece3ee8b43a47",
      "tree": "c26fc49bbc74615e7f0b9657aaf3757a8282d7a9",
      "parents": [
        "c8924c6ea9e83ba3832dd5551df38ab06f4aaca9"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 10:51:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 26 14:10:03 2015 +0000"
      },
      "message": "ART: Force constants into the entry block\n\nOptimizations such as GVN and BCE make the assumption that all\nconstants are located in the entry block of the CFG, but not all\npasses adhere to this rule.\n\nThis patch makes constructors of constants private and only accessible\nto friend classes - HGraph for int/long constants and SsaBuilder for\nfloat/double - which ensure that they are placed correctly and not\nduplicated.\n\nNote that the ArenaAllocatorAdapter was modified to not increment\nthe ArenaAllocator\u0027s internal reference counter in order to allow\nfor use of ArenaSafeMap inside an arena-allocated objects. Because\ntheir destructor is not called, the counter does not get decremented.\n\nChange-Id: I36a4fa29ae34fb905cdefd482ccbf386cff14166\n"
    },
    {
      "commit": "790412959a6413a585f45fc5f77fe7106311a00c",
      "tree": "94d7d6016c5a58d6c5f31d8350330c8025baa014",
      "parents": [
        "9ed05c4cf76aaeee48a1eb5bbae659b0acbabe67"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 26 10:05:54 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 26 10:05:54 2015 +0000"
      },
      "message": "Use the original invoke type when inlining.\n\nWhen resolving a method through the compiler driver, the code makes\nsure the call in the DEX bytecode matches the kind of method found,\nto check for IncompatibleClassChangeError. Because when we sharpen\nan invoke virtual, we transform the invoke kind to direct, we must not\nuse the new kind, but the one in DEX.\n\nChange-Id: Iaf77b27b529c659ea48ffb19f46427552c9e3654\n"
    },
    {
      "commit": "651b4fb337eba9971bb830d9e037c633e29a6eba",
      "tree": "06cb3f4534205d2a8947e211834806d6343ead15",
      "parents": [
        "39b4bf99a1167cd9d5e5454059dd360e67f1eac1",
        "9437b78780f9e6ffa5797ebe82de8e8d7f3a5ed6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 25 17:19:07 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 25 17:19:08 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Inline across dex files.\"\"\""
    },
    {
      "commit": "9437b78780f9e6ffa5797ebe82de8e8d7f3a5ed6",
      "tree": "d99027ae9295f162865c01f9a8795ac8cda09b84",
      "parents": [
        "11e99b19f48576f1bb6d0993635b34b6e09c9832"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 25 10:08:51 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 25 17:13:54 2015 +0000"
      },
      "message": "Revert \"Revert \"Inline across dex files.\"\"\n\nThis reverts commit 6a816cf624ba56bf2872916d7b65b18fd9a411ef.\n\nChange-Id: I36cb524108786dd7996f2aea0443675be1f1b859\n"
    },
    {
      "commit": "b2bd1c5f9171f35fa5b71ada42d1a9e11189428d",
      "tree": "db9165b3daa18d1d430b690b78c2d125bade3021",
      "parents": [
        "11e99b19f48576f1bb6d0993635b34b6e09c9832"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 25 11:17:37 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 25 12:30:26 2015 +0000"
      },
      "message": "ART: Formatting and comments in BooleanSimplifier\n\nChange-Id: I9a5aa3f2aa8b0a29d7b0f1e5e247397cf8e9e379\n"
    },
    {
      "commit": "10f56cb6b4e39ed0032e9a23b179b557463e65ad",
      "tree": "9f53251569ed32af7add31cf16206f255261b97e",
      "parents": [
        "3e690d11d26b3ae3891a03cdef88e7c2272109f5"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 18:49:14 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 19:13:13 2015 +0000"
      },
      "message": "ART: Fix crash in gtests\n\nSsaLivenessAnalysis was crashing after change of iteration order in\n142377 because gtests do not always build reverse post order.\n\nChange-Id: If5ad5b7c52040b119c4415f0b942988049fa3c16\n"
    },
    {
      "commit": "b64b782f9ae7a94ecbbf64c83cbcdc7d716ba560",
      "tree": "df3aa814ff7762d681c50781c413fd510440ae61",
      "parents": [
        "2c2d00e8ca841aa2f57fa2f852e896378ef67144",
        "46e2a3915aa68c77426b71e95b9f3658250646b7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 17:31:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 24 17:31:31 2015 +0000"
      },
      "message": "Merge \"ART: Boolean simplifier\""
    },
    {
      "commit": "46e2a3915aa68c77426b71e95b9f3658250646b7",
      "tree": "2b0a4470b05291894db73c631fe94f0fdff8c46b",
      "parents": [
        "bce0855ca1dbb1fa226c5b6a81760272ce0b64ef"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Mar 16 17:31:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 17:28:37 2015 +0000"
      },
      "message": "ART: Boolean simplifier\n\nThe optimization recognizes the negation pattern generated by \u0027javac\u0027\nand replaces it with a single condition. To this end, boolean values\nare now consistently assumed to be represented by an integer.\n\nThis is a first optimization which deletes blocks from the HGraph and\ndoes so by replacing the corresponding entries with null. Hence,\nexisting code can continue indexing the list of blocks with the block\nID, but must check for null when iterating over the list.\n\nChange-Id: I7779da69cfa925c6521938ad0bcc11bc52335583\n"
    },
    {
      "commit": "2c2d00e8ca841aa2f57fa2f852e896378ef67144",
      "tree": "c4050a4e6e9aa6f091ae042daf940ba0a1e72136",
      "parents": [
        "09aa354d0d7ff58cb9f028647d81a67648c9e0ba",
        "da4d79bc9a4aeb9da7c6259ce4c9c1c3bf545eb8"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 17:00:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 24 17:01:00 2015 +0000"
      },
      "message": "Merge \"Unify ART\u0027s various implementations of bit_cast.\""
    },
    {
      "commit": "6a816cf624ba56bf2872916d7b65b18fd9a411ef",
      "tree": "47d03a97a9b5101ea543beda55f29cce339bd06e",
      "parents": [
        "7e4c3508e4f5512650b63c41f7872a749e99aee9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 24 16:17:56 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 24 16:17:56 2015 +0000"
      },
      "message": "Revert \"Inline across dex files.\"\n\nbug: 19904089\nbug: 19903495\n\nThis reverts commit 7e4c3508e4f5512650b63c41f7872a749e99aee9.\n\nChange-Id: I15df746b5f1882cce78eedde6c05c0d3b69bfa4a\n"
    },
    {
      "commit": "da4d79bc9a4aeb9da7c6259ce4c9c1c3bf545eb8",
      "tree": "151dd61c4b6a8fd512ea4c2c862af28b02f4ed9c",
      "parents": [
        "af87659f462ac650009fce295097cae3dabce171"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 14:36:11 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 24 16:02:21 2015 +0000"
      },
      "message": "Unify ART\u0027s various implementations of bit_cast.\n\nART had several implementations of art::bit_cast:\n\n1. one in runtime/base/casts.h, declared as:\n\n   template \u003cclass Dest, class Source\u003e\n   inline Dest bit_cast(const Source\u0026 source);\n\n2. another one in runtime/utils.h, declared as:\n\n   template\u003ctypename U, typename V\u003e\n   static inline V bit_cast(U in);\n\n3. and a third local version, in runtime/memory_region.h,\n   similar to the previous one:\n\n   template\u003ctypename Source, typename Destination\u003e\n   static Destination MemoryRegion::local_bit_cast(Source in);\n\nThis CL removes versions 2. and 3. and changes their callers\nto use 1. instead.  That version was chosen over the others\nas:\n- it was the oldest one in the code base; and\n- its syntax was closer to the standard C++ cast operators,\n  as it supports the following use:\n\n    bit_cast\u003cDestination\u003e(source)\n\n  since `Source\u0027 can be deduced from `source\u0027.\n\nChange-Id: I7334fd5d55bf0b8a0c52cb33cfbae6894ff83633\n"
    },
    {
      "commit": "0ba627337274ccfb8c9cb9bf23fffb1e1b9d1430",
      "tree": "0e1d0813c1d8d1c7239a900c1653296975713df0",
      "parents": [
        "e295e6ec5beaea31be5d7d3c996cd8cfa2053129"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 24 02:39:46 2015 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 24 02:39:46 2015 +0000"
      },
      "message": "Revert \"Deoptimization-based bce.\"\n\nThis breaks compiling the core image:\n\n Error after BCE: art::SSAChecker: Instruction 219 in block 1 does not dominate use 221 in block 1.\n\nThis reverts commit e295e6ec5beaea31be5d7d3c996cd8cfa2053129.\n\nChange-Id: Ieeb48797d451836ed506ccb940872f1443942e4e\n"
    },
    {
      "commit": "e295e6ec5beaea31be5d7d3c996cd8cfa2053129",
      "tree": "4d8a657d23d511743ce35bee596544d7f652efdb",
      "parents": [
        "d24ba2c44c76a2b2dd13aafe8f7981c15be31a98"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Sat Mar 07 06:37:59 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Mar 23 16:39:37 2015 -0700"
      },
      "message": "Deoptimization-based bce.\n\nA mechanism is introduced that a runtime method can be called\nfrom code compiled with optimizing compiler to deoptimize into\ninterpreter. This can be used to establish invariants in the managed code\nIf the invariant does not hold at runtime, we will deoptimize and continue\nexecution in the interpreter. This allows to optimize the managed code as\nif the invariant was proven during compile time. However, the exception\nwill be thrown according to the semantics demanded by the spec.\n\nThe invariant and optimization included in this patch are based on the\nlength of an array. Given a set of array accesses with constant indices\n{c1, ..., cn}, we can optimize away all bounds checks iff all 0 \u003c\u003d min(ci) and\nmax(ci) \u003c array-length. The first can be proven statically. The second can be\nestablished with a deoptimization-based invariant. This replaces n bounds\nchecks with one invariant check (plus slow-path code).\n\nChange-Id: I8c6e34b56c85d25b91074832d13dba1db0a81569\n"
    },
    {
      "commit": "7e4c3508e4f5512650b63c41f7872a749e99aee9",
      "tree": "b6f9f89eb384a386ee756e6dd98d9f979feef2ce",
      "parents": [
        "0b1692cd451053198362993d1f6939fde90c2f50"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 18 11:00:52 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 23 17:42:01 2015 +0000"
      },
      "message": "Inline across dex files.\n\nChange-Id: I5c2c44f5130b50f0bad21a6877a3935dc60b4a85\n"
    },
    {
      "commit": "ddd04a64a13bde9551ca1174957e055cd2132cff",
      "tree": "cfee62d10e81752ec3af2be1b03dc04a4b176fc9",
      "parents": [
        "90a6adc0f6e55ec02f9443c12e93fea85c1a9393",
        "915b9d0c13bb5091875d868fbfa551d7b65d7477"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 13 08:45:10 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 13 08:45:12 2015 +0000"
      },
      "message": "Merge \"Tweak liveness when instructions are used in environments.\""
    },
    {
      "commit": "915b9d0c13bb5091875d868fbfa551d7b65d7477",
      "tree": "63822d7081b0da33ccda2019dd52025f0ecedb35",
      "parents": [
        "bf5565a75876a84c8c2401df597d922a7870a8f2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 15:11:19 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 12 17:55:01 2015 +0000"
      },
      "message": "Tweak liveness when instructions are used in environments.\n\nInstructions remain live when debuggable, but only instructions\nwith object types remain live when non-debuggable.\n\nEnable StackVisitor::GetThisObject for optimizing.\n\nChange-Id: Id87b2cbf33a02450059acc9993995782e5f28987\n"
    },
    {
      "commit": "97d30aca68af2aa4f114a01d7a7d73e4bf009fe0",
      "tree": "e441187dfab14ffab41aff6576df6aaa14ce8b1c",
      "parents": [
        "3848c4fbc189287bca1298d45d07e21ec90c7c82",
        "b2fd7bca70b580921eebf7c45769c39d2dfd8a5a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 12 17:00:14 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 12 17:00:15 2015 +0000"
      },
      "message": "Merge \"Opt compiler: Basic simplification for arithmetic operations.\""
    },
    {
      "commit": "d335083828e2838bd360303be768e600275cedf5",
      "tree": "f0e584e15fce5ae7ad4fb8e29c4f8f3d76ba1184",
      "parents": [
        "d304629202eec2ab053a47fc7bcf10223b5ccea4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 12 11:16:23 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 12 11:18:57 2015 +0000"
      },
      "message": "Run the natural loop recognizer before building SSA.\n\nSSA building checks the consistency of the graph when dealing\nwith dead phis.\n\nFixes continuous AOSP builds with optimizing.\n\nChange-Id: Ia9a0f0adc24a8e144e54444e090ad828b9b40040\n"
    },
    {
      "commit": "b2fd7bca70b580921eebf7c45769c39d2dfd8a5a",
      "tree": "c5dae29519df73f889ba14495eb79d545cd7d6e5",
      "parents": [
        "356286f989941ac495417195e4129aaceaf36a83"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Wed Mar 11 16:48:16 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Wed Mar 11 16:48:16 2015 +0000"
      },
      "message": "Opt compiler: Basic simplification for arithmetic operations.\n\nThe optimisations in this patch do not look further than the\ninputs of each operation.\n\nChange-Id: Iddd0ab6b360b9e7bb042db22086d51a31be85530\n"
    },
    {
      "commit": "234d69d075d1608f80adb647f7935077b62b6376",
      "tree": "f6b68ff38722dc91bd0de2387609ee0ce950e0ce",
      "parents": [
        "31df246d330c45f5691e226d176d0c59450f8435"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:28:50 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 11 14:23:38 2015 +0000"
      },
      "message": "Revert \"Revert \"[optimizing] Enable x86 long support.\"\"\n\nThis reverts commit 154552e666347d41d95d7619c6ee56249ff4feca.\n\nChange-Id: Idc726551c249a888b7ff5fde8508ae50e81b2e13\n"
    },
    {
      "commit": "e0fe7ae36180863e45cbb9d1e6e9c30b1b1a949c",
      "tree": "26269a55f16d8bee5b5898318fa18491fd72061c",
      "parents": [
        "3dd536ffd7e8f82e4587964545b272acbd61d68e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:02:49 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 16:20:35 2015 +0000"
      },
      "message": "Make the SSA builder honor the debuggable flag.\n\nThis requires to properly type phis that are only\nused by environments, and discard phis with incomptable types.\nThe code generators do not handle these conflicting types. In\nthe process, ensure a phi has a type that does not depend\non the order of the inputs (for example (char, short) -\u003e short),\nand set int for int-like types. We can refine this later.\n\nChange-Id: I60ab601d6d00b1cbf18623ee4ff1795aa28f84a1\n"
    },
    {
      "commit": "0e242b5cad3c0b68b72f28c1e5fd3fdd4c05bfd8",
      "tree": "1446f5a1ec95cf1c641228fd7dc2fecb67962723",
      "parents": [
        "7e5b740cc387645c6b2e0dc8604b1e074c398b4d",
        "154552e666347d41d95d7619c6ee56249ff4feca"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 06 16:10:31 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 06 16:10:32 2015 +0000"
      },
      "message": "Merge \"Revert \"[optimizing] Enable x86 long support.\"\""
    },
    {
      "commit": "154552e666347d41d95d7619c6ee56249ff4feca",
      "tree": "b8bdb820be33317f23ef1d3e43d13b2b6bfb3ba5",
      "parents": [
        "b4ba354cf8d22b261205494875cc014f18587b50"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 06 16:10:14 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 06 16:10:14 2015 +0000"
      },
      "message": "Revert \"[optimizing] Enable x86 long support.\"\n\nFew libcore failures.\n\nThis reverts commit b4ba354cf8d22b261205494875cc014f18587b50.\n\nChange-Id: I4a28d853e730dff9b69aec9555505803cf2fcd63\n"
    },
    {
      "commit": "2ed20afc6a1032e9e0cf919cb8d1b2b41e147182",
      "tree": "169a7bf67d0431922896fe91db3f34a03b786ad7",
      "parents": [
        "b341b70b2418922d9b792cdba96d22bece87c55a"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Fri Mar 06 13:55:35 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Fri Mar 06 14:15:57 2015 +0000"
      },
      "message": "Opt compiler: Clean the use of `virtual` and `OVERRIDE`.\n\nChange-Id: I806ec522b979334cee8f344fc95e8660c019160a\n"
    },
    {
      "commit": "b4ba354cf8d22b261205494875cc014f18587b50",
      "tree": "b6ce1e89f56f4d5adf238188df5b02fd7e2c23ac",
      "parents": [
        "af8db2ea18135588b267fe9a0b2f7af734b906cc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 05 11:28:58 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 06 11:37:33 2015 +0000"
      },
      "message": "[optimizing] Enable x86 long support.\n\nChange-Id: I9006972a65a1f191c45691104a960366747f9d16\n"
    },
    {
      "commit": "e4335eb5bcbca6927e51c10cf0de3516d94ef599",
      "tree": "3f69b4a17dc5d7ac5f6cab1ffee5a4091b5c9ba9",
      "parents": [
        "5e42cd3eee2c89214a331a36fe226cfcc57917a3"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Mar 02 15:14:13 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Mar 03 17:39:04 2015 -0800"
      },
      "message": "Make BCE a no-op if there is no array access.\n\nChange-Id: I8456182808c1dbaa0c0ae1b8c2e94bb17baf5f29\n"
    },
    {
      "commit": "dc5ac731f6369b53b42f1cee3404f3b3384cec34",
      "tree": "72a90f1da01185014551628078b98a79e5d5230e",
      "parents": [
        "0e5e728a4a4f042f157e1897cc8bbc2b0bb110b1"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Feb 25 11:28:05 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Mar 03 13:24:03 2015 -0800"
      },
      "message": "Opt compiler: enhance gvn for commutative ops.\n\nChange-Id: I415b50d58b30cab4ec38077be22373eb9598ec40\n"
    },
    {
      "commit": "2d043b356d2e5c911892badf78aa56b843c5c3a6",
      "tree": "0d00c6118ecc251f7b4af0631308e6ef2104d6ad",
      "parents": [
        "0b6daeb0f0014474b542cbba1f713eb0dbefb7f9",
        "61d544bfb812d79f5c9ddad171198836cea719db"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 24 12:39:53 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 24 12:39:54 2015 +0000"
      },
      "message": "Merge \"[optimizing] Add if-context sensitivity for null popagation.\""
    },
    {
      "commit": "61d544bfb812d79f5c9ddad171198836cea719db",
      "tree": "f1f43e31e9fdb6f141f1f028e43b6fc62083ed49",
      "parents": [
        "3173c8a11f7e23a89526e0ac3b21af5150966d74"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Feb 23 16:46:57 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Feb 24 11:28:18 2015 +0000"
      },
      "message": "[optimizing] Add if-context sensitivity for null popagation.\n\nChange-Id: I3725b6c6a6cf44440c34a1bfb67e623531e665d6\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": "36fb59b15fbca20c22e9daf2943fcfeebc97848f",
      "tree": "1d254d5abd062512efaad2c03f97b592f3031808",
      "parents": [
        "1382e569b31f4fab61fcfca5aa93275a2a3cb757",
        "b1498f67b444c897fa8f1530777ef118e05aa631"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Feb 20 14:27:00 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 20 14:27:01 2015 +0000"
      },
      "message": "Merge \"Improve type propagation with if-contexts\""
    },
    {
      "commit": "b1498f67b444c897fa8f1530777ef118e05aa631",
      "tree": "7ff4709329b0ba752a6111103a76fcea896a3adb",
      "parents": [
        "acf735c13998ad2a175f5a17e7bfce220073279d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Feb 16 13:13:29 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Feb 20 14:26:08 2015 +0000"
      },
      "message": "Improve type propagation with if-contexts\n\nThis works by adding a new instruction (HBoundType) after each `if (a\ninstanceof ClassA) {}` to bound the type that `a` can take in the True-\ndominated blocks.\n\nChange-Id: Iae6a150b353486d4509b0d9b092164675732b90c\n"
    },
    {
      "commit": "4fe292e2b6ba3980605373f183055a374084c65b",
      "tree": "cc689a549944d5302400aa155722e4e8715211b6",
      "parents": [
        "76f82fc75f245101828e2fdbbdec676af1717f0b",
        "acf735c13998ad2a175f5a17e7bfce220073279d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Feb 20 10:40:50 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 20 10:40:51 2015 +0000"
      },
      "message": "Merge \"Reference type propagation\""
    },
    {
      "commit": "b666f4805c8ae707ea6fd7f6c7f375e0b000dba8",
      "tree": "a61439a9bcb555dc575286f3e0bb5e50ce185982",
      "parents": [
        "39109a06015c91188232e59fa9e60e0915d24cd7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 18 14:33:14 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Feb 19 09:59:50 2015 -0800"
      },
      "message": "Move arenas into runtime\n\nMoved arena pool into the runtime.\n\nMotivation:\nAllow GC to use arena allocators, recycle arena pool for linear alloc.\n\nBug: 19264997\nChange-Id: I8ddbb6d55ee923a980b28fb656c758c5d7697c2f\n"
    }
  ],
  "next": "acf735c13998ad2a175f5a17e7bfce220073279d"
}
