)]}'
{
  "log": [
    {
      "commit": "d2d5262c8370309e1f2a009f00aafc24f1cf00a0",
      "tree": "15b542ac079f30043cd3654cf5d3c40ae3ea34d0",
      "parents": [
        "5b12f7973636bfea29da3956a9baa7a6bbe2b666"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 12 16:28:54 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 12 16:28:54 2016 +0000"
      },
      "message": "Revert \"Add kJitTableAddress for HLoadClass.\"\n\nOne test failure after merge.\n\nThis reverts commit 5b12f7973636bfea29da3956a9baa7a6bbe2b666.\n\nChange-Id: I120c49e53274471fc1c82a10d52e99c83f5f85cc\n"
    },
    {
      "commit": "5b12f7973636bfea29da3956a9baa7a6bbe2b666",
      "tree": "a2cd41c1d3c09abc594a76af11b7bebc302a2870",
      "parents": [
        "0dd27eb2b51d030866c25dbf8e7bb737eb35a888"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 09 11:26:35 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 12 11:50:24 2016 +0000"
      },
      "message": "Add kJitTableAddress for HLoadClass.\n\nThis new kind loads classes from the root table associated with\nJIT compiled code.\n\nAlso remove kDexCacheAddress, which is replaced by kJitTableAddress.\n\ntest: ART_TEST_JIT\u003dtrue test-art-host-jit test-art-target-jit\nChange-Id: Ia23029688d1a60c178bf2ffa7463927c5d5de4d0\n"
    },
    {
      "commit": "063fc772b5b8aed7d769cd7cccb6ddc7619326ee",
      "tree": "bc165781989087a998721991504e589a7d5b0926",
      "parents": [
        "48d08a4233ee4450b0d5073d41445f9dd1f17191"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Aug 02 11:02:54 2016 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Dec 01 11:15:47 2016 -0800"
      },
      "message": "Class Hierarchy Analysis (CHA)\n\nThe class linker now tracks whether a method has a single implementation\nand if so, the JIT compiler will try to devirtualize a virtual call for\nthe method into a direct call. If the single-implementation assumption\nis violated due to additional class linking, compiled code that makes the\nassumption is invalidated. Deoptimization is triggered for compiled code\nlive on stack. Instead of patching return pc\u0027s on stack, a CHA guard is\nadded which checks a hidden should_deoptimize flag for deoptimization.\nThis approach limits the number of deoptimization points.\n\nThis CL does not devirtualize abstract/interface method invocation.\n\nSlides on CHA:\nhttps://docs.google.com/a/google.com/presentation/d/1Ax6cabP1vM44aLOaJU3B26n5fTE9w5YU-1CRevIDsBc/edit?usp\u003dsharing\n\nChange-Id: I18bf716a601b6413b46312e925a6ad9e4008efa4\nTest: ART_TEST_JIT\u003dtrue m test-art-host/target-run-test test-art-host-gtest\n"
    },
    {
      "commit": "8a0128a5ca0784f6d2b4ca27907e8967a74bc4c5",
      "tree": "0dec75200282ae5e49785395e97bd4e6459f1c09",
      "parents": [
        "60438b46090d22bb9b978196f5aa53fab3b89759"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 28 07:38:35 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 29 11:11:46 2016 -0800"
      },
      "message": "ART: Add dex::StringIndex\n\nAdd abstraction for uint32_t string index.\n\nTest: m test-art-host\nChange-Id: I917c2881702fe3df112c713f06980f2278ced7ed\n"
    },
    {
      "commit": "a5b09a67034e57a6e10231dd4bd92f4cb50b824c",
      "tree": "304be738f4fa528b7ad2676103eecc84c79eaeeb",
      "parents": [
        "dac7ad17c78387d15d7aefae0f852dddf5f37e34"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 17 15:21:22 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 21 10:57:00 2016 -0800"
      },
      "message": "ART: Add dex::TypeIndex\n\nAdd abstraction for uint16_t type index.\n\nTest: m test-art-host\nChange-Id: I47708741c7c579cbbe59ab723c1e31c5fe71f83a\n"
    },
    {
      "commit": "dac7ad17c78387d15d7aefae0f852dddf5f37e34",
      "tree": "603b3ca74ba9144d217497417314fe863e2201ef",
      "parents": [
        "af524438b8a76264a23ec2d748e11eeded02abc7",
        "132d8363bf8cb043d910836672192ec8c36649b6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 21 10:14:06 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 21 10:14:07 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Revert \"Revert \"JIT root tables.\"\"\"\"\""
    },
    {
      "commit": "132d8363bf8cb043d910836672192ec8c36649b6",
      "tree": "42ee8b08f0323e9762675333b50a4c218ecdefc7",
      "parents": [
        "e89667815b9d0a1eacb91678fed2a7518bb07cc2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 16 09:19:42 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 18 14:31:30 2016 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"JIT root tables.\"\"\"\"\n\nTest: 626-set-resolved-string, test-art-host, test-art-target\nTest: run-libcore-tests.sh\nTest: phone boots and runs\n\nThis reverts commit 3395fbc20bcd20948bec8958db91b304c17cacd8.\n\nChange-Id: I104b73d093e3eb6a271d564cfdb9ab09c1c8cf24\n"
    },
    {
      "commit": "6beced4c017826f7c449f12fac7fa42403657f2b",
      "tree": "f53614eeeaa92be9a7398e262d9440f59e3384a5",
      "parents": [
        "e89667815b9d0a1eacb91678fed2a7518bb07cc2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 15 15:51:31 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 16 10:41:40 2016 -0800"
      },
      "message": "Change iftable to never be null\n\nSimplifies code generation by removing a null check. The null case\nis rare.\n\nRitzperf code size: 13107624 -\u003e 13095336\n\nAlso addressed comments from previous CL.\n\nBug: 32577579\n\nTest: test-art-host, run ritzperf both with CC\n\nChange-Id: I2b31e800867112869d7f0643e16c08826296979e\n"
    },
    {
      "commit": "9fd8c60cdff7b28a89bb97fd90ae9d0f37cf8f8b",
      "tree": "630b6f23441a26e4b5d9434900993a710635c9e9",
      "parents": [
        "26c8f54be31ccf99540906746b17fc8bba1bab9a"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 14 14:38:53 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 15 13:02:24 2016 -0800"
      },
      "message": "Pass object instead of class to instanceof entrypoint\n\nReduces code size. Also avoid read barrier for kArrayCheck case.\n\nBug: 32577579\n\nTest: test-art-host, test-art-target CC\n\nChange-Id: Ia890f656fe166b2d39c522b63a8a6469404134ae\n"
    },
    {
      "commit": "afbcdafde4d2c1de293c3ba1da22f579df200b3b",
      "tree": "6d75c7f26b7b358e0e8ca869ae6d206f7bf0294a",
      "parents": [
        "81cae78d1853893ff9c3ecea4b5100002a538eb7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 14 10:50:29 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 14 11:35:27 2016 -0800"
      },
      "message": "Clean up interface check cast\n\nChanged arm, arm64 to use less labels and removed forward branch\nin the success case.\n\nCleaned up X86, X86_64 to remove the is_null label.\n\nBug: 12687968\nBug: 32577579\n\nTest: test-art-host, test-art-target CC\nChange-Id: Iba426dff548b2ef42198fad13efeb075f7c724a7\n"
    },
    {
      "commit": "3395fbc20bcd20948bec8958db91b304c17cacd8",
      "tree": "e0d00b412961e2aaa0dff91317a9f4168189e5fb",
      "parents": [
        "75afcdd3503a8a8518e5b23d21b6e73306ce39ce"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 14 12:40:52 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 14 12:40:52 2016 +0000"
      },
      "message": "Revert \"Revert \"Revert \"JIT root tables.\"\"\"\n\nlibcore failures:\ndalvikvm32 F 11-14 03:04:06 14870 14870 jit_code_cache.cc:310] Check failed: new_string !\u003d nullptr\n\nThis reverts commit 75afcdd3503a8a8518e5b23d21b6e73306ce39ce.\n\nChange-Id: I5a6b6b48aa79a763d1ff1ba4d85d63811254787d\n"
    },
    {
      "commit": "75afcdd3503a8a8518e5b23d21b6e73306ce39ce",
      "tree": "b49afc4772fa72319475f96ed66d744bb03e803c",
      "parents": [
        "ee48b0f11df812d98de5c989e1f6d95a21515564"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 10 10:38:11 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 11 13:18:24 2016 +0000"
      },
      "message": "Revert \"Revert \"JIT root tables.\"\"\n\nAlso  contains Revert \"Support kJitTableAddress in x86/arm/arm64.\"\n\nThis reverts commit 4acd03638fcdb4e5d1666f8eec7eb3bf6d6be035.\nThis reverts commit 997d1217830c0a18b70faeabd53c04700a87d7d9.\n\nTest: ART_USE_READ_BARRIER\u003dtrue/false test-art-host test-art-target\n\nChange-Id: I77cb1e9bf8f1b4c58b72d3cf5ca31ced2aaa1ea3\n"
    },
    {
      "commit": "3af00dc3918dfaacd51fb0ef604de51dd6dc9af4",
      "tree": "ec07882ae02d98bd9841646ce9e8bb1349e9c751",
      "parents": [
        "977919fbcbfbf0c1c3fa97e51490bc678da646d2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 10 11:25:57 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 10 12:45:56 2016 -0800"
      },
      "message": "Use enum for read barrier options in compiler\n\nEnums are just phenomenal. Also fixed a double load error in x86\ninterface check cast fast path.\n\nTest: test-art-host\n\nChange-Id: Iea403ce579145b6a294073f3900ad6921c1a0d53\n"
    },
    {
      "commit": "977919fbcbfbf0c1c3fa97e51490bc678da646d2",
      "tree": "3e462b1ea5887345ed025b030b0c0a4b71003524",
      "parents": [
        "ee59d46595bb860fea26122f47f8797d2d0fe5f4",
        "aa474eb597056d21c0b21d353b9b6aa460351d0f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 10 18:05:50 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 10 18:05:50 2016 +0000"
      },
      "message": "Merge \"Avoid read barriers for inlined check cast\""
    },
    {
      "commit": "16593ed1d3914308052f98542bb9bf38ed588d53",
      "tree": "783e1081ec6828731ef88df679193d0c4c2f5919",
      "parents": [
        "af0cac6ed7221303c8bd8a77f6c41f4af8045d60",
        "fdaf0f45510374d3a122fdc85d68793e2431175e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 10 13:58:34 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 10 13:58:34 2016 +0000"
      },
      "message": "Merge \"Change string compression encoding.\""
    },
    {
      "commit": "5ac321b40c660634f6d40ade2e373daaef0f16f6",
      "tree": "af9f37c91ab85f6508be58c8ecff5ec94f2251a2",
      "parents": [
        "334b5c3d0d5d84242b4528241c759789e532ce08"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 16:33:54 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 18:10:16 2016 -0800"
      },
      "message": "Fix heap poisoning build\n\nBug: 32577579\n\nTest: mm build-art\n\nChange-Id: I394691334ae2029810e069c768d34077d36679e2\n"
    },
    {
      "commit": "aa474eb597056d21c0b21d353b9b6aa460351d0f",
      "tree": "738ba965a552ac0e4814cb1131ef0dd96ae14142",
      "parents": [
        "334b5c3d0d5d84242b4528241c759789e532ce08"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 15:18:27 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 15:59:33 2016 -0800"
      },
      "message": "Avoid read barriers for inlined check cast\n\nAvoiding read barriers improves speed and reduces code size.\n\nDoing this can never result in false positives, only false negatives.\nThese false negatives are handled correcly by rechecking in the\nentrypoint.\n\nRitzperf code size for CC:\narm32: 13439400-\u003e13300136 (-1.04%)\narm64: 16405120-\u003e16253568 (-0.92%)\n\nPerf: TODO\n\nBug: 29516974\nBug: 12687968\n\nTest: test-art-host, run ritzperf both with CC\n\nChange-Id: Ie024e0b1e8ee415781fb73e8029e87e8a5318f86\n"
    },
    {
      "commit": "334b5c3d0d5d84242b4528241c759789e532ce08",
      "tree": "4925b11b74297e34c35eb17bb2f08b161b8893c7",
      "parents": [
        "3b3daf35d3f3053ac5f645cc0b0e5527012c44d7",
        "5c44c1bb131e609d9aba6f97f933567bf77cb8ed"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 23:16:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 09 23:16:16 2016 +0000"
      },
      "message": "Merge \"Add interface check cast fast path to arm, arm64, x86\""
    },
    {
      "commit": "5c44c1bb131e609d9aba6f97f933567bf77cb8ed",
      "tree": "46792f774d0c4e0e096510cb1927768cc4b92a46",
      "parents": [
        "b4e4c279a0d96c5c9bd6d038d97c3c9992ff8d09"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Nov 04 18:13:04 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 09 10:31:16 2016 -0800"
      },
      "message": "Add interface check cast fast path to arm, arm64, x86\n\nBug: 12687968\nBug: 32577579\n\nTest: test-art-host, test-art-target CC\n\nChange-Id: Ia57099d499fa704803cc5f0135f0f53fefe39826\n"
    },
    {
      "commit": "20c56a8cded87092d40097323fcf9eaf50f64e4b",
      "tree": "1dd41fe4afd736aa0cfb8d6ef8ed4835a4dbe4af",
      "parents": [
        "2e7f085990423a706137c1d42673226ee7a7194f",
        "4acd03638fcdb4e5d1666f8eec7eb3bf6d6be035"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 17:30:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 09 17:30:49 2016 +0000"
      },
      "message": "Merge \"Revert \"JIT root tables.\"\""
    },
    {
      "commit": "4acd03638fcdb4e5d1666f8eec7eb3bf6d6be035",
      "tree": "1220262d0ed22d91777c68a8a568348cddf820cb",
      "parents": [
        "ac3ebc3150760425ed00abd56da48f9a6e0666bc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 17:30:31 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 17:30:31 2016 +0000"
      },
      "message": "Revert \"JIT root tables.\"\n\nMay be the offender for jit-gcstress failure of 902.\n\nThis reverts commit ac3ebc3150760425ed00abd56da48f9a6e0666bc.\n\nChange-Id: I9ea6c9236fd1729fed7d1868dd8a111172932308\n"
    },
    {
      "commit": "2e7f085990423a706137c1d42673226ee7a7194f",
      "tree": "111034c140ccc9c458a353a4a7cc5d85c4a3b98b",
      "parents": [
        "b4e4c279a0d96c5c9bd6d038d97c3c9992ff8d09",
        "07c919feccdf47f997842a131a802aa6b891e34a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 17:30:00 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 09 17:30:00 2016 +0000"
      },
      "message": "Merge \"Revert \"Support kJitTableAddress in x86/arm/arm64.\"\""
    },
    {
      "commit": "07c919feccdf47f997842a131a802aa6b891e34a",
      "tree": "56d9bb3097c51d5efbf67cd7516b0bc3c8e16616",
      "parents": [
        "997d1217830c0a18b70faeabd53c04700a87d7d9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 17:29:03 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 17:29:03 2016 +0000"
      },
      "message": "Revert \"Support kJitTableAddress in x86/arm/arm64.\"\n\nRevert this in order to revert https://android-review.googlesource.com/#/c/285781/\n\nThis reverts commit 997d1217830c0a18b70faeabd53c04700a87d7d9.\n\nChange-Id: I1888fba1c6f712cae4aec4ea4719b74a46da156c\n"
    },
    {
      "commit": "11bbc7fd5b4ed64d13c5d21ae9c8b686cf24bcbb",
      "tree": "987b3b2cbac0d69bb96356fb2a9994727aebf47a",
      "parents": [
        "2badb9a4c2ef794344f9434e1e6aed865646fcaf",
        "997d1217830c0a18b70faeabd53c04700a87d7d9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 16:25:23 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 09 16:25:24 2016 +0000"
      },
      "message": "Merge \"Support kJitTableAddress in x86/arm/arm64.\""
    },
    {
      "commit": "997d1217830c0a18b70faeabd53c04700a87d7d9",
      "tree": "1f892df0eb21ebd0139cd62aa9f46a7485f375da",
      "parents": [
        "0864c98b10cb8ca306671cabaa9be2a4068a2711"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 10:36:29 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 14:43:27 2016 +0000"
      },
      "message": "Support kJitTableAddress in x86/arm/arm64.\n\ntest: test-art-host test-art-target, angler boots and runs.\nChange-Id: I3654ae2809d4d759db76ee1ada1c17f3a9c3b392\n"
    },
    {
      "commit": "54d6a207341ad45cb5eceed71a344073ed6d4e31",
      "tree": "d24fc641ca9ad2b1732a40f0989e3683cc0a5028",
      "parents": [
        "2a2f713717ace8a026cfe76c91165a5ed0d80182"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 09 12:46:38 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 09 12:46:38 2016 +0000"
      },
      "message": "Fix 552-checker-sharpening for PIC test.\n\nAnd remove obsolete HLoadString::LoadKind::kDexCacheAddress.\n\nTest: m ART_TEST_PIC_TEST\u003dtrue test-art-host\nChange-Id: I3e7a1a98c2c7eba5ea10954d7efcf743a807c300\n"
    },
    {
      "commit": "fdaf0f45510374d3a122fdc85d68793e2431175e",
      "tree": "3315c82410fd42612bb501bed150df454dde0dde",
      "parents": [
        "b02b8d7df48ea3314cfcb3c08d84ac9556363833"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 13 19:29:53 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 09 11:08:31 2016 +0000"
      },
      "message": "Change string compression encoding.\n\nEncode the string compression flag as the least significant\nbit of the \"count\" field, with 0 meaning compressed and 1\nmeaning uncompressed.\n\nThe main vdex file is a tiny bit larger (+28B for prebuilt\nboot images, +32 for on-device built images) and the oat\nfile sizes change. Measured on Nexus 9, AOSP ToT, these\nchanges are insignificant when string compression is\ndisabled (-200B for the 32-bit boot*.oat for prebuilt boot\nimage, -4KiB when built on the device attributable to\nrounding, -16B for 64-bit boot*.oat for prebuilt boot image,\nno change when built on device) but with string compression\nenabled we get significant differences:\n  prebuilt multi-part boot image:\n    - 32-bit boot*.oat: -28KiB\n    - 64-bit boot*.oat: -24KiB\n  on-device built single boot image:\n    - 32-bit boot.oat: -32KiB\n    - 64-bit boot.oat: -28KiB\nThe boot image oat file overhead for string compression:\n  prebuilt multi-part boot image:\n    - 32-bit boot*.oat: before: ~80KiB after: ~52KiB\n    - 64-bit boot*.oat: before: ~116KiB after: ~92KiB\n  on-device built single boot image:\n    - 32-bit boot.oat: before: 92KiB after: 60KiB\n    - 64-bit boot.oat: before: 116KiB after: 92KiB\n\nThe differences in the SplitStringBenchmark seem to be lost\nin the noise.\n\nTest: Run ART test suite on host and Nexus 9 with Optimizing.\nTest: Run ART test suite on host and Nexus 9 with interpreter.\nTest: All of the above with string compression enabled.\nBug: 31040547\n\nChange-Id: I7570c2b700f1a31004a2d3c18b1cc30046d35a74\n"
    },
    {
      "commit": "0864c98b10cb8ca306671cabaa9be2a4068a2711",
      "tree": "56d9bb3097c51d5efbf67cd7516b0bc3c8e16616",
      "parents": [
        "4c45ffaf6329d40e3249894cfb078d3d274ddfd5",
        "ac3ebc3150760425ed00abd56da48f9a6e0666bc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 09 09:55:45 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 09 09:55:45 2016 +0000"
      },
      "message": "Merge \"JIT root tables.\""
    },
    {
      "commit": "b99f4d6463e7cb5654af3893ed7b3113665df658",
      "tree": "1bacc6a2bd01426c921e2f83f39bb63f9d9d8048",
      "parents": [
        "67381d6298edf18760b0c9b3d16572dc3894e551"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 07 16:17:26 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 08 12:46:59 2016 -0800"
      },
      "message": "Change check cast entrypoint to check instance of\n\nReduces code size since we do not need to reload class before\ncalling slow path.\n\nTODO: Delete read barriers in the check cast code since the slow\npath will retry with the proper read barriers if the check fails.\n\nBug: 12687968\nBug: 29516974\n\nTest: test-art-host + test-art-target with CC\n\nChange-Id: Ia4eb9bbe3fe2d2016e44523cf0451210828d7b88\n"
    },
    {
      "commit": "ac3ebc3150760425ed00abd56da48f9a6e0666bc",
      "tree": "3c5c923bb00a898e035c0e7c4b8a6a684a578419",
      "parents": [
        "76ad2405b40547e0ab4fc401fb8303189ff783eb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 05 13:13:50 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 08 17:21:30 2016 +0000"
      },
      "message": "JIT root tables.\n\nImplement root tables for the JIT. Each JIT compiled method\ngets a table allocated before the stack maps.\n\nThe table gets visited through Runtime::SweepSystemWeaks.\n\nImplement String roots for x86_64 as an example.\n\nTest: test-art-host test-art-target\n\nChange-Id: Id3d5bc67479e08b52dd4b253e970201203a0f0d2\n"
    },
    {
      "commit": "12b58b23de974232e991c650405f929f8b0dcc9f",
      "tree": "bc08011e3b9f4c132fc605dc54d1d5f50c932a29",
      "parents": [
        "b0b2080b4cea8365052d1be973e927f8ee85f609"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Nov 01 11:55:29 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Nov 02 16:31:04 2016 -0700"
      },
      "message": "Clean up the runtime read barrier and fix fake address dependency.\n\n- Rename GetReadBarrierPointer to GetReadBarrierState.\n- Change its return type to uint32_t.\n- Fix the runtime fake address dependency for arm/arm64 using inline\n  asm.\n- Drop ReadBarrier::black_ptr_ and some brooks code.\n\nBug: 12687968\nTest: test-art with CC, Ritz EAAC, libartd boot on N9.\nChange-Id: I595970db825db5be2e98ee1fcbd7696d5501af55\n"
    },
    {
      "commit": "5edd9510b5f39e2f6d758954ae2ac78e17f21735",
      "tree": "41233bf579429e3cc057eefdbd8ad35e091d8055",
      "parents": [
        "270b6aeb11d973dc1b339ccf892468e0ad3989e3",
        "00468f3b4b4741be407169a4f21054ebdcccb2b1"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Oct 28 14:15:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 28 14:15:10 2016 +0000"
      },
      "message": "Merge \"Remove default argument values in GenerateGcRootFieldLoad.\""
    },
    {
      "commit": "00468f3b4b4741be407169a4f21054ebdcccb2b1",
      "tree": "ad095c39f477b4a55d7d306128dd1b68ca80ce93",
      "parents": [
        "384cb6674b967a9c58da9ad70fd6f98caa1d8691"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Oct 27 18:02:48 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Oct 27 18:03:11 2016 +0100"
      },
      "message": "Remove default argument values in GenerateGcRootFieldLoad.\n\nThese values were never or rarely used.\n\nTest: mmma art (with and without `ART_USE_READ_BARRIER\u003dtrue`)\nBug: 12687968\nBug: 29516974\nChange-Id: I5d15140ce501bf50d7a87871b1e492cee54913db\n"
    },
    {
      "commit": "a1aa3b1f40e496d6f8b3b305a4f956ddf2e425fc",
      "tree": "efe3dd581dbe9fb33e615d1608f0571ec3984208",
      "parents": [
        "188edb3a3ec36ad5fc42373b1e1bed3a85b4f112"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Oct 26 13:03:38 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Oct 26 13:03:38 2016 +0100"
      },
      "message": "Add support for Baker read barriers in UnsafeCASObject intrinsics.\n\nPrior to doing the compare-and-swap operation, ensure the\nexpected reference stored in the holding object\u0027s field is\nin the to-space by loading it, emitting a read barrier and\nupdating that field with a strong compare-and-set operation\nwith relaxed memory synchronization ordering (if needed).\n\nTest: ART host and target tests and Nexus 5X boot test with Baker read barriers.\nBug: 29516905\nBug: 12687968\nChange-Id: I480f6a9b59547f11d0a04777406b9bfeb905bfd2\n"
    },
    {
      "commit": "d985a5a81a45595f5cb4d12da81eec760801c92c",
      "tree": "3d49d34870ddb439596321e6e6577845e97c61ac",
      "parents": [
        "b5706dd4e86c3687153a02fdda715e40f69c55d1",
        "94ce9c2f41ea198f5fdcfc09c48b9984c95a9c61"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 20 09:24:03 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 20 09:24:03 2016 +0000"
      },
      "message": "Merge \"Change pResolveString entrypoint to kSaveEverything.\""
    },
    {
      "commit": "94ce9c2f41ea198f5fdcfc09c48b9984c95a9c61",
      "tree": "8dcaf27e8b34f51f5849b1e8d4366968f9bae849",
      "parents": [
        "2f61867045ffbd0c38a4ecec5f59632004f7efff"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 30 14:50:51 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 19 18:02:48 2016 +0100"
      },
      "message": "Change pResolveString entrypoint to kSaveEverything.\n\nTest: Run ART test suite including gcstress on host and Nexus 9.\nTest: Run ART test suite including gcstress with baker CC on host and Nexus 9.\nBug: 20323084\nChange-Id: I63c21a7d3be8ff7a5765b5003c85b5317635efe6\n"
    },
    {
      "commit": "58a4c6198a71973ea589edebe0b3f17c72d55e29",
      "tree": "f8ae9138190383bfd73cba141e751f67ce2391d5",
      "parents": [
        "d203296000f18dd582702eebe6a6e9c5b0182397"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 18 13:24:05 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 18 13:39:52 2016 -0700"
      },
      "message": "Delete unused blocked_register_pairs_ in code generators\n\nLegacy code for compatibility with quick?\n\nTest: test-art-host CC\nChange-Id: I9de261daea67dfd9bd3df89826ba9d10f135e29e\n"
    },
    {
      "commit": "96eeb4e2bb21afe8783d62e06b91fd1aef682dbb",
      "tree": "097907f294206c45a03c4b63bf986b9e144116af",
      "parents": [
        "e2ced0db78b89b778cd1c9ef4ace5dec7dbc66b0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 12 22:03:31 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 12 22:27:38 2016 +0100"
      },
      "message": "Update HInstruction::NeedsCurrentMethod.\n\nHLoadString and HLoadClass when sharpened may not need it\nanymore. Instead just rely on the HCurrentMethod being the\nSSA dependency of those instructions.\n\nAlso save storing the current method in the stack if the\ngraph actually doesn\u0027t need it.\n\ntest: m test-art-host test-art-target\nChange-Id: I235d8275230637cbbd38fc0d2f9b822f6d2a9c1e\n"
    },
    {
      "commit": "aad75c6d5bfab2dc8e30fc99fafe8cd2dc8b74d8",
      "tree": "c1b9e1eabcf35c5cbb5b4f46313a4e062f2d5d51",
      "parents": [
        "82d4838d6bb3480cd25327cedc5179fb2d86881c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 03 08:46:48 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 04 17:51:46 2016 +0100"
      },
      "message": "Revert \"Revert \"Store resolved Strings for AOT code in .bss.\"\"\n\nFixed oat_test to keep dex files alive. Fixed mips build.\nRewritten the .bss GC root visiting and added write barrier\nto the artResolveStringFromCode().\n\nTest: build aosp_mips-eng\nTest: m ART_DEFAULT_GC_TYPE\u003dSS test-art-target-host-gtest-oat_test\nTest: Run ART test suite on host and Nexus 9.\nBug: 20323084\nBug: 30627598\n\nThis reverts commit 5f926055cb88089d8ca27243f35a9dfd89d981f0.\n\nChange-Id: I07fa2278d82b8eb64964c9a4b66cb93726ccda6b\n"
    },
    {
      "commit": "4877b7986c9ba5c69be8f80692c260b4952f69be",
      "tree": "96b7076efea6d0d95322382a76b4759ff92ed8d5",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "jessicahandojo",
        "email": "jessicahandojo@google.com",
        "time": "Thu Sep 08 19:49:13 2016 -0700"
      },
      "committer": {
        "name": "Jessica Handojo",
        "email": "jessicahandojo@google.com",
        "time": "Fri Sep 30 17:10:48 2016 +0000"
      },
      "message": "String compression on intrinsics x86 and x86_64\n\nChanges on intrinsics and Code Generation (x86 and x86_64)\nfor string compression feature. Currently the feature is off.\n\nThe size of boot.oat and boot.art for x86 before and after the\nchanges (feature OFF) are still. When the feature ON,\nboot.oat increased by 0.83% and boot.art decreased by 19.32%.\n\nMeanwhile for x86_64, size of boot.oat and boot.art before and\nafter changes (feature OFF) are still. When the feature ON,\nboot.oat increased by 0.87% and boot.art decreased by 6.59%.\n\nTurn feature on: runtime/mirror/string.h (kUseStringCompression \u003d true)\nruntime/asm_support.h (STRING_COMPRESSION_FEATURE 1)\n\nTest: m -j31 test-art-host\nAll tests passed both when the mirror::kUseStringCompression\nis ON and OFF.\n\nThe jni_internal_test changed to assert an empty string length\nto be equal -(1 \u003c\u003c 31) as it is compressed.\n\nBug: 31040547\nChange-Id: Ia447c9b147cabb6a69e6ded86be1fe0c46d9638d\n"
    },
    {
      "commit": "da079bba8403733cac9bb7415b038ffd77e62403",
      "tree": "3bfed6ea39483bda20c0059763c30aee2e6e5791",
      "parents": [
        "a1d66b9050aeecd7e698c51155f0dbc0198a6822"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 26 17:56:07 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 27 10:30:34 2016 +0100"
      },
      "message": "Cleanup String.\u003cinit\u003e handling.\n\nMove everything to one place (currently well_known_classes.cc, but\nno strong preference) and define a macro to easily handle the list\nof affected methods.\n\ntest: m test-art-host\ntest: m test-art-target\nChange-Id: Ib8372d130d5458516a1f1ae31014afc76037fc34\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": "804b03ffb9b9dc6cc3153e004c2cd38667508b13",
      "tree": "91c7fd54b5000e041bf9d3d5b233dabce1fad614",
      "parents": [
        "80eb0bc2757274816a014a2997848d288c9ee553"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 14 16:26:36 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 20 14:55:44 2016 +0100"
      },
      "message": "Change remaining slow path throw entrypoints to save everything.\n\nChange DivZeroCheck, BoundsCheck and explicit NullCheck\nslow path entrypoints to conform to kSaveEverything.\n\nOn Nexus 9, AOSP ToT, the boot.oat size reduction is\n  prebuilt multi-part boot image:\n    - 32-bit boot.oat: -12KiB (-0.04%)\n    - 64-bit boot.oat: -24KiB (-0.06%)\n  on-device built single boot image:\n    - 32-bit boot.oat: -8KiB (-0.03%)\n    - 64-bit boot.oat: -16KiB (-0.04%)\n\nTest: Run ART test suite including gcstress on host and Nexus 9.\nTest: Manually disable implicit null checks and test as above.\nChange-Id: If82a8082ea9ae571c5d03b5e545e67fcefafb163\n"
    },
    {
      "commit": "91a6516103b8bf8bb75c3a2840cbdec7521e74a7",
      "tree": "d93043f578bfa5b8d76e8c175e6441b378c4a7b2",
      "parents": [
        "6a4abc633fa8580b06056ec6f80ced8ce7511277"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Mon Sep 19 13:54:30 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Mon Sep 19 13:54:30 2016 +0100"
      },
      "message": "Remove the `CanTriggerGC` side-effects on a few instructions.\n\nThe side-effect was specified for these instructions as they call\nruntime. We now have a list of entrypoints that we know cannot trigger\nGC. We can avoid requiring the side-effect for those.\n\nTest: Run ART test suite on Nexus 5X and host.\n\nChange-Id: I0e0e6a4d701ce6c75aff486cb0d1bc7fe2e8dda4\n"
    },
    {
      "commit": "56f4bdde45e978dd5873525f63d1cb562d42ffc0",
      "tree": "e71b00f8b0214e0a750150df84ba5669be6e8b54",
      "parents": [
        "0764877e21f1230e718923d5b84b048cd4346afa"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 16 11:32:36 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 16 16:39:19 2016 +0100"
      },
      "message": "x86/x86-64: Simplify codegen using helper functions.\n\nSimplify comparisons and array element address calculations.\n\nTest: m test-art-host\nChange-Id: I2a3f54a3638cf4c24d9e3cac83daba47f0723f72\n"
    },
    {
      "commit": "3b7537bfc5a6b7ccb18b3970d8edf14b72464af7",
      "tree": "49996e22e36a64ea862e7b173e9626d862a4d595",
      "parents": [
        "c11d1b42828475ea1e7319fc3eb9402edc5b1c13"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 13 11:56:01 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 14 10:42:08 2016 +0100"
      },
      "message": "Revert \"Revert \"Use implicit null checks inside try blocks.\"\"\n\nFix implicit checks in try blocks to emit stack maps.\nFix arm64 null expection from signal entrypoint to call\nthe runtime handler instead or simply jumping there.\n\nOn Nexus 9, AOSP ToT, the boot.oat size reduction is\n  prebuilt multi-part boot image:\n    - 32-bit boot.oat: -448KiB (-1.3%)\n    - 64-bit boot.oat: -528KiB (-1.2%)\n  on-device built single boot image:\n    - 32-bit boot.oat: -448KiB (-1.4%)\n    - 64-bit boot.oat: -528KiB (-1.3%)\nNote that the oat files no longer contain dex files which\nhave been moved to vdex, so the percentages are not directly\ncomparable with the those reported in the original commit.\n\nTest: Run ART test suite including gc-stress on host and Nexus 9.\nBug: 30212852\nBug: 31468464\n\nThis reverts commit 0719b5b9b458cb3eb9f0823f0dacdfe1a71214dd.\n\nChange-Id: If8a9da8c11adf2aad203e93b6684ce16ed776285\n"
    },
    {
      "commit": "e204051d3cc3b1be2e91f26621966c79c82fa74c",
      "tree": "63270cd53f278140c7aef246925b39c858ccc55e",
      "parents": [
        "f0c41505e1d241cf2191d3db377a26ce0bb43b51",
        "0719b5b9b458cb3eb9f0823f0dacdfe1a71214dd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 12 22:07:09 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 12 22:07:10 2016 +0000"
      },
      "message": "Merge \"Revert \"Use implicit null checks inside try blocks.\"\""
    },
    {
      "commit": "0719b5b9b458cb3eb9f0823f0dacdfe1a71214dd",
      "tree": "cf0844758239b6ec41fa070e4fb4b4fbcbb9e506",
      "parents": [
        "7aa7560683626c7893011271c241b3265ded1dc3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 12 22:05:33 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 12 22:05:33 2016 +0000"
      },
      "message": "Revert \"Use implicit null checks inside try blocks.\"\n\nFails gcstress tests.\n\nThis reverts commit 7aa7560683626c7893011271c241b3265ded1dc3.\n\nChange-Id: I4f5c89048b9ffddbafa02f3001e329ff87058ca2\n"
    },
    {
      "commit": "a60a7053cd9a25c89dedc810b8a539cad3d56b36",
      "tree": "bd01f1c185885e719776d67f510820f437d55dd7",
      "parents": [
        "6ee9a333553b7e7268b5bdab14974475ff385106"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 12 18:11:28 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 12 18:42:19 2016 +0100"
      },
      "message": "Remove custom CheckCast slow path caller saves for Baker CC.\n\nFor Baker CC, CheckCast has both a read-barrier marking slow\npath and a pCheckCast slow path. When the latter is known to\nleave the method, i.e. known to throw outside a try-block,\nwe do not need to save live registers for retrieval for the\nexception delivery and since the read-barrier marking does\nnot need to save any registers either we were setting the\ncustom slow path caller saves to empty to avoid reserving\nunnecessary spill space. Hovewer, this also leads to marking\nlive references in caller-save registers in the register\nmask and while the read-barrier marking entrypoint doesn\u0027t\ncare, it causes a stack walk for the pCheckCast to try and\nretrieve an unsaved register.\n\nFor the time being, revert to the default caller saves.\n\nThis is a partial revert of\n    https://android-review.googlesource.com/254920\n\nTest: Run ART test suite on host and Nexus 9.\nBug: 29231980\nBug: 30212852\nChange-Id: I4e22125f3d8903c97506aa2e6e66bea8e8e6baef\n"
    },
    {
      "commit": "6ee9a333553b7e7268b5bdab14974475ff385106",
      "tree": "ed38b36182bfb48bf8f5aed5c7f3fd78aaea2c48",
      "parents": [
        "a5d718a9f8ef51e41a1485a0f6ab201aec4c0c82",
        "7aa7560683626c7893011271c241b3265ded1dc3"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 12 15:48:22 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 12 15:48:23 2016 +0000"
      },
      "message": "Merge \"Use implicit null checks inside try blocks.\""
    },
    {
      "commit": "7aa7560683626c7893011271c241b3265ded1dc3",
      "tree": "8c9839456149d2320995764ebab5d227a6dea8e7",
      "parents": [
        "ae6ba1fd36ef6cd6520354fa874cf9cc2fc5877b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 07 15:09:21 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 12 14:52:17 2016 +0100"
      },
      "message": "Use implicit null checks inside try blocks.\n\nMake implicit null check entrypoint save all registers, use\nplatform-specific approach to still pass the fault address.\nAllow implicit null checks in try blocks.\n\nOn Nexus 9, AOSP ToT, the boot.oat size reduction is\n  prebuilt multi-part boot image:\n    - 32-bit boot.oat: -452KiB (-0.7%)\n    - 64-bit boot.oat: -482KiB (-0.7%)\n  on-device built single boot image:\n    - 32-bit boot.oat: -444KiB (-0.7%)\n    - 64-bit boot.oat: -488KiB (-0.7%)\n\nTest: Run ART test suite on host and Nexus 9.\nTest: Build aosp_mips64-eng.\nChange-Id: I279f3ab57e2e2f338131c5cac45c51b673bdca19\n"
    },
    {
      "commit": "e0576d15f3ad0e9316f96838af01f7cc7acf6c3c",
      "tree": "abc6ce4677243c84a4c70ecd0240056f95e874fb",
      "parents": [
        "280764498fdba371f972301daa870e33bef31d6a"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 09 12:49:55 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 09 13:28:02 2016 -0700"
      },
      "message": "Re-enable boot image direct string loads for read barriers\n\nBoot.oat code size with CC baker:\nARM32: 70775656 -\u003e 69817028 (-1.35%)\nARM64: 80819424 -\u003e 79417072 (-1.74%)\nX86 unmeasured.\nX86_64 unmeasured.\n\nPerformance unmeasured, should be faster.\n\nBug: 29516974\n\nTest: test-art-host CC baker, N6P booting CC baker\n\nChange-Id: I219faaca9ed17af81d2815fb5e124120f307af83\n"
    },
    {
      "commit": "175d09beba59060f6634ba45ebccc712accd032e",
      "tree": "531f95d86c3b4ad41cf922c4745ba26a44542dc8",
      "parents": [
        "35e5e9c5e1ac976145eb5a887704e026c2636fa3"
      ],
      "author": {
        "name": "Christina Wadsworth",
        "email": "cwadsworth@google.com",
        "time": "Wed Aug 31 16:26:01 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 08 19:46:31 2016 -0700"
      },
      "message": "ART: Generate path to entrypoints in VisitLoadString for x86\n\nCode size unmeasured, presumably ~-1%.\n\nGenerate code to go into string dex cache entrypoints in VisitLoadString\ninstead of with slow paths, since we now go into entrypoints almost\nevery time.\n\nChange-Id: Ic4335a23934547737dbda12111f672da1e6c0ef7\nTests: test-art-host CC baker\n"
    },
    {
      "commit": "1dd61766fb245c2d2d7c759411b2b7b203fe0681",
      "tree": "02a932d971bb0d789be1accfd87fcf82f1a074d2",
      "parents": [
        "d14d515df39cd963179088b8721768f9645243aa",
        "9d6e1f892768b0a0cf273ca455070f462a766a06"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Sep 08 16:08:34 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 08 16:08:34 2016 +0000"
      },
      "message": "Merge \"Do type checks in ArraySet without read barriers.\""
    },
    {
      "commit": "31b12e32073f458950e96d0d1b44e48508cf67e4",
      "tree": "b6f818dfa6b45342d6b69283c10e1db9817b8b0e",
      "parents": [
        "038cb84f792501ae01561fe5ea4e8144f1918b7e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 02 17:11:57 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 07 10:13:48 2016 -0700"
      },
      "message": "Avoid read barrier for image HLoadClass\n\nConcurrent copying baker:\n\nX86_64 core-optimizing-pic.oat: 28583112 -\u003e 27906824 (2.4% smaller)\n\nAround 0.4% of 2.4% is from re-enabling kBootImageLinkTimeAddress,\nkBootImageLinkTimePcRelative, and kBootImageAddress.\n\nN6P boot.oat 32: 73042140 -\u003e 71891956 (1.57% smaller)\nN6P boot.oat 64: 83831608 -\u003e 82531456 (1.55% smaller)\n\nEAAC: 1252 -\u003e 1245 (32 samples)\n\nBug: 29516974\n\nTest: test-art-host CC baker, N6P booting\n\nChange-Id: I9a196cf0157058836981c43c93872e9f0c4919aa\n"
    },
    {
      "commit": "9d6e1f892768b0a0cf273ca455070f462a766a06",
      "tree": "fea5326fd36e3869a1d6d5fc0d0c8d80e2bca445",
      "parents": [
        "66d4779c8381db2dd5c0fbe92b3c3a45a7a57ef3"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Sep 05 15:57:33 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Sep 07 11:55:13 2016 +0100"
      },
      "message": "Do type checks in ArraySet without read barriers.\n\nThis approach is valid in the case of Baker and non-Baker\nread barriers.\n\nBenchmarks (ARM64) score variations on Nexus 5X with CPU\ncores clamped at 960000 Hz (aosp_bullhead-userdebug build,\nmedians of 10 runs for each suite):\n- Ritzperf - average (lower is better):       -0.44% (virtually unchanged)\n- CaffeineMark - average (higher is better):  -0.20% (virtually unchanged)\n- DeltaBlue (lower is better):                -4.08% (slightly better)\n- Richards - average (lower is better):       -0.57% (virtually unchanged)\n- SciMark2 - average (higher is better):      -0.52% (virtually unchanged)\n\nDetails about Ritzperf benchmarks with meaningful variations\n(lower is better):\n- GenericCalcActions.MemAllocTest:            +3.02% (slightly worse)\n\nDetails about Richards benchmarks with meaningful variations\n(lower is better):\n- gibbons                                     -5.01% (better)\n\nBoot image code size variation on Nexus 5X\n(aosp_bullhead-userdebug build):\n- total ARM64 framework Oat files size change:\n  83127840 bytes -\u003e 83082656 bytes (-45184 bytes, -0.05%)\n- total ARM framework Oat files size change:\n  72571872 bytes -\u003e 72522796 bytes (-49076 bytes, -0.07%)\n\nTest: ART_USE_READ_BARRIER\u003dtrue ART_HEAP_POISONING\u003dtrue m test-art-host\nTest: ART_USE_READ_BARRIER\u003dtrue ART_HEAP_POISONING\u003dtrue m test-art-target\nBug: 29516974\nBug: 12687968\nChange-Id: I8fe130156ace87dd2e4a15d9f8b4111287e735b3\n"
    },
    {
      "commit": "239d6eaff0cbb5c4c0139f7053a012758799f186",
      "tree": "8de26b30a2dfd94f849a38c8901437facbbc53b3",
      "parents": [
        "9d185da3bef8caf015d3dbf4ad79c520af7ce3b1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 05 10:44:04 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 06 17:37:41 2016 +0100"
      },
      "message": "Change deoptimize entrypoint to save everything.\n\nAnd implement FPU register retrieval from stack on x86.\n\nOn Nexus 9, AOSP ToT, the boot.oat size reduction is\n  prebuilt multi-part boot image:\n    - 32-bit boot.oat: -20KiB (-0.03%)\n    - 64-bit boot.oat: -45KiB (-0.06%)\n  on-device built single boot image:\n    - 32-bit boot.oat: -24KiB (-0.04%)\n    - 64-bit boot.oat: -36KiB (-0.05%)\n\nTest: Run ART test suite on host and Nexus 9.\nBug: 30212852\nChange-Id: I5d98e2a24363136d73dfec6100ab02f8eb101911\n"
    },
    {
      "commit": "86dc59ebe25cfe36d4edb39c2b7b2653f079448b",
      "tree": "446d80551ab72701914ed08ac18fcaeffd6555b1",
      "parents": [
        "b0f443217306b8a307f73d35cb27c1cac2e1c360",
        "70e97462116a47ef2e582ea29a037847debcc029"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 05 18:12:13 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 05 18:12:13 2016 +0000"
      },
      "message": "Merge \"Avoid excessive spill slots for slow paths.\""
    },
    {
      "commit": "70e97462116a47ef2e582ea29a037847debcc029",
      "tree": "ee587e35b9b9483c35875ccc8ddea139978ca823",
      "parents": [
        "521691ae4dfad47cf6b46858347fa5fa32fd7bcc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 09 11:04:26 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 05 17:27:41 2016 +0100"
      },
      "message": "Avoid excessive spill slots for slow paths.\n\nReducing the frame size makes stack maps smaller as we need\nfewer bits for stack masks and some dex register locations\nmay use short location kind rather than long. On Nexus 9,\nAOSP ToT, the boot.oat size reduction is\n  prebuilt multi-part boot image:\n    - 32-bit boot.oat: -416KiB (-0.6%)\n    - 64-bit boot.oat: -635KiB (-0.9%)\n  prebuilt multi-part boot image with read barrier:\n    - 32-bit boot.oat: -483KiB (-0.7%)\n    - 64-bit boot.oat: -703KiB (-0.9%)\n  on-device built single boot image:\n    - 32-bit boot.oat: -380KiB (-0.6%)\n    - 64-bit boot.oat: -632KiB (-0.9%)\n  on-device built single boot image with read barrier:\n    - 32-bit boot.oat: -448KiB (-0.6%)\n    - 64-bit boot.oat: -692KiB (-0.9%)\n\nThe other benefit is that at runtime, threads may need fewer\npages for their stacks, reducing overall memory usage.\n\nWe defer the calculation of the maximum spill size from\nthe main register allocator (linear scan or graph coloring)\nto the RegisterAllocationResolver and do it based on the\nlive registers at slow path safepoints. The old notion of\nan artificial slow path safepoint interval is removed as\nit is no longer needed.\n\nTest: Run ART test suite on host and Nexus 9.\nBug: 30212852\nChange-Id: I40b3d114e278e2c5807982904fa49bf6642c6275\n"
    },
    {
      "commit": "ba45db072c48783e19a2a73ab4e45ae143c1c7c9",
      "tree": "d17d8f846f6960195e20143f25f84f776f92dc37",
      "parents": [
        "081e7a16c4fcbdb014441a236e12f58eb89ff99a"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@linaro.org",
        "time": "Tue Jul 12 22:53:02 2016 +0100"
      },
      "committer": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@linaro.org",
        "time": "Wed Aug 31 17:22:49 2016 +0100"
      },
      "message": "Extend the InvokeRuntime() changes to x86 and x86_64.\n\nAlso fix the LocationSummary for intrinsics that call on main\nand slowpath.\n\nTest: test-art-host\n\nChange-Id: I437ffd433ee87b1754dbd8c075ec54f00d7d4ccb\n"
    },
    {
      "commit": "cf073b3528f86fd4bf28617e9b770a4229054e42",
      "tree": "8ca2fa054fd0c0988fac870f4181920a257c99bb",
      "parents": [
        "6fe468835c528f65d0e4793e9da57f01eb6ba62b",
        "16d9f949698faed28435af7aa9c9ebacbfd5d1a8"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 26 09:51:01 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 26 09:51:02 2016 +0000"
      },
      "message": "Merge \"Re-enable the ArraySet fast path with Baker read barriers.\""
    },
    {
      "commit": "16d9f949698faed28435af7aa9c9ebacbfd5d1a8",
      "tree": "870fbd499c10f70cecc5f62246b26e1332b600da",
      "parents": [
        "7c95b4e22897a6f14ef79ec6e547e2eed686814a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 25 17:27:56 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 25 17:27:56 2016 +0100"
      },
      "message": "Re-enable the ArraySet fast path with Baker read barriers.\n\nBenchmarks (ARM64) score variations on Nexus 5X with CPU\ncores clamped at 960000 Hz (aosp_bullhead-userdebug build):\n- Ritzperf - average (lower is better):       -0.95% (virtually unchanged)\n- CaffeineMark - average (higher is better):  +2.50% (slightly better)\n- DeltaBlue (lower is better):                -0.55% (virtually unchanged)\n- Richards - average (lower is better):       +0.67% (virtually unchanged)\n- SciMark2 - average (higher is better):      -0.10% (virtually unchanged)\n\nDetails about Ritzperf benchmarks with meaningful variations\n(lower is better):\n- GenericCalcActions.MemAllocTest:            -5.05% (better)\n\nDetails about CaffeineMark benchmarks with meaningful variations\n(higher is better):\n- Method:                                    +16.88% (better)\n\nDetails about Richards benchmarks with meaningful variations\n(lower is better):\n- deutsch_acc_interface:                      +9.86% (worse)\n\nBoot image code size variation on Nexus 5X\n(aosp_bullhead-userdebug build):\n- total ARM64 framework Oat files size change:\n  105933472 bytes -\u003e 106027680 bytes (+0.09%)\n- total ARM framework Oat files size change:\n  89157936 bytes -\u003e 89239856 bytes (+0.09%)\n\nTest: ART host and target (ARM, ARM64) tests.\nBug: 29516974\nBug: 29506760\nBug: 12687968\nChange-Id: Ib9e9709712295e17804b8888ac10e3d518ff2e70\n"
    },
    {
      "commit": "8d49fd7b1087fba274a844cbf180349c528cf912",
      "tree": "128be6aa83734b09ecf189a70525570555a4d8cb",
      "parents": [
        "082bfec57684bd93dcca0800d030c12fd448127f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 25 15:20:47 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 25 15:24:05 2016 +0100"
      },
      "message": "ArraySet without type check does not need read barrier.\n\nTest: Run ART test suite with ART_USE_READ_BARRIER\u003dtrue on host and Nexus 9.\nBug: 12687968\nChange-Id: Ie04a34b2149f4fc6fe995f3e43e76986a3f6330f\n"
    },
    {
      "commit": "953437bd51059801d92079295f728d0260efca31",
      "tree": "b52816b5092a143361ea3878ef0e06d311c4a56f",
      "parents": [
        "c67d22ac6db73aaa9540294c86344bf8021495b3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 24 08:30:46 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 24 13:20:32 2016 +0100"
      },
      "message": "Revert \"Revert \"x86/x86-64: Avoid temporary for read barrier field load.\"\"\n\nFixed the fault handler recognizing the TEST instruction and\nfault address within the lock word. Added tests to 439-npe.\n\nBug: 29966877\nBug: 12687968\nTest: Tested with ART_USE_READ_BARRIER\u003dtrue on host.\nTest: Tested with ART_USE_READ_BARRIER\u003dtrue ART_HEAP_POISONING\u003dtrue on host.\n\nThis reverts commit ccf15bca330f9a23337b1a4b5850f7fcc6c1bf15.\n\nChange-Id: I8990def5f719c9205bf6e5fdba32027fa82bec50\n"
    },
    {
      "commit": "ccf15bca330f9a23337b1a4b5850f7fcc6c1bf15",
      "tree": "8e271269eb0f3e40388311478fe441bfeb47ab47",
      "parents": [
        "ccf06d8f19a37432de4a3b768747090adfbd18ec"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 23 17:48:38 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 23 17:48:38 2016 +0000"
      },
      "message": "Revert \"x86/x86-64: Avoid temporary for read barrier field load.\"\n\nFault handler does not recognize the instruction\n    F6 /0 ib    TEST r/m8, imm8\nso we get crashes instead of NPEs.\n\nBug: 29966877\nBug: 12687968\n\nThis reverts commit ccf06d8f19a37432de4a3b768747090adfbd18ec.\n\nChange-Id: Ib7db3b59f44c0d3ed5e24a20b6c6ee596a89d709\n"
    },
    {
      "commit": "ccf06d8f19a37432de4a3b768747090adfbd18ec",
      "tree": "fcb3ba46184db6882e695cecf1cfe495417593ae",
      "parents": [
        "cf834d00de838272cf28f2382ffc26fe716aae5c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 12 13:37:55 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 23 11:41:44 2016 +0100"
      },
      "message": "x86/x86-64: Avoid temporary for read barrier field load.\n\nAdd TEST instructions for memory and immediate. Use the byte\nversion to avoid a temporary in read barrier field load.\n\nTest: Tested with ART_USE_READ_BARRIER\u003dtrue on host.\nTest: Tested with ART_USE_READ_BARRIER\u003dtrue ART_HEAP_POISONING\u003dtrue on host.\nBug: 29966877\nBug: 12687968\nChange-Id: Ia415d3c2e1ae1ff6dff11d72bbb7d96d5deed6ee\n"
    },
    {
      "commit": "9c07ab332b8ebbcb1586c311bfcb75e19b8a35b4",
      "tree": "26a300b803f77e64c17e3d239a1880a4c5960666",
      "parents": [
        "6670bd2098264d4c4e19750ab4741121da7ee54b",
        "bf44e0e5281de91f2e38a9378b94ef8c50ad9b23"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 19 17:33:03 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 19 17:33:03 2016 +0000"
      },
      "message": "Merge \"ART: Implement a fixed size string dex cache\""
    },
    {
      "commit": "0b671c0408e98824e1f92b1ee951b210c090fe7a",
      "tree": "0bc58c031cd899aa856677fe8c9ffa376228806f",
      "parents": [
        "36bf3a2d281892e7906d3eaf9d7455b0656c9a25"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 19 12:02:34 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 19 16:00:09 2016 +0100"
      },
      "message": "Add support for Baker read barriers in SystemArrayCopy intrinsics.\n\nBenchmarks (ARM64) score variations on Nexus 5X with CPU\ncores clamped at 960000 Hz (aosp_bullhead-userdebug build):\n- Ritzperf - average (lower is better):       -3.03% (slightly better)\n- CaffeineMark - average (higher is better):  +1.26% (slightly better)\n- DeltaBlue (lower is better):               -10.50% (better)\n- Richards - average (lower is better):       -3.36% (slightly better)\n- SciMark2 - average (higher is better):      +0.26% (virtually unchanged)\n\nDetails about Ritzperf benchmarks with meaningful variations\n(lower is better):\n- FormulaEvaluationActions.EvaluateAndApplyChanges: -13.26% (better)\n- FormulaEvaluationActions.EvaluateCascadingSums:   -10.94% (better)\n- FormulaEvaluationActions.EvaluateComplexFormulas: -15.50% (better)\n- FormulaEvaluationActions.EvaluateFibonacci:       -10.41% (better)\n- FormulaEvaluationActions.EvaluateLargeSums:        +6.02% (worse)\n\nBoot image code size variation on Nexus 5X\n(aosp_bullhead-userdebug build):\n- total ARM64 framework Oat files size change:\n  107047632 bytes -\u003e 107154128 bytes (+0.10%)\n- total ARM framework Oat files size change:\n  90932028 bytes -\u003e 91009852 bytes (+0.09%)\n\nTest: ART host and target (ARM, ARM64) tests + Nexus 5X boot.\nBug: 29516905\nBug: 29506760\nBug: 12687968\nChange-Id: I85431368d09965687a0301ae2eb3c991f276ce5d\n"
    },
    {
      "commit": "bf44e0e5281de91f2e38a9378b94ef8c50ad9b23",
      "tree": "bb6e65a3434806dc58f286ee75ad3b78ba9d6c36",
      "parents": [
        "d99565069c64fefc069005286de04599dc2619b8"
      ],
      "author": {
        "name": "Christina Wadsworth",
        "email": "cwadsworth@google.com",
        "time": "Thu Aug 18 10:37:42 2016 -0700"
      },
      "committer": {
        "name": "Christina Wadsworth",
        "email": "cwadsworth@google.com",
        "time": "Thu Aug 18 16:18:36 2016 -0700"
      },
      "message": "ART: Implement a fixed size string dex cache\n\nPreviously, the string dex cache was dex_file-\u003eNumStringIds() size, and\n@ruhler found that only ~1% of that cache was ever getting filled. Since\nmany of these string dex caches were previously 100,000+ indices in\nlength, we\u0027re wasting a few hundred KB per app by storing null pointers.\nThe intent of this project was to reduce the space the string dex cache\nis using, while not regressing on time that much. This is the first of a\nfew CLs, which implements the new fixed size array and disables the\ncompiled code so it always goes slow path. In four other CLs, I\nimplemented a \"medium path\" that regresses from the previous \"fast path\"\nonly a bit in assembly in the entrypoints. @vmarko will introduce new\ncompiled code in the future so that we ultimately won\u0027t be regressing on\ntime at all. Overall, space savings have been confirmed as on the order\nof 100 KB per application.\n\nA 4-5% slow down in art-opt on Golem, and no noticeable slow down in the\ninterpreter. The opt slow down should be diminished once the new\ncompiled code is introduced.\n\nTest: m test-art-host\n\nBug: 20323084\n\nChange-Id: Ic654a1fb9c1ae127dde59290bf36a23edb55ca8e\n"
    },
    {
      "commit": "7cbd27fe778f2c348136540d52b5473e28f5769d",
      "tree": "80c0fa4ff2a223c061245c6799d992cd4d863fa0",
      "parents": [
        "3d1d18d74dfac5039b6093ddf04f74eee4f157a3"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 11 23:53:33 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 12 13:19:51 2016 +0100"
      },
      "message": "Adjust spacing before NOLINT comments in ART.\n\nNote that neither clang-tidy nor cpplint.py complain about\nthese style \"issues\", precisely because of the NOLINT\ncomments.\n\nTest: WITH_TIDY\u003d1 WITH_TIDY_CHECKS\u003d\u0027-*,misc-macro-parentheses\u0027 mmma art\nChange-Id: Id692fd394ffbd4fe208cbbe4407b4d5e208462bb\n"
    },
    {
      "commit": "961ea1286f670a9ac9fc673308a9cf56137acb95",
      "tree": "e4158b237c7527d18be3e9fbf5bac322df935aee",
      "parents": [
        "33699c9529add1c1ec4bb5dcb0807942709de224"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 11 14:16:57 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 11 14:17:21 2016 +0100"
      },
      "message": "x86/x86-64: Shorter fast-path for read barrier field load.\n\nTest: Tested with ART_USE_READ_BARRIER\u003dtrue on host.\nBug: 29966877\nBug: 12687968\nChange-Id: I73359495910dacb2cc28f1a21ef9e610bab5a476\n"
    },
    {
      "commit": "965c0b9f98a4acbec7be148291196e30784bba2d",
      "tree": "c9b53c36226535f2941d47a1ea222da114266680",
      "parents": [
        "2e98023165349ab91855555f63fed8dad3c471fe",
        "952dbb19cd094b8bfb01dbb33e0878db429e499a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 04 14:44:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 04 14:44:10 2016 +0000"
      },
      "message": "Merge \"Change suspend entrypoint to save all registers.\""
    },
    {
      "commit": "952dbb19cd094b8bfb01dbb33e0878db429e499a",
      "tree": "82932c2b00245042e2c129f3d4133f6431657da3",
      "parents": [
        "df638c66d1f385d4e217b2ab22c5e48a7eefdef4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 28 12:01:51 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 04 14:51:52 2016 +0100"
      },
      "message": "Change suspend entrypoint to save all registers.\n\nWe avoid the need to save/restore registers in slow paths\nand get significant code size savings. On Nexus 9, AOSP:\n  - 32-bit boot.oat: -1.4MiB (-1.9%)\n  - 64-bit boot.oat: -2.0MiB (-2.3%)\n  - other 32-bit oat files in dalvik-cache: -200KiB (-1.7%)\n  - other 64-bit oat files in dalvik-cache: -2.3MiB (-2.1%)\n\nTest: Run ART test suite on host and Nexus 9 with gc stress.\nBug: 30212852\nChange-Id: I7015afc1e7d30341618c9200a3dc9ae277afd134\n"
    },
    {
      "commit": "542451cc546779f5c67840e105c51205a1b0a8fd",
      "tree": "11e09bb5abaee12dddffefbe7e425291076dfa7a",
      "parents": [
        "85c4a4b8c9eabfe16e4e49f9b4aa78c1bf4be023"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 26 09:02:02 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 01 18:54:48 2016 -0700"
      },
      "message": "ART: Convert pointer size to enum\n\nMove away from size_t to dedicated enum (class).\n\nBug: 30373134\nBug: 30419309\nTest: m test-art-host\nChange-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269\n"
    },
    {
      "commit": "dec8f63fdf50815f24efe1c03af64208da15f339",
      "tree": "36c8dec8c2c93312d17c6d9d1452d4b133212dbd",
      "parents": [
        "41c7e2e6ac0a59da2f3e066e20630b295fbe4661"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 22 17:10:06 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 22 18:54:35 2016 +0100"
      },
      "message": "Do not emit stack maps for runtime calls to ReadBarrierMarkRegX.\n\n* Boot image code size variation on Nexus 5X\n  (aosp_bullhead-userdebug build):\n  - total ARM64 framework Oat files size change:\n    115584120 bytes -\u003e 109124728 bytes (-5.59%)\n  - total ARM framework Oat files size change:\n    97387728 bytes -\u003e 92517584 (-5.00%)\n\nTest: ART host and target (ARM, ARM64) tests.\nBug: 29506760\nBug: 12687968\nChange-Id: I979d9fb2b4e09f4c0c7bf33af2cd91750a67f989\n"
    },
    {
      "commit": "057361ca33625ed14b33ffd8e641e27916fb2fea",
      "tree": "cf13a0b5c0e5504fdcf320ab9a9936d0d489bdf5",
      "parents": [
        "65ad9b3516c4f4bc4e7abf5c6e065a675cf024d8",
        "4359e61927866c254bc2d701e3ea4c48de10b79c"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 21 12:11:15 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 21 12:11:15 2016 +0000"
      },
      "message": "Merge \"Move caller-saves saving/restoring to ReadBarrierMarkRegX.\""
    },
    {
      "commit": "4359e61927866c254bc2d701e3ea4c48de10b79c",
      "tree": "05d274ecd6b5ff6eb890f64cd3bb670c7170bf15",
      "parents": [
        "2be946bbf995496fe56364d9b7c4957fcb6aeec5"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 20 11:32:19 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 21 11:21:20 2016 +0100"
      },
      "message": "Move caller-saves saving/restoring to ReadBarrierMarkRegX.\n\nInstead of saving/restoring live caller-save registers\nbefore/after the call to read barrier mark entry points\nReadBarrierMarkRegX, have these entry points save/restore\nall the caller-save registers themselves (except register\nrX, which contains the return value).\n\nAlso refactor the assembly code of these entry points\nusing macros.\n\n* Boot image code size variation on Nexus 5X\n  (aosp_bullhead-userdebug build):\n  - total ARM64 framework Oat files size change:\n    119196792 bytes -\u003e 115575920 bytes (-3.04%)\n  - total ARM framework Oat files size change:\n    100435212 bytes -\u003e 97621188 bytes (-2.80%)\n\n* Benchmarks (ARM64) score variations on Nexus 5X\n  (aosp_bullhead-userdebug build):\n  - RitzPerf (lower is better)\n    - average score difference: -2.71%\n  - CaffeineMark (higher is better)\n    - no real difference for most tests\n      (absolute variation lower than 1%)\n    - better score on the \"Method\" benchmark:\n      score variation 41253 -\u003e 44891 (+8.82%)\n\nTest: ART host and target (ARM, ARM64) tests.\nBug: 29506760\nBug: 12687968\nChange-Id: I881bf73139a3f1c2bee9ffc6fc8c00f9a392afa6\n"
    },
    {
      "commit": "e4b1c86d13c3f60362708f4a128b62db156f5fde",
      "tree": "4920c33f3510a21dba212650659174a7bb44c855",
      "parents": [
        "ce1ba111bfa122247ac186e7d2c6cf5943ba28cd",
        "465ecc86ff65ca546629630c9469deb6d2d8137e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 21 00:04:52 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 21 00:04:52 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Refactor GetIMTIndex\"\"\""
    },
    {
      "commit": "6740997e6934bbca27d5830a32352d82aabbd38b",
      "tree": "684ab2e46ddeaaf251fb6919bf64295810e46afa",
      "parents": [
        "dc4f4d42aa1712a7ac2e4c24c0aebe58b71ae2c0"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 19 22:34:53 2016 -0700"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 20 11:44:25 2016 +0100"
      },
      "message": "ART: Change return types of field access entrypoints\n\nEnsure that return types guarantee full-width data as the compiled\ncode and mterp expect by using size_t and ssize_t.\n\nThis fixes Clang no longer sign-/zero-extending small return types.\n\nBug: 30232671\nTest: m ART_TEST_RUN_TEST_NDEBUG\u003dtrue ART_TEST_INTERPRETER\u003dtrue test-art-host-run-test\nChange-Id: Ic505befc6c94e2dccbc8abf2b13d4c2d662e68d1\n"
    },
    {
      "commit": "465ecc86ff65ca546629630c9469deb6d2d8137e",
      "tree": "3a0ed3f2d3ab9fd2cffec44a659036efab35fb4e",
      "parents": [
        "bae13af2fc2fa89985d0466cedf155cb96767910"
      ],
      "author": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Tue Jul 19 21:32:52 2016 +0000"
      },
      "committer": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Tue Jul 19 21:48:06 2016 +0000"
      },
      "message": "Revert \"Revert \"Refactor GetIMTIndex\"\"\n\nOriginally reverted in order to revert\nhttps://android-review.googlesource.com/#/c/244190/\nbut can now be merged again.\n\nThis reverts commit d4ceecc85a5aab2ec23ea1bd010692ba8c8aaa0c.\n\nTest: m test-art-host\n\nChange-Id: Id9205f2b77a378fc0f06088e78c66e81a49f712d\n"
    },
    {
      "commit": "2c30a373428b8d19bf97866d5d323c4ca2fbca72",
      "tree": "8927430b0ae7185b0583615e8dbd7481ac13c6c7",
      "parents": [
        "7598736db0647eb963e77fafc22af6c0a5747d20",
        "02b75806a80f8b75c3d6ba2ff97c995117630f36"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 14 09:32:34 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 14 09:32:34 2016 +0000"
      },
      "message": "Merge \"Introduce more compact ReadBarrierMark slow-paths.\""
    },
    {
      "commit": "09d77fac678d6c4d743218ffb6b77dea002b073e",
      "tree": "e9c527aa279e3c1eb400e0d2c539521d899875eb",
      "parents": [
        "d2c44723e6fac5dd4aafffe61cbed3214340883c",
        "ff484b95b25a5181a6a8a191cbd11da501c97651"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 14 07:56:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 14 07:56:17 2016 +0000"
      },
      "message": "Merge \"Fix a bug in ClassTableGet code generation for IMTs.\""
    },
    {
      "commit": "a70835569128786877caa64c4e1978e734ff0768",
      "tree": "e7ca7ee9517983ede563a338c0372f3aad9476b6",
      "parents": [
        "c8cbda659671b111e309fe123cb2d4887e4edd10",
        "ee8d971b14edfc1e0af9436fd223277df966e4c2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 13 16:37:34 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 13 16:37:34 2016 +0000"
      },
      "message": "Merge \"X86: Use memory to do array range checks\""
    },
    {
      "commit": "ff484b95b25a5181a6a8a191cbd11da501c97651",
      "tree": "a14875e1a28afd1c5f7bd6a0a80414674253e593",
      "parents": [
        "1fd347303275a424d114c9833f954e8e27812554"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 13 14:13:48 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 13 16:13:03 2016 +0100"
      },
      "message": "Fix a bug in ClassTableGet code generation for IMTs.\n\nIntroduced by:\n  https://android-review.googlesource.com/#/c/244980/\n\ntest:566-polymorphic-inling for fixing x86 crash. Also\nfixes a performance regression.\nbug:29188168\n\nChange-Id: Id90cb819c88e7ba3db1cb3c50c517a112ab7d784\n"
    },
    {
      "commit": "ee8d971b14edfc1e0af9436fd223277df966e4c2",
      "tree": "2dc16ca40980cc716aba24d793eaa8731846a180",
      "parents": [
        "dedde3f10d7801ad862d1ca1de89135decff6a60"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue Jul 12 11:13:15 2016 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Jul 13 10:40:45 2016 -0400"
      },
      "message": "X86: Use memory to do array range checks\n\nCurrently, an HBoundsCheck is fed by an HArrayLength, causing a load of\nthe array length, followed by a register compare.\n\nAvoid the load when we can by comparing directly with the array length\nin memory.  Implement this by marking the HArrayLength as \u0027emitted at\nuse site\u0027, and then generating the code in the HBoundsCheck.\n\nOnly do this replacement when we are the only user of the ArrayLength\nand it isn\u0027t visible to the environment.\n\nHandle the special case where the array is \u0027null\u0027 and where an implicit\nnull check can\u0027t be eliminated.\n\nThis code moves the load of the length to the slow code for the failed\ncheck, which is what we want.\n\nTest: 609-checker-x86-bounds-check\n\nChange-Id: I9cdb183301e048234bb0ffeda940eedcf4a655bd\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "02b75806a80f8b75c3d6ba2ff97c995117630f36",
      "tree": "ecdb1852c3e33f120110091cc2d07a9737fbd3b5",
      "parents": [
        "5f485719b166ceb8e591329d40e76c5e50988022"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 13 11:54:35 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 13 11:54:35 2016 +0100"
      },
      "message": "Introduce more compact ReadBarrierMark slow-paths.\n\nReplace entry point ReadBarrierMark with 32\nReadBarrierMarkRegX entry points, using register\nnumber X as input and output (instead of the standard\nruntime calling convention) to save two moves in Baker\u0027s\nread barrier mark slow-path code.\n\nTest: ART host and target (ARM, ARM64) tests.\nBug: 29506760\nBug: 12687968\nChange-Id: I73cfb82831cf040b8b018e984163c865cc44ed87\n"
    },
    {
      "commit": "d8f5f56f2dd90e2bcb6d41cb48403320b9eb04b9",
      "tree": "6c0c43f98f6c50c799c45449a4a45fa121ab1ba3",
      "parents": [
        "6caea66f9d73b9fe4693090e3b3ceb1cf0b248d1",
        "54ff482710910929900f8348a19c5b875e519237"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 12 11:07:50 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 12 11:07:50 2016 +0000"
      },
      "message": "Merge \"Rename kCall to kCallOnMainOnly\""
    },
    {
      "commit": "54ff482710910929900f8348a19c5b875e519237",
      "tree": "82667795ef43a33a87a585f9bc841c88ff3460f1",
      "parents": [
        "2e7acaffda05db1df6e0631468f10726e898a20a"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@linaro.org",
        "time": "Thu Jul 07 18:03:19 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 11 17:59:29 2016 +0000"
      },
      "message": "Rename kCall to kCallOnMainOnly\n\nThis patch renames kCall to kCallOnMainOnly in preparation for\nthe next patch in this series which will be adding kCallOnMainAndSlowPath.\n\nNote: With this patch there will be places where we use kCallOnMainOnly\neven though we call on the slow path too. The next patch in this series\nwill fix that.\n\nTest: ART host tests.\nChange-Id: Iabfdb0901990d163be5d780f3bdd2fab6fa17b32\n"
    },
    {
      "commit": "a62cb9bb6cb2278cb41ab0664191623e178c6a4f",
      "tree": "62263dac644e2d80a34a04f2649e4741a1bed6f4",
      "parents": [
        "bb8d501c9bb882a8927c6ceda07bf9577e06c3e1"
      ],
      "author": {
        "name": "Artem Udovichenko",
        "email": "artem.u@samsung.com",
        "time": "Thu Jun 30 09:18:25 2016 +0000"
      },
      "committer": {
        "name": "Artem Udovichenko",
        "email": "artem.u@samsung.com",
        "time": "Thu Jul 07 10:01:04 2016 +0000"
      },
      "message": "Revert \"Revert \"Optimize IMT\"\"\n\nThis reverts commit 88f288e3564d79d87c0cd8bb831ec5a791ba4861.\n\nChange-Id: I49605d53692cbec1e2622e23ff2893fc51ed4115\n"
    },
    {
      "commit": "88f288e3564d79d87c0cd8bb831ec5a791ba4861",
      "tree": "dd051a7b2985d1af3fea91ad6000de4bdc701a19",
      "parents": [
        "e36389f20c83083c0aaba2dcac0888951e55cae1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 29 08:17:52 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 29 08:41:25 2016 +0000"
      },
      "message": "Revert \"Optimize IMT\"\n\nBug: 29188168 (for initial CL)\nBug: 29778499 (reason for revert)\n\nThis reverts commit badee9820fcf5dca5f8c46c3215ae1779ee7736e.\n\nChange-Id: I32b8463122c3521e233c34ca95c96a5078e88848\n"
    },
    {
      "commit": "e36389f20c83083c0aaba2dcac0888951e55cae1",
      "tree": "3fe74b637f8dc90e3cbc8ad3949f3f340236537f",
      "parents": [
        "abf64415cf99a9a7ee048ae26c76f7bbe972a6b9",
        "d4ceecc85a5aab2ec23ea1bd010692ba8c8aaa0c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 29 08:40:14 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 29 08:40:14 2016 +0000"
      },
      "message": "Merge \"Revert \"Refactor GetIMTIndex\"\""
    },
    {
      "commit": "d4ceecc85a5aab2ec23ea1bd010692ba8c8aaa0c",
      "tree": "982948a67a88a1f9a734c935f919f8d307969f48",
      "parents": [
        "50706437d8216e41f0fea1e413cda7891324d397"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 29 08:39:47 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 29 08:39:47 2016 +0000"
      },
      "message": "Revert \"Refactor GetIMTIndex\"\n\nI need to revert this to get https://android-review.googlesource.com/#/c/244190/ to cleanly revert. Matthew, do you mind rewriting it?\n\nThis reverts commit 50706437d8216e41f0fea1e413cda7891324d397.\n\nChange-Id: I5c1435f5dffb46dbb5b613b22adb88c7770304f2\n"
    },
    {
      "commit": "31167a5785f7a5124de96535066db9890559f546",
      "tree": "3d0ddb1bb390389532b5fc94dd6f2f5c8d648582",
      "parents": [
        "bad21cb538d76105712c967b62d1cf677777a956",
        "3d31242300c3525e5c85665d9e34acf87002db63"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jun 24 13:04:36 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 24 13:04:37 2016 +0000"
      },
      "message": "Merge changes I4d8da7ce,I4da5be01,Idfbead82\n\n* changes:\n  Re-enable most intrinsics with read barriers.\n  Fix ARM \u0026 ARM64 UnsafeGetObject intrinsics with read barriers.\n  Fix x86 \u0026 x86-64 UnsafeGetObject intrinsics with read barriers.\n"
    },
    {
      "commit": "3d31242300c3525e5c85665d9e34acf87002db63",
      "tree": "c7f66d95fa3d65241a1c9f10381c1e0ec0989a4e",
      "parents": [
        "bfea33585e229973f7887afbf51fe45c2ba41e91"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jun 23 13:53:42 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jun 23 14:05:17 2016 +0100"
      },
      "message": "Re-enable most intrinsics with read barriers.\n\nAlso extend sun.misc.Unsafe test coverage to exercise\nsun.misc.Unsafe.{get,put}{Int,Long,Object}Volatile.\n\nBug: 26205973\nBug: 29516905\nChange-Id: I4d8da7cee5c8a310c8825c1631f71e5cb2b80b30\nTest: Covered by ART\u0027s run-tests.\n"
    },
    {
      "commit": "4692c35c151951aa1fa901ca24bfa302a9beeacf",
      "tree": "8d28d7714dd7fa0ae1ff44888ae61f3c8786bfeb",
      "parents": [
        "f6d4f6e0e61977777b7a9ca18b75bcd26e98e9f9",
        "87f3fcbd0db352157fc59148e94647ef21b73bce"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 21 16:18:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 21 16:18:10 2016 +0000"
      },
      "message": "Merge \"Replace String.charAt() with HIR.\""
    },
    {
      "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": "dbb7f5bef10138ade0fb202da1d61f562b2df649",
      "tree": "f0aa4b390c534b215a6e000c865783cdd9852353",
      "parents": [
        "b94b5706f0b8e2e1c7e1db22274f9f4bae0c4b5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 30 13:23:58 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 21 15:11:57 2016 +0100"
      },
      "message": "Improve HLoadClass code generation.\n\nFor classes in the boot image, use either direct pointers\nor PC-relative addresses. For other classes, use PC-relative\naccess to the dex cache arrays for AOT and direct address of\nthe type\u0027s dex cache slot for JIT.\n\nFor aosp_flounder-userdebug:\n  - 32-bit boot.oat: -252KiB (-0.3%)\n  - 64-bit boot.oat: -412KiB (-0.4%)\n  - 32-bit dalvik cache total: -392KiB (-0.4%)\n  - 64-bit dalvik-cache total: -2312KiB (-1.0%)\n    (contains more files than the 32-bit dalvik cache)\nFor aosp_flounder-userdebug forced to compile PIC:\n  - 32-bit boot.oat: -124KiB (-0.2%)\n  - 64-bit boot.oat: -420KiB (-0.5%)\n  - 32-bit dalvik cache total: -136KiB (-0.1%)\n  - 64-bit dalvik-cache total: -1136KiB (-0.5%)\n    (contains more files than the 32-bit dalvik cache)\n\nBug: 27950288\nChange-Id: I4da991a4b7e53c63c92558b97923d18092acf139\n"
    },
    {
      "commit": "50706437d8216e41f0fea1e413cda7891324d397",
      "tree": "23c7c5d1198b8cdde6261198626cfe443eab59ba",
      "parents": [
        "badee9820fcf5dca5f8c46c3215ae1779ee7736e"
      ],
      "author": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Tue Jun 14 11:31:04 2016 -0700"
      },
      "committer": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Wed Jun 15 09:08:35 2016 -0700"
      },
      "message": "Refactor GetIMTIndex\n\nThis allows us to more easily maintain and experiment with\ninterface method table indexing and hashing.\n\nChange-Id: I719920fae7490dcedcda7c1c36db225c2b8b16df\n"
    },
    {
      "commit": "badee9820fcf5dca5f8c46c3215ae1779ee7736e",
      "tree": "982948a67a88a1f9a734c935f919f8d307969f48",
      "parents": [
        "614968198625a6693666bdc1e5609e2f663f5638"
      ],
      "author": {
        "name": "Nelli Kim",
        "email": "nelli.kim@samsung.com",
        "time": "Fri May 13 13:08:53 2016 +0300"
      },
      "committer": {
        "name": "Matthew Gharrity",
        "email": "gharrma@google.com",
        "time": "Tue Jun 14 10:05:47 2016 -0700"
      },
      "message": "Optimize IMT\n\n* Remove IMT for classes which do not implement interfaces\n* Remove IMT for array classes\n* Share same IMT\n\nSaved memory (measured on hammerhead):\nboot.art:\nTotal number of classes: 3854\nNumber of affected classes: 1637\nSaved memory: 409kB\n\nChrome (excluding classes in boot.art):\nTotal number of classes: 2409\nNumber of affected classes: 1259\nSaved memory: 314kB\n\nGoogle Maps (excluding classes in boot.art):\nTotal number of classes: 6988\nNumber of affected classes: 2574\nSaved memory: 643kB\n\nPerformance regression on benchmarks/InvokeInterface.java benchmark\n(measured timeCall10Interface)\n1st launch: 9.6%\n2nd launch: 6.8%\n\nChange-Id: If07e45390014a6ee8f3c1c4ca095b43046f0871f\n"
    },
    {
      "commit": "372f10e5b0b34e2bb6e2b79aeba6c441e14afd1f",
      "tree": "1f29c2467c8909ef0e0147f37f176caa1bcd2ccc",
      "parents": [
        "1b66fdf3f33c72dfdda4d31f6f17b6a0d8607402"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 17 16:30:10 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 02 19:04:20 2016 +0100"
      },
      "message": "Refactor handling of input records.\n\nIntroduce HInstruction::GetInputRecords(), a new virtual\nfunction that returns an ArrayRef\u003c\u003e to all input records.\nImplement all other functions dealing with input records as\nwrappers around GetInputRecords(). Rewrite functions that\npreviously used multiple virtual calls to deal with input\nrecords, especially in loops, to prefetch the ArrayRef\u003c\u003e\nonly once for each instruction.  Besides avoiding all the\nextra calls, this also allows the compiler (clang++) to\nperform additional optimizations.\n\nThis speeds up the Nexus 5 boot image compilation by ~0.5s\n(4% of \"Compile Dex File\", 2% of dex2oat time) on AOSP ToT.\n\nChange-Id: Id8ebe0fb9405e38d918972a11bd724146e4ca578\n"
    }
  ],
  "next": "3c7787fb2e197934a0e87329644384445b1d062f"
}
