)]}'
{
  "log": [
    {
      "commit": "4dc09e7261dede72d916059d1f751a48cd08dbb5",
      "tree": "8a04828754b8da25db0b9101021b5bf0880a450b",
      "parents": [
        "e57a82bd25aa09ca9ad35cb2cb54242d7028f9a0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri May 11 14:40:31 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri May 18 11:15:23 2018 -0700"
      },
      "message": "LSE improvement: better singleton array optimization\n\nRationale:\nIn a recent LSA/LSE refactoring, we removed the \"exceptional\"\nsituation on mismatched arrays from the load-elimination branch\nfor merged values. As a direct result, we can relax the condition\non removing stores for singleton arrays into return blocks a bit,\nas done in this CL (and shown with some tests).\n\nTest: test-art-host,target\n\nBug: b/77906240\n\nChange-Id: I32c89057168730f82d1d7c41155a9ff71b126204\n"
    },
    {
      "commit": "06d10a78506fae7e033795cda7b1d9d0e1f1fff5",
      "tree": "91f94a605395776710f3d14298613a803158f3aa",
      "parents": [
        "93d301397c83b08f6fc165847a3d518e1031f392"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 14 08:53:38 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 14 16:49:55 2018 +0100"
      },
      "message": "ART: Add dex::ProtoIndex\n\nTest: m -j32 test-art-host\nChange-Id: Ic2d2a7a43be1b8590b97cdf3729200b043ffc6a3\n"
    },
    {
      "commit": "dbaa5c7ba8935cf87ceb40a4054f9842929e9a51",
      "tree": "5037625c80cb97a0e13026dc450db28e59ff72ca",
      "parents": [
        "51dda39549033b3c50a7fce5522ffc81325db54b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 08:22:46 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri May 11 11:55:30 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-handle\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I67f461c819a7d528d7455afda8b4a59e9aed381c\n"
    },
    {
      "commit": "18259d7fb7164a5e029df4f883b3a79ccc2403e8",
      "tree": "ba378bfdef4127bb0607215186e3b150fd38bcdf",
      "parents": [
        "922501b4bbf724e4259477a27764291684eedffb"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Apr 12 11:18:23 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 15:04:09 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-type\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I4b3d3969d455d0198cfe122eea8abd54e0ea20ee\n"
    },
    {
      "commit": "6d5b7e38fd5aba9eaad3a630b4859d214fa8f77c",
      "tree": "c6e9d055840bbc5a9b57de2128656d80f6ef7cd6",
      "parents": [
        "48af3b39cd7c8abaa7f9671191ec8260630239b2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 16:52:48 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 16:57:43 2018 +0100"
      },
      "message": "ART: Clean up after HInstruction::Is##type() rewrite.\n\nAddress late comments on\n    https://android-review.googlesource.com/679021 .\n\nTest: Rely on TreeHugger.\nChange-Id: Id82976651aced36b8ee2808b6a9effbfb3224d42\n"
    },
    {
      "commit": "a90dd515c4451ad3d6e7ecdf0f0527fcc1e32d91",
      "tree": "1d551b2ce84dd87e7622d011354cea24b856047a",
      "parents": [
        "b865d9af3bb5f4777dbe9cbd60cdb2a8fe5f0557"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 15:04:45 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 17:16:51 2018 +0100"
      },
      "message": "Reimplement HInstruction::Is##type().\n\nUse a table-based implementation for abstract kinds. This\nimplementation can be fully inlined and even eliminated if\nthe range of possible kinds is known.\n\nThere is a small (\u003c0.5%) improvement of dex2oat compile\ntime for a big app (sum of \"Compile Dex File Quick\" dumped\nfor --dump-timings with the timing of compiler passes hacked\naway) on aosp_taimen-userdebug, little cores, -j4. The sizes\nof libart-compiler.so have changed:\n  - lib/libart-compiler.so: 2178608 -\u003e 2169136 (-9472)\n    .rodata: 0xd36c -\u003e 0xd55c (+496)\n    .text: 0x175914 -\u003e 0x175f44 (+1584)\n    .data.rel.ro: 0xa858 -\u003e 0x84e8 (-9072)\n  - lib64/libart-compiler.so: 3091432 -\u003e 3064248 (-27184)\n    .rodata: 0x15aa4 -\u003e 0x15c94 (+496)\n    .text: 0x203304 -\u003e 0x202294 (-4208)\n    .data.rel.ro: 0x151d8 -\u003e 0x10a68 (-18288)\nNote that .data.rel.ro is always dirty memory, .rodata and\n.text is always clean.\n\nTest: Rely on TreeHugger\nChange-Id: I95e6040ecd23cad83f024970c3bf785d32169deb\n"
    },
    {
      "commit": "e394622583774d7e3c32bea0c7ffc4777ee47e56",
      "tree": "129435b4db6c780b1750b3a1a9b3f4cc8612b322",
      "parents": [
        "0dcccd815684b4c7540f9c6d39de161e44e5f51c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 14:18:47 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "ART: Do not define abstract HIR kinds.\n\nThey were never used and the two cases in HSchedulerARM64\u0027s\nIsSchedulable() were unreachable.\n\nTest: Rely on TreeHugger.\nChange-Id: I506bc2a89a6fbf556f32e25ecfe61eaad236a40a\n"
    },
    {
      "commit": "0dcccd815684b4c7540f9c6d39de161e44e5f51c",
      "tree": "89fce5c16f7d05f81c302a75e2ff744a002a1a3e",
      "parents": [
        "bd78567cef305e35481734b7fc24f68ded031439"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 13:32:25 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "ART: Remove InstructionTypeEquals().\n\nAvoid the virtual call and simply compare the instruction\nkinds.\n\nTest: Rely on TreeHugger.\nChange-Id: I7310de976614c5ec63d61a447a40047de5bc654d\n"
    },
    {
      "commit": "bd78567cef305e35481734b7fc24f68ded031439",
      "tree": "e3873b73e3631c5cd70c1a3f8f38e79dad25d890",
      "parents": [
        "9926e4615d75cb6c9371e1766a14b0a80089ae18"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 03 17:09:09 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "Store HIR type in HInstruction::packed_field_.\n\nThis is similar to\n    https://android-review.googlesource.com/609566\nthough the performance impact has not been measured.\nHowever, avoiding a virtual call reduces pressure on the\nbranch predictor and provides better optimization\nopportunities for the C++ compiler.\n\nAs there is now no difference between HTemplateInstruction\u003c\u003e\nand HExpression\u003c\u003e (the type is stored in HInstruction), we\nremove the former and use HExpression\u003c\u003e for all instructions\nthat have a fixed number of inputs.\n\nTest: Rely on TreeHugger.\nChange-Id: Ib3fd111048b0ac38ee65386a7e5af70c5ccc98de\n"
    },
    {
      "commit": "75ff2c96c37485ff8c74cf9942c0a4bf0710e91c",
      "tree": "13b3cdcf7060e06b1dc50201c4f4d9436d379db7",
      "parents": [
        "240384b7d96c2d579bf58ed7a3e9c9ba1911dae3"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Sat Apr 21 01:28:11 2018 +0000"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Sat Apr 21 01:28:11 2018 +0000"
      },
      "message": "Revert \"Revert^2: Deopt does not throw\"\n\nThis reverts commit 240384b7d96c2d579bf58ed7a3e9c9ba1911dae3.\n\nReason for revert: P1 b/78360004 points to this so reverting for now (will triage later)\n\nChange-Id: I041c1d9fc045391c73e887268c3b1b9b69fcc216\n"
    },
    {
      "commit": "240384b7d96c2d579bf58ed7a3e9c9ba1911dae3",
      "tree": "d00e99045d9b4fda7a3743577dbddeba0c276a38",
      "parents": [
        "cb21a56d811e961ad1f2a50ee8bc748bd148885c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 17 14:56:29 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 19 09:17:11 2018 -0700"
      },
      "message": "Revert^2: Deopt does not throw\n\nRationale:\n\"CanThrow\" of deopt was possibly misused to prevents some\noptimizations. However, the instruction technically cannot\nthrow an exception, and indeed crashed the graph verifier\nfor some corner cases. This Cl sets that right.\n\nBug: 29868356\n\nTest: test-art-host,target\n\n(revert^2 of commit 2905de1c0e5b6a0c995be474b3f0efdfdc6a41c4)\n\nChange-Id: I4d4e6c00eff52140aa1845332998224ececc92ef\n"
    },
    {
      "commit": "080820c8e7a25bc3fb28d7c5a1524b0e5537c7a9",
      "tree": "398d9bbd027743a233034d4977821c0275a918e7",
      "parents": [
        "2905de1c0e5b6a0c995be474b3f0efdfdc6a41c4"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 19 04:02:36 2018 +0000"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 19 04:02:36 2018 +0000"
      },
      "message": "Revert \"Deopt does not throw\"\n\nThis reverts commit 2905de1c0e5b6a0c995be474b3f0efdfdc6a41c4.\n\nReason for revert: test breaks on git_master-art-host; art-test-javac (linux) \n\nChange-Id: Ic39d442776858c74d2163683c78bd3a8072ad45e\n"
    },
    {
      "commit": "2905de1c0e5b6a0c995be474b3f0efdfdc6a41c4",
      "tree": "83f372a7922090b3243831c2cb9a23b3ccd29c0b",
      "parents": [
        "740a50992ea1a200068eb4486a172a151c9b329c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 17 14:56:29 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 18 16:01:35 2018 -0700"
      },
      "message": "Deopt does not throw\n\nRationale:\n\"CanThrow\" of deopt was possibly misused to prevents some\noptimizations. However, the instruction technically cannot\nthrow an exception, and indeed crashed the graph verifier\nfor some corner cases. This Cl sets that right.\n\nBug: 29868356\n\nTest: test-art-host,target\nChange-Id: Icb551d3b2935282a70ad673a0544e4fe01104da1\n"
    },
    {
      "commit": "175e7862dbdb44089ef327fc43ba00c791fd3838",
      "tree": "7b7ff4327b51b57e47e4b22af8d771edb9d462c1",
      "parents": [
        "77c6fc7341143dd27c74cddd786398688d7b4c91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 09:03:13 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 10:04:25 2018 +0100"
      },
      "message": "Revert^4 \"Compiler changes for bitstring based type checks.\"\n\nDisabled the build time flag. (No image version bump needed.)\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\n\nThis reverts commit 3fbd3ad99fad077e5c760e7238bcd55b07d4c06e.\n\nChange-Id: I5d83c4ce8a7331c435d5155ac6e0ce1c77d60004\n"
    },
    {
      "commit": "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e",
      "tree": "e8bc33fa60c38f7e1c85f8d4acf6a738df9b426a",
      "parents": [
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "message": "Revert^3 \"Compiler changes for bitstring based type checks.\"\n\nThis reverts commit 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d.\n\nReason for revert: Fails sporadically.\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\nChange-Id: I84d1e9e46c58aeecf17591ff71fbac6a1e583909\n"
    },
    {
      "commit": "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d",
      "tree": "ce41c620d2cd411da3c20aa95fb9a69328e77c42",
      "parents": [
        "9ec1e24ebc683b15bb9c6db5554ac2ff9458adae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 12 18:39:15 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 12:12:39 2018 +0000"
      },
      "message": "Revert^2 \"Compiler changes for bitstring based type checks.\"\n\nAdd extra output for debugging failures and re-enable\nthe bitstring type checks.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 26687569\n\nThis reverts commit bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb.\n\nChange-Id: I090e241983f3ac6ed8394d842e17716087d169ac\n"
    },
    {
      "commit": "312f3b2fd0094c028a7d243b116947a35a745806",
      "tree": "3d7ec049ded98c489098c87250c75e3f711f8290",
      "parents": [
        "0a3d5eb2ff9e70fa5785638da938439835d0337e"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 19 08:39:26 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 19 11:02:48 2018 -0700"
      },
      "message": "Move some remaining dex utilities\n\nThere were several utilities related to building/walking/testing dex\nfiles that were not in libdexfile.  This change consolidates these.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Id76e9179d03b8ec7d67f7e0f267121f54f0ec2e0\n"
    },
    {
      "commit": "29aa08219ff72409e9f10ae2a5da4e6e604baad1",
      "tree": "2ccde97263f82b6a2f1a83d5b674f46c412c2909",
      "parents": [
        "8e68c6c85ad188e306cd66f8b620350f996fe242"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 08 11:28:00 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 15 09:49:18 2018 -0700"
      },
      "message": "Vectorization of saturation arithmetic.\n\nRationale:\nBecause faster is better.\n\nBug: b/74026074\n\nTest: test-art-host,target\n\nChange-Id: Ifa970a62cef1c0b8bb1c593f629d8c724f1ffe0e\n"
    },
    {
      "commit": "9992e095643f6746361df03c4c98e742d9ad5899",
      "tree": "8abf49af54ee57fc0acebf2a3d9cafd87d6ec48e",
      "parents": [
        "a5867bfeb34529dad71220046e7327cef23af207",
        "e47f60c482648172334aaca59e6c1ab7a3d42610"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 09 10:17:11 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 09 10:17:11 2018 +0000"
      },
      "message": "Merge \"Retrieve String/Class references from .data.bimg.rel.ro.\""
    },
    {
      "commit": "8ba5641ddc43fc13cdb0158bd9f3237c4a90a356",
      "tree": "4dad508f24b675e87dd31ff26e597289a329c5cc",
      "parents": [
        "66f40dbc3e56c7102820842ec49a55b70cf0e151",
        "b066d43b1d9184899aff32b1f243d092611ad9c6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 08 17:45:59 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 08 17:45:59 2018 +0000"
      },
      "message": "Merge \"Load ArtMethod* from .data.bimg.rel.ro entries.\""
    },
    {
      "commit": "e47f60c482648172334aaca59e6c1ab7a3d42610",
      "tree": "ae0672b12a6ad200e1c38962c77bccfc3e5cb531",
      "parents": [
        "b066d43b1d9184899aff32b1f243d092611ad9c6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 21 13:43:28 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 08 10:40:12 2018 +0000"
      },
      "message": "Retrieve String/Class references from .data.bimg.rel.ro.\n\nFor PIC AOT-compiled app, use the .data.bimg.rel.ro to load\nthe boot image String/Class references instead of using the\nmmapped boot image ClassTable and InternTable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --pictest --npictest\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --pictest --npictest\nBug: 71526895\nChange-Id: Id5703229777aecb589a933a41f92e44d3ec02a3d\n"
    },
    {
      "commit": "b066d43b1d9184899aff32b1f243d092611ad9c6",
      "tree": "5409177f52b1f1c648297913cb0e0b2808b9048d",
      "parents": [
        "fe491c7b9cdd64ff4ccc10f6b212cb92a59fc765"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 03 13:14:37 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 08 10:40:10 2018 +0000"
      },
      "message": "Load ArtMethod* from .data.bimg.rel.ro entries.\n\nIntroduce a new .data.bimg.rel.ro section in oat files where\nwe store offsets of boot image objects from the beginning of\nthe boot image. At runtime we relocate these entries using\nthe actual boot image address to turn offsets to pointers.\n\nUse the .data.bimg.rel.ro to prepare the boot image methods\nused by HInvokeStaticOrDirect for PIC AOT app compilation.\nLoading the ArtMethod* from .data.bimg.rel.ro instead of the\n.bss avoids the initial call to the resolution trampoline.\n\nTest: Additional test in 522-checker-sharpening\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --pictest --npictest\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --pictest --npictest\nBug: 71526895\nChange-Id: Ie5f5b1f622704877b36730377146e59092e46c0c\n"
    },
    {
      "commit": "1f8d51bc03cbc607ae32fadf3a90f385adeffb95",
      "tree": "70e18902051ce47e0d524525b83709efbe6f250f",
      "parents": [
        "7a02c66fd9ed174fc2e49ccc9f582dd661b7de9e"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Feb 15 10:42:37 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 07 09:22:09 2018 -0800"
      },
      "message": "Introduce MIN/MAX/ABS as HIR nodes.\n\nRationale:\nHaving explicit MIN/MAX/ABS operations (in contrast\nwith intrinsics) simplifies recognition and optimization\nof these common operations (e.g. constant folding, hoisting,\ndetection of saturation arithmetic). Furthermore, mapping\nconditionals, selectors, intrinsics, etc. (some still TBD)\nonto these operations generalizes the way they are optimized\ndownstream substantially.\n\nBug: b/65164101\n\nTest: test-art-host,target\n\nChange-Id: I69240683339356e5a012802f179298f0b04c6726\n"
    },
    {
      "commit": "c431b9dc4b23cc950eb313695258df5d89f53b22",
      "tree": "422273559c3ae52caff0c6b1cf1a62a8312f0e26",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Mar 02 12:01:51 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 05 13:58:20 2018 -0800"
      },
      "message": "Move most of runtime/base to libartbase/base\n\nEnforce the layering that code in runtime/base should not depend on\nruntime by separating it into libartbase.  Some of the code in\nruntime/base depends on the Runtime class, so it cannot be moved yet.\nAlso, some of the tests depend on CommonRuntimeTest, which itself needs\nto be factored (in a subsequent CL).\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host\n\nChange-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2\n"
    },
    {
      "commit": "3dad341ed027b760d9b4ee402cb2c93ac484a07a",
      "tree": "a69817c3b2d455273b23d083267ef08c8b9adaee",
      "parents": [
        "d961043ff1dd6fddb68aa90c1f939cfafec24219"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Feb 28 12:01:46 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Mar 01 13:07:04 2018 -0800"
      },
      "message": "Introduce ABS as HIR nodes.\n\nNOTE: step 1 of 2 for\n\"Introduce MIN/MAX/ABS as HIR nodes.\"\n\nRationale:\nHaving explicit MIN/MAX/ABS operations (in contrast\nwith intrinsics) simplifies recognition and optimization\nof these common operations (e.g. constant folding, hoisting,\ndetection of saturation arithmetic). Furthermore, mapping\nconditionals, selectors, intrinsics, etc. (some still TBD)\nonto these operations generalizes the way they are optimized\ndownstream substantially.\n\nBug: b/65164101\n\nTest: test-art-host,target\nChange-Id: I9c93987197216158ba02c8aca2385086adedabc4\n"
    },
    {
      "commit": "d9e4d73b20d68aa387f5837e1535b6fc26b2859a",
      "tree": "b55a96e66f2db1482571788b33c6d3055cb47396",
      "parents": [
        "8dbb4ba7ffdf42cf08c55b117370efc0ec5357e8"
      ],
      "author": {
        "name": "Gupta Kumar, Sanjiv",
        "email": "sanjiv.kumar.gupta@intel.com",
        "time": "Mon Feb 05 13:35:03 2018 +0530"
      },
      "committer": {
        "name": "Gupta Kumar, Sanjiv",
        "email": "sanjiv.kumar.gupta@intel.com",
        "time": "Wed Feb 21 14:56:13 2018 +0530"
      },
      "message": "Fix iCache misses for GetKind on x86,x86_64\n\nGetKind() takes about 2.6% of total compilation time on x86_64.\nThe primary reason is that the target call GetKindInternal() is often\nbeyond the page boundary causing frequent i-cache misses.\nThis patch removes the virtual call to GetKindInternal () and instead\nkeeps the InstructionKind into each constructed instruction.\nSince we have about 121 instructions in total as of now,\nit takes about 7 extra bits in each instruction.\ndex2oat runs about 12% faster with --compiler-filter\u003deverything on an\nAPK of 25MB.\n\nTest: Tested the patch by running host art tests.\n\nRebased.\n\nChange-Id: Ia7bbcd67180151e4565507164a718acbb6284885\nSigned-off-by: Gupta Kumar, Sanjiv \u003csanjiv.kumar.gupta@intel.com\u003e\n"
    },
    {
      "commit": "ea179f477465789605e0c8f57a3ec660c3d852e8",
      "tree": "bde254b238c9ed42a5c0ae3ff14ffacadeeddb34",
      "parents": [
        "d991e5119a2bb61542899da9708f794dc60677c4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 08 22:30:18 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 15 15:47:02 2018 +0000"
      },
      "message": "Refactor method resolution in class linker.\n\nRewrite all runtime callers of DexCache::SetResolvedMethod\nto call a shared method that will do the dex cache update.\n\nbug: 64759619\nTest: test-art-host\nTest: device boots, runs\n\nChange-Id: Icc1aca121030e2864de09667bdbc793b502e3802\n"
    },
    {
      "commit": "bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb",
      "tree": "e281a8dde61e396ed5f20c31d41086b1b1b18389",
      "parents": [
        "83af48e9f4cdfcf3f0069c63561bab4c176bd2f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 13:33:07 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 15:05:16 2018 +0000"
      },
      "message": "Revert \"Compiler changes for bitstring based type checks.\"\n\nBug: 64692057\nBug: 71853552\nBug: 26687569\n\nThis reverts commit eb0ebed72432b3c6b8c7b38f8937d7ba736f4567.\n\nChange-Id: I7daeaa077960ba41b2ed42bc47f17501621be4be\n"
    },
    {
      "commit": "8c0961f9e061ee4b04c1c4ba8ad5cca13bcf884d",
      "tree": "f6e5a970a6bcc0935e150cb6c28a520bf31ba964",
      "parents": [
        "2b1a21ed3581f77f34d582507177ebce33565534"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 23 16:11:38 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 24 09:24:29 2018 -0800"
      },
      "message": "Move missed files to libdexfile\n\nReduce the dependencies on utf and utils in preparation for separate\ndirectory.\n\nBug: 22322814\nTest: make -j 50 test-art-host\n      make -j 50 dexdump2 dexlist\n\nChange-Id: Icdecf895dafec63ef903514eef79d459abc14925\n"
    },
    {
      "commit": "be2b613f5a30cdf2291b9f4f5d0acc2c1bb0b4ae",
      "tree": "0ff068df6465b52458ecca3de96d119234415def",
      "parents": [
        "2e1791b74406fba9930bbe5dfa5358d2d2c07e1a",
        "eb0ebed72432b3c6b8c7b38f8937d7ba736f4567"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 23 14:59:45 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 23 14:59:45 2018 +0000"
      },
      "message": "Merge \"Compiler changes for bitstring based type checks.\""
    },
    {
      "commit": "eb0ebed72432b3c6b8c7b38f8937d7ba736f4567",
      "tree": "74d95eb4bfbf01ef6fd3a68695f5d7cec69338d7",
      "parents": [
        "e57043081e6b091a9fd23a84043373148ae72f1f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 10 18:26:38 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 23 13:02:59 2018 +0000"
      },
      "message": "Compiler changes for bitstring based type checks.\n\nWe guard the use of this feature with a compile-time flag,\nset to true in this CL.\n\nBoot image size for aosp_taimen-userdebug in AOSP master:\n  - before:\n    arm boot*.oat: 63604740\n    arm64 boot*.oat: 74237864\n  - after:\n    arm boot*.oat: 63531172 (-72KiB, -0.1%)\n    arm64 boot*.oat: 74135008 (-100KiB, -0.1%)\n\nThe new TypeCheckBenchmark yields the following changes\nusing the little cores of taimen fixed at 1.4016GHz:\n                               32-bit        64-bit\n  timeCheckCastLevel1ToLevel1  11.48-\u003e15.80 11.47-\u003e15.78\n  timeCheckCastLevel2ToLevel1  15.08-\u003e15.79 15.08-\u003e15.79\n  timeCheckCastLevel3ToLevel1  19.01-\u003e15.82 17.94-\u003e15.81\n  timeCheckCastLevel9ToLevel1  42.55-\u003e15.79 42.63-\u003e15.81\n  timeCheckCastLevel9ToLevel2  39.70-\u003e14.36 39.70-\u003e14.35\n  timeInstanceOfLevel1ToLevel1 13.74-\u003e17.93 13.76-\u003e17.95\n  timeInstanceOfLevel2ToLevel1 17.02-\u003e17.95 16.99-\u003e17.93\n  timeInstanceOfLevel3ToLevel1 24.03-\u003e17.95 24.45-\u003e17.95\n  timeInstanceOfLevel9ToLevel1 47.13-\u003e17.95 47.14-\u003e18.00\n  timeInstanceOfLevel9ToLevel2 44.19-\u003e16.52 44.27-\u003e16.51\nThis suggests that the bitstring typecheck should not be\nused for exact type checks which would be equivalent to the\n\"Level1ToLevel1\" benchmark. Whether the implementation is\na beneficial replacement for the kClassHierarchyCheck and\nkAbstractClassCheck on average depends on how many levels\nfrom the target class (or Object for a negative result) is\na typical object\u0027s class.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 71853552\nBug: 26687569\nChange-Id: I538d7e036b5a8ae2cc3fe77662a5903d74854562\n"
    },
    {
      "commit": "7b4c09a39fd1b43995aa6d68958113463bc5b82b",
      "tree": "2fad44f5bbb1234bb0cc07312dac252deeca2edb",
      "parents": [
        "c7ae623f113484f42facd560756b13f34f7eab68",
        "7f4aff6705f46f411874b5ca8c4856b8ed5bfb13"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jan 22 21:04:20 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 22 21:04:20 2018 +0000"
      },
      "message": "Merge \"ART: Implement SuperblockCloner.\""
    },
    {
      "commit": "a8b8e9b12a9740d71cff2fa65d47825b74f72c37",
      "tree": "301275759cf145711175992a503fcc7d710c2d2f",
      "parents": [
        "6d4c343ee5db18f039aeb3e07ff8d3c1fd37c3a0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Jan 09 11:01:02 2018 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Jan 16 09:44:28 2018 -0800"
      },
      "message": "Improve code sinking near \"always throwing\" method calls\n\nRationale:\nWith simple dex bytecode analysis, the inliner marks methods\nthat always throw to help subsequent code sinking. This reduces\noverhead of non-nullable enforcing calls found in e.g the Kotlin\nruntime library (1%-2% improvement on tree microbenchmark, about\n5% on Denis\u0027 benchmark).\n\nTest: test-art-host test-art-target\n\nChange-Id: I45348f049721476828eb5443738021720d2857c0\n"
    },
    {
      "commit": "7f4aff6705f46f411874b5ca8c4856b8ed5bfb13",
      "tree": "59947502e43f04c23d212b6ea0e8dca3d91549e3",
      "parents": [
        "30f54cc45bd338f9d9079786dae96ea13ab9f163"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Wed Jun 21 17:02:18 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Jan 09 13:52:59 2018 +0000"
      },
      "message": "ART: Implement SuperblockCloner.\n\nSuperblockCloner provides a feature of cloning subgraphs in a\nsmart, high level way without fine grain manipulation with IR;\ndata flow and graph properties are resolved/adjusted automatically.\nThe clone transformation is defined by specifying a set of basic\nblocks to copy and a set of rules how to treat edges, remap their\nsuccessors. By using this approach such optimizations as Branch\nTarget Expansion, Loop Peeling, Loop Unrolling can be implemented.\n\nTest: superblock_cloner_test.cc.\nChange-Id: Ibeede38195376ca35f44ba9015491e50b3a5b87e\n"
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "df99018e106ee1d3b7601718fa1e444ab0a028da",
      "tree": "d5629ceea96fdaab106e2137c731f0ed7f6a487b",
      "parents": [
        "ee58c02b5959944a2db198a2d58355651ed29d53",
        "09faaea17b75269805b4857ed3c9cd04c7273959"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Dec 18 23:10:46 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Dec 18 23:10:46 2017 +0000"
      },
      "message": "Merge \"ART: Fix single-preheader transformation.\""
    },
    {
      "commit": "fe8a8975cd843c9a7922aaf0badae2d47562e9cd",
      "tree": "afaa12ffee3f70785607975c59f47e43111df61c",
      "parents": [
        "c8d910399cfd33550c497cc3e1e05b0396903234",
        "8758454d380a2b0de1f4a99e9623cfac5460ccdf"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 15 10:08:11 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 15 10:08:11 2017 +0000"
      },
      "message": "Merge changes Ib1381084,Icb2a838f\n\n* changes:\n  Clean up InstanceOf/CheckCast.\n  X86: Clean up interface type check for heap poisoning.\n"
    },
    {
      "commit": "217eb067308cf5aa43065377b66acbbee0f5b7c3",
      "tree": "d98dad64fcd6efe39d1c984d615e4688dfdc75f8",
      "parents": [
        "0f13269734be07b5869005952a3cb91b0b34b73d"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Dec 11 15:20:07 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Dec 14 12:32:52 2017 -0800"
      },
      "message": "Fix the side effects of clinit check\n\nHClinitCheck obviously does reads so it\u0027s side effects should include\nall reads and writes, just like HInvoke. GVN now explicitly allows\nclinit check to be reused, which would otherwise be disallowed based on\nthe dependency introduced by the new side effects. Also make licm\u0027s\nlogic cleaner and treat clinit check as a special case also,\notherwise licm can\u0027t hoist clinit check due to the dependency\nintroduced by the new side effects also.\n\nTest: run-test on host.\nChange-Id: I16886cfe557803d84d84ce68fbb185ebfc0b84dc\n"
    },
    {
      "commit": "8758454d380a2b0de1f4a99e9623cfac5460ccdf",
      "tree": "0c23241949fc3ab94c826a18ffa2185218521bd4",
      "parents": [
        "e619f6c51d0ff99a00c63d3d092e0132522e8fc8"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 12 17:47:52 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 14 16:05:15 2017 +0000"
      },
      "message": "Clean up InstanceOf/CheckCast.\n\nAvoid read barriers for boot image class InstanceOf. Boot\nimage classes are non-moveable, so comparing them against\nfrom-space and to-space reference yields the same result.\n\nChange the notion of a \"fatal\" type check slow path to mean\nthat the runtime call shall not return by normal path, i.e.\n\"fatal\" now includes certainly throwing in a try-block. This\navoids unnecessary code to restore registers and jump back.\nFor boot image classes the CheckCast comparisons do not need\nread barriers (for the same reason as for InstanceOf), so we\nshall not have any false negatives and can treat the check\u0027s\nslow paths as final in the same cases as in non-CC configs.\n\nBoot image size for aosp_taimen-userdebug in AOSP master:\n  - before:\n    arm boot*.oat: 37075460\n    arm64 boot*.oat: 43431768\n  - after:\n    arm boot*.oat: 36894292 (-177KiB, -0.5%)\n    arm64 boot*.oat: 43201256 (-225KiB, -0.5%)\n\nAlso remove some obsolete helpers from CodeGenerator.\n\nTest: Additional test in 603-checker-instanceof.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing\nBug: 12687968\nChange-Id: Ib1381084e46a10e70320dcc618f0502ad725f0b8\n"
    },
    {
      "commit": "09faaea17b75269805b4857ed3c9cd04c7273959",
      "tree": "7794d83f6dd20acdcbb4ee7a075d6ea8f4590b42",
      "parents": [
        "03376f4c4de8e419402bf40fdff4135728ffb21e"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Dec 07 14:36:01 2017 +0000"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Wed Dec 13 19:18:13 2017 +0000"
      },
      "message": "ART: Fix single-preheader transformation.\n\nOriginal implementation of \"Make sure the loop has only one\npre-header\" had an assumption that the header had no phi\nfunctions since loops with multiple preheaders now only may exist\nduring graph building before ssa construction; all of the\noptimizations preserve the single-preheader invariant. This code is\nused by DCE; DCE was called multiple times but after graph building\npreheader transformation was never executed. However if someone\nintroduces a optimization which might not keep the invariant\n(e.g. loop peeling) the data flow adjustments must be performed.\n\nTest: loop_optimization_test.cc\nTest: test-art-target, test-art-host\nChange-Id: I88bb0aad2dd5241addef7fe9cda474a6868bf532\n"
    },
    {
      "commit": "03376f4c4de8e419402bf40fdff4135728ffb21e",
      "tree": "5d55cc893e2c445f6d181830bd6ae446010fbf8f",
      "parents": [
        "3f74ea478d755453a2fe5789ce155e80be3e7c7f",
        "1de1e11ac90db9fad8916ac43d43714ccb8d978f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 13 11:06:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 13 11:06:54 2017 +0000"
      },
      "message": "Merge \"ART: Try to statically evaluate some conditions.\""
    },
    {
      "commit": "1de1e11ac90db9fad8916ac43d43714ccb8d978f",
      "tree": "6653892be4d2372a189c4b82e8c3c8b0be064979",
      "parents": [
        "986005c955860a69d788f7ff7d7f28964eb684ad"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Jul 20 16:33:59 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Dec 12 18:13:10 2017 +0000"
      },
      "message": "ART: Try to statically evaluate some conditions.\n\nIf a condition \u0027cond\u0027 is evaluated in an HIf instruction then in\nthe successors of the this HIF_BLOCK we statically know the value\nof the condition (TRUE in TRUE_SUCC, FALSE in FALSE_SUCC). Using\nthat we could replace another evaluation (use) EVAL of the same\n\u0027cond\u0027 with TRUE value (FALSE value) if every path from the\nENTRY_BLOCK to EVAL_BLOCK contains the edge HIF_BLOCK-\u003eTRUE_SUCC\n(HIF_BLOCK-\u003eFALSE_SUCC).\n\n  if (cond) {\n    ...\n    if (cond) {\n      ...\n    }\n    ...\n    int a \u003d cond ? 5 : 105;\n    ...\n  }\n\nThe patch is a prerequisite step for \"Loop peeling to eliminate\ninvariant exits\" however it brings some value on its own with\na tiny code size reduction in boot-framework.oat (-8Kb).\n\nTest: 458-checker-instruct-simplification\nTest: test-art-target, test-art-host.\nChange-Id: Ifbe45097dc2b5f098176fa1a1d023ea90b76d396\n"
    },
    {
      "commit": "28e012a4af2d710e5e5f824709ffd6432e4f549f",
      "tree": "576ebdbff9d5f9f098cd29d652215b8f67b6b042",
      "parents": [
        "4388fb213ec746ee18a6bea38ee894f8c19990b9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 07 11:22:59 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 08 15:27:27 2017 +0000"
      },
      "message": "Determine HLoadClass/String load kind early.\n\nThis helps save memory by avoiding the allocation of\nHEnvironment and related objects for AOT references to\nboot image strings and classes (kBootImage* load kinds)\nand also for JIT references (kJitTableAddress).\n\nCompiling aosp_taimen-userdebug boot image, the most memory\nhungry method BatteryStats.dumpLocked() needs\n  - before:\n    Used 55105384 bytes of arena memory...\n    ...\n    UseListNode    10009704\n    Environment      423248\n    EnvVRegs       20676560\n    ...\n  - after:\n    Used 50559176 bytes of arena memory...\n    ...\n    UseListNode     8568936\n    Environment      365680\n    EnvVRegs       17628704\n    ...\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nBug: 34053922\nChange-Id: I68e73a438e6ac8e8908e6fccf53bbeea8a64a077\n"
    },
    {
      "commit": "f5df935f1ce34462aff7f93d40adcc5f026a6b11",
      "tree": "0a79218c8bfe133286f442c8f215ba689d5abe86",
      "parents": [
        "ddbef59de16cb2ff44a00c6f68174ea3419352ba",
        "fec85cdfa337dfb1f1c6d5bd9a940bc2d20a0edb"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 05 13:03:56 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 05 13:03:56 2017 +0000"
      },
      "message": "Merge \"Minor cleanup in CodeGenerator::RecordPcInfo().\""
    },
    {
      "commit": "fec85cdfa337dfb1f1c6d5bd9a940bc2d20a0edb",
      "tree": "ffb6eab50cd38f92631c2f2fb85accc7074b1221",
      "parents": [
        "dc93cac66f1db225474cec5bf0350fd7a148085e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 13:00:12 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 15:22:50 2017 +0000"
      },
      "message": "Minor cleanup in CodeGenerator::RecordPcInfo().\n\nAnd remove HInvokeInterface::GetDexMethodIndex() as the\nbase class version is identical.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I489bff5b3f624eec19269487529e29d58f068960\n"
    },
    {
      "commit": "0259c24f5e83ab69b259245b645076b864b2e2ca",
      "tree": "20a12e5d7ac9c1bcbf8f4524583f016a53ae34ca",
      "parents": [
        "dc93cac66f1db225474cec5bf0350fd7a148085e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 11:27:47 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 04 11:52:21 2017 +0000"
      },
      "message": "Fix a bug in String.charAt() simplification.\n\nDo not pass method index as a bool flag indicating that the\nHBoundsCheck originates from a String.charAt(). This was\nworking only thanks to the method index unlikely to be 0.\n\nThis bug was introduced in\n    https://android-review.googlesource.com/321573 .\n\nTest: Rely on TreeHugger.\nBug: 30933338\nChange-Id: I2a51e478ee145d342af8cd49f9fdec7adffd77ff\n"
    },
    {
      "commit": "68351ebf5b44989f7ccd75933f1f4093a8d3b670",
      "tree": "a0716ffc78d9bd115eca545e70c4ada0facbf3a8",
      "parents": [
        "b360bff818ad0bf59668cd2bebaaeeaa8a3b5dfe",
        "cced8ba4245a061ab047a0a6882468d75d619dd9"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Nov 21 16:56:28 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 21 16:56:28 2017 +0000"
      },
      "message": "Merge \"ART: Introduce individual HInstruction cloning.\""
    },
    {
      "commit": "46721ef33e8f5cd405c291d72e3f259e3085fb5f",
      "tree": "88709396bf7439400125f5d5c1883a42826cd5ca",
      "parents": [
        "6b337da6e9498e62b4c3e399366be7ad3b99169e"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Oct 05 14:45:17 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 16 09:10:32 2017 -0800"
      },
      "message": "Don\u0027t merge values for exit block in LSE.\n\nThis enables some additional optimizations since exit block doesn\u0027t\nreally merge values.\n\nTest: run-test on host.\nChange-Id: I21ed7e0e43a3bc5d9ed2dabfad8462129b904eb7\n"
    },
    {
      "commit": "cced8ba4245a061ab047a0a6882468d75d619dd9",
      "tree": "b379abfa48689c108e1cacedd2b13d4b5394baf2",
      "parents": [
        "96c76457d5c5af2d4243c78d74ada77de3223d88"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Wed Jul 19 18:18:09 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Nov 07 12:56:17 2017 +0000"
      },
      "message": "ART: Introduce individual HInstruction cloning.\n\nIntroduce API for HInstruction cloning, support it for a few\ninstructions. add a gtest.\n\nTest: cloner_test.cc, test-art-target, test-art-host.\n\nChange-Id: I8b6299be5d04a26390d9ef13a20ce82ee5ae4afe\n"
    },
    {
      "commit": "e0eb48353ddf0c1b79bfec2ba15c899a413c2c70",
      "tree": "71dfe896afa05c39d64373518d1e1e36cb8d8d43",
      "parents": [
        "3e6c13997373efac343a65740da0c4f6e77338b9"
      ],
      "author": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Mon Oct 30 13:43:14 2017 +0000"
      },
      "committer": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Thu Nov 02 16:17:17 2017 +0000"
      },
      "message": "Fix LSA hunt for original reference bug.\n\nFix a bug in LSA where it doesn\u0027t take IntermediateAddress\ninto account during hunting for original reference.\n\nIn following example, original reference i0 can be transformed\nby NullCheck, BoundType, IntermediateAddress, etc.\n  i0 NewArray\n  i1 HInstruction(i0)\n  i2 ArrayGet(i1, index)\n\nTest: test-art-host\nTest: test-art-target\nTest: load_store_analysis_test\nTest: 706-checker-scheduler\n\nChange-Id: I162dd8a86fcd31daee3517357c6af638c950b31b\n"
    },
    {
      "commit": "61b922847403ac0e74b6477114c81a28ac2e01a0",
      "tree": "02674602fb2592f758f51389b3c7b276ab4df3ee",
      "parents": [
        "6783118d2ad9d759f0617b1219a9e29a10a569f7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 13:23:17 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 18 15:52:51 2017 +0100"
      },
      "message": "ART: Introduce Uint8 loads in compiled code.\n\nSome vectorization patterns are not recognized anymore.\nThis shall be fixed later.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: testrunner.py --target --optimizing on Nexus 5X\nTest: Nexus 5X boots.\nBug: 23964345\nBug: 67935418\nChange-Id: I587a328d4799529949c86fa8045c6df21e3a8617\n"
    },
    {
      "commit": "69d310e0317e2fce97bf8c9c133c5c2c0332e61d",
      "tree": "fba05a1530e6fc4a2e6950303c1f7c6b0ffbb936",
      "parents": [
        "e764d2e50c544c2cb98ee61a15d613161ac6bd17"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 09 14:12:23 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 09:44:26 2017 +0100"
      },
      "message": "Use ScopedArenaAllocator for building HGraph.\n\nMemory needed to compile the two most expensive methods for\naosp_angler-userdebug boot image:\n  BatteryStats.dumpCheckinLocked() : 21.1MiB -\u003e 20.2MiB\n  BatteryStats.dumpLocked(): 42.0MiB -\u003e 40.3MiB\nThis is because all the memory previously used by the graph\nbuilder is reused by later passes.\n\nAnd finish the \"arena\"-\u003e\"allocator\" renaming; make renamed\nallocator pointers that are members of classes const when\nappropriate (and make a few more members around them const).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 64312607\nChange-Id: Ia50aafc80c05941ae5b96984ba4f31ed4c78255e\n"
    },
    {
      "commit": "e764d2e50c544c2cb98ee61a15d613161ac6bd17",
      "tree": "112aa7ca459d2edb4f800897060a2407fcc622c7",
      "parents": [
        "ca6fff898afcb62491458ae8bcd428bfb3043da1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 05 14:35:55 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 09 10:39:22 2017 +0100"
      },
      "message": "Use ScopedArenaAllocator for register allocation.\n\nMemory needed to compile the two most expensive methods for\naosp_angler-userdebug boot image:\n  BatteryStats.dumpCheckinLocked() : 25.1MiB -\u003e 21.1MiB\n  BatteryStats.dumpLocked(): 49.6MiB -\u003e 42.0MiB\nThis is because all the memory previously used by Scheduler\nis reused by the register allocator; the register allocator\nhas a higher peak usage of the ArenaStack.\n\nAnd continue the \"arena\"-\u003e\"allocator\" renaming.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 64312607\nChange-Id: Idfd79a9901552b5147ec0bf591cb38120de86b01\n"
    },
    {
      "commit": "ca6fff898afcb62491458ae8bcd428bfb3043da1",
      "tree": "195a6b16d3a4b34acc2faf91ce56f448efb15e07",
      "parents": [
        "aa7273e56fbafc2692c8d20a31b50d2f4bdd2aa1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 14:49:14 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 06 17:53:50 2017 +0100"
      },
      "message": "ART: Use ScopedArenaAllocator for pass-local data.\n\nPasses using local ArenaAllocator were hiding their memory\nusage from the allocation counting, making it difficult to\ntrack down where memory was used. Using ScopedArenaAllocator\nreveals the memory usage.\n\nThis changes the HGraph constructor which requires a lot of\nchanges in tests. Refactor these tests to limit the amount\nof work needed the next time we change that constructor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Build with kArenaAllocatorCountAllocations \u003d true.\nBug: 64312607\nChange-Id: I34939e4086b500d6e827ff3ef2211d1a421ac91a\n"
    },
    {
      "commit": "a290160f74ee53c0ffb51c7b3ac916d239c9556a",
      "tree": "0bfc9728ccee68dbd359b023319423f703448aac",
      "parents": [
        "86d244ec33f333b32301a9ee09088300c8544a7b"
      ],
      "author": {
        "name": "Lena Djokic",
        "email": "Lena.Djokic@imgtec.com",
        "time": "Thu Sep 21 13:50:52 2017 +0200"
      },
      "committer": {
        "name": "Lena Djokic",
        "email": "Lena.Djokic@imgtec.com",
        "time": "Thu Oct 05 11:43:34 2017 +0200"
      },
      "message": "MIPS32R2: Share address computation\n\nFor array accesses the element address has the following structure:\nAddress \u003d CONST_OFFSET + base_addr + index \u003c\u003c ELEM_SHIFT\n\nThe address part (index \u003c\u003c ELEM_SHIFT) can be shared across array\naccesses with the same data type and index.\n\nFor example, in the following loop 5 accesses can share address\ncomputation:\n\nvoid foo(int[] a, int[] b, int[] c) {\n  for (i...) {\n    a[i] \u003d a[i] + 5;\n    b[i] \u003d b[i] + c[i];\n  }\n}\n\nTest: test-art-host, test-art-target\nChange-Id: Id09fa782934aad4ee47669275e7e1a4d7d23b0fa\n"
    },
    {
      "commit": "c8fb211482e27ead6f015faf7e2b02225f728e99",
      "tree": "b9702c99bc3fd2c09e93905b6ea1fdb0d2c9d970",
      "parents": [
        "5adf26c26d6b662d95712f39c40946e23da8b650"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 11:37:52 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 12:44:47 2017 +0100"
      },
      "message": "ART: Simplify And(TypeConversion\u003cInt64\u003e(x), Const32).\n\nReorder the And and TypeConversion as\n    TypeConversion\u003cInt64\u003e(And(x, Const32))\nfor 32-bit constant Const32.\n\nFor example, java.io.Bits.getLong(byte[] b, int off) yields\nbetter generated code on 32-bit platforms for each of its\neight \"b[off + .] \u0026 0xFFL\" sequences.\n\nAlso remove obsolete \"doThrow\" code that attempts to prevent\ninlining; the $noinline$ tag is now honored by the compiler.\n\nTest: Added tests to 458-checker-instruct-simplification.\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: Ib6e413517daa5206764653ebb6c4687a4c68d02d\n"
    },
    {
      "commit": "d5d2f2ce627aa0f6920d7ae05197abd1a396e035",
      "tree": "e8e780780c832e3614a22438a23fb60ee4960ca3",
      "parents": [
        "efac0df8c738764823c637deeca1f3be33912064"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 26 12:37:26 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 10:40:51 2017 +0100"
      },
      "message": "ART: Introduce Uint8 compiler data type.\n\nThis CL adds all the necessary codegen for the Uint8 type\nbut does not add code transformations that use that code.\nVectorization codegens are modified to use Uint8 as the\npacked type when appropriate. The side effects are now\ndisconnected from the instruction\u0027s type after the graph has\nbeen built to allow changing HArrayGet/H*FieldGet/HVecLoad\nto use a type different from the underlying field or array.\n\nNote: HArrayGet for String.charAt() is modified to have\nno side effects whatsoever; Strings are immutable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --target --optimizing on Nexus 6P\nTest: Nexus 6P boots.\nBug: 23964345\nChange-Id: If2dfffedcfb1f50db24570a1e9bd517b3f17bfd0\n"
    },
    {
      "commit": "0ebe0d83138bba1996e9c8007969b5381d972b32",
      "tree": "a5ee66ebc5b587ade97e56ac8fc7d832fbbed4af",
      "parents": [
        "e1e347dace0ded83774999bb26c37527dcdb1d5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 21 22:50:39 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 25 15:45:01 2017 +0100"
      },
      "message": "ART: Introduce compiler data type.\n\nReplace most uses of the runtime\u0027s Primitive in compiler\nwith a new class DataType. This prepares for introducing\nnew types, such as Uint8, that the runtime does not need\nto know about.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 23964345\nChange-Id: Iec2ad82454eec678fffcd8279a9746b90feb9b0c\n"
    },
    {
      "commit": "dbbac8f812a866b1b53f3007721f66038d208549",
      "tree": "05cecd927afccd33fc1c14b39ada47e86873f560",
      "parents": [
        "2406bf17998e15bd40677a907beb3e9c41facce4"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Sep 01 13:06:08 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Sep 21 10:20:55 2017 -0700"
      },
      "message": "Implement Sum-of-Abs-Differences idiom recognition.\n\nRationale:\nCurrently just on ARM64 (x86 lacks proper support),\nusing the SAD idiom yields great speedup on loops\nthat compute the sum-of-abs-difference operation.\nAlso includes some refinements around type conversions.\n\nSpeedup ExoPlayerAudio (golem run):\n1.3x on ARM64\n1.1x on x86\n\nTest: test-art-host test-art-target\n\nBug: 64091002\n\nChange-Id: Ia2b711d2bc23609a2ed50493dfe6719eedfe0130\n"
    },
    {
      "commit": "9d9f2d7782545082a22b3630ec75aa5a7e887582",
      "tree": "1210668cbd5b35a0d1f6c1f83f766979c7a780b2",
      "parents": [
        "fe30b3e2815c6140471338df5d903a2c1d242414",
        "94ec2db21332ee1dcdbbf254b99a9a999a304fe0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 11 16:55:32 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 11 16:55:32 2017 +0000"
      },
      "message": "Merge \"Use mmapped boot image class table for PIC app HLoadClass.\""
    },
    {
      "commit": "94ec2db21332ee1dcdbbf254b99a9a999a304fe0",
      "tree": "6ced7e596731b61f95a3693f336527f55ea3cf3a",
      "parents": [
        "6cfbdbc359ec5414d3e49f70d28f8c0e65b98d63"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 06 17:21:03 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 11 15:12:51 2017 +0100"
      },
      "message": "Use mmapped boot image class table for PIC app HLoadClass.\n\nImplement new HLoadClass load kind for boot image classes\nreferenced by PIC-compiled apps (i.e. prebuilts) that uses\nPC-relative load from a boot image ClassTable mmapped into\nthe apps .bss. This reduces the size of the PIC prebuilts\nthat reference boot image classes compared to the kBssEntry\nas we can completely avoid the slow path and stack map\nunless we need to do the class initialization check.\n\nPrebuilt services.odex for aosp_angler-userdebug (arm64):\n  - before: 20312800\n  - after: 19775352 (-525KiB)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --host --pictest\nTest: testrunner.py --target on Nexus 6P.\nTest: testrunner.py --target --pictest on Nexus 6P.\nTest: Nexus 6P boots.\nBug: 31951624\nChange-Id: I13adb19a1fa7d095a72a41f09daa6101876e77a8\n"
    },
    {
      "commit": "86ce50481f91e3be2e5f2686e18e11babde721ae",
      "tree": "3179155108b883d8c0c4bb3dbac0b70db0d7f698",
      "parents": [
        "88f929ce72a5eabdb1ae1b32e5ec157d0e9f1ef8",
        "dd018df8a00e841fe38fabe38520b7d297a885c1"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Sep 08 16:16:46 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 08 16:16:46 2017 +0000"
      },
      "message": "Merge \"optimizing: add block-scoped constructor fence merging pass\""
    },
    {
      "commit": "dd018df8a00e841fe38fabe38520b7d297a885c1",
      "tree": "4974b4f718d9cbb5910df7f476f2581aff1a17e2",
      "parents": [
        "6ef45677305048c2bf0600f1c4b98a11b2cfaffb"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Aug 09 10:38:31 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Sep 08 14:06:32 2017 +0000"
      },
      "message": "optimizing: add block-scoped constructor fence merging pass\n\nIntroduce a new \"Constructor Fence Redundancy Elimination\" pass.\nThe pass currently performs local optimization only, i.e. within instructions\nin the same basic block.\n\nAll constructor fences preceding a publish (e.g. store, invoke) get\nmerged into one instruction.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nOptStat#ConstructorFenceGeneratedNew:   43825\nOptStat#ConstructorFenceGeneratedFinal: 17631  \u003c+++\nOptStat#ConstructorFenceRemovedLSE:     164\nOptStat#ConstructorFenceRemovedPFRA:    9391\nOptStat#ConstructorFenceRemovedCFRE:    16133  \u003c---\n\nRemoves ~91.5% of the \u0027final\u0027 constructor fences in RitzBenchmark:\n\n(We do not distinguish the exact reason that a fence was created, so\nit\u0027s possible some \"new\" fences were also removed.)\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nTest: art/test/run-test --host --optimizing 476-checker-ctor-fence-redun-elim\nBug: 36656456\nChange-Id: I8020217b448ad96ce9b7640aa312ae784690ad99\n"
    },
    {
      "commit": "88f929ce72a5eabdb1ae1b32e5ec157d0e9f1ef8",
      "tree": "6e4c293998044975d91596032d9f193dc41bad8f",
      "parents": [
        "c54e4cfa995fcd5a8457b3424fada36c560c9789",
        "6cfbdbc359ec5414d3e49f70d28f8c0e65b98d63"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 08 11:27:33 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 08 11:27:33 2017 +0000"
      },
      "message": "Merge \"Use mmapped boot image intern table for PIC app HLoadString.\""
    },
    {
      "commit": "6cfbdbc359ec5414d3e49f70d28f8c0e65b98d63",
      "tree": "f92b309ddc43c2254b6067346a653170fbbf7316",
      "parents": [
        "0f3c7003e08a42a4ed8c9f8dfffb1bee1118de59"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 25 13:26:39 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 07 17:52:35 2017 +0100"
      },
      "message": "Use mmapped boot image intern table for PIC app HLoadString.\n\nImplement new HLoadString load kind for boot image strings\nreferenced by PIC-compiled apps (i.e. prebuilts) that uses\nPC-relative load from a boot image InternTable mmapped into\nthe apps .bss. This reduces the size of the PIC prebuilts\nthat reference boot image strings compared to the kBssEntry\nas we can completely avoid the slow path and stack map.\n\nWe separate the InternedStrings and ClassTable sections of\nthe boot image (.art) file from the rest, aligning the\nstart of the InternedStrings section to a page boundary.\nThis may actually increase the size of the boot image file\nby a page but it also allows mprotecting() these tables as\nread-only. The ClassTable section is included in\nanticipation of a similar load kind for HLoadClass.\n\nPrebuilt services.odex for aosp_angler-userdebug (arm64):\n  - before: 20862776\n  - after: 20308512 (-541KiB)\nNote that 92KiB savings could have been achieved by simply\navoiding the read barrier, similar to the HLoadClass flag\nIsInBootImage(). Such flag is now unnecessary.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --host --pictest\nTest: testrunner.py --target on Nexus 6P.\nTest: testrunner.py --target --pictest on Nexus 6P.\nTest: Nexus 6P boots.\nBug: 31951624\nChange-Id: I5f2bf1fc0bb36a8483244317cfdfa69e192ef6c5\n"
    },
    {
      "commit": "0148de41a5c77c2f61252c219f1a02413c7c4a32",
      "tree": "91736a82a7e98721a44879b6597b5aea386e8e3b",
      "parents": [
        "c101222c854a0c476f5b6ae64e20adbd38126a3c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Sep 05 09:25:01 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Sep 05 10:20:09 2017 -0700"
      },
      "message": "Basic SIMD reduction support.\n\nRationale:\nEnables vectorization of x +\u003d .... for very basic (simple, same-type)\nconstructs. Paves the way for more complex (narrower and/or mixed-type)\nconstructs, which will be handled by the next CL.\n\nThis is  a revert   of Icb5d6c805516db0a1d911c3ede9a246ccef89a22\nand thus a revert^2 of I2454778dd0ef1da915c178c7274e1cf33e271d0f\nand thus a revert^3 of I1c1c87b6323e01442e8fbd94869ddc9e760ea1fc\nand thus a revert^4 of I7880c135aee3ed0a39da9ae5b468cbf80e613766\n\nPS1-2 shows what needed to change\n\nTest: test-art-host test-art-target\n\nBug: 64091002\nChange-Id: I647889e0da0959ca405b70081b79c7d3c9bcb2e9\n"
    },
    {
      "commit": "982334cef17d47ef2477d88a97203a9587a4b86f",
      "tree": "7e65d03a4533f21286cf68e66696bd0a7a54ef54",
      "parents": [
        "cfa59b49cde265dc5329a7e6956445f9f7a75f15"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Sep 02 12:54:16 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Sep 02 12:54:16 2017 +0000"
      },
      "message": "Revert \"Basic SIMD reduction support.\"\n\nFails 530-checker-lse on arm64.\n\nBug: 64091002, 65212948\n\nThis reverts commit cfa59b49cde265dc5329a7e6956445f9f7a75f15.\n\nChange-Id: Icb5d6c805516db0a1d911c3ede9a246ccef89a22\n"
    },
    {
      "commit": "cfa59b49cde265dc5329a7e6956445f9f7a75f15",
      "tree": "eed953f62e796f7e64252520a40d7e77d1f117af",
      "parents": [
        "82a63734d3067ea0c96f8ba15bc40caaf798c625"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Aug 31 09:08:13 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Sep 01 10:32:50 2017 -0700"
      },
      "message": "Basic SIMD reduction support.\n\nRationale:\nEnables vectorization of x +\u003d .... for very basic (simple, same-type)\nconstructs. Paves the way for more complex (narrower and/or mixed-type)\nconstructs, which will be handled by the next CL.\n\nThis is a revert^2 of I7880c135aee3ed0a39da9ae5b468cbf80e613766\nand thus a revert  of I1c1c87b6323e01442e8fbd94869ddc9e760ea1fc\n\nPS1-2 shows what needed to change, with regression tests\n\nTest: test-art-host test-art-target\n\nBug: 64091002, 65212948\nChange-Id: I2454778dd0ef1da915c178c7274e1cf33e271d0f\n"
    },
    {
      "commit": "a57b4ee7b15ce6abfb5fa88c8dc8a516fe40e0d9",
      "tree": "c7ed7e8cb7439a8e689e399e34559aa46a97cdbd",
      "parents": [
        "9879d0eac8fe2aae19ca6a4a2a83222d6383afc2"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Aug 30 21:21:41 2017 +0000"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Aug 30 21:21:41 2017 +0000"
      },
      "message": "Revert \"Basic SIMD reduction support.\"\n\nThis reverts commit 9879d0eac8fe2aae19ca6a4a2a83222d6383afc2.\n\nGetting these type check failures in some builds. Need time to look at this better, so reverting for now :-(\n\n\ndex2oatd F 08-30 21:14:29 210122 226218 \ncode_generator.cc:115] Check failed: CheckType(instruction-\u003eGetType(), locations-\u003eInAt(0)) PrimDouble C\n\nChange-Id: I1c1c87b6323e01442e8fbd94869ddc9e760ea1fc\n"
    },
    {
      "commit": "9879d0eac8fe2aae19ca6a4a2a83222d6383afc2",
      "tree": "c75ab69be15630f86824bb202577eaa1ff91c4ee",
      "parents": [
        "60f734443d54d48fad86dce6d80d8cef22a134d0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Aug 15 10:51:25 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Aug 30 09:10:40 2017 -0700"
      },
      "message": "Basic SIMD reduction support.\n\nRationale:\nEnables vectorization of x +\u003d .... for very basic (simple, same-type)\nconstructs. Paves the way for more complex (narrower and/or mixed-type)\nconstructs, which will be handled by the next CL.\n\nTest: test-art-host test-art-target\n\nBug: 64091002\n\nChange-Id: I7880c135aee3ed0a39da9ae5b468cbf80e613766\n"
    },
    {
      "commit": "4ec14ff3d6126750de753f7d162df408f278e825",
      "tree": "9f37b3881e615211a4fd458ee36d67939c6da514",
      "parents": [
        "c1bb1cd339b2ebea9c4770fb4d61bacd7d77746f",
        "16e528957869c7debb1f6758c9a364819e15ee1a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 14 09:19:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 14 09:19:03 2017 +0000"
      },
      "message": "Merge \"RFC: Generate select instruction for conditional returns.\""
    },
    {
      "commit": "e9b61bac34bea439d8ce39592973a66a32f43fb7",
      "tree": "aa0043f331844ba6083b764c7bce8c2a81671058",
      "parents": [
        "675c779cb046bca49229e1e5268d0eb622159214",
        "6ef45677305048c2bf0600f1c4b98a11b2cfaffb"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 11 19:29:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 11 19:29:31 2017 +0000"
      },
      "message": "Merge changes Ic119441c,I83b96b41\n\n* changes:\n  optimizing: Add statistics for # of constructor fences added/removed\n  optimizing: Refactor statistics to use OptimizingCompilerStats helper\n"
    },
    {
      "commit": "6ef45677305048c2bf0600f1c4b98a11b2cfaffb",
      "tree": "9a8df6a3bebe4a6120403562c21817d775a6ef36",
      "parents": [
        "1e065a54845da12541572f4f149e6ab0dcd20180"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Aug 08 13:59:55 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Aug 11 10:23:30 2017 -0700"
      },
      "message": "optimizing: Add statistics for # of constructor fences added/removed\n\nStatistics are attributed as follows:\n\nAdded because:\n* HNewInstances requires a HConstructorFence following it.\n* HReturn requires a HConstructorFence (for final fields) preceding it.\n\nRemoved because:\n* Optimized in Load-Store-Elimination.\n* Optimized in Prepare-For-Register-Allocation.\n\nTest: art/test.py\nBug: 36656456\nChange-Id: Ic119441c5151a5a840fc6532b411340e2d68e5eb\n"
    },
    {
      "commit": "16e528957869c7debb1f6758c9a364819e15ee1a",
      "tree": "050d42754ce9bca3c3e23652093cd209ae59ea53",
      "parents": [
        "1d2d8b1b6b359f5f476ef78662baa4b8782be530"
      ],
      "author": {
        "name": "Mads Ager",
        "email": "ager@google.com",
        "time": "Fri Jul 14 13:11:37 2017 +0200"
      },
      "committer": {
        "name": "Mads Ager",
        "email": "ager@google.com",
        "time": "Thu Aug 10 14:04:04 2017 +0200"
      },
      "message": "RFC: Generate select instruction for conditional returns.\n\nThe select generator currently only inserts select instructions\nif there is a diamond shape with a phi.\n\nThis change extends the select generator to also deal with the\npattern:\n\n  if (condition) {\n    movable instruction 0\n    return value0\n  } else {\n    movable instruction 1\n    return value1\n  }\n\nwhich it turns into:\n\n  moveable instruction 0\n  moveable instruction 1\n  return select (value0, value1, condition)\n\nTest: 592-checker-regression-bool-input\nChange-Id: Iac50fb181dc2c9b7619f28977298662bc09fc0e1\n"
    },
    {
      "commit": "5aedbcd3d0a1a60643db3e904254e0a3060599bf",
      "tree": "3d136637c0ef0cb12093d6f412fe1ec7e7a26e7e",
      "parents": [
        "c7c25d5b4cf243cbbf06f2e4302a0faa5eccb42a",
        "c73ee37b76494253862ee17933acfe2b88de1a01"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 07 17:23:38 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 07 17:23:38 2017 +0000"
      },
      "message": "Merge \"ART: Fix loop header\u0027s predecessors reordering in SimplifyLoops.\""
    },
    {
      "commit": "c73ee37b76494253862ee17933acfe2b88de1a01",
      "tree": "f88685e10a1075748c7634c8ec913544f2b12068",
      "parents": [
        "399492a86198b42fded9ac1f4aa61c82869328eb"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Mon Jul 31 15:08:40 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Aug 03 17:12:31 2017 +0100"
      },
      "message": "ART: Fix loop header\u0027s predecessors reordering in SimplifyLoops.\n\nFix the issue when after loop header\u0027s predecessors reordering in\nSimplifyLoops phi inputs are not reordered correspondingly.\n\nTest: loop_optimization_test.cc, test-art-host, test-art-target.\n\nChange-Id: I8a251a0a953d751f9bb67da58181e47d225d90e6\n"
    },
    {
      "commit": "21c7e6fbcabef2f22b467e1e89f4abe1aa43e459",
      "tree": "1a62fe2485d9642ee3d8768c6edd005278b1014f",
      "parents": [
        "2e53f8f69f8c4175085e337445ec42aa045a2f7f"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Jul 27 16:04:42 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Aug 01 11:35:23 2017 +0100"
      },
      "message": "ART: Fix SimplifyInduction for an instruction with HEnvironment.\n\nAfter an instruction is removed during RemoveFromCycle its\nenvironment isn\u0027t properly cleaned: it still has input instructions\npresent and registered (those instructions still hold records for\nthat).\n\nTest: test-art-target, test-art-host.\nChange-Id: Iea315bdf735d75fe477f43671f05b40dfecc63a8\n"
    },
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "c9c310487b8730fce5edfa72e79c4188629898a3",
      "tree": "e9e72b0296b557722979b51bf9d98054c4fb1971",
      "parents": [
        "853cc56ae6a79fa9540bb49c5c95d1568d47656d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 29 14:04:16 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 29 15:04:21 2017 +0100"
      },
      "message": "Turn a few DCHECK into CHECKs.\n\nTo help diagnose b/63070152.\n\nbug: 63070152\nTest: test.py\nChange-Id: I1ac1cf9bfe1bc15ecfa94b5b8537cd3afda6fd14\n"
    },
    {
      "commit": "f57c1ae3682f95e6d7ce08ae4c241d04b09de658",
      "tree": "bf12e0e19626c28edd933fb31c5652e7f974bf1d",
      "parents": [
        "0ca1ae25d33dc8b92d9eecd585657f74cbb313e9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 28 17:40:18 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 28 21:10:13 2017 +0100"
      },
      "message": "Prevent loop optimization in debuggable mode.\n\nbug: 33775412\nTest: no scanner crash (torn on whether I should spend some time working on a smali test)\n\nChange-Id: I8b94725ce57171b592bede4bf55cd0a9626a8a10\n"
    },
    {
      "commit": "c0fe9db1af30a162448ca5ccd386e970a8d31f83",
      "tree": "6dbb5549f249b61337f1e70f1911ea1902d2d8fa",
      "parents": [
        "53ac3130edd9c9273f95e3ba0bc5e80f6d2b3f2d",
        "82b0740f03b1a6acab4558214d3edc362e27e238"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 12 09:09:09 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 12 09:09:11 2017 +0000"
      },
      "message": "Merge \"Use IntrusiveForwardList\u003c\u003e for Env-/UsePosition.\""
    },
    {
      "commit": "0eb882bfc5d260e8014c26adfda11602065aa5d8",
      "tree": "e66dbebfb1e9a254c20954a2f2f98541aebfd5af",
      "parents": [
        "b5f5d746ac3f2c3088292395603cb1470e7749d2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 15 13:39:18 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 07 15:39:24 2017 +0100"
      },
      "message": "Use ArtMethod* .bss entries for HInvokeStaticOrDirect.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --target\nTest: Nexus 6P boots.\nTest: Build aosp_mips64-userdebug.\nBug: 30627598\nChange-Id: I0e54fdd2e91e983d475b7a04d40815ba89ae3d4f\n"
    },
    {
      "commit": "3c8a91250b3e4e87548ec16bf1ab1ea46dbb84a4",
      "tree": "b5da100b358d1335eab403372e4f616c5c2d607c",
      "parents": [
        "0a87f31513e5f9da27856af054d2241452898b22",
        "e7197bf7d58c705a048e13e241d7ca320502cd40"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 07 10:38:10 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 07 10:38:11 2017 +0000"
      },
      "message": "Merge \"Replace invoke kind kDexCacheViaMethod with kRuntimeCall.\""
    },
    {
      "commit": "e7197bf7d58c705a048e13e241d7ca320502cd40",
      "tree": "496032b40145660b40002b9d5b7a78f1c2eeb44f",
      "parents": [
        "4ee8e291a7d5b7b98f35f495eb97705836910871"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 02 17:00:23 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 06 15:26:42 2017 +0100"
      },
      "message": "Replace invoke kind kDexCacheViaMethod with kRuntimeCall.\n\nIn preparation for replacing the dex cache method array\nwith a hash-based array, get rid of one unnecessary use.\nThis method load kind is currently used only on mips for\nirreducible loops and OSR, so this should have no impact\non x86/x86-64/arm/arm64.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Repeat the above tests with manually changing\n      kDexCachePcRelative to kRuntimeCall in sharpening.cc.\n      (Ignore failures in 552-checker-sharpening.)\nBug: 30627598\nChange-Id: Ifce42645f2dcc350bbb88c2f4642e88fc5f98152\n"
    },
    {
      "commit": "2c97600c1107931825bf9f7f25517e89b7210ab4",
      "tree": "1951ed02eaf1abac7257d22c5881366c3fe493ba",
      "parents": [
        "af8d813133af6e2988296c9cc19719a9186f4cc8",
        "847e6ce98b4b822fd94c631975763845978ebaa3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 05 09:04:20 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 05 09:04:21 2017 +0000"
      },
      "message": "Merge \"Rename kDexCacheViaMethod to kRuntimeCall for HLoadClass/String.\""
    },
    {
      "commit": "847e6ce98b4b822fd94c631975763845978ebaa3",
      "tree": "760e26dea1597d8219d8c515317d978b0213cdc1",
      "parents": [
        "cff1b21b3e19c5d3a2d726fdb60dacd7de2a6f0d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 02 13:55:07 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 02 14:03:28 2017 +0100"
      },
      "message": "Rename kDexCacheViaMethod to kRuntimeCall for HLoadClass/String.\n\nThe old name does not reflect the actual code anymore.\n\nTest: testrunner.py --host\nChange-Id: I2e13cf727bba9d901c4d3fc821bb526d38a775b8\n"
    },
    {
      "commit": "ec32f6402382303608544fdac5a88067781bdec5",
      "tree": "5a8cddd783a86d3ecb9c3565e65f8fad91e93ada",
      "parents": [
        "8144b1ebea42feaa798419eaf53a6bbbf37822a9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 02 10:51:55 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 02 11:00:59 2017 +0100"
      },
      "message": "Delay allocating environment locations.\n\nMany environments are killed before we get to the register\nallocation, so the early allocation of their locations was\nsimply wasting memory. For the most expensive method of a\ncertain app, this reduces EnvLocations with 64-bit dex2oat\nfrom 8657200 to 5339712 (-3.16MiB).\n\nTest: m test-art-host\nTest: testrunner.py --host\nBug: 33650849\nChange-Id: I70a02fc3c7ec87b54a87e989e1239dc4acfcf18b\n"
    },
    {
      "commit": "82b0740f03b1a6acab4558214d3edc362e27e238",
      "tree": "c19ec7ad047fbbef0c0f4dcd46905604b75841b5",
      "parents": [
        "8144b1ebea42feaa798419eaf53a6bbbf37822a9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 01 19:02:04 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 01 20:37:10 2017 +0100"
      },
      "message": "Use IntrusiveForwardList\u003c\u003e for Env-/UsePosition.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: I2b720e2ed8f96303cf80e9daa6d5278bf0c3da2f\n"
    },
    {
      "commit": "6597946d29be9108e2cc51223553d3db9290a3d9",
      "tree": "cea6647a45cc59fa1423751179e647124f269990",
      "parents": [
        "a654e0378a8d0bb149362399917e4da2959e6991"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 19 17:25:12 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 22 18:35:05 2017 +0100"
      },
      "message": "Use PC-relative pointer to boot image methods.\n\nIn preparation for adding ArtMethod entries to the .bss\nsection, add direct PC-relative pointers to methods so that\nthe number of needed .bss entries for boot image is small.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --target on Nexus 6P\nTest: Nexus 6P boots.\nTest: Build aosp_mips64-userdebug\nBug: 30627598\nChange-Id: Ia89f5f9975b741ddac2816e1570077ba4b4c020f\n"
    },
    {
      "commit": "662ee25b95a908ab063d4a8ae136ab695ea22229",
      "tree": "1b8e89a0c1ac009490dd2e8c3a6c73ae30e4bf3e",
      "parents": [
        "c1c3351492674f2e264f41d93ffc80b633726689",
        "79d8fa7c52c1810d4618c9bd1d43994be5abb53d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 18 16:03:44 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 18 16:03:47 2017 +0000"
      },
      "message": "Merge \"optimizing: Build HConstructorFence for HNewArray/HNewInstance nodes\""
    },
    {
      "commit": "79d8fa7c52c1810d4618c9bd1d43994be5abb53d",
      "tree": "411a76dec2adf4139328d5e607b498b72c9aa2af",
      "parents": [
        "acac09dad3d5aa3922e6cdf54ff2e4fa6f176484"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Apr 18 09:37:23 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu May 18 14:14:13 2017 +0000"
      },
      "message": "optimizing: Build HConstructorFence for HNewArray/HNewInstance nodes\n\nAlso fixes:\n* LSE, code_sinking to keep optimizing new-instance if it did so before\n* Various tests to expect constructor fences after new-instance\n\nSidenote: new-instance String does not get a ConstructorFence; the\nspecial StringFactory calls are assumed to be self-fencing.\n\nMetric changes on go/lem:\n* CodeSize -0.262% in ART-Compile (ARMv8)\n* RunTime -0.747% for all (linux-armv8)\n\n(No changes expected to x86, constructor fences are no-op).\n\nThe RunTime regression is temporary until art_quick_alloc_* entrypoints have their\nDMBs removed in a follow up CL.\n\nTest: art/test.py\nBug: 36656456\nChange-Id: I6a936a6e51c623e1c6b5b22eee5c3c72bebbed35\n"
    },
    {
      "commit": "764d454d1d51448deb81f6e8d2d7d317c7f4d1b4",
      "tree": "029f9e65cfe7e953df55b7af45e099924ffdbbac",
      "parents": [
        "7974468d32b817be1d49dfcf513605f646c481bc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 16 10:31:41 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 16 15:08:55 2017 +0100"
      },
      "message": "Remove LoadString/Class kind kBootImageLinkTimeAddress.\n\nWe no longer support non-PIC boot image compilation.\n\nAlso clean up some obsolete code for method patches\nand make JIT correctly report itself as non-PIC.\n\nTest: testrunner.py --host\nTest: testrunner.py --target\nBug: 33192586\nChange-Id: I593289c5c1b0e88b82b86a933038be97bbb15ad2\n"
    },
    {
      "commit": "de6fc4a429b69f074dc6d28b52197b425aacd78c",
      "tree": "879e5eacda2af3bad1aa9dc81ea08922c6c26cc8",
      "parents": [
        "99a77162e9dc351da14bb7819a2718395d7277ed",
        "e1811ed6b57a54dc8ebd327e4bd2c4422092a3a0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 11 11:59:40 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 11 11:59:42 2017 +0000"
      },
      "message": "Merge \"ARM64: Share address computation across SIMD LDRs/STRs.\""
    },
    {
      "commit": "e1811ed6b57a54dc8ebd327e4bd2c4422092a3a0",
      "tree": "e3ce48e66190c11a8b5342f4ec0d1046ba28d788",
      "parents": [
        "7113885fcd983b33ee1e350865d21517d6297843"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Apr 27 16:50:47 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu May 11 10:06:04 2017 +0100"
      },
      "message": "ARM64: Share address computation across SIMD LDRs/STRs.\n\nFor array accesses the element address has the following structure:\nAddress \u003d CONST_OFFSET + base_addr + index \u003c\u003c ELEM_SHIFT\n\nTaking into account ARM64 LDR/STR addressing modes address part\n(CONST_OFFSET + index \u003c\u003c ELEM_SHIFT) can be shared across array\naccess with the same data type and index.\n\nFor example, for the following loop 5 accesses can share address\ncomputation:\n\nvoid foo(int[] a, int[] b, int[] c) {\n  for (i...) {\n    a[i] \u003d a[i] + 5;\n    b[i] \u003d b[i] + c[i];\n  }\n}\n\nTest: test-art-host, test-art-target\n\nChange-Id: I46af3b4e4a55004336672cdba3296b7622d815ca\n"
    },
    {
      "commit": "4e92c3ce7ef354620a785553bbada554fca83a67",
      "tree": "42029deff4d3ba7f89b5fdbf79ff410da575f431",
      "parents": [
        "549844e9ccf432d1396b19af890eedb602b8ba04"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 08 09:34:26 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 10 09:27:33 2017 +0100"
      },
      "message": "Add runtime reasons for deopt.\n\nCurrently to help investigate. Also:\n1) Log when deoptimization happens (which method and what reason)\n2) Trace when deoptimization happens (to make it visible in systrace)\n\nbug:37655083\nTest: test-art-host test-art-target\nChange-Id: I0c2d87b40db09e8e475cf97a7c784a034c585e97\n"
    },
    {
      "commit": "d01745ef88bfd25df574a885d90a1a7785db5f5b",
      "tree": "058eb1593dbb0fe8a8e26b901909bec8aa01d474",
      "parents": [
        "a57c334075b193de9690fff97acf6c1b1d1283fc"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Apr 05 16:40:31 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue May 02 09:45:45 2017 -0700"
      },
      "message": "optimizing: constructor fence redundancy elimination - remove dmb after LSE\n\nPart one of a few upcoming CLs to optimize constructor fences.\n\nThis improves load-store-elimination; all singleton objects that are not\nreturned will have their associated constructor fence removed.\n\nIf the allocation is removed, so is the fence. Even if allocation is not\nremoved, fences can sometimes be removed.\n\nThis change is enabled by tracking the \"this\" object associated with the\nconstructor fence as an input. Fence inputs are considered weak; they do not keep\nthe \"this\" object alive; if the instructions for \"this\" are all deleted,\nthe fence can also be deleted.\n\nBug: 36656456\nTest: art/test.py --host \u0026\u0026 art/test.py --target\nChange-Id: I05659ab07e20d6e2ecd4be051b722726776f4ab1\n"
    },
    {
      "commit": "02b1976a9d25fb3649f734962f1127786cf9dc81",
      "tree": "d2889650a4d04495fa230384fd7dad66e46d52f3",
      "parents": [
        "d21711eae1224c18690d1a460b5b986fb4885654",
        "66d691de219e840b3f84385d8bd1b7001562b0e5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 26 15:27:13 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 26 15:27:15 2017 +0000"
      },
      "message": "Merge \"ARM64: Link-time generated thunks for ArrayGet Baker CC read barrier.\""
    },
    {
      "commit": "66d691de219e840b3f84385d8bd1b7001562b0e5",
      "tree": "4034e867246db26acaa1a36b89b823ce5d0f1a58",
      "parents": [
        "38870a8a2717ccf1bcd3faddc53b1999985bb29f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 07 17:53:39 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 25 18:29:33 2017 +0100"
      },
      "message": "ARM64: Link-time generated thunks for ArrayGet Baker CC read barrier.\n\nTest: Added a test to relative_patcher_arm64\nTest: m test-art-target-gtest on Nexus 6P.\nTest: Nexus 6P boots.\nTest: testrunner.py --target on Nexus 6P.\nTest: Nexus 6P boots with heap poisoning.\nTest: testrunner.py --target on Nexus 6P with heap poisoning.\nBug: 29516974\nBug: 30126666\nBug: 36141117\nChange-Id: Id0f23089c55cbb53b84305c11bb4b03718561ade\n"
    },
    {
      "commit": "8de5916666ab5d146ac1bdac7d7748e197ae347e",
      "tree": "87a7cfda1a91ef4335f78a59edf2d5fcca6e8e46",
      "parents": [
        "f99f62f8e04aecbbe1615e242a19ac475f66e565"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Apr 21 09:42:01 2017 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Apr 21 11:00:26 2017 -0700"
      },
      "message": "Factor vector unary/binary shared code out into superclass.\n\nTest: test-art-target, test-art-host\nChange-Id: I42770d9a9142f2e53d3b5bd60bd25593b2154a7c\n"
    },
    {
      "commit": "f34dd206d0073fb3949be872224420a8488f551f",
      "tree": "b24b451af6efdd9f67c4cbd5c37ebb4ec6a4aaad",
      "parents": [
        "1f56cb5c594f5757085820b1042988d10f02bb0b"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Mon Apr 10 17:41:46 2017 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Apr 20 00:21:29 2017 +0100"
      },
      "message": "ARM64: Support MultiplyAccumulate for SIMD.\n\nTest: test-art-host, test-art-target.\n\nChange-Id: I06af8415e15352d09d176cae828163cbe99ae7a7\n"
    }
  ],
  "next": "f3e61ee363fe7f82ef56704f06d753e2034a67dd"
}
