)]}'
{
  "log": [
    {
      "commit": "6fa4404f501cf0fb5a87074baec9673cedde25d4",
      "tree": "ade27385c4aa0db96956b873321a7994e69acd8d",
      "parents": [
        "1e739fa94947147953c53e92964e0e9e1eac0526"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 19 18:42:49 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 12 15:46:22 2018 +0100"
      },
      "message": "Simplify const-string.indexOf().\n\nSimplify String.indexOf() called on empty or single-char\nconstant string. We see these patterns in inlined\n    java.net.URI$Parser.scan(int, int, String, String)\ncalled with constant strings from other URI$Parser methods.\nThe empty string simplification allows constant folding\nand DCE to remove some of the code. The single-character\nstring simplification avoids entrypoint call overhead.\n\nTest: New tests in 458-checker-instruct-simplification\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I4d3c997a8d6220202d481bbf8cbf280832c27cd7\n"
    },
    {
      "commit": "05e34f4cb8c9db165d1008721e874b9dd3db024b",
      "tree": "c41d397ef5cfb9d7918fceadcda3195a0d0d91de",
      "parents": [
        "428d80e3a49f732b39bb0c71cfde26451e3fdf4d"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu May 24 13:19:05 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jun 11 14:03:37 2018 +0100"
      },
      "message": "Revert^2 \"Remove support for Valgrind in ART.\"\n\n- Disable test configuration art-gtest-valgrind64\n  (art-gtest-valgrind32 was already disabled).\n- Remove Makefile logic regarding testing with Valgrind.\n- Remove occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_VALGRIND`.\n- Replace occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_ASAN` with\n  `TEST_DISABLED_FOR_MEMORY_TOOL`.\n- Replace the potentially dynamically evaluated\n  `RUNNING_ON_MEMORY_TOOL` expression with constant\n  `kRunningOnMemoryTool`.\n- Simplify and fold the logic of\n  `art::ArenaAllocatorMemoryToolCheckImpl` and\n  `art::ArenaAllocatorMemoryToolCheck` into\n  `art::ArenaAllocatorMemoryTool`.\n- Adjust comments regarding memory tools.\n- Remove Valgrind suppression files.\n- Remove `--callgrind` option from tools/art.\n\nThis reverts commit 8b362a87d52a6668ffd2283ef6ffc274315f41c8.\n\nChange-Id: I23c76845e6ccf766f19b22b58a0d5161f60842a9\nTest: art/test.py\nTest: art/test/testrunner/run_build_test_target.py art-asan\nBug: 77856586\nBug: 29282211\n"
    },
    {
      "commit": "b4eb1b19e1dd35d12a408358656c1421f507d231",
      "tree": "03ba65d206b5e6222dcca0f62a973bcbb1bf8a50",
      "parents": [
        "ff7ff426e136aa8fd6e33d873f6259311982f6bb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 24 11:09:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 11:32:31 2018 +0100"
      },
      "message": "Refactor ClassRoot/GetClassRoot().\n\nMove it outside the ClassLinker, into its own header file,\nand add retrieval based on a mirror class template argument.\nKeep the SetClassRoot() as a private member of ClassLinker.\n\nMake the new GetClassRoot()s return ObjPtr\u003c\u003e.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Icbc6b62b41f6ffd65b437297a21eadbb0454e2b7\n"
    },
    {
      "commit": "8b362a87d52a6668ffd2283ef6ffc274315f41c8",
      "tree": "14b187cd0b4afde501b9cc7a9dc82c997362e888",
      "parents": [
        "8268cb677bd92bfbcfec7e803775c29687494e53"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 22 20:54:14 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 22 20:54:14 2018 +0000"
      },
      "message": "Revert \"Remove support for Valgrind in ART.\"\n\nThis reverts commit 8268cb677bd92bfbcfec7e803775c29687494e53.\n\nReason for revert: ASAN failures\n\nChange-Id: I7e66d3f3fb461ae4f6dea6ec7d506b7dface3402\nTest: SANITIZE_HOST\u003daddress m test-art-host\nBug: 77856586\nBug: 29282211\n"
    },
    {
      "commit": "8268cb677bd92bfbcfec7e803775c29687494e53",
      "tree": "b63ca42dcd440117187e3c859b4b311b11b8137e",
      "parents": [
        "004b8875b291af5001d384fb1eb76ae0660ff056"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri May 11 15:06:17 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon May 14 18:40:49 2018 +0100"
      },
      "message": "Remove support for Valgrind in ART.\n\n- Disable test configuration art-gtest-valgrind64\n  (art-gtest-valgrind32 was already disabled).\n- Remove Makefile logic regarding testing with Valgrind.\n- Remove occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_VALGRIND`.\n- Replace occurrences of `TEST_DISABLED_FOR_MEMORY_TOOL_ASAN` with\n  `TEST_DISABLED_FOR_MEMORY_TOOL`.\n- Replace the potentially dynamically evaluated\n  `RUNNING_ON_MEMORY_TOOL` expression with constant\n  `kRunningOnMemoryTool`.\n- Simplify and fold the logic of\n  `art::ArenaAllocatorMemoryToolCheckImpl` and\n  `art::ArenaAllocatorMemoryToolCheck` into\n  `art::ArenaAllocatorMemoryTool`.\n- Adjust comments regarding memory tools.\n- Remove Valgrind suppression files.\n- Remove `--callgrind` option from tools/art.\n\nTest: art/test.py\nBug: 77856586\nBug: 29282211\nChange-Id: Ifdcbfccc1830104c455760457df66ede4a4cd135\n"
    },
    {
      "commit": "0dcccd815684b4c7540f9c6d39de161e44e5f51c",
      "tree": "89fce5c16f7d05f81c302a75e2ff744a002a1a3e",
      "parents": [
        "bd78567cef305e35481734b7fc24f68ded031439"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 13:32:25 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "ART: Remove InstructionTypeEquals().\n\nAvoid the virtual call and simply compare the instruction\nkinds.\n\nTest: Rely on TreeHugger.\nChange-Id: I7310de976614c5ec63d61a447a40047de5bc654d\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": "6b6ab3f34f0ed070b31774681d5ece113788b738",
      "tree": "78748d2101148d0c87e16bfde5b249ee0b5a5255",
      "parents": [
        "d0540663a9c582843eb7b192401762860f0dcdf0",
        "c6eec4bed1b5fc5f541929294f3072e769b30ac8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 03 15:59:53 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 03 15:59:53 2018 +0000"
      },
      "message": "Merge \"Eliminate redundant abs on zero extension\""
    },
    {
      "commit": "1d746def1cca72979fa18ce900b248502f7cdcef",
      "tree": "0123e62bd4c0a776f1ff94f6dea617485dde1b24",
      "parents": [
        "dd43fe71d956ca16aecf3a12d12a02dde72cfe82"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 28 16:30:02 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Mar 30 11:05:01 2018 -0700"
      },
      "message": "Recognize nested MIN-MAX operations.\n\nRationale:\nPrior to this CL, select optimizer and instruction\nsimplifier were unable to deal with more than one\nselect. This CLs improves MIN-MAX recognition by\nallowing select diamonds to nest deeper and by\nrecognizing constant clipping operations. This\nyields better optimizable code, as shown with\nmore saturation idioms.\n\nBug: b/74026074\n\nTest: test-art-host,target\nChange-Id: I8a616a19475f1ae87c2b5210afc76b14265bd571\n"
    },
    {
      "commit": "c6eec4bed1b5fc5f541929294f3072e769b30ac8",
      "tree": "448c055f995c796b2d7d9d404349b85279fd3177",
      "parents": [
        "7da5cea7288cd2dc412b1ea3568a800baeab778e"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 29 17:22:00 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Mar 30 10:54:13 2018 -0700"
      },
      "message": "Eliminate redundant abs on zero extension\n\nBug: b/74026074\n\nTest: test-art-host,target\n\nChange-Id: Ic97c866e3843cd172dfae9652104efe33fced8e5\n"
    },
    {
      "commit": "175e7862dbdb44089ef327fc43ba00c791fd3838",
      "tree": "7b7ff4327b51b57e47e4b22af8d771edb9d462c1",
      "parents": [
        "77c6fc7341143dd27c74cddd786398688d7b4c91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 09:03:13 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 10:04:25 2018 +0100"
      },
      "message": "Revert^4 \"Compiler changes for bitstring based type checks.\"\n\nDisabled the build time flag. (No image version bump needed.)\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\n\nThis reverts commit 3fbd3ad99fad077e5c760e7238bcd55b07d4c06e.\n\nChange-Id: I5d83c4ce8a7331c435d5155ac6e0ce1c77d60004\n"
    },
    {
      "commit": "d1ede32d56d2b6c95f94a8c67d8b9f309940d9de",
      "tree": "1aa42a51731533c9d554a913e655b8091fc6829d",
      "parents": [
        "41a10575b319ca9549d7b3e8a9fe91c1cc602659",
        "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:16:37 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 21:16:37 2018 +0000"
      },
      "message": "Merge \"Revert^3 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e",
      "tree": "e8bc33fa60c38f7e1c85f8d4acf6a738df9b426a",
      "parents": [
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "message": "Revert^3 \"Compiler changes for bitstring based type checks.\"\n\nThis reverts commit 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d.\n\nReason for revert: Fails sporadically.\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\nChange-Id: I84d1e9e46c58aeecf17591ff71fbac6a1e583909\n"
    },
    {
      "commit": "7075583146f52a754c6d7c91757a6333bf1b95da",
      "tree": "6e3c7a78d19c1b4f9d952d8143939c9caa5fa5b6",
      "parents": [
        "90637419635837d3a30634eb827bd8aa052adcc7",
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 26 10:24:30 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 10:24:30 2018 +0000"
      },
      "message": "Merge \"Revert^2 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "2286da2d2ff87658a703b5098c106bbcd3b7d218",
      "tree": "f13f130485fe9b06f2c918eeff2f28c01a274503",
      "parents": [
        "f0edca6df56a60e6129a93b3ab6db13cabeb7c5e"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 22 10:50:22 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 22 12:58:28 2018 -0700"
      },
      "message": "Refined recognizing integral MIN-MAX-ABS.\n\nRationale:\nMore contextual information is always better.\n\nBug: b/74026074\n\nTest: test-art-host,target\nChange-Id: I670579423a181b6b6baf1db2440fd56a33ce8771\n"
    },
    {
      "commit": "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d",
      "tree": "ce41c620d2cd411da3c20aa95fb9a69328e77c42",
      "parents": [
        "9ec1e24ebc683b15bb9c6db5554ac2ff9458adae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 12 18:39:15 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 12:12:39 2018 +0000"
      },
      "message": "Revert^2 \"Compiler changes for bitstring based type checks.\"\n\nAdd extra output for debugging failures and re-enable\nthe bitstring type checks.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 26687569\n\nThis reverts commit bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb.\n\nChange-Id: I090e241983f3ac6ed8394d842e17716087d169ac\n"
    },
    {
      "commit": "142b913fcda48aa2cd470b2e0102af66abbd0e97",
      "tree": "f7b33671e2ffcb7e57823d5f3f5973692a18e1fa",
      "parents": [
        "48cc7b11643018806a193877b6bb1c1ea1e8efaf"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 14 15:12:59 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 14 15:12:59 2018 -0700"
      },
      "message": "Recognize MIN-MAX.\n\nRationale:\nBecause more contextual information is better.\n\nBug: b/74026074\n\nTest: test-art-host,target\nChange-Id: If884d64d800823f32d7ca6217c28fef25b86af9e\n"
    },
    {
      "commit": "1f8d51bc03cbc607ae32fadf3a90f385adeffb95",
      "tree": "70e18902051ce47e0d524525b83709efbe6f250f",
      "parents": [
        "7a02c66fd9ed174fc2e49ccc9f582dd661b7de9e"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Feb 15 10:42:37 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 07 09:22:09 2018 -0800"
      },
      "message": "Introduce MIN/MAX/ABS as HIR nodes.\n\nRationale:\nHaving explicit MIN/MAX/ABS operations (in contrast\nwith intrinsics) simplifies recognition and optimization\nof these common operations (e.g. constant folding, hoisting,\ndetection of saturation arithmetic). Furthermore, mapping\nconditionals, selectors, intrinsics, etc. (some still TBD)\nonto these operations generalizes the way they are optimized\ndownstream substantially.\n\nBug: b/65164101\n\nTest: test-art-host,target\n\nChange-Id: I69240683339356e5a012802f179298f0b04c6726\n"
    },
    {
      "commit": "3dad341ed027b760d9b4ee402cb2c93ac484a07a",
      "tree": "a69817c3b2d455273b23d083267ef08c8b9adaee",
      "parents": [
        "d961043ff1dd6fddb68aa90c1f939cfafec24219"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 28 12:01:46 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 01 13:07:04 2018 -0800"
      },
      "message": "Introduce ABS as HIR nodes.\n\nNOTE: step 1 of 2 for\n\"Introduce MIN/MAX/ABS as HIR nodes.\"\n\nRationale:\nHaving explicit MIN/MAX/ABS operations (in contrast\nwith intrinsics) simplifies recognition and optimization\nof these common operations (e.g. constant folding, hoisting,\ndetection of saturation arithmetic). Furthermore, mapping\nconditionals, selectors, intrinsics, etc. (some still TBD)\nonto these operations generalizes the way they are optimized\ndownstream substantially.\n\nBug: b/65164101\n\nTest: test-art-host,target\nChange-Id: I9c93987197216158ba02c8aca2385086adedabc4\n"
    },
    {
      "commit": "bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb",
      "tree": "e281a8dde61e396ed5f20c31d41086b1b1b18389",
      "parents": [
        "83af48e9f4cdfcf3f0069c63561bab4c176bd2f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 13:33:07 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 15:05:16 2018 +0000"
      },
      "message": "Revert \"Compiler changes for bitstring based type checks.\"\n\nBug: 64692057\nBug: 71853552\nBug: 26687569\n\nThis reverts commit eb0ebed72432b3c6b8c7b38f8937d7ba736f4567.\n\nChange-Id: I7daeaa077960ba41b2ed42bc47f17501621be4be\n"
    },
    {
      "commit": "eb0ebed72432b3c6b8c7b38f8937d7ba736f4567",
      "tree": "74d95eb4bfbf01ef6fd3a68695f5d7cec69338d7",
      "parents": [
        "e57043081e6b091a9fd23a84043373148ae72f1f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 10 18:26:38 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 23 13:02:59 2018 +0000"
      },
      "message": "Compiler changes for bitstring based type checks.\n\nWe guard the use of this feature with a compile-time flag,\nset to true in this CL.\n\nBoot image size for aosp_taimen-userdebug in AOSP master:\n  - before:\n    arm boot*.oat: 63604740\n    arm64 boot*.oat: 74237864\n  - after:\n    arm boot*.oat: 63531172 (-72KiB, -0.1%)\n    arm64 boot*.oat: 74135008 (-100KiB, -0.1%)\n\nThe new TypeCheckBenchmark yields the following changes\nusing the little cores of taimen fixed at 1.4016GHz:\n                               32-bit        64-bit\n  timeCheckCastLevel1ToLevel1  11.48-\u003e15.80 11.47-\u003e15.78\n  timeCheckCastLevel2ToLevel1  15.08-\u003e15.79 15.08-\u003e15.79\n  timeCheckCastLevel3ToLevel1  19.01-\u003e15.82 17.94-\u003e15.81\n  timeCheckCastLevel9ToLevel1  42.55-\u003e15.79 42.63-\u003e15.81\n  timeCheckCastLevel9ToLevel2  39.70-\u003e14.36 39.70-\u003e14.35\n  timeInstanceOfLevel1ToLevel1 13.74-\u003e17.93 13.76-\u003e17.95\n  timeInstanceOfLevel2ToLevel1 17.02-\u003e17.95 16.99-\u003e17.93\n  timeInstanceOfLevel3ToLevel1 24.03-\u003e17.95 24.45-\u003e17.95\n  timeInstanceOfLevel9ToLevel1 47.13-\u003e17.95 47.14-\u003e18.00\n  timeInstanceOfLevel9ToLevel2 44.19-\u003e16.52 44.27-\u003e16.51\nThis suggests that the bitstring typecheck should not be\nused for exact type checks which would be equivalent to the\n\"Level1ToLevel1\" benchmark. Whether the implementation is\na beneficial replacement for the kClassHierarchyCheck and\nkAbstractClassCheck on average depends on how many levels\nfrom the target class (or Object for a negative result) is\na typical object\u0027s class.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 71853552\nBug: 26687569\nChange-Id: I538d7e036b5a8ae2cc3fe77662a5903d74854562\n"
    },
    {
      "commit": "ba3a790338725a37ecd4cb314c4a6147e29aef38",
      "tree": "f81b0225fa22d02e9726c743d486d314cde91893",
      "parents": [
        "df6e7fa50734cd052c34e28128a6d2d398790072",
        "04366f382239f4bcf1f9c67bb1ff6975607cd8e4"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 14 16:46:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 14 16:46:34 2017 +0000"
      },
      "message": "Merge \"Revert \"ART: Try to statically evaluate some conditions.\"\""
    },
    {
      "commit": "04366f382239f4bcf1f9c67bb1ff6975607cd8e4",
      "tree": "243c70c2b0317ea52cae27d633d7e68e7aa4db05",
      "parents": [
        "1de1e11ac90db9fad8916ac43d43714ccb8d978f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 14 15:15:19 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 14 15:15:19 2017 +0000"
      },
      "message": "Revert \"ART: Try to statically evaluate some conditions.\"\n\nCL has an unwanted 10-15% compile-time impact.\n\nThis reverts commit 1de1e11ac90db9fad8916ac43d43714ccb8d978f.\n\nChange-Id: I76b45aa95bbd24dd025d2ee6cf37d77fe17b8497\n"
    },
    {
      "commit": "03376f4c4de8e419402bf40fdff4135728ffb21e",
      "tree": "5d55cc893e2c445f6d181830bd6ae446010fbf8f",
      "parents": [
        "3f74ea478d755453a2fe5789ce155e80be3e7c7f",
        "1de1e11ac90db9fad8916ac43d43714ccb8d978f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 13 11:06:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 13 11:06:54 2017 +0000"
      },
      "message": "Merge \"ART: Try to statically evaluate some conditions.\""
    },
    {
      "commit": "1de1e11ac90db9fad8916ac43d43714ccb8d978f",
      "tree": "6653892be4d2372a189c4b82e8c3c8b0be064979",
      "parents": [
        "986005c955860a69d788f7ff7d7f28964eb684ad"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Jul 20 16:33:59 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Dec 12 18:13:10 2017 +0000"
      },
      "message": "ART: Try to statically evaluate some conditions.\n\nIf a condition \u0027cond\u0027 is evaluated in an HIf instruction then in\nthe successors of the this HIF_BLOCK we statically know the value\nof the condition (TRUE in TRUE_SUCC, FALSE in FALSE_SUCC). Using\nthat we could replace another evaluation (use) EVAL of the same\n\u0027cond\u0027 with TRUE value (FALSE value) if every path from the\nENTRY_BLOCK to EVAL_BLOCK contains the edge HIF_BLOCK-\u003eTRUE_SUCC\n(HIF_BLOCK-\u003eFALSE_SUCC).\n\n  if (cond) {\n    ...\n    if (cond) {\n      ...\n    }\n    ...\n    int a \u003d cond ? 5 : 105;\n    ...\n  }\n\nThe patch is a prerequisite step for \"Loop peeling to eliminate\ninvariant exits\" however it brings some value on its own with\na tiny code size reduction in boot-framework.oat (-8Kb).\n\nTest: 458-checker-instruct-simplification\nTest: test-art-target, test-art-host.\nChange-Id: Ifbe45097dc2b5f098176fa1a1d023ea90b76d396\n"
    },
    {
      "commit": "3bcb751d0d2fa440809437a616e9326388600c8e",
      "tree": "b5690b42f19f64442214b808e6760f021c63e0f5",
      "parents": [
        "4388fb213ec746ee18a6bea38ee894f8c19990b9"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 16 15:40:46 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Dec 07 10:27:48 2017 -0800"
      },
      "message": "type conversion elimination for store value only uses.\n\nSome type conversions can be eliminated if the converted values are used\nas store values only. Code generation can handle the conversion\nimplicitly.\n\nTest: run-test on host. 711-checker-type-conversion.\nChange-Id: I60a402cf4610683acc5ca2ceba19045b4c17b843\n"
    },
    {
      "commit": "367e020d85ee5d3c3c5896a20acb1a7e51a4309a",
      "tree": "dc9ab6e265436807d8cf21b57af4e021b7769f71",
      "parents": [
        "d57fdd82fccfa15933033646c9436313b399d528",
        "0259c24f5e83ab69b259245b645076b864b2e2ca"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 21:25:14 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Dec 04 21:25:14 2017 +0000"
      },
      "message": "Merge \"Fix a bug in String.charAt() simplification.\""
    },
    {
      "commit": "0259c24f5e83ab69b259245b645076b864b2e2ca",
      "tree": "20a12e5d7ac9c1bcbf8f4524583f016a53ae34ca",
      "parents": [
        "dc93cac66f1db225474cec5bf0350fd7a148085e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 11:27:47 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 11:52:21 2017 +0000"
      },
      "message": "Fix a bug in String.charAt() simplification.\n\nDo not pass method index as a bool flag indicating that the\nHBoundsCheck originates from a String.charAt(). This was\nworking only thanks to the method index unlikely to be 0.\n\nThis bug was introduced in\n    https://android-review.googlesource.com/321573 .\n\nTest: Rely on TreeHugger.\nBug: 30933338\nChange-Id: I2a51e478ee145d342af8cd49f9fdec7adffd77ff\n"
    },
    {
      "commit": "6b1aebe3612a6e87d7d1847ccca0d7a213cd22a2",
      "tree": "8348a6b921579a33e5c1fc07ac55e6e730dda670",
      "parents": [
        "45d3efbc433e321d0fdb3de54b01cf056c3d85ba"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Nov 27 15:39:04 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Dec 01 10:53:46 2017 -0800"
      },
      "message": "Allow devirtualized method to be intrinsified.\n\nFor a invocation that\u0027s devirtualized to a different method, try\nto give intrinsics matching an opportunity before trying to inline it.\n\nTest: run-test on host. 638-checker-inline-cache-intrinsic.\nChange-Id: I51f70835db4c07575c58872a64a603a38dbcb89c\n"
    },
    {
      "commit": "75bb2f3c85330b2aeba9e0a4a25f7eb059bcd754",
      "tree": "2e9c2884dc546540c66b057374822a45f7d9a414",
      "parents": [
        "1f541bf57dfdfe4faf169b811aadb91298a886ca"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 30 14:45:44 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 30 14:45:44 2017 -0800"
      },
      "message": "Type conversion elimination of constants\n\nA better way of eliminating type conversion for constants.\n\nTest: run-test on host. 711-checker-type-conversion.\nChange-Id: I457bc091542a5ac4cc4e77cadb012ee7cb040ce8\n"
    },
    {
      "commit": "5387bc5979c8984aabde455a80692f080d823c89",
      "tree": "747adadb8f5e9ef014195c783c54e8a317a34769",
      "parents": [
        "e1b6d7b8661f4fcaff7bf49348e8644e4a338166",
        "cd09e1f4f9902b82fa62cb2da984ea499e3b2d70"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 27 21:09:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 27 21:09:54 2017 +0000"
      },
      "message": "Merge \"Fix stats reporting over 100% methods compiled.\""
    },
    {
      "commit": "e1b6d7b8661f4fcaff7bf49348e8644e4a338166",
      "tree": "017a220148b6fd7e95fa07cdbb72861e023b3021",
      "parents": [
        "72a3f1da3a300b486626b066e33280108b5ce994",
        "cebb5e709af5ed5b475a56743f984967d991e7b9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 27 19:53:45 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 27 19:53:45 2017 +0000"
      },
      "message": "Merge \"type conversion elimination for constant input\""
    },
    {
      "commit": "cd09e1f4f9902b82fa62cb2da984ea499e3b2d70",
      "tree": "535f7f75849af30b67c560804125ead95909d72b",
      "parents": [
        "72a3f1da3a300b486626b066e33280108b5ce994"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 24 15:02:40 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 27 19:02:34 2017 +0000"
      },
      "message": "Fix stats reporting over 100% methods compiled.\n\nAdd statistics for intrinsic and native stub compilation\nand JIT failing to allocate memory for committing the\ncode. Clean up recording of compilation statistics.\n\nNew statistics when building aosp_taimen-userdebug boot\nimage with --dump-stats:\n  Attempted compilation of 94304 methods: 99.99% (94295) compiled.\n  OptStat#AttemptBytecodeCompilation: 89487\n  OptStat#AttemptIntrinsicCompilation: 160\n  OptStat#CompiledNativeStub: 4733\n  OptStat#CompiledIntrinsic: 84\n  OptStat#CompiledBytecode: 89478\n  ...\nwhere 94304\u003d89487+4733+84 and 94295\u003d89478+4733+84.\n\nTest: testrunner.py -b --host --optimizing\nTest: Manually inspect output of building boot image\n      with --dump-stats.\nBug: 69627511\nChange-Id: I15eb2b062a96f09a7721948bcc77b83ee4f18efd\n"
    },
    {
      "commit": "cebb5e709af5ed5b475a56743f984967d991e7b9",
      "tree": "db2b6c243606979c905ec10a5cced999eba0f209",
      "parents": [
        "8cceb1faf894c26b89ceacd3d60599fe0b4b93b7"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Nov 21 14:44:54 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 22 10:46:57 2017 -0800"
      },
      "message": "type conversion elimination for constant input\n\ntype conversion on constant input can be eliminated if the constant\nvalue falls in the result type\u0027s range.\n\nTest: run-test on host, 711-checker-type-conversion\nChange-Id: I372139d681aa06fa6e760d7814c86ac949292813\n"
    },
    {
      "commit": "68351ebf5b44989f7ccd75933f1f4093a8d3b670",
      "tree": "a0716ffc78d9bd115eca545e70c4ada0facbf3a8",
      "parents": [
        "b360bff818ad0bf59668cd2bebaaeeaa8a3b5dfe",
        "cced8ba4245a061ab047a0a6882468d75d619dd9"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Nov 21 16:56:28 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 21 16:56:28 2017 +0000"
      },
      "message": "Merge \"ART: Introduce individual HInstruction cloning.\""
    },
    {
      "commit": "da283050a1a3ddbb7cefae3f36e8c8c1a6acedb7",
      "tree": "b839d69d0bf8d55d89a95b80621fd3f630536531",
      "parents": [
        "72627a5f675b1c664beb2ad33d60a1c8dca80826"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 07 21:17:24 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 08 13:23:03 2017 +0000"
      },
      "message": "Fix String.equals() for moveable String.class.\n\nIf the String.class is moveable (i.e. running without boot\nimage), the instanceof check emitted by the JIT in the\nString.equals() intrinsic would require read barriers.\nAs we do not really care about the performance of running\nwithout the boot image, disable the intrinsic in this case.\n\nTest: 669-moveable-string-class-equals (--jit)\nBug: 68181300\nChange-Id: I39c9f9935e0482b3b30f1ae5cd23515cbda0603b\n"
    },
    {
      "commit": "cced8ba4245a061ab047a0a6882468d75d619dd9",
      "tree": "b379abfa48689c108e1cacedd2b13d4b5394baf2",
      "parents": [
        "96c76457d5c5af2d4243c78d74ada77de3223d88"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Wed Jul 19 18:18:09 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Nov 07 12:56:17 2017 +0000"
      },
      "message": "ART: Introduce individual HInstruction cloning.\n\nIntroduce API for HInstruction cloning, support it for a few\ninstructions. add a gtest.\n\nTest: cloner_test.cc, test-art-target, test-art-host.\n\nChange-Id: I8b6299be5d04a26390d9ef13a20ce82ee5ae4afe\n"
    },
    {
      "commit": "33bff25bcd7a02d35c54f63740eadb1a4833fc92",
      "tree": "553db4f60878acf2a0fa7036a739d406df9a29b7",
      "parents": [
        "321b3ca9a36d769283c64d4bdee0798db80af524"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 01 14:35:42 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 02 10:11:02 2017 +0000"
      },
      "message": "ART: Make InstructionSet an enum class and add kLast.\n\nAdding InstructionSet::kLast shall make it easier to encode\nthe InstructionSet in fewer bits using BitField\u003c\u003e. However,\nintroducing `kLast` into the `art` namespace is not a good\nidea, so we change the InstructionSet to an enum class.\nThis also uncovered a case of InstructionSet::kNone being\nerroneously used instead of vixl32::Condition::None(), so\nit\u0027s good to remove `kNone` from the `art` namespace.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I6fa6168dfba4ed6da86d021a69c80224f09997a6\n"
    },
    {
      "commit": "dab690714f88c10bec913e6fd939f3899be4bee2",
      "tree": "a1b97a706840df1a0bbeb03f74f2b2f43fb6d32c",
      "parents": [
        "9e842d3e7d6102d964178e36e5d596ca91895147"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Oct 23 13:30:39 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Oct 24 10:41:33 2017 -0700"
      },
      "message": "Fix type conversion bug\n\nRationale:\nNot simplifying double redundant AND\ncrashes a DCHECK due to order in which\nrewrites are done.\n\nTest: test-art-host test-art-target\n\nBug: 68142795\nChange-Id: Ic14340ed336e6c163f9bd7aebd96f6cf41794c7e\n"
    },
    {
      "commit": "61b922847403ac0e74b6477114c81a28ac2e01a0",
      "tree": "02674602fb2592f758f51389b3c7b276ab4df3ee",
      "parents": [
        "6783118d2ad9d759f0617b1219a9e29a10a569f7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 13:23:17 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 18 15:52:51 2017 +0100"
      },
      "message": "ART: Introduce Uint8 loads in compiled code.\n\nSome vectorization patterns are not recognized anymore.\nThis shall be fixed later.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: testrunner.py --target --optimizing on Nexus 5X\nTest: Nexus 5X boots.\nBug: 23964345\nBug: 67935418\nChange-Id: I587a328d4799529949c86fa8045c6df21e3a8617\n"
    },
    {
      "commit": "69d310e0317e2fce97bf8c9c133c5c2c0332e61d",
      "tree": "fba05a1530e6fc4a2e6950303c1f7c6b0ffbb936",
      "parents": [
        "e764d2e50c544c2cb98ee61a15d613161ac6bd17"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 09 14:12:23 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 09:44:26 2017 +0100"
      },
      "message": "Use ScopedArenaAllocator for building HGraph.\n\nMemory needed to compile the two most expensive methods for\naosp_angler-userdebug boot image:\n  BatteryStats.dumpCheckinLocked() : 21.1MiB -\u003e 20.2MiB\n  BatteryStats.dumpLocked(): 42.0MiB -\u003e 40.3MiB\nThis is because all the memory previously used by the graph\nbuilder is reused by later passes.\n\nAnd finish the \"arena\"-\u003e\"allocator\" renaming; make renamed\nallocator pointers that are members of classes const when\nappropriate (and make a few more members around them const).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 64312607\nChange-Id: Ia50aafc80c05941ae5b96984ba4f31ed4c78255e\n"
    },
    {
      "commit": "e764d2e50c544c2cb98ee61a15d613161ac6bd17",
      "tree": "112aa7ca459d2edb4f800897060a2407fcc622c7",
      "parents": [
        "ca6fff898afcb62491458ae8bcd428bfb3043da1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 05 14:35:55 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 09 10:39:22 2017 +0100"
      },
      "message": "Use ScopedArenaAllocator for register allocation.\n\nMemory needed to compile the two most expensive methods for\naosp_angler-userdebug boot image:\n  BatteryStats.dumpCheckinLocked() : 25.1MiB -\u003e 21.1MiB\n  BatteryStats.dumpLocked(): 49.6MiB -\u003e 42.0MiB\nThis is because all the memory previously used by Scheduler\nis reused by the register allocator; the register allocator\nhas a higher peak usage of the ArenaStack.\n\nAnd continue the \"arena\"-\u003e\"allocator\" renaming.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 64312607\nChange-Id: Idfd79a9901552b5147ec0bf591cb38120de86b01\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": "46b6dbcd18df0cb5915ca906fefd9f0b0a1af6a2",
      "tree": "723856081b9d0abcc017b323672e4b1cc99cad16",
      "parents": [
        "844a4edc7f72e33a3b328c3d53ef710909d2273d"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Oct 03 11:37:37 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 05 10:42:13 2017 -0700"
      },
      "message": "Try to preserve dex pc better in vector code.\n\nAlso improves a few comment and uses new data\ntype method to test type consistency.\n\nTest: test-art-host\n\nChange-Id: I4a17f9d5bc458a091a259dd45ebcdc6531abbf84\n"
    },
    {
      "commit": "c8fb211482e27ead6f015faf7e2b02225f728e99",
      "tree": "b9702c99bc3fd2c09e93905b6ea1fdb0d2c9d970",
      "parents": [
        "5adf26c26d6b662d95712f39c40946e23da8b650"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 11:37:52 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 12:44:47 2017 +0100"
      },
      "message": "ART: Simplify And(TypeConversion\u003cInt64\u003e(x), Const32).\n\nReorder the And and TypeConversion as\n    TypeConversion\u003cInt64\u003e(And(x, Const32))\nfor 32-bit constant Const32.\n\nFor example, java.io.Bits.getLong(byte[] b, int off) yields\nbetter generated code on 32-bit platforms for each of its\neight \"b[off + .] \u0026 0xFFL\" sequences.\n\nAlso remove obsolete \"doThrow\" code that attempts to prevent\ninlining; the $noinline$ tag is now honored by the compiler.\n\nTest: Added tests to 458-checker-instruct-simplification.\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: Ib6e413517daa5206764653ebb6c4687a4c68d02d\n"
    },
    {
      "commit": "5adf26c26d6b662d95712f39c40946e23da8b650",
      "tree": "1c57801b08a66219e30354156b1e5c08c60a0f18",
      "parents": [
        "25ae37970757ab06bb75b63a933926a4db4bb38d",
        "d5d2f2ce627aa0f6920d7ae05197abd1a396e035"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 11:32:13 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 03 11:32:13 2017 +0000"
      },
      "message": "Merge \"ART: Introduce Uint8 compiler data type.\""
    },
    {
      "commit": "d5d2f2ce627aa0f6920d7ae05197abd1a396e035",
      "tree": "e8e780780c832e3614a22438a23fb60ee4960ca3",
      "parents": [
        "efac0df8c738764823c637deeca1f3be33912064"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 26 12:37:26 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 10:40:51 2017 +0100"
      },
      "message": "ART: Introduce Uint8 compiler data type.\n\nThis CL adds all the necessary codegen for the Uint8 type\nbut does not add code transformations that use that code.\nVectorization codegens are modified to use Uint8 as the\npacked type when appropriate. The side effects are now\ndisconnected from the instruction\u0027s type after the graph has\nbeen built to allow changing HArrayGet/H*FieldGet/HVecLoad\nto use a type different from the underlying field or array.\n\nNote: HArrayGet for String.charAt() is modified to have\nno side effects whatsoever; Strings are immutable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --target --optimizing on Nexus 6P\nTest: Nexus 6P boots.\nBug: 23964345\nChange-Id: If2dfffedcfb1f50db24570a1e9bd517b3f17bfd0\n"
    },
    {
      "commit": "4a4610a438ff2b836f6fe07839a0689ce618863a",
      "tree": "afb5c6303c6c8eb68f81752a642a5b036049b28d",
      "parents": [
        "865a0503515f78611dce103bd04b7c66c051d304"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Sep 28 16:57:55 2017 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Oct 02 14:09:21 2017 +0100"
      },
      "message": "ART: Add VarHandle fence intrinsics\n\nBug: 65872996\nTest: art/test/run-test --host --64 709\nTest: art/test.py --host -j32\nChange-Id: I6fa399bb00f0c83048ac2b4372b08e4b4b29ce7f\n"
    },
    {
      "commit": "7033d49488c75321ff2e40b26447722ae069c726",
      "tree": "b4474ffba397cbd05bd448e22595c44024a305ca",
      "parents": [
        "6e7e0ddf1dda35570cd9ed23751d9306f7353d7f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 28 16:32:24 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 29 11:24:51 2017 +0100"
      },
      "message": "ART: Generalize \"x \u003e\u003e (s \u0026 m)\" simplification.\n\nExtend the simplification from\n  x SHIFT (s \u0026 mask), mask contains relevant bits\nwhere SHIFT is Shl/Shr/UShr/Ror to\n  x SHIFT (s | mask), mask does not contain relevant bits,\n  x SHIFT (s ^ mask), mask does not contain relevant bits,\n  x SHIFT (s + mask), mask does not contain relevant bits,\n  x SHIFT (s - mask), mask does not contain relevant bits,\n  x SHIFT ((type)s), s is non-64-bit integral type.\n\nThe simplification for the TypeConversion case is motivated\nby the work to introduce Uint8 and convert \u0027\u0026 0xff\u0027 to\nTypeConversion. This CL makes sure the old simplifications\nshall still work. The simplifications for Or/Xor/Add/Sub\nare added just because we can.\n\nTest: Add tests to 548-checker-instruct-simplification.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 23964345\nChange-Id: I71210cb63496fae607a457a627f115260669c2c9\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": "4f7dd346dee85939572d667e204f459c8100e626",
      "tree": "1c69d532adabbca4215de1c2be5b6cbf7df48b3a",
      "parents": [
        "08601a494e87dfba9b06f9fdea37c9342e4896d1"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Sep 12 13:12:57 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Sep 19 09:37:32 2017 -0700"
      },
      "message": "Recognize ABS cases.\n\nRationale:\nenables more optimizations on ABS, such as SIMDization\n\nBackground:\nthis is a breakout CL for SAD\n\nBug: 64091002\n\nTest: test-art-host test-art-target\nChange-Id: I4551c66114a04d51e4140ff222722fdd52ea6e63\n"
    },
    {
      "commit": "bc5460b850a0fa2d8dcf6c8d36b0eb86f8fe46a8",
      "tree": "0db1314987cd0f24c7294c4ad540c7f28e2739d9",
      "parents": [
        "c1bb1cd339b2ebea9c4770fb4d61bacd7d77746f"
      ],
      "author": {
        "name": "Lena Djokic",
        "email": "Lena.Djokic@imgtec.com",
        "time": "Thu Jul 20 16:07:36 2017 +0200"
      },
      "committer": {
        "name": "Goran Jakovljevic",
        "email": "Goran.Jakovljevic@imgtec.com",
        "time": "Mon Aug 14 10:16:34 2017 +0200"
      },
      "message": "MIPS: Support MultiplyAccumulate for SIMD.\n\nMoved support for multiply accumulate from arm64-specific to\ngeneral instruction simplification.\nAlso extended 550-checker-multiply-accumulate test.\n\nTest: test-art-host, test-art-target\n\nChange-Id: If113f0f0d5cb48e8a76273c919cfa2f49fce667d\n"
    },
    {
      "commit": "1e065a54845da12541572f4f149e6ab0dcd20180",
      "tree": "061d28c8905c7bc8ac50c8c86f4073034afb5ba2",
      "parents": [
        "f573972a087b798f74bf5404e271355a2805e100"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Aug 09 13:20:34 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Aug 11 10:23:07 2017 -0700"
      },
      "message": "optimizing: Refactor statistics to use OptimizingCompilerStats helper\n\nRemove all copies of \u0027MaybeRecordStat\u0027, replacing them with a single\nOptimizingCompilerStats::MaybeRecordStat helper.\n\nChange-Id: I83b96b41439dccece3eee2e159b18c95336ea933\n"
    },
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "ba118827465d12177f3996e50133960087b1c916",
      "tree": "f39728cdafc7810004d51c0bef2728b98993daa9",
      "parents": [
        "64a102dde8c5daad83b991710decb418ce43aac5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 12 15:41:56 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 20 13:35:06 2017 +0100"
      },
      "message": "ART: Change method lookup to be more consistent to JLS and the RI.\n\nThe method lookup for different invoke types was previously\nwidely different and didn\u0027t work well with the dex cache\nmethod array where we have only a single slot for each\nMethodId. The new behavior is to perform the same lookup for\nall cases, distinguishing only between interface and\nnon-interface referencing class, and to further align the\nbehavior with the JLS and the RI. Where the JLS conflicts\nwith the RI, we follow the JLS semantics.\n\nThe new lookup for class methods first searches the methods\ndeclared in the superclass chain (ignoring \"copied\" methods)\nand only then looks in the \"copied\" methods. If the search\nin the superclass chain finds a method that has not been\ninherited (i.e. either a private method or a package-access\nmethod where one of the classes in the chain does not belong\nto the same package, see JLS 8.4.8), we still search the\n\"copied\" methods as there may actually be a method inherited\nfrom an interface. This follows the JLS semantics where\ninherited methods are included in the search (JLS 15.12.2.1)\nbut conflicts with the RI where the private or\npackage-access method takes precedence over methods\ninherited from interfaces.\n\nNote that this search can find an accessible method that is\nnot inherited by the qualifying type, either for a package\naccess method when the referrer is in the same package but\nthe qualifying type is in another package, or for a private\nmethod where the referrer is in the same class but the\nqualifying type is actually a subclass. For the moment we\nallow such calls and we shall consider whether to throw\nan IncompatibleClassChangeError in this situation in future\nto comply with JLS 15.12.4.3.\n\nThe new lookup for interface methods searches the interface\nclass, then all the superinterfaces and then the\njava.lang.Object class, see implicitly declared methods in\ninterfaces, JLS 9.2. The search for the maximally-specific\nnon-abstract superinterface method is not yet implemented,\nbut the difference should be difficult to observe as the\nusual subsequent call to FindVirtualMethodForInterface()\nshould yield the same result for any matching method.\n\nThe new test 162-method-idx-clash exposes several cases\nwhere we previously completely messed up due to the effects\nof the DexCache, or where we were out of line with the RI.\nIt also tests a case where the JLS and the RI disagree and\nwe follow the JLS.\n\nTest: art/test/run-test --host --jvm 162-method-resolution\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --host --interp-ac\nTest: Nexus 6P boots.\nTest: testrunner.py --target\nBug: 62855082\nBug: 30627598\nChange-Id: If450c8cff2751369011d649c25d28a482a2c61a3\n"
    },
    {
      "commit": "6597946d29be9108e2cc51223553d3db9290a3d9",
      "tree": "cea6647a45cc59fa1423751179e647124f269990",
      "parents": [
        "a654e0378a8d0bb149362399917e4da2959e6991"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 19 17:25:12 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 22 18:35:05 2017 +0100"
      },
      "message": "Use PC-relative pointer to boot image methods.\n\nIn preparation for adding ArtMethod entries to the .bss\nsection, add direct PC-relative pointers to methods so that\nthe number of needed .bss entries for boot image is small.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --target on Nexus 6P\nTest: Nexus 6P boots.\nTest: Build aosp_mips64-userdebug\nBug: 30627598\nChange-Id: Ia89f5f9975b741ddac2816e1570077ba4b4c020f\n"
    },
    {
      "commit": "50e20d54670aecf1a4fdcf37ef1606d5ca990559",
      "tree": "cb61312693cd392c3f9a569153a55c3eef936714",
      "parents": [
        "e22445fba0e5747ea787429ac64577a9a62aded3"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri May 05 14:07:29 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue May 09 10:41:39 2017 -0700"
      },
      "message": "Moved knowledge on masking shift operands to simplifier.\n\nRationale:\nIt is better to have a single place that simplifies shift\nfactors outside the 32-bit or 64-bit distance range, so\nthat other phases (induction variable analysis, loop optimizations,\netc.) do not have to know about that.\n\nTest: test-art-target, test-art-host\nChange-Id: Idfd90259cca085426cc3055eccb90f3c0976036b\n"
    },
    {
      "commit": "c6ea7d00ad069a2736f603daa3d8eaa9a1f8ea11",
      "tree": "a6d3332a8592fb806841314d55b206b573d37d86",
      "parents": [
        "d68677c5fde1ace16ea58d65733776c954e7acb4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 01 16:46:28 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 08:40:33 2017 -0700"
      },
      "message": "ART: Clean up art_method.h\n\nClean up the header. Fix up other headers including the -inl file,\nin an effort to prune the include graph. Fix broken transitive\nincludes by making includes explicit. Introduce new -inl files\nfor method handles and reference visiting.\n\nTest: source build/envsetup.sh \u0026\u0026 lunch aosp_angler-userdebug \u0026\u0026 mmma art\nTest: source build/envsetup.sh \u0026\u0026 lunch aosp_mips64-userdebug \u0026\u0026 mmma art\nChange-Id: I8f60f1160c2a702fdf3598149dae38f6fa6bc851\n"
    },
    {
      "commit": "6f8e2c9913b24f746a154dda700f609cee3095f9",
      "tree": "463b5925a1c87ef75ceab807e4c238a3e44a555a",
      "parents": [
        "3bd2346db702894ef6c61372e7a83930b1c613ac"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 23 14:37:26 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 27 15:14:40 2017 +0100"
      },
      "message": "Make data dependency around HDeoptimize correct.\n\nWe use HDeoptimize in a few places, but when it comes to data\ndependency we either:\n- don\u0027t have any (BCE, CHA), in which case we should make sure no\n  code that the deoptimzation guards moves before the HDeoptimize\n- have one on the receiver (inline cache), in which case we can\n  update the dominated users with the HDeoptimize to get the data\n  dependency correct.\n\nbug:35661819\nbug:36371709\ntest: 644-checker-deopt\nChange-Id: I4820c6710b06939e7f5a59606971693e995fb958\n"
    },
    {
      "commit": "c4aa82c5b0aa921c51eaf6f6bbaff36501ea2cee",
      "tree": "0da77f4e4a0fca7577f4c4c709353465d46c8581",
      "parents": [
        "3a791cee90451dc32d46f1b0a85fecc6f22f62bf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 06 14:38:52 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 07 14:32:54 2017 +0000"
      },
      "message": "Invoke typed arraycopy for primitive arrays.\n\nApps will always call the Object version of arraycopy. When\nwe can infer the types of the passed arrays, replace the method\nbeing called to be the typed System.arraycopy one.\n\n10% improvement on ExoPlayerBench.\n\nTest: 641-checker-arraycopy\nbug: 7103825\nChange-Id: I872d7a6e163a4614510ef04ae582eb90ec48b5fa\n"
    },
    {
      "commit": "e761bccf9f0d884cc4d4ec104568cef968296492",
      "tree": "05a2d20d61c0e91270df2747f0c242433b5ce62b",
      "parents": [
        "b0355130e38034db6b904783a00f74a3524e1881"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 19 08:59:37 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 19 09:32:17 2017 +0000"
      },
      "message": "Revert \"Revert \"Load the array class in the compiler for allocations.\"\"\n\nThis reverts commit fee255039e30c1c3dfc70c426c3d176221c3cdf9.\n\nChange-Id: I02b45f9a659d872feeb35df40b42c1be9878413a\n"
    },
    {
      "commit": "fee255039e30c1c3dfc70c426c3d176221c3cdf9",
      "tree": "8207b72cc76513fed9f7b3c01aaa32cd54a87f1c",
      "parents": [
        "cc99df230feb46ba717252f002d0cc2da6828421"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jan 19 02:11:15 2017 +0000"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jan 19 02:11:15 2017 +0000"
      },
      "message": "Revert \"Load the array class in the compiler for allocations.\"\n\nlibcore test fails.\n\nThis reverts commit cc99df230feb46ba717252f002d0cc2da6828421.\n\nChange-Id: I5bac595acd2b240886062e8c1f11f9095ff6a9ed\n"
    },
    {
      "commit": "cc99df230feb46ba717252f002d0cc2da6828421",
      "tree": "73ac045673e150fa367a8da4d46874f28e928491",
      "parents": [
        "4507fdcb70bd570d5f3968061bf991f0a1233a93"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 17 23:00:24 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 18 15:16:32 2017 +0000"
      },
      "message": "Load the array class in the compiler for allocations.\n\nRemoving one other dependency for needing to pass\nthe current method, and having dex_cache_resolved_types_\nin ArtMethod.\n\noat file increase:\n- x64: 0.25%\n- arm32: 0.30%\n- x86: 0.28%\n\ntest: test-art-host, test-art-target\nChange-Id: Ibca4fa00d3e31954db2ccb1f65a584b8c67cb230\n"
    },
    {
      "commit": "5e83eb74e8333d254bc2d72a84643249bad67b68",
      "tree": "693d00c8d8daf3f56ce0824ae88863336e1c6f58",
      "parents": [
        "4cd515521828b1f9ce0d5e2f545cb3376a94e9f3",
        "c52b26d4fb5b1ca91f34ce4b535b764853e538f6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 11 09:08:09 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 11 09:08:10 2017 +0000"
      },
      "message": "Merge \"Recognize getClass() in RTP.\""
    },
    {
      "commit": "c52b26d4fb5b1ca91f34ce4b535b764853e538f6",
      "tree": "9b734310200bb70cb42696082a55db70bed51b3c",
      "parents": [
        "b28c8749a52f4f3252fbfe8bfb5f9d7c7f980adf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 19 09:18:07 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 10 14:11:32 2017 +0000"
      },
      "message": "Recognize getClass() in RTP.\n\nAlso always keep around the resolved field\nin related HInstructions to avoid resolving it again\nand again.\n\nTest: test-art-host, 631-checker-get-class\n\nChange-Id: I3bc6be11f3eb175c635e746006f39865947e0669\n"
    },
    {
      "commit": "431121fb0e1fab93a550e71e1da22d3bf056bd95",
      "tree": "90b22140d9f336735530671a79392e899b59490b",
      "parents": [
        "91db41f315f6c2366b7098c531224bee01170364"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 09 14:02:45 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 09 22:10:44 2017 +0000"
      },
      "message": "The HBoundsCheck should be the index input of String.charAt.\n\nOtherwise, the charAt call may be licmed but the bounds check\nstay in the loop.\n\nbug: 33909430\nbug: 28330359\nTest: 632-checker-char-at-bounds\nChange-Id: I3cb749785c26ff8a016a7103899e9b19a24d5022\n"
    },
    {
      "commit": "ab2270f8f7ecd93c7ba353dd4e300669de3e7aee",
      "tree": "113e6b264117bc9a3217a2d1685a09bb589075f8",
      "parents": [
        "9538f9e2a5d03f1b1bc07ebfbd93b61dcf8ad604"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Dec 15 09:36:31 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Dec 15 11:03:38 2016 -0800"
      },
      "message": "Fixed signal 11 bug by not testing resolved method first.\n\nTest: test-art-host\nBug: 33656359\n\nChange-Id: Idb1afccf811a2fbf7500fc1d953e118981ad36d4\n"
    },
    {
      "commit": "9186ced255f2e7402646b5b286deebb540640734",
      "tree": "833c25fd3bbb47749265947705b4fc0f0c1ba796",
      "parents": [
        "aa2657d6d9dda2e44c6452e5f5901db78ef9b3cc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 12 14:28:21 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 13 11:43:48 2016 -0800"
      },
      "message": "ART: Clean up utils.h\n\nRemove functionality provided by libbase. Move some single-use\nfunctions to their respective users.\n\nTest: m test-art-host\nChange-Id: I75594035fa975200d638cc29bb9f31bc6e6cb29f\n"
    },
    {
      "commit": "71bf7b43380eb445973f32a7f789d9670f8cc97d",
      "tree": "76425f8578b247a845fe61724d71efc63059760f",
      "parents": [
        "52f52361c2ea37941fbda71e3c653bb8096bf516"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Nov 16 10:17:46 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Nov 30 13:21:21 2016 -0800"
      },
      "message": "Optimizations around escape analysis. With tests.\n\nDetails:\n(1) added new intrinsics\n(2) implemented optimizations\n      more !can be null information\n      more null check removals\n      replace return-this uses with incoming parameter\n      remove dead StringBuffer/Builder calls (with escape analysis)\n(3) Fixed exposed bug in CanBeMoved()\n\nPerformance gain:\nThis improves CafeineString by about 360%\n(removes null check from first loop, eliminates second loop completely)\n\nTest: test-art-host\n\nChange-Id: Iaf16a1b9cab6a7386f43d71c6b51dd59600e81c1\n"
    },
    {
      "commit": "ff7d89c0364f6ebd0f0798eb18ef8bd62917de6a",
      "tree": "9a8401416b499f815731fd38dec219a1e49b623d",
      "parents": [
        "8acdebc1a1b5821d3bb8e9461f7877fc234a37ff"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 07 08:49:28 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Nov 09 09:32:36 2016 -0800"
      },
      "message": "Allow read side effects for removing dead instructions.\n\nRationale:\nInstructions that only have the harmless read side effect may\nbe removed when dead as well, we were too strict previously.\nAs proof of concept, this cl also provides more accurate information\non a few string related intrinsics. This removes the dead indexOf\nfrom CaffeineString (17% performance improvement, big bottleneck\nof the StringBuffer\u0027s toString() still remains in loop).\n\nTest: test-art-host\nChange-Id: Id835a8e287e13e1f09be6b46278a039b8865802e\n"
    },
    {
      "commit": "2767f4ba2df934fea4c50a016e2955c2cf3f6b19",
      "tree": "2676ce7b335cc0ce197a4754ed62fc114647ba4d",
      "parents": [
        "77a0e4541a29c26dba21ed8c1ed1c29ef8d0ce4c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Oct 28 15:03:53 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Nov 02 14:45:36 2016 -0700"
      },
      "message": "New instruction simplifications. Extra dce pass. Allow more per block repeats.\n\nRationale:\nWe were missing some obvious simplifications, which left performance\nat the table for e.g. CaffeineLogic compiled with dx (4200us-\u003e2700us).\nThe constant for allowing a repeat on a BB seemed very low, at the\nvery least it should depend on the BB size.\n\nTest: test-art-host\n\nChange-Id: Ic234566e117593e12c936d556222e4cd4f928105\n"
    },
    {
      "commit": "2c45bc9137c29f886e69923535aff31a74d90829",
      "tree": "90c7762c2dcb1105bf5907d6a1d068f172ea6155",
      "parents": [
        "168c58ce18b139d313cbc6131e3bb43539952c55"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 25 16:54:12 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 27 14:30:29 2016 +0100"
      },
      "message": "Remove H[Reverse]PostOrderIterator and HInsertionOrderIterator.\n\nUse range-based loops instead, introducing helper functions\nReverseRange() for iteration in reverse order in containers.\nWhen the contents of the underlying container change inside\nthe loop, use an index-based loop that better exposes the\ncontainer data modifications, compared to the old iterator\ninterface that\u0027s hiding it which may lead to subtle bugs.\n\nTest: m test-art-host\nChange-Id: I2a4e6c508b854c37a697fc4b1e8423a8c92c5ea0\n"
    },
    {
      "commit": "0795f23920ee9aabf28e45c63cd592dcccf00216",
      "tree": "ff3f880c5e84f3316532b47d0e9a7729ade848ac",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 27 18:43:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 29 17:31:09 2016 -0700"
      },
      "message": "Clean up ScopedThreadStateChange to use ObjPtr\n\nAlso fixed inclusion of -inl.h files in .h files by adding\nscoped_object_access-inl.h and scoped_fast_natvie_object_access-inl.h\n\nChanged AddLocalReference / Decode to use ObjPtr.\n\nChanged libartbenchmark to be debug to avoid linkage errors.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I4d2e160483a29d21e1e0e440585ed328b9811483\n"
    },
    {
      "commit": "5e4e11e171f90d9a3ea178fc8e72aac909de55d5",
      "tree": "53314d1139ac797d55258f39097ecfb5cef45920",
      "parents": [
        "ca8bad9136d1389deeebc8652fb17063388de6b2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 22 13:17:41 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 23 09:08:00 2016 +0100"
      },
      "message": "Clean-up sharpening and compiler driver.\n\nRemove dependency on compiler driver for sharpening\nand dex2dex (the methods called on the compiler driver were\ndoing unnecessary work), and remove the now unused methods\nin compiler driver.\n\nAlso remove test that is now invalid, as sharpening always\nsucceeds.\n\ntest: m test-art-host m test-art-target\nChange-Id: I54e91c6839bd5b0b86182f2f43ba5d2c112ef908\n"
    },
    {
      "commit": "9837caff9cbfb61e3dabc6fbecb398d4d659c017",
      "tree": "b8101227d3987cebbc1c9d13f5d5f23a037a9f9a",
      "parents": [
        "80eb0bc2757274816a014a2997848d288c9ee553"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Aug 01 11:09:50 2016 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 21 13:45:08 2016 +0200"
      },
      "message": "Update art tests\n\nJack generates different code compared to the previous release so\nsome tests need to be updated. For instance, Jack transform \u0027!cond\u0027\ninto \u0027cond xor 1\u0027.\n\nThe test 463-checker-boolean-simplifier still tests the if/else\npattern using smali.\n\n(cherry picked from commit e4d28c502486afe58a0e156b8fefb621a622cec2)\n\nBug: 29493697\nTest: lunch aosp_bullhead-userdebug \u0026\u0026 make -j32\nTest: make -j32 test-art-host \u0026\u0026 make -j32 test-art-target\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost\nChange-Id: Ief8ac3e9a4bcaa35c99e57161961d630333d3b3c\n"
    },
    {
      "commit": "d3278bd288aaecd525f931a54f5f2a392f627fd3",
      "tree": "20a795e7de9ace6fa695e123fcf7beaf4e9ccbb9",
      "parents": [
        "d8f5f56f2dd90e2bcb6d41cb48403320b9eb04b9"
      ],
      "author": {
        "name": "Maxim Kazantsev",
        "email": "maxim.kazantsev@intel.com",
        "time": "Tue Jul 12 15:55:33 2016 +0600"
      },
      "committer": {
        "name": "Maxim Kazantsev",
        "email": "maxim.kazantsev@intel.com",
        "time": "Tue Jul 12 11:14:02 2016 +0000"
      },
      "message": "Two more patterns for instruction simplifier\n\nThis patch allows the instruction simplifier to cover\ntwo more cases:\n\n  x \u003d a + b      and      x \u003d a - b\n  y \u003d x - b               y \u003d x + b\n\nIn both cases y can be replaced with a, if the types\nof arguments are integral.\n\nChange-Id: I4735737f471e31057f1df76ddace5d4d1c79cde6\nTest: New tests in 458-checker-instruction-simplification.\nSigned-off-by: Max Kazantsev \u003cmaxim.kazantsev@intel.com\u003e\n"
    },
    {
      "commit": "e14dc86d4e84d52426510d0fafbac3d7e04f960c",
      "tree": "7ec03801e3dd8d4a6f428239308f1f7700c815fc",
      "parents": [
        "1fdb340de4e608a88e8683c857cad5d0da2c16de"
      ],
      "author": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri May 13 17:56:15 2016 +0100"
      },
      "committer": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri Jul 01 17:45:30 2016 +0100"
      },
      "message": "Simplification for associative and commutative operations on constants\n\nThe purpose of this change is to enable the instruction simplifier\nto recognize patterns such as\n\nOP y, x, const1\nOP z, y, const2\n\nwhere OP is both an associative and a commutative operation on integral\ntypes, and replace them with\n\nOP z, x, const3\n\nSince subtraction on integral types is equivalent to addition with a\nnegated operand, it receives a similar treatment, even though it is\nnot commutative.\n\nChange-Id: I278cac39bd39bc843d250a976931cb000876ea88\n"
    },
    {
      "commit": "50518449afe8fa7eb741f42c904fb4baf6c34da2",
      "tree": "e88f92b642b79e136a1c8c20680e9430ed4c1cfb",
      "parents": [
        "105683791e6b3f017a1a5673df22bf2185e19b54"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Mon Jun 27 11:39:19 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Tue Jun 28 09:32:41 2016 +0100"
      },
      "message": "Optimize away useless masking operations on shift amounts.\n\nChange-Id: I90d69757cc45312eda3d57cc2d32bfb4e47963f5"
    },
    {
      "commit": "87f3fcbd0db352157fc59148e94647ef21b73bce",
      "tree": "5bdeabb246f5de86704333b3fcbccc6e9146d246",
      "parents": [
        "b94b5706f0b8e2e1c7e1db22274f9f4bae0c4b5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 28 15:52:11 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 21 15:17:38 2016 +0100"
      },
      "message": "Replace String.charAt() with HIR.\n\nReplace String.charAt() with HArrayLength, HBoundsCheck and\nHArrayGet. This allows GVN on the HArrayLength and BCE on\nthe HBoundsCheck as well as using the infrastructure for\nHArrayGet, i.e. better handling of constant indexes than\nthe old intrinsic and using the HArm64IntermediateAddress.\n\nBug: 28330359\nChange-Id: I32bf1da7eeafe82537a60416abf6ac412baa80dc\n"
    },
    {
      "commit": "4248fc46289f9940aa13d22e4f89abed5e74b169",
      "tree": "aa72b1443c7ed4ff86eb96468c56071df30c89b8",
      "parents": [
        "f3349b5cc7baa06bdc82d3f55e8e57a7e266b809",
        "372f10e5b0b34e2bb6e2b79aeba6c441e14afd1f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 03 12:34:22 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 03 12:34:23 2016 +0000"
      },
      "message": "Merge \"Refactor handling of input records.\""
    },
    {
      "commit": "372f10e5b0b34e2bb6e2b79aeba6c441e14afd1f",
      "tree": "1f29c2467c8909ef0e0147f37f176caa1bcd2ccc",
      "parents": [
        "1b66fdf3f33c72dfdda4d31f6f17b6a0d8607402"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 17 16:30:10 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 02 19:04:20 2016 +0100"
      },
      "message": "Refactor handling of input records.\n\nIntroduce HInstruction::GetInputRecords(), a new virtual\nfunction that returns an ArrayRef\u003c\u003e to all input records.\nImplement all other functions dealing with input records as\nwrappers around GetInputRecords(). Rewrite functions that\npreviously used multiple virtual calls to deal with input\nrecords, especially in loops, to prefetch the ArrayRef\u003c\u003e\nonly once for each instruction.  Besides avoiding all the\nextra calls, this also allows the compiler (clang++) to\nperform additional optimizations.\n\nThis speeds up the Nexus 5 boot image compilation by ~0.5s\n(4% of \"Compile Dex File\", 2% of dex2oat time) on AOSP ToT.\n\nChange-Id: Id8ebe0fb9405e38d918972a11bd724146e4ca578\n"
    },
    {
      "commit": "c5809c3c31814e80a19c71adca306378281f2ab4",
      "tree": "2712109d35b5c91542af4c2b72af9c0e69395462",
      "parents": [
        "a21decf759af7dc29f64ff7ee02a758397578cd3"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed May 25 15:01:06 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Jun 01 09:14:44 2016 +0100"
      },
      "message": "Add missing calls to `RecordSimplification()`.\n\nNote that not all transformations in the instruction simplifier call\nthis helper. It is used to track a loosely defined category of\ntransformations for which we may benefit from re-running the\nsimplifier.\n\nChange-Id: I14dd841a30c526065cff337627c9156abe3d7c0a\n"
    },
    {
      "commit": "dce016eab87302f02b0bd903dd2cd86ae512df2d",
      "tree": "3af3c0e6b9d845e611b560484882e6b438ef439a",
      "parents": [
        "a246510965fc57ec51d1b202649304535adfe9f3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 28 13:10:02 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 09 20:40:32 2016 +0100"
      },
      "message": "Intrinsify String.length() and String.isEmpty() as HIR.\n\nUse HArrayLength for String.length() in anticipation of\nchanging the String.charAt() to HBoundsCheck+HArrayGet to\nallow the existing BCE to seamlessly work for strings.\nUse HArrayLength+HEqual for String.isEmpty().\n\nWe previously relied on inlining but we now want to apply\nthe new intrinsics even when we do not inline, i.e. when\ncompiling debuggable (as is currently the case for boot\nimage) or when we hit inlining limits, i.e. depth, size,\nor the number of accumulated dex registers.\n\nBug: 28330359\nChange-Id: Iab9d2f6d2967bdd930a72eb461f27efe8f37c103\n"
    },
    {
      "commit": "46817b876ab00d6b78905b80ed12b4344c522b6c",
      "tree": "6715bee60b0682a10437866c9617cb442146aa2f",
      "parents": [
        "f59149a151ee694484e21da7b3b207920dead5a6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 29 12:21:58 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 18:33:06 2016 +0100"
      },
      "message": "Use iterators \"before\" the use node in HUserRecord\u003c\u003e.\n\nCreate a new template class IntrusiveForwardList\u003c\u003e that\nmimicks std::forward_list\u003c\u003e except that all allocations\nare handled externally. This is essentially the same as\nboost::intrusive::slist\u003c\u003e but since we\u0027re not using Boost\nwe have to reinvent the wheel.\n\nUse the new container to replace the HUseList and use the\niterators to \"before\" use nodes in HUserRecord\u003c\u003e to avoid\nthe extra pointer to the previous node which was used\nexclusively for removing nodes from the list. This reduces\nthe size of the HUseListNode by 25%, 32B to 24B in 64-bit\ncompiler, 16B to 12B in 32-bit compiler. This translates\ndirectly to overall memory savings for the 64-bit compiler\nbut due to rounding up of the arena allocations to 8B, we\ndo not get any improvement in the 32-bit compiler.\n\nCompiling the Nexus 5 boot image with the 64-bit dex2oat\non host this CL reduces the memory used for compiling the\nmost hungry method, BatteryStats.dumpLocked(), by ~3.3MiB:\n\nBefore:\n  MEM: used: 47829200, allocated: 48769120, lost: 939920\n  Number of arenas allocated: 345,\n  Number of allocations: 815492, avg size: 58\n  ...\n  UseListNode    13744640\n  ...\nAfter:\n  MEM: used: 44393040, allocated: 45361248, lost: 968208\n  Number of arenas allocated: 319,\n  Number of allocations: 815492, avg size: 54\n  ...\n  UseListNode    10308480\n  ...\n\nNote that while we do not ship the 64-bit dex2oat to the\ndevice, the JIT compilation for 64-bit processes is using\nthe 64-bit libart-compiler.\n\nBug: 28173563\nChange-Id: I985eabd4816f845372d8aaa825a1489cf9569208\n"
    },
    {
      "commit": "f355c3ff08710ac2eba3aac2aacc5e65caa06b4c",
      "tree": "1d9f9487897fabc539f748be881f9c8140c16cef",
      "parents": [
        "6f51d7756a9c66007fe7666b19399e1f60ff6092"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 30 19:09:03 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 30 19:09:03 2016 +0100"
      },
      "message": "Fix Boolean to integral types conversions.\n\nBug: 27616343\nChange-Id: I050f92045bca1b8b5d6da53547cc617f17be84b1\n"
    },
    {
      "commit": "0ced281ae6216c29f57ca0f8b7388a722e8da97b",
      "tree": "b7f8273bb117c8ec8f8546ed937a8c0a96d2e5de",
      "parents": [
        "843a65556616183a36792bbcc1632c6d8d0e78b2",
        "1a65388f1d86bb232c2e44fecb44cebe13105d2e"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 24 10:25:51 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 24 10:25:51 2016 +0000"
      },
      "message": "Merge \"Clean up art::HConstant predicates.\""
    },
    {
      "commit": "63ec32274066da114d733d8d3c5ff389883e403c",
      "tree": "8ae9f26bc2a1f90d770e9c3c143667a7cfd8e30e",
      "parents": [
        "d6026cde1ef7f2b0abb7a3561510fe83a7dd9de2",
        "d96a246e5b103bfc167acaa6315bd8abca9de493"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 24 09:38:51 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 24 09:38:52 2016 +0000"
      },
      "message": "Merge \"Optimizing: Do not insert suspend checks on back-edges.\""
    },
    {
      "commit": "d96a246e5b103bfc167acaa6315bd8abca9de493",
      "tree": "3e99f24bc30d53bc9cfc9fb1e0f3dc92c0ce1daf",
      "parents": [
        "3920099f578fd8015777bc3c1c7392a08b1e08e7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 23 16:01:47 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 23 19:17:51 2016 +0000"
      },
      "message": "Optimizing: Do not insert suspend checks on back-edges.\n\nRely on HGraph::SimplifyLoop() to insert suspend checks.\n\nCodeGenerator\u0027s CheckLoopEntriesCanBeUsedForOsr() checks the\ndex pcs of suspend checks against branch targets to verify\nthat we always have an appropriate point for OSR transition.\nHowever, the HSuspendChecks that were added by HGraphBuilder\nto support the recently removed \"baseline\" interfered with\nthis in a specific case, namely an infinite loop where the\nback-branch jumps to a nop. In that case, the HSuspendCheck\nadded by HGraphBuilder had a dex pc different from the block\nand the branch target but its presence would stop the\nHGraph::SimplifyLoop() from adding a new HSuspendCheck with\nthe correct dex pc.\n\nBug: 27623547\nChange-Id: I83566a260210bc05aea0c44509a39bb490aa7003\n"
    },
    {
      "commit": "541261e66273857c638677424215de91f3d65a6f",
      "tree": "8e2dd00e442612e22ba1473a49597a2ae2735e81",
      "parents": [
        "f8a3dea642fe638f54d181b7ca280b79ee519398",
        "5b5b9319ff970979ed47d41a41283e4faeffb602"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 23 17:10:31 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 23 17:10:31 2016 +0000"
      },
      "message": "Merge \"Fix and improve shift and rotate operations.\""
    },
    {
      "commit": "5b5b9319ff970979ed47d41a41283e4faeffb602",
      "tree": "e7795abf120cf512627786fd6302efd34535724b",
      "parents": [
        "0c25da0276f5b6f6119793ae9d45d1bca8172c2b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 14:57:31 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 14:57:31 2016 +0000"
      },
      "message": "Fix and improve shift and rotate operations.\n\n- Define maximum int and long shift \u0026 rotate distances as\n  int32_t constants, as shift \u0026 rotate distances are 32-bit\n  integer values.\n- Consider the (long, long) inputs case as invalid for\n  static evaluation of shift \u0026 rotate rotations.\n- Add more checks in shift \u0026 rotate operations constructors\n  as well as in art::GraphChecker.\n\nChange-Id: I754b326c3a341c9cc567d1720b327dad6fcbf9d6\n"
    },
    {
      "commit": "937e6cd515bbe7ff2f255c8fcd40bf1a575a9a16",
      "tree": "90660b3d679cfbd87327e9cda5c783128f1b9a92",
      "parents": [
        "1153282aa91292b740289ab7612a481e5c6bc167"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 11:54:37 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 11:54:37 2016 +0000"
      },
      "message": "Tighten art::HNeg type constraints on its input.\n\nEnsure art::HNeg is only passed a type having the kind of\nits input.  For a boolean, byte, short, or char input, it\nmeans HNeg\u0027s type should be int.\n\nBug: 27684275\nChange-Id: Ic8442c62090a8ab65590754874a14a0deb7acd8d\n"
    },
    {
      "commit": "1a65388f1d86bb232c2e44fecb44cebe13105d2e",
      "tree": "515e3000b3ad6d195101f20f33f3c9498e536593",
      "parents": [
        "f808e8a0cc218c2b98023ef0e91f3c5b74ad2962"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 18:05:57 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 18:05:57 2016 +0000"
      },
      "message": "Clean up art::HConstant predicates.\n\n- Make the difference between arithmetic zero and zero-bit\n  pattern non ambiguous.\n- Introduce Boolean predicates in art::HIntConstant for when\n  they are used as Booleans.\n- Introduce aritmetic positive and negative zero predicates\n  for floating-point constants.\n\nBug: 27639313\nChange-Id: Ia04ecc6f6aa7450136028c5362ed429760c883bd\n"
    },
    {
      "commit": "22c4922c6b31e154a6814c4abe9015d9ba156911",
      "tree": "8e871f67e327322d24d0c2e4588b165005414077",
      "parents": [
        "0205b58a0d7a9ce5832393857c19c086c78996e9"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 14:04:28 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 14:04:28 2016 +0000"
      },
      "message": "Ensure art::HRor support boolean, byte, short and char inputs.\n\nAlso extend tests covering the IntegerRotateLeft,\nLongRotateLeft, IntegerRotateRight and LongRotateRight\nintrinsics and their translation into an art::HRor\ninstruction.\n\nBug: 27682579\nChange-Id: I89f6ea6a7315659a172482bf09875cfb7e7422a1\n"
    },
    {
      "commit": "a5c4a4060edd03eda017abebc85f24cffb083ba7",
      "tree": "85f69512d33c19d82e172a490a241f3a17d66560",
      "parents": [
        "713c519db15aaa8d6f33b744fd28adddb97a07c2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 15 15:02:50 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 16 16:49:36 2016 +0000"
      },
      "message": "Make art::HCompare support boolean, byte, short and char inputs.\n\nAlso extend tests covering the IntegerSignum, LongSignum,\nIntegerCompare and LongCompare intrinsics and their\ntranslation into an art::HCompare instruction.\n\nBug: 27629913\nChange-Id: I0afc75ee6e82602b01ec348bbb36a08e8abb8bb8\n"
    },
    {
      "commit": "1583e624d4c970d8e571b265b9a8f08402d91f82",
      "tree": "fdde737540eca3e692caa85f98821a0cbef9f840",
      "parents": [
        "532da65d01f13facd261367beb34ee41146671d4",
        "6915898b28cea6c9836ca1be6814d87e89cc6d76"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Mar 16 14:39:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 16 14:39:49 2016 +0000"
      },
      "message": "Merge \"Improve compiler stats\""
    },
    {
      "commit": "6915898b28cea6c9836ca1be6814d87e89cc6d76",
      "tree": "89eb0f498a958b72d78c8aee25b4de212c25348b",
      "parents": [
        "fbc61e19578d281d05728bcd120e1ace57c2fbd8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Mar 16 11:53:41 2016 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Mar 16 14:07:22 2016 +0000"
      },
      "message": "Improve compiler stats\n\n- report the max size of arena alloc\n- report how many virtual or interface invokes were inlined\n\nChange-Id: I82f154a8e25b5e3890181a1aa11346cdc3f93e37\n"
    },
    {
      "commit": "5b1805357b80d780d6afc9e2c70c6544c7ac7e2f",
      "tree": "696a474d54a35b974d51cefff24d961f98e57e7b",
      "parents": [
        "12af36e09116dc677820f98e33ff2982e07d652a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 18:11:50 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 18:11:50 2016 +0000"
      },
      "message": "ART: Fix shift simplification, x \u003e\u003e\u003e 64.\n\nFix braino in\n    https://android-review.googlesource.com/208199\n\nBug: 27638111\nChange-Id: I8f12008af8bba943664c8a9eac3f2d2f7c820e79\n"
    },
    {
      "commit": "164306e779de522efba7df637618a8eeed9e37ac",
      "tree": "6ceddd6879870272d6bef39026c36212ce6854df",
      "parents": [
        "5681b6638b0001c62d02795b0853e2e82787edf1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 14:57:32 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 15:25:39 2016 +0000"
      },
      "message": "Optimizing: Improve shift simplification, x \u003e\u003e\u003e 64.\n\nSimplify shifts by a multiple of bit size, not just 0.\nARM codegen does not expect to see such shifts and it\nis guarding against them with a DCHECK().\n\nBug: 27638111\nChange-Id: I3ae8383d7edefa0facd375ce511e7a226d5468a1\n"
    },
    {
      "commit": "24bd89559c177af9e342f0d5a64a0a2855dfb887",
      "tree": "eeacbc6d65b62dc018193b9440112ebbc4e3341e",
      "parents": [
        "51b7e2d08f2bcf528eeec48b42c178b5550f6635"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 10:40:33 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 10:43:13 2016 +0000"
      },
      "message": "Optimizing: Prevent potential valgrind error.\n\nThis CL preemptively extends the workaround from\n    https://android-review.googlesource.com/208230\nto an almost identical bit of code.\n\nBug: 27651442\nChange-Id: I7683d42b46b16f2293916defc6ef1d871dc9af6c\n"
    },
    {
      "commit": "a65ed3045ec2df95a30994752b3fb0576f479354",
      "tree": "c566a5bcfdf9ad9717f82aea809c88a253cb6960",
      "parents": [
        "11ad2523557c35acfbf829aa203d14914e61884e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 14 21:21:29 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 14 21:22:49 2016 +0000"
      },
      "message": "Optimizing: Fix valgrind error in image_test64.\n\nBug: 27651442\nChange-Id: Id9b80c6015dbc3b82966766ca4ad010be770f116\n"
    }
  ],
  "next": "625090fe9bf47d8d735c9a66cbf491de3a3e3765"
}
