)]}'
{
  "log": [
    {
      "commit": "dce016eab87302f02b0bd903dd2cd86ae512df2d",
      "tree": "3af3c0e6b9d845e611b560484882e6b438ef439a",
      "parents": [
        "a246510965fc57ec51d1b202649304535adfe9f3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 28 13:10:02 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 09 20:40:32 2016 +0100"
      },
      "message": "Intrinsify String.length() and String.isEmpty() as HIR.\n\nUse HArrayLength for String.length() in anticipation of\nchanging the String.charAt() to HBoundsCheck+HArrayGet to\nallow the existing BCE to seamlessly work for strings.\nUse HArrayLength+HEqual for String.isEmpty().\n\nWe previously relied on inlining but we now want to apply\nthe new intrinsics even when we do not inline, i.e. when\ncompiling debuggable (as is currently the case for boot\nimage) or when we hit inlining limits, i.e. depth, size,\nor the number of accumulated dex registers.\n\nBug: 28330359\nChange-Id: Iab9d2f6d2967bdd930a72eb461f27efe8f37c103\n"
    },
    {
      "commit": "a210689f1a0e7839f5b3589fd57583e6ae20ded0",
      "tree": "9b07a9a999c0fff883163b06e4eb0a92ede376fd",
      "parents": [
        "f5d1fbe2893803b22d57121ce80a7f44f484a438"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed May 04 14:00:55 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed May 04 14:40:41 2016 -0700"
      },
      "message": "Exploit NE/EQ tests on array length in BCE.\n\nBUG\u003d28585870\n\nChange-Id: I382ffaf80dfb861f66eb0bfb6508e7d946a07e14\n"
    },
    {
      "commit": "b8154f8f36e2811b2524929a7ef31cb4edab44b8",
      "tree": "b93d3da8e227888173f6605e17099a76ba56374e",
      "parents": [
        "43aa3318f9ada1d2f3b99aa6a659685a99fc9c45",
        "05b3fa02ed8ef62841a92cd96526ba3a06bf1f63"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 04 12:59:07 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 04 12:59:08 2016 +0000"
      },
      "message": "Merge \"Do not look at dead phis during SsaRedundantPhiElimination.\""
    },
    {
      "commit": "05b3fa02ed8ef62841a92cd96526ba3a06bf1f63",
      "tree": "0107006b45bdf69894a053507d600d826881fb9a",
      "parents": [
        "a6513729ae2ad0d2f9dd21d77ea6cf9ed9fa6eef"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 04 12:05:56 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 04 12:47:41 2016 +0100"
      },
      "message": "Do not look at dead phis during SsaRedundantPhiElimination.\n\nOtherwise, we may replace a dead loop phi with its incoming input.\nThis broke an assumption during liveness analysis in the presence\nof irreducible loops.\n\nbug:28256552\nChange-Id: Ia9e82026555e6b7f6a2cd37df4b765cd3684079d\n"
    },
    {
      "commit": "c5818f6e388781cb52551c48b6d9bd941b66e942",
      "tree": "126184d1a314b11e135dccf0984aaade6265d562",
      "parents": [
        "fbcf46e35eea33fa11ade68a66c5773ab16ae2e2",
        "1f36f411e8f51969f0af95fa60b9809656403c0a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 04 09:34:37 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 04 09:34:37 2016 +0000"
      },
      "message": "Merge \"ARM64: Add new String.compareTo intrinsic.\""
    },
    {
      "commit": "40d3061ea1a2a07a1aede662318257aa0fa5fe4b",
      "tree": "4e93ff1f0b0624b1d0901f5662badefb6342a79c",
      "parents": [
        "9f45e826df313af13f5204210eebf12b2867c6b7",
        "a3ffea207c7f7a5a1a6467ba154c0c88f118aa34"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue May 03 20:08:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 03 20:08:10 2016 +0000"
      },
      "message": "Merge \"ARM(64): Implement the isInfinite intrinsics\""
    },
    {
      "commit": "1f36f411e8f51969f0af95fa60b9809656403c0a",
      "tree": "74518592cea0038ac518a4eac93b4315baf3c63c",
      "parents": [
        "b324635492bb7d205beddf1a86f3f7a31e905fca"
      ],
      "author": {
        "name": "Scott Wakeling",
        "email": "scott.wakeling@linaro.org",
        "time": "Thu Apr 21 11:13:45 2016 +0100"
      },
      "committer": {
        "name": "Scott Wakeling",
        "email": "scott.wakeling@linaro.org",
        "time": "Tue May 03 12:07:41 2016 +0100"
      },
      "message": "ARM64: Add new String.compareTo intrinsic.\n\nBenchmarked on Nexus6P big, little, and all cores. The new intrinsic\nis faster than pStringCompareTo for compare lengths on [1,512], so the\nruntime call is no longer needed.\n\nChange-Id: If94bfe24d9bf4dddcca648cc0b563709fc407b34\n"
    },
    {
      "commit": "0f35e0b26d8c7738ca7b284357afa9dafb659d47",
      "tree": "b84167d8b952ab19287f9d87edbdb4272149d28f",
      "parents": [
        "fa288cff8689f882aa99696bc1c9b2e826730736",
        "1be7cbd532a41981019f1e89c8ecf404bc9af809"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Apr 29 13:57:19 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 29 13:57:19 2016 +0000"
      },
      "message": "Merge \"Remove invoke after inlining.\""
    },
    {
      "commit": "1be7cbd532a41981019f1e89c8ecf404bc9af809",
      "tree": "f027ec1b2835a47abf64faff263b79772e186b35",
      "parents": [
        "945dc321df3e69bb59c834f6399d34bbfd624e5c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 29 13:56:01 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 29 13:56:01 2016 +0100"
      },
      "message": "Remove invoke after inlining.\n\nbug:28460178\nChange-Id: I0ce00667aab1e02bab9e04a4cea7ee5d278f6a71\n"
    },
    {
      "commit": "ffc87076dda9878cb2cc098149bae441d38b9268",
      "tree": "e587208d6a8e62532792add3e1ace6b4e6d73e0f",
      "parents": [
        "97cbc9206e9adc473a90650ebdb5d620f517ff04"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 20 14:22:09 2016 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 28 16:15:04 2016 +0100"
      },
      "message": "Split profile recording from jit compilation\n\nWe still use ProfileInfo objects to record profile information. That\ngives us the flexibility to add the inline caches in the future and the\nconvenience of the already implemented GC.\n\nIf UseJIT is false and SaveProfilingInfo true, we will only record the\nProfileInfo and never launch compilation tasks.\n\nBug: 27916886\n\n(cherry picked from commit e5de54cfab5f14ba0b8ff25d8d60901c7021943f)\n\nChange-Id: I68afc181d71447895fb12346c1806e99bcab1de2\n"
    },
    {
      "commit": "da9394689b5362f699c05ba26072659d47827fee",
      "tree": "c0c524e80a9fa5c7a9b382c2a246620a33b665b6",
      "parents": [
        "387dd9b53fe01f53b0deb40311f24af019766b10",
        "07b35109c64fc449a14723b259df17806fd0b16e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 27 15:41:58 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 27 15:41:58 2016 +0000"
      },
      "message": "Merge \"ART: Disable back edge uses for irreducible loops\""
    },
    {
      "commit": "07b35109c64fc449a14723b259df17806fd0b16e",
      "tree": "8731b077f3df183f1f3f577ecc37df433dd01e32",
      "parents": [
        "4e377e58066ccef401276d7d0985521e5e63d1fb"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 27 15:33:22 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 27 15:33:22 2016 +0100"
      },
      "message": "ART: Disable back edge uses for irreducible loops\n\nAlgorithm adding back edge uses in liveness analysis makes assumptions\nabout the linear order which are not met in the presence of irreducible\nloops. Disable back edges uses when the graph contains them.\n\nThis partially reverts CL I63632e8819ea3644d5c6fdfea00b66128bf22c24.\n\nBug: 28252747\nBug: 27615840\nBug: 27624868\nChange-Id: I7ecdde0ed8a8831f7513b8e43cf7d84599b830a7\n"
    },
    {
      "commit": "f2cb389d1c69c8d1dd1578235bbcf6902b860462",
      "tree": "62ee3b90a73ce5b253cd7a8f8754d3e152a10c92",
      "parents": [
        "2da04e13120b656b4d0d22652d50bc143eeec348",
        "9d944d143c2065272ac3f8e1ce6688377042e295"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Apr 27 12:47:45 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 27 12:47:45 2016 +0000"
      },
      "message": "Merge \"ART: Eliminate unlikely code from hot path in x86 div/rem\""
    },
    {
      "commit": "e30ee0a74f7ab723e81591e8a9c6c3be7260c08b",
      "tree": "5ec317b236ddf293f3604ea2ad2ffee44de09880",
      "parents": [
        "4e377e58066ccef401276d7d0985521e5e63d1fb",
        "93a18c5d4160f632ecdb92af099574e9c7098c49"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 27 11:31:23 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 27 11:31:23 2016 +0000"
      },
      "message": "Merge \"Forbid HDeoptimize instructions in OSR methods.\""
    },
    {
      "commit": "93a18c5d4160f632ecdb92af099574e9c7098c49",
      "tree": "328e28e160fe894fb9487a625cbbfc4ab94c093c",
      "parents": [
        "f7cda8088ec57ab1422f85f08df78e217a9f7094"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 22 13:16:14 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 27 10:18:48 2016 +0100"
      },
      "message": "Forbid HDeoptimize instructions in OSR methods.\n\nOtherwise dominated instructions will assume something that\nisn\u0027t necessarily correct if coming from the interpreter.\n\nbug:28335959\nbug:28249238\nbug:28348878\nbug:28080135\n\nChange-Id: I842bd1c6a919aff48cf6048d2ea51cf2d40f3c1d\n"
    },
    {
      "commit": "5e67a6a26e12d79e7ab788d4496240ac2fc2be73",
      "tree": "e354c44970f183b7074af3bf064f9589f773b4f4",
      "parents": [
        "e6d96771a2c9934c8ba6efe1689a1d1b5c54a6f7",
        "f417ff44d1eb111854d7a213f106912b3dd9e3d4"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 26 17:04:52 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 26 17:04:53 2016 +0000"
      },
      "message": "Merge \"Test component type for errors too. With regression test.\""
    },
    {
      "commit": "9d944d143c2065272ac3f8e1ce6688377042e295",
      "tree": "4a4e9652c16edfc1b02d1af70a92b952a3f71f29",
      "parents": [
        "e6d96771a2c9934c8ba6efe1689a1d1b5c54a6f7"
      ],
      "author": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Fri Apr 15 16:50:25 2016 +0600"
      },
      "committer": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Tue Apr 26 18:21:35 2016 +0600"
      },
      "message": "ART: Eliminate unlikely code from hot path in x86 div/rem\n\nDivision and Remainder when numerator is zero is not\nusual case so remove the check for this case from hot path.\n\nChange-Id: Ie575af0fedb5045d4ed74292a61a8378f82d39ae\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "f417ff44d1eb111854d7a213f106912b3dd9e3d4",
      "tree": "be69b00348b8d296a5bae7dd2c17d9f9a2b8ba0e",
      "parents": [
        "dbea8b4eacb62b357bce1bc299c8442788b288a1"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 25 12:51:37 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 25 16:21:34 2016 -0700"
      },
      "message": "Test component type for errors too.\nWith regression test.\n\nRationale:\nMoved erroneous check in convenience method, so we\nput all the same logic in one place. When testing\nfor erroneous T[], check both the array type\nas well at the component type T for errors\n(it is possible T[] is not marked erroneous\neven though T is eventually).\n\nBUG\u003d28358598\n\nChange-Id: I11339a976dc83e0493a99e6bb97f3a058ca3f796\n"
    },
    {
      "commit": "2712a078c74050f787900765830f7f33d8bd75e6",
      "tree": "3ae00949f6778b8539b43ea90f64ae20a844a55a",
      "parents": [
        "dbea8b4eacb62b357bce1bc299c8442788b288a1",
        "393fdb8b4822d80bbbd6347b088e28c03a72289e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Apr 25 17:43:47 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 25 17:43:47 2016 +0000"
      },
      "message": "Merge \"Make sure the referring class is in the dex cache.\""
    },
    {
      "commit": "393fdb8b4822d80bbbd6347b088e28c03a72289e",
      "tree": "134955e86b08514fb88ecd0e5a037adfbf738fd6",
      "parents": [
        "f7cda8088ec57ab1422f85f08df78e217a9f7094"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 25 14:58:06 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 25 16:56:56 2016 +0000"
      },
      "message": "Make sure the referring class is in the dex cache.\n\nThe method CanAccessResolvedMethod expects the referring class\nin the dex file is already in the dex cache, which is true during AOT,\nbut not necessarilly during JIT.\n\nbug:28295348\nChange-Id: I58739903f0dff3867b920a7444f53b99ecf86e85\n"
    },
    {
      "commit": "a3ffea207c7f7a5a1a6467ba154c0c88f118aa34",
      "tree": "fd57187c92dfecfcc71ea035ef05b129c56bfa3b",
      "parents": [
        "27983255b19b633e91cf62883035b8af02b94eb0"
      ],
      "author": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Thu Apr 07 17:02:37 2016 +0100"
      },
      "committer": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Mon Apr 25 17:23:32 2016 +0100"
      },
      "message": "ARM(64): Implement the isInfinite intrinsics\n\nThe initial implementation replaced the HInvoke node in the graph\nwith several other HIRs based on the fact that the difference of\ninfinities of opposite signs is a NaN value, i.e. the nodes were\nequivalent to the expression (x - x !\u003d x - x) \u0026\u0026 (x \u003d\u003d x) (which\nperforms mostly floating-point operations). It was subsequently\nabandoned in favor of another HIR implementation using the same\nalgorithm as the current assembly code (with mostly integer\noperations), since it was faster in some simple microbenchmarks\n(isInfinite() in a loop).\n\nWhile the HIR approach had some significant advantages, such as\nbeing architecture-neutral (so all architectures supported by the\ncompiler benefitted from the changes) and potentially enabling\nfurther optimizations, it also had several limitations, the most\nimportant being that it still needed a HInvoke node, which\ndefeated its purpose. The reason is that the algorithm requires a\nraw conversion to an integer that preserves the bit representation\nof the value, which seems not to be expressible in another way -\nin particular, HTypeConversion does something entirely different.\n\nAnother major problem is that MIPS release 6 has specialized\nfloating-point classification instructions that are used in the\nintrinsic implementation, and which the compiler is unable to use\nin the general case (e.g. by recognizing a pattern in the graph),\nso the HIR approach resulted in a regression. This could be solved\nby doing architecture-specific optimizations earlier, but that\nchange is beyond the scope of this patch.\n\nThere were several other minor issues with the generated code\nsuch as left shifts not being merged into comparisons on ARM64.\nMore importantly, on ARM Double.isInfinite() resulted in a\nsequence of 14 instructions (compared to 6 in the current\nimplementation) due to the fact that a long is stored in a register\npair, so operations such as left shifts have to be done with two\ninstructions. This could be worked around by changing the HIR\nrepresentation at the cost of increased code complexity.\n\nGiven all these issues, the final decision was to implement the\nintrinsics using the standard architecture-specific approach.\n\nChange-Id: I7d575b794dce298faf09cb5f65e41794fa334f19\n"
    },
    {
      "commit": "88b891534b7b9218faa7f021e5b0768a7b519ae3",
      "tree": "71eb536865b26d91fbdb3a5bcf7e473f4af247b9",
      "parents": [
        "6583646a6b65ce16a03b41466eddd385234eb7eb",
        "bb661c0f0cb72d4bbfc2e251f6ded6949a713292"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 25 13:03:01 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 25 13:03:01 2016 +0000"
      },
      "message": "Merge \"Refactor use of __ANDROID__ macro\""
    },
    {
      "commit": "ee3e2be667df36b0f0956bbfad4455f8d39d1f5d",
      "tree": "b5e9ea8075b8a5f8f5cbd662866681ffa2375131",
      "parents": [
        "37da253e5112cc74a9c00a9778961454fd01eb54",
        "250a378d5a2152662e0fa820f2b38f794ddd3596"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Apr 25 08:30:32 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 25 08:30:32 2016 +0000"
      },
      "message": "Merge \"Add flag to ArtMethod to skip compilation.\""
    },
    {
      "commit": "250a378d5a2152662e0fa820f2b38f794ddd3596",
      "tree": "51896bf755c3f7afd1e0616a9a54071bda6dccc0",
      "parents": [
        "a584db5460a31198bf621cdacf5bc304a984efa4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 20 16:27:53 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 25 09:29:21 2016 +0100"
      },
      "message": "Add flag to ArtMethod to skip compilation.\n\nTo ensure even the JIT will not try to compile methods with\nsoft failures a runtime_throw.\n\nbug:28293819\nbug:28313047\n\nChange-Id: Ie3fd71ded0b77de8dab1c3c825b867cb321b8873\n"
    },
    {
      "commit": "f6e6331180c16c3b2d626af3179f9aa03ae511c8",
      "tree": "13c7717871f52da5a445f932762c33ae5be6e1e0",
      "parents": [
        "c0a419e89ce7991ffc6a960a0f5a123ea04456c5",
        "7fda7854ed734c4cdc786e46fcfdaa71ec600ecf"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Apr 22 18:26:21 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 22 18:26:21 2016 +0000"
      },
      "message": "Merge \"MIPS64: Implement bitCount intrinsics.\""
    },
    {
      "commit": "4f4a6c47ef269c68bc136f0805e5e99512d970b7",
      "tree": "449a665d50f98dc75f53f820581f0b0d1673426d",
      "parents": [
        "4b55b52e2dca085365157bc52626630803ce259e",
        "c120bbe26fe116d3c9d8322f44bb9e330e07f745"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 22 16:52:18 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 22 16:52:19 2016 +0000"
      },
      "message": "Merge \"ART: Naive NullCheck elimination in InstructionBuilder\""
    },
    {
      "commit": "c120bbe26fe116d3c9d8322f44bb9e330e07f745",
      "tree": "63e503da272d0be6d6dc243c29d4e7b184705710",
      "parents": [
        "121c8a6494f2224830ed0ca33df5af0d8c077647"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 22 16:57:00 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 22 16:57:00 2016 +0100"
      },
      "message": "ART: Naive NullCheck elimination in InstructionBuilder\n\nSave a little bit of memory by not generating trivially redundant\nHNullCheck instructions. This patch builds on the fact that the\nInstructionBuilder now directly generates SSA form and looks at the\ninput of the NullCheck. For obvious cases, such as NewInstance/Array\nor `this`, the NullCheck generation is completely avoided.\n\nBug: 28173563\nChange-Id: I1fdf3b096c7a939f7b8586c02a2a6b44dfa43443\n"
    },
    {
      "commit": "bb661c0f0cb72d4bbfc2e251f6ded6949a713292",
      "tree": "4fe7e66f3385b1955934d3ec6f02e00bde6e13b8",
      "parents": [
        "f7cda8088ec57ab1422f85f08df78e217a9f7094"
      ],
      "author": {
        "name": "Bilyan Borisov",
        "email": "bilyan.borisov@linaro.org",
        "time": "Mon Apr 04 16:27:32 2016 +0100"
      },
      "committer": {
        "name": "Bilyan Borisov",
        "email": "bilyan.borisov@linaro.org",
        "time": "Fri Apr 22 13:33:30 2016 +0100"
      },
      "message": "Refactor use of __ANDROID__ macro\n\nWe use the __ANDROID__ macro, which is provided by the toolchain, in\nnumerous places. This patch refactors the usage of this by defining a\nnew macro, ART_TARGET_ANDROID, that is being passed during build to\nART_TARGET_CFLAGS in Android.common_build.mk on the same line as\nART_TARGET. The codebase currently assumes that the existence of the\n__ANDROID__ macro implies that we are compiling art for an android\ntarget device. This is because, currently, target builds are compiled\nwith target toolchains that provide the macro, while host toolchains\ndo not.  With this change this assumption is still preserved. However,\nin a future patch we will add the ability to compile art for a linux\ntarget, and in that case the ART_TARGET_ANDROID macro won\u0027t be passed\nanymore.\n\nChange-Id:  I1f3a811aa735c87087d812da27fc6b08f01bad51\n"
    },
    {
      "commit": "7fda7854ed734c4cdc786e46fcfdaa71ec600ecf",
      "tree": "fb8580dbd8bd13f527f3c57e10885a6e280f799e",
      "parents": [
        "7424025c8566bf560815c75659f30edff7e0df41"
      ],
      "author": {
        "name": "Chris Larsen",
        "email": "chris.larsen@imgtec.com",
        "time": "Thu Apr 21 16:00:36 2016 -0700"
      },
      "committer": {
        "name": "Chris Larsen",
        "email": "chris.larsen@imgtec.com",
        "time": "Thu Apr 21 16:00:36 2016 -0700"
      },
      "message": "MIPS64: Implement bitCount intrinsics.\n\n- int java.lang.Integer.bitCount(int)\n- int java.lang.Long.bitCount(long)\n\nChange-Id: If2390beeb5b900e8680ead1927e0455b35f1948a\n"
    },
    {
      "commit": "2efce70e4204e1a52769c63dac43c9d4af105751",
      "tree": "d812f91e3ca3d64c42d7e0d876b4559e62616406",
      "parents": [
        "70c0f4e15797902e248e8b7aa0e013fe6d426c71",
        "7aa04a145e2e0d2949a1a1c7fd4c72d08d698587"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 21 19:36:23 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 21 19:36:24 2016 +0000"
      },
      "message": "Merge \"X86/X86_64: Switch to locked add from mfence\""
    },
    {
      "commit": "94408d3144061bd6efc74b3d884d38169969c63f",
      "tree": "549d01e5c1514d6cc63e427c9b0bd13a648a2b39",
      "parents": [
        "0d399c71cb176b0a31d6d51f950c7c32a43668ef"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 21 14:00:15 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 21 15:43:12 2016 +0100"
      },
      "message": "ART: Address late comments on a GVN memory-saving CL\n\nAdded extra comments and removed redundant code as requested.\n\nBug: 28173563\nBug: 28287086\n\nChange-Id: If6aff68c4c30427a86a27ffba5df1ae135edd294\n"
    },
    {
      "commit": "cc857cfbe4a179dfa7935b7334f1efbb21f2ac76",
      "tree": "ba71a0603c98f09d31fa9b63d91544b8d0927ccf",
      "parents": [
        "9d7c524c9bd603b1df9e88132f7ea4d59dab44a3"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 20 14:24:12 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 21 09:23:04 2016 +0100"
      },
      "message": "Reduce memory usage in GVN\n\nImplement recycling of ValueSet data structures which the GVN\nalgorithm will not access any more.\n\nSavings depend on the shape of the graph, but can be as high as 93%.\nPeak memory usage for GSA drops from 32MB to 26MB, compile times seem\nunaffected.\n\nBug: 28173563\nBug: 28287086\n\nChange-Id: If227177449bc90ad24fa68c37b0c2615924af1ed\n"
    },
    {
      "commit": "c6b5627c25ff5653e97ccff8c5ccf6ac967b6f83",
      "tree": "8cec0d66bdd5e5a9be14bbb881eb36d09868ab39",
      "parents": [
        "a584db5460a31198bf621cdacf5bc304a984efa4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 18:45:25 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 19:40:35 2016 +0100"
      },
      "message": "Fix HInstruction::ReplaceInput(), allow no-op.\n\nAllow HInstruction::ReplaceInput() to be called with\na `replacement` being the same as the old input and\ndo nothing in that case.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/216923\nwhere I erroneously assumed that it never happens.\n\nAlso adhere to the standard C++ std::forward_list\u003c\u003e\nsemantics in the single-element overload of\n`IntrusiveForwardList\u003c\u003e::splice_after()`.\n\nBug: 28173563\nChange-Id: I5cea14c212b1083f90ffe6b5b53324ad663d57d8\n"
    },
    {
      "commit": "a584db5460a31198bf621cdacf5bc304a984efa4",
      "tree": "6e69fc19450495147151f326d16ca00cc3a6d81c",
      "parents": [
        "2bdf84219d96c6414b9eee210f0b634687b78a3c",
        "62977ff198deb673a6990202a2fb8b993217c57c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 14:43:54 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 20 14:43:55 2016 +0000"
      },
      "message": "Merge \"Fix RTP to hold mutator lock while using raw mirror pointers.\""
    },
    {
      "commit": "62977ff198deb673a6990202a2fb8b993217c57c",
      "tree": "a935f37990e67d5deb3ce238484c5d60f2c8fc41",
      "parents": [
        "ac6d660672c21a0ace14276e9c356906218b4412"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 15:06:31 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 15:20:20 2016 +0100"
      },
      "message": "Fix RTP to hold mutator lock while using raw mirror pointers.\n\nReferenceTypePropagation::RTPVisitor::SetClassAsTypeInfo()\nis taking a raw mirror::Class* parameter, so it must be\nmarked with SHARED_REQUIRES(Locks::mutator_lock_). The\nomission of this annotation allowed\n    https://android-review.googlesource.com/216926\nto compile despite using GC-unsafe raw mirror pointers in\nUpdateFieldAccessTypeInfo(). This led to test failures in\nthe debug-GC mode.\n\nChange-Id: I2a743070c642e7a611480e5d495af44f0945e43f\n"
    },
    {
      "commit": "5eda02cee993c71087e3bb18dcb3d44cba55898f",
      "tree": "08d3dc94255e7eaa8049cefd8be547418febb9c7",
      "parents": [
        "ac6d660672c21a0ace14276e9c356906218b4412",
        "3c19d3e029a9fcc123d2c6fd1e5e13867d2cfe1f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 11:52:24 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 20 11:52:24 2016 +0000"
      },
      "message": "Merge \"Reuse HUseListNode\u003c\u003es when replacing instruction or input.\""
    },
    {
      "commit": "5eed0c5d27f091c952704f652cd77c4e3833ad88",
      "tree": "bd80228f66a7654c6944561384a9848a68127883",
      "parents": [
        "44349d990b1356b455b3369dd7c5ab6f172c3a28"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 11:22:16 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 11:22:16 2016 +0100"
      },
      "message": "Fix reference_type_propagation_test.\n\nBug: 28210356\nChange-Id: I472bbdc48d3959a374d4bf21a921ca57007a96f0\n"
    },
    {
      "commit": "b4154d33eb51de747cc517dd270b58619b3a3122",
      "tree": "c7782e1bfc682b57d6267286f0eafaf265f18d40",
      "parents": [
        "20d2c9d003ea2508154dac4b8a3bfeba00b063de",
        "456307a47336e3d6576ed6d8563b67573a4238d3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 20 09:00:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 20 09:00:49 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Use dex cache from compilation unit in RTP.\"\"\""
    },
    {
      "commit": "31244b4cde9156632a08103a8bf1cbff4cbae3cc",
      "tree": "35007c0b0f526da419d858edbbce6830dd179853",
      "parents": [
        "6435910a65067fb38477232b2620cc53978b13c7"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 19 15:07:23 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 19 15:07:23 2016 -0700"
      },
      "message": "Do not use EXPECT_DEATH in unit test, fails on device.\n\nChange-Id: I77ff843edb416fae72e7bbf66a6151405dab81b0\n"
    },
    {
      "commit": "3c19d3e029a9fcc123d2c6fd1e5e13867d2cfe1f",
      "tree": "6cd3dcb90f5ee163b08d933299d5b821c03c6a73",
      "parents": [
        "6435910a65067fb38477232b2620cc53978b13c7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 14:36:35 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 19:43:31 2016 +0100"
      },
      "message": "Reuse HUseListNode\u003c\u003es when replacing instruction or input.\n\nCompiling the Nexus 5 boot image with the 64-bit dex2oat\non host this CL reduces the memory used for compiling the\nmost hungry method, BatteryStats.dumpLocked(), by ~5.6MiB:\n\nBefore:\n  MEM: used: 44393040, allocated: 45361248, lost: 968208\n  Number of arenas allocated: 319,\n  Number of allocations: 815492, avg size: 54\n  ...\n  UseListNode    10308480\n  ...\nAfter:\n  MEM: used: 38554536, allocated: 39463008, lost: 908472\n  Number of arenas allocated: 274,\n  Number of allocations: 572221, avg size: 67\n  ...\n  UseListNode     4469976\n  ...\n\nWith 32-bit dex2oat, the UseListNode would be 2/3 of the\nvalues for 64-bit dex2oat (both before and after).\n\nBug: 28173563\nChange-Id: Ia4fabe03568f0e0dbf2cdf2b031863602aea3530\n"
    },
    {
      "commit": "6435910a65067fb38477232b2620cc53978b13c7",
      "tree": "d607c9103f46242bce5ed75297c20087c0e3f8cd",
      "parents": [
        "814ae9448d7a620a1855d53c7b69b1b377944a67",
        "46817b876ab00d6b78905b80ed12b4344c522b6c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 18:26:22 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 19 18:26:22 2016 +0000"
      },
      "message": "Merge \"Use iterators \"before\" the use node in HUserRecord\u003c\u003e.\""
    },
    {
      "commit": "456307a47336e3d6576ed6d8563b67573a4238d3",
      "tree": "35d7c3d213b942a562538a8d25129b4e27cc712f",
      "parents": [
        "814ae9448d7a620a1855d53c7b69b1b377944a67"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 14:12:13 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 19:25:00 2016 +0100"
      },
      "message": "Revert \"Revert \"Use dex cache from compilation unit in RTP.\"\"\n\nThe exposed issue has been fixed by\n    https://android-review.googlesource.com/215877\n\nBug:28210356\n\nThis reverts commit 34d9b04d8d0006967486c0ad1b221e7b632652af.\n\nChange-Id: I5288c923e45d9ef3190dabb89738350a1212a60d\n"
    },
    {
      "commit": "46817b876ab00d6b78905b80ed12b4344c522b6c",
      "tree": "6715bee60b0682a10437866c9617cb442146aa2f",
      "parents": [
        "f59149a151ee694484e21da7b3b207920dead5a6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 29 12:21:58 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 18:33:06 2016 +0100"
      },
      "message": "Use iterators \"before\" the use node in HUserRecord\u003c\u003e.\n\nCreate a new template class IntrusiveForwardList\u003c\u003e that\nmimicks std::forward_list\u003c\u003e except that all allocations\nare handled externally. This is essentially the same as\nboost::intrusive::slist\u003c\u003e but since we\u0027re not using Boost\nwe have to reinvent the wheel.\n\nUse the new container to replace the HUseList and use the\niterators to \"before\" use nodes in HUserRecord\u003c\u003e to avoid\nthe extra pointer to the previous node which was used\nexclusively for removing nodes from the list. This reduces\nthe size of the HUseListNode by 25%, 32B to 24B in 64-bit\ncompiler, 16B to 12B in 32-bit compiler. This translates\ndirectly to overall memory savings for the 64-bit compiler\nbut due to rounding up of the arena allocations to 8B, we\ndo not get any improvement in the 32-bit compiler.\n\nCompiling the Nexus 5 boot image with the 64-bit dex2oat\non host this CL reduces the memory used for compiling the\nmost hungry method, BatteryStats.dumpLocked(), by ~3.3MiB:\n\nBefore:\n  MEM: used: 47829200, allocated: 48769120, lost: 939920\n  Number of arenas allocated: 345,\n  Number of allocations: 815492, avg size: 58\n  ...\n  UseListNode    13744640\n  ...\nAfter:\n  MEM: used: 44393040, allocated: 45361248, lost: 968208\n  Number of arenas allocated: 319,\n  Number of allocations: 815492, avg size: 54\n  ...\n  UseListNode    10308480\n  ...\n\nNote that while we do not ship the 64-bit dex2oat to the\ndevice, the JIT compilation for 64-bit processes is using\nthe 64-bit libart-compiler.\n\nBug: 28173563\nChange-Id: I985eabd4816f845372d8aaa825a1489cf9569208\n"
    },
    {
      "commit": "5f6b90824628504813cd174b90eaaad8c8031726",
      "tree": "53f7230957dc30bbc5505a946d7281d4a8d97863",
      "parents": [
        "35a38d1e250fc3237c79fafa96ec69d6f07c1f3d",
        "8b3f9b246d5bdbf67faeb2b872b75b8d72777bc0"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 19 16:21:46 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 19 16:21:47 2016 +0000"
      },
      "message": "Merge \"Avoid constructing types with errors.\""
    },
    {
      "commit": "c5c508d149a7eeae1121ca4b932e8c6ab024813f",
      "tree": "f6b6265cf2152239cdd228c0e643b1e179cca9a9",
      "parents": [
        "9c8c16a58077ca9c427cc8996ad6b5e67bb6a181",
        "fd66c50d64c38e40bafde83b4872e27bbff7546d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 13:54:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 19 13:54:10 2016 +0000"
      },
      "message": "Merge \"Fix inlining loops in OSR mode.\""
    },
    {
      "commit": "fd66c50d64c38e40bafde83b4872e27bbff7546d",
      "tree": "e77ea1374211042d5eca3d1a62a81293a29eb108",
      "parents": [
        "c4d445a40bf00ab497b5e4d43a6b43eaafb5fa50"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 18 15:37:01 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 13:59:15 2016 +0100"
      },
      "message": "Fix inlining loops in OSR mode.\n\nWhen compiling a method in OSR mode and the method does not\ncontain a loop (arguably, a very odd case) but we inline\nanother method with a loop and then the final DCE re-runs\nthe loop identification, the inlined loop would previously\nbe marked as irreducible. However, the SSA liveness analysis\nexpects irreducible loop to have extra loop Phis which were\nalready eliminated from the loop before the inner graph was\ninlined to the outer graph, so we would fail a DCHECK().\n\nWe fix this by not marking inlined loops as irreducible when\ncompiling in OSR mode.\n\nBug: 28210356\nChange-Id: If10057ed883333c62a878ed2ae3fe01bb5280e33\n"
    },
    {
      "commit": "fa3091ef031da6c18478fdede12d7762634ee271",
      "tree": "603400fda7a81ddc585c204dbb781536c64bba99",
      "parents": [
        "54c819513ab759815858647cd513c4f351568751"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 19 10:10:17 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 19 09:15:58 2016 +0000"
      },
      "message": "ART: Fix IsLinearOrderWellFormed in liveness analysis\n\nGraph may contain nullptr in list of basic blocks when\nthe basic block is removed. So we must handle nullptr explicitly.\n\nBug: 28252537\nChange-Id: If430939b8fe793e4a9c974936180d06c1a9f90c6\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "8b3f9b246d5bdbf67faeb2b872b75b8d72777bc0",
      "tree": "6cceffd4ee15b9c67f67083851769980cc8988a7",
      "parents": [
        "c4d445a40bf00ab497b5e4d43a6b43eaafb5fa50"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 06 11:22:12 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 18 20:29:08 2016 -0700"
      },
      "message": "Avoid constructing types with errors.\n\nBUG\u003d27626735\n\nRationale:\nDo not construct classes with a link error. Without this,\nthe error type thought it was Object (mirror\u0027s method\nIsObjectClass() returns true if there is no superclass).\n\nChange-Id: I55ca8cc8cfc042210edf748aab10da4c6e345980\n"
    },
    {
      "commit": "2dcab783cd7a5a4351c50755b3b3de927e70ac38",
      "tree": "621974407f4fe3e9d2c72b4e8f79054328ea59ec",
      "parents": [
        "979fb0090c5c9de1da62735b8611a3c9028ed0aa",
        "18b36abc7cc03076fe1c399c0bb8ec8793cc6806"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Apr 15 19:04:13 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 15 19:04:13 2016 +0000"
      },
      "message": "Merge \"Remove the no-longer-needed F/I and D/J alias.\""
    },
    {
      "commit": "979fb0090c5c9de1da62735b8611a3c9028ed0aa",
      "tree": "544d97aa662329876c74780f95ed4f6fcc3a4542",
      "parents": [
        "05241f4edbf6960aac7c04b0b98d05f16a23962b",
        "c01a66465a398ad15da90ab2bdc35b7f4a609b17"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 15 18:55:20 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 15 18:55:20 2016 +0000"
      },
      "message": "Merge \"Fix: correctly destruct VIXL labels.\""
    },
    {
      "commit": "18b36abc7cc03076fe1c399c0bb8ec8793cc6806",
      "tree": "3e38ee71b94c7bbde6f93976e16416a2f6d33ee0",
      "parents": [
        "defccc564481c2c892792680c6abb6020e36bacd"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 13 16:41:35 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Apr 15 10:49:34 2016 -0700"
      },
      "message": "Remove the no-longer-needed F/I and D/J alias.\n\nRationale:\nNow that our HIR is type clean (yeah!), we no longer have\nto conservatively assume F/I and D/J are aliased. This\nenables more accurate side effects analysis, with improvements\nin all clients, such a LICM.\n\nRefinement:\nThe HIR is not completely clean between building and SSA.\nThis refinement takes care of that, with new tests.\n\nBUG\u003d22538329\n\nChange-Id: Id78ff0ff4e325aeebf0022d868937cff73d3a742\n"
    },
    {
      "commit": "05241f4edbf6960aac7c04b0b98d05f16a23962b",
      "tree": "7b02580b8833e8411f061b6a162a58ecffd6ceaf",
      "parents": [
        "6233bff5bd04bb6030929ed6f55e34dde09aa8f3",
        "062157f4e07b525728fa58f4ec57ffe1bf15d545"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Apr 15 17:30:05 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 15 17:30:05 2016 +0000"
      },
      "message": "Merge \"Enable allocation elimination as part of LSE\""
    },
    {
      "commit": "34d9b04d8d0006967486c0ad1b221e7b632652af",
      "tree": "cf00b5f4af53b6eadef0c3e3f8c05f743176271e",
      "parents": [
        "27bb86edf60e2f9ca2c1075c0c86b9e79374f1d0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 15 17:01:11 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 15 17:01:11 2016 +0000"
      },
      "message": "Revert \"Use dex cache from compilation unit in RTP.\"\n\nbug:28210356\n\nThis reverts commit 27bb86edf60e2f9ca2c1075c0c86b9e79374f1d0.\n\nChange-Id: Ib27ee90a7e4d516fd2db67a9c4e454023737841a\n"
    },
    {
      "commit": "062157f4e07b525728fa58f4ec57ffe1bf15d545",
      "tree": "90be1124b444b735b86e09f4adeff59f813b50d2",
      "parents": [
        "240986c1fcd867b9a01e2e94ee2aa90235ce7d75"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Mar 02 10:15:36 2016 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Apr 15 09:03:55 2016 -0700"
      },
      "message": "Enable allocation elimination as part of LSE\n\nAfter load-store elimination, an allocation may not be used any more\nand may be eliminated.\n\nChange-Id: I7fcaaefa9d6ec2c611e46119c5799293770a917c\n"
    },
    {
      "commit": "c01a66465a398ad15da90ab2bdc35b7f4a609b17",
      "tree": "e85cb2aa05be5c1491814fa83b94748439b8394b",
      "parents": [
        "dad35b0762f97ce79ce3b9a35c9df5021b7dbd17"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Apr 15 11:54:06 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Apr 15 11:54:06 2016 +0100"
      },
      "message": "Fix: correctly destruct VIXL labels.\n\nBug: 27505766\nChange-Id: I077465e3d308f4331e7a861902e05865f9d99835"
    },
    {
      "commit": "27bb86edf60e2f9ca2c1075c0c86b9e79374f1d0",
      "tree": "5e2cb0caa0b4456fd55c93f6c863bb3b26d5cd31",
      "parents": [
        "0108f3d945cd5483217d7bf1df75ab5108d4555c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 14 18:07:55 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 14 18:45:01 2016 +0100"
      },
      "message": "Use dex cache from compilation unit in RTP.\n\nAvoid calling the costly ClassLinker::FindDexCache() from\nreference type propagation when the dex cache from the\ncompilation unit will do, i.e. almost always. Compiling\nthe Nexus 5 boot image on host under perf(1) shows that\nthe FindDexCache() hits drop from about 0.2% to almost\nnothing, though enabling inlining for the boot image will\nincrease it a bit to 0.03% due to unavoidable calls from\nthe inliner.\n\nAlso clean up the ScopedObjectAccess usage a bit.\n\nChange-Id: I426a5f9f5da9e64fad2ea57654240789a48d3871\n"
    },
    {
      "commit": "a2a8434deb577317c46ce7f81ee879370688307d",
      "tree": "6761b3f8ab830f418c965f89fe4a787229e40e20",
      "parents": [
        "7d00681e4e732f0964bc05b113838deb7831c3ea",
        "aa680e89cf35ac3af7d3344d7960ba2f055e16d8"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 14 15:59:02 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 14 15:59:02 2016 +0000"
      },
      "message": "Merge \"ART: Save a bit of memory in production LICM\""
    },
    {
      "commit": "aa680e89cf35ac3af7d3344d7960ba2f055e16d8",
      "tree": "ce07d0ab6506b05275f8174188371d51da664447",
      "parents": [
        "54b5b1a4a93822ff8e1f324dfcd6f0cd3bffa993"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 14 16:36:15 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 14 16:36:15 2016 +0100"
      },
      "message": "ART: Save a bit of memory in production LICM\n\nLICM uses a bit vector to DCHECK that inner loops are visited before\nouter loops. Allocate the bit vector only if kIsDebugBuild.\n\nChange-Id: Ic2641607ebe55ad8974de2ebe03973f0bf182e42\n"
    },
    {
      "commit": "adf84911030ca36835c48cbff8be6b078693fb00",
      "tree": "b08c05d49671ca10d11dbf8f3a4589855885108f",
      "parents": [
        "54b5b1a4a93822ff8e1f324dfcd6f0cd3bffa993"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 14 13:47:24 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 14 15:54:29 2016 +0100"
      },
      "message": "ART: Update DCHECKs in SsaLivenessAnalysis::AddBackEdgeUses\n\nGraph linearization in the presence of irreducible loops is not\nguaranteed to generate a linear order where all blocks of a loop are\nadjacent, first block is the header and last block is one of the back\nedges.\n\nThese assumptions are made when inserting synthesized uses at the back\nedges to aid the register allocator. Not meeting them will result in\nthe algorithm\u0027s early termination and back-edge uses not being added.\n\nThis patch updates the DCHECKs so the compiler does not fail in such\ncircumstances.\n\nBug: 27615840\nBug: 27624868\n\nChange-Id: I63632e8819ea3644d5c6fdfea00b66128bf22c24\n"
    },
    {
      "commit": "89c31e36c388d96f0ecef8d2c4b51747468d1e7a",
      "tree": "0ba47e659de70d156cbd1ae642b0bf48fe30b3e9",
      "parents": [
        "dad35b0762f97ce79ce3b9a35c9df5021b7dbd17",
        "3cd50df11b3076b801954018236c366fd9b97948"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 14 10:30:39 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 14 10:30:39 2016 +0000"
      },
      "message": "Merge \"Use dex cache from compilation unit in HInstructionBuilder.\""
    },
    {
      "commit": "3cd50df11b3076b801954018236c366fd9b97948",
      "tree": "8f442c981f5e0edfd5f2c4fc4fe8439a4eb001e6",
      "parents": [
        "8d4b37ed048487561358e13e2a18ad9ca0dab3c0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 13 19:29:26 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 14 10:16:28 2016 +0100"
      },
      "message": "Use dex cache from compilation unit in HInstructionBuilder.\n\nAvoid calling costly ClassLinker::FindDexCache() from\nHInstructionBuilder, the dex cache is already available in\nthe compilation unit. Compiling Nexus 5 boot image on host\nunder perf(1) shows that the time spent in FindDexCache()\nis reduced from about 2% to well under 0.2%, 90% of the\nremaining hits coming from ReferenceTypePropagation which\ndoesn\u0027t have access to the compilation unit.\n\nChange-Id: Id9df61c79db9a67e3f12c857f32a4ca80e5420c3\n"
    },
    {
      "commit": "dc1d10458ea2cf29fd861f32ab28e9abac0239ec",
      "tree": "13b6950c54b6635370a0ef1fb358a71680fbf569",
      "parents": [
        "48475137a7879bbc27ae256b7671f0433490e791",
        "1f7624c3bc41251ff72b1409441f541d992967c7"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 13 22:34:17 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 13 22:34:17 2016 +0000"
      },
      "message": "Merge \"Revert \"Remove the no-longer-needed F/I and D/J alias.\"\""
    },
    {
      "commit": "1f7624c3bc41251ff72b1409441f541d992967c7",
      "tree": "d6f91bc54a8216358cfc7aa62aab2a615a41160f",
      "parents": [
        "2f52064dcfe5ebce5a998d30766ca079a366c920"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 13 21:17:17 2016 +0000"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 13 21:17:17 2016 +0000"
      },
      "message": "Revert \"Remove the no-longer-needed F/I and D/J alias.\"\n\nThis reverts commit 2f52064dcfe5ebce5a998d30766ca079a366c920.\n\nReason:\n\nArrays.sort() returns wrong result on double[] and this CL is the most likely suspect. Rolling back to buy some time for careful analysis and debugging.\n\nChange-Id: I58223c42e95c2287520eef863fbcb738b0736d4d\n"
    },
    {
      "commit": "8d4b37ed048487561358e13e2a18ad9ca0dab3c0",
      "tree": "f1d50e29322a92b66727a2a350731e11e32677bf",
      "parents": [
        "de76960329b18f5330a9a08f24ba661516a93ac3",
        "93205e395f777c1dd81d3f164cf9a4aec4bde45f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 13 16:55:11 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 13 16:55:11 2016 +0000"
      },
      "message": "Merge \"Move Assemblers to the Arena.\""
    },
    {
      "commit": "93205e395f777c1dd81d3f164cf9a4aec4bde45f",
      "tree": "1d08efd9b7bca9fe23df9ae9489c5dd575d3c6df",
      "parents": [
        "6990775e323cd9164d6cc10955a047b9d9f15f32"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 13 11:59:46 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 13 17:50:16 2016 +0100"
      },
      "message": "Move Assemblers to the Arena.\n\nAnd clean up some APIs to return std::unique_ptr\u003c\u003e instead\nof raw pointers that don\u0027t communicate ownership.\n\nChange-Id: I3017302307a0253d661240750298802fb0d9585e\n"
    },
    {
      "commit": "de76960329b18f5330a9a08f24ba661516a93ac3",
      "tree": "9d50fab0b7bcb6822e91eb6c7964da84f0fd31be",
      "parents": [
        "6990775e323cd9164d6cc10955a047b9d9f15f32",
        "2f52064dcfe5ebce5a998d30766ca079a366c920"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Apr 13 16:15:35 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 13 16:15:36 2016 +0000"
      },
      "message": "Merge \"Remove the no-longer-needed F/I and D/J alias.\""
    },
    {
      "commit": "2f52064dcfe5ebce5a998d30766ca079a366c920",
      "tree": "4c49114f810e22e83d662f42705ac908d473b9f4",
      "parents": [
        "ec9a828fa4a4638d2d17124c4fa835f15c7c5589"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 12 15:05:45 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Apr 12 19:25:42 2016 -0700"
      },
      "message": "Remove the no-longer-needed F/I and D/J alias.\n\nRationale:\nNow that our HIR is type clean (yeah!), we no longer have\nto conservatively assume F/I and D/J are aliased. This\nenables more accurate side effects analysis, with improvements\nin all clients, such a LICM.\n\nBUG\u003d22538329\n\nChange-Id: Iba1fb09ff063f31b5893f588aa6d0c5ab3b42f39\n"
    },
    {
      "commit": "7aa04a145e2e0d2949a1a1c7fd4c72d08d698587",
      "tree": "631554549d4b4dbde438fa0e6e636832427fe6c5",
      "parents": [
        "4009bc645e3358d3150b7f94dd90a2c939f0fa51"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Jan 27 22:39:07 2016 -0500"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue Apr 12 17:25:51 2016 -0400"
      },
      "message": "X86/X86_64: Switch to locked add from mfence\n\nI finally received the answers about the performance of locked add vs.\nmfence for Java memory semantics.  Locked add has been faster than\nmfence for all processors since the Pentium 4.  Accordingly, I have made\nthe synchronization use locked add at all times, removing it from an\ninstruction set feature.\n\nAlso add support in the optimizing compiler for barrier type\nkNTStoreStore, which is used after non-temporal moves.\n\nChange-Id: Ib47c2fd64c2ff2128ad677f1f39c73444afb8e94\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "d58b837ae41c6d8ce010c362e8f85bd938715900",
      "tree": "a7c8e90ff825838bb27707d14487c0333f2cc5f6",
      "parents": [
        "ec9a828fa4a4638d2d17124c4fa835f15c7c5589"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 12 18:51:43 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 12 21:04:13 2016 +0100"
      },
      "message": "Allocate code generators on the arena.\n\nChange-Id: If8cf0ee43711f6e13171443e3c057ff370ccfbaa\n"
    },
    {
      "commit": "934c5b69b1e78e22cd242c692f9ae4606799af31",
      "tree": "5b93c326641fc85bc52c76f65373d5b83ca74787",
      "parents": [
        "62358ed8377fd14fd9890b54c09f927ce51fc443",
        "ebea3d2cce6aa34216502bb6b83d155d4c92e4ff"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 12 16:18:08 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 12 16:18:08 2016 +0000"
      },
      "message": "Merge \"Small changes in ARM and x86-64 SystemArrayCopy intrinsics.\""
    },
    {
      "commit": "ebea3d2cce6aa34216502bb6b83d155d4c92e4ff",
      "tree": "16a0adf2d7ee365d4736d1dfe50da1a9cfe54ad4",
      "parents": [
        "04c2b2de69460d41e0c39c1f7d9fb77376c3aa8b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 12 15:42:57 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 12 15:42:57 2016 +0100"
      },
      "message": "Small changes in ARM and x86-64 SystemArrayCopy intrinsics.\n\nHave these intrinsics share a more uniform style with the\nARM64 SystemArrayCopy intrinsic.\n\nAlso make some changes/improvements in:\n- art::IntrinsicOptimizations\n- art::arm64::GenSystemArrayCopyAddresses\n\nChange-Id: Ieeb224795229580f8e5f7219c586d04786d8c705\n"
    },
    {
      "commit": "c2e8af9659db7e456b26febb1b971900057ad427",
      "tree": "af35981588f2995d8bb3a570e2f7244c8c22373a",
      "parents": [
        "04c2b2de69460d41e0c39c1f7d9fb77376c3aa8b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 05 17:15:19 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 12 15:17:28 2016 +0100"
      },
      "message": "ART: Speed up HGraph::PopulateIrreducibleRecursive\n\nPopulating an irreducible loop can potentially traverse all possible\npaths through the HGraph, leading to an exponential algorithm.\nThis patch adds a bit vector of nodes whose membership in the loop\nhas been decided and need not be revisited again.\n\nBug: 27856014\nChange-Id: I3696f08c846e6f40e5de44cb771811bac7e3e08a\n"
    },
    {
      "commit": "c4ae916def97b9e1ef6df35c8fabb3921a0e380c",
      "tree": "9423d8a1df2ae043e2a9abb7a20977d849d1b7d6",
      "parents": [
        "b5d386118334fa5181c31b83b3fee6332537f4b7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 07 13:19:19 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 08 10:33:00 2016 -0700"
      },
      "message": "Store precice set of which constructors require barriers\n\nFixes bugs where things in the boot image might not have been\ncalculated even though resolved_clases was true. This only occured\nfor app and test compiles though.\n\nFixes test 476-checker-ctor-memory-barrier which was failing due to\ninlining something in the boot class path and getting a unexpected\nbarrier since the barrier defaults to enabled.\n\nNo measurable increase in RAM usage.\n\nBug: 28005874\n\nChange-Id: I4a417819aa129c95f4a83c38df1a66eb77824ea9\n"
    },
    {
      "commit": "dee58d6bb6d567fcd0c4f39d8d690c3acaf0e432",
      "tree": "5a2f20546ca3c1544c44bee560062580e22dc79c",
      "parents": [
        "391e155a6936a05bd39b171031ec21d2dee62133"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 07 09:54:26 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 07 16:03:16 2016 +0000"
      },
      "message": "Revert \"Revert \"Refactor HGraphBuilder and SsaBuilder to remove HLocals\"\"\n\nThis patch merges the instruction-building phases from HGraphBuilder\nand SsaBuilder into a single HInstructionBuilder class. As a result,\nit is not necessary to generate HLocal, HLoadLocal and HStoreLocal\ninstructions any more, as the builder produces SSA form directly.\n\nSaves 5-15% of arena-allocated memory (see bug for more data):\n  GMS      20.46MB  \u003d\u003e  19.26MB  (-5.86%)\n  Maps     24.12MB  \u003d\u003e  21.47MB  (-10.98%)\n  YouTube  28.60MB  \u003d\u003e  26.01MB  (-9.05%)\n\nThis CL fixed an issue with parsing quickened instructions.\n\nBug: 27894376\nBug: 27998571\nBug: 27995065\n\nChange-Id: I20dbe1bf2d0fe296377478db98cb86cba695e694\n"
    },
    {
      "commit": "391e155a6936a05bd39b171031ec21d2dee62133",
      "tree": "e9ca04db5c2af5ec448cf1000429faa456116a35",
      "parents": [
        "791947dc6284b6f28bb6fdbe1b585eb3cf821e44",
        "40ecb12f8eeb97b810e11f895278abbf7988ed4d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 07 09:18:36 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 07 09:18:36 2016 +0000"
      },
      "message": "Merge \"Optimizing: Fix codegens for MethodLoadKind::kDexCacheViaMethod.\""
    },
    {
      "commit": "a3aef2e42f4e88ae556432bd4a8040456a42bf74",
      "tree": "03261fe4fd630bb18840f0397dcf19475deb8129",
      "parents": [
        "5827507da8efdaf4536c70dfdc54407c28e37852"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Apr 06 17:45:58 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Apr 06 17:45:58 2016 +0100"
      },
      "message": "Move optimizations out of HInliner::TryBuildAndInlineHelper.\n\nThis is a followup CL to\nhttps://android-review.googlesource.com/#/c/212651.\n\nChange-Id: I37d1c3fc06d8e36c335dd62887936486f7deeba4\n"
    },
    {
      "commit": "40ecb12f8eeb97b810e11f895278abbf7988ed4d",
      "tree": "54d999605c0eaf3b4d311f83f8162684506f4a31",
      "parents": [
        "5827507da8efdaf4536c70dfdc54407c28e37852"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 06 17:33:41 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 06 17:33:41 2016 +0100"
      },
      "message": "Optimizing: Fix codegens for MethodLoadKind::kDexCacheViaMethod.\n\nUse the original method index instead of the target method\nindex because the target method may point to a different dex\nfile.\n\nNo regression test: this currently happens only if the\ncodegen uses the kDexCacheViaMethod as a fallback for\nanother load kind and we aim to avoid that fallback, so it\nwould be difficult to write a reliable regression test. We\ncould try and exploit current fallbacks for irreducible\nloops on x86 and arm but those fallbacks will eventually\ndisappear anyway.\n\nBug: 28036230\nChange-Id: I4cc9e046480d3d60a7fb521f0ca6a98914625cdc\n"
    },
    {
      "commit": "96de6c36efd328b3c5a7e4bb8f32ab340cce3efe",
      "tree": "3eba3b4fad4af8d639faa096ff33b84ffef7a3be",
      "parents": [
        "274704fd37ff65c65f229638d359186e33f4912b",
        "c2ec9ad9a0008a95b29185e6a971244ef108c766"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 05 13:25:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 05 13:25:12 2016 +0000"
      },
      "message": "Merge \"Implement ARM64 support for SystemArrayCopy()\""
    },
    {
      "commit": "75563e34a4e64a8e805e6810b13e07f1cafec137",
      "tree": "30bc7341b8b2c49e0fc56f783de86777abada138",
      "parents": [
        "a07be75830af60ce50aba357e8de066e849aa21c",
        "9d07e3d128ccfa0ef7670feadd424a825e447d1d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 05 09:23:52 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 05 09:23:53 2016 +0000"
      },
      "message": "Merge \"Clean up OatQuickMethodHeader after Quick removal.\""
    },
    {
      "commit": "7d9a5b0fbceef5806f059060d47533b9e699ec28",
      "tree": "411f4f2a709efdbf2b3d54cb40ee271061cb30bb",
      "parents": [
        "75c221dcffab45e3c1e4ba8b8cd048c87497334f",
        "60328910cad396589474f8513391ba733d19390b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 17:48:02 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 04 17:48:02 2016 +0000"
      },
      "message": "Merge \"Revert \"Refactor HGraphBuilder and SsaBuilder to remove HLocals\"\""
    },
    {
      "commit": "60328910cad396589474f8513391ba733d19390b",
      "tree": "01702f6df5c39925b354a3152dd04289e7d97062",
      "parents": [
        "e3ff7b293be2a6791fe9d135d660c0cffe4bd73f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 17:47:42 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 17:47:42 2016 +0000"
      },
      "message": "Revert \"Refactor HGraphBuilder and SsaBuilder to remove HLocals\"\n\nBug: 27995065\nThis reverts commit e3ff7b293be2a6791fe9d135d660c0cffe4bd73f.\n\nChange-Id: I5363c7ce18f47fd422c15eed5423a345a57249d8\n"
    },
    {
      "commit": "9d07e3d128ccfa0ef7670feadd424a825e447d1d",
      "tree": "dfb677fd75f0f297fef9bc49311cf1d22c770f56",
      "parents": [
        "eb98c0ded592cfca8187c744393c82efd1020b2a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 31 12:02:28 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 04 17:50:20 2016 +0100"
      },
      "message": "Clean up OatQuickMethodHeader after Quick removal.\n\nThis reduces the size of the pre-header by 8 bytes, reducing\noat file size and mmapped .text section size. The memory\nneeded to store a CompiledMethod by dex2oat is also reduced,\nfor 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The\naosp_flounder-userdebug 32-bit and 64-bit boot.oat are each\nabout 1.1MiB smaller.\n\nDisable the broken StubTest.IMT, b/27991555 .\n\nChange-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039\n"
    },
    {
      "commit": "eb98c0ded592cfca8187c744393c82efd1020b2a",
      "tree": "1b1504f200b626c405ce3381743d8ba5825cf9d0",
      "parents": [
        "2f92ec8a52faa4bc566af8fa34212f3e749e82c8",
        "a8013fd4f2630aa45b5a3c320660ac9590523537"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 04 14:36:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 04 14:36:12 2016 +0000"
      },
      "message": "Merge \"Please Clang wrt stack frames in HInliner::TryBuildAndInlineHelper.\""
    },
    {
      "commit": "a8013fd4f2630aa45b5a3c320660ac9590523537",
      "tree": "b8bbdcd6999e728d5faae712044ca541b22c3aba",
      "parents": [
        "75ee5c28ab583c532066b64d6337a5f78d6aa2ad"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 04 15:34:31 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 04 15:34:31 2016 +0100"
      },
      "message": "Please Clang wrt stack frames in HInliner::TryBuildAndInlineHelper.\n\nThis change enables Clang to compile ART on MIPS64 without\ncomplaining about stack frames larger than what\n`-Wframe-larger-than` allows.\n\nChange-Id: I72f424922d9cb3d01f7b8ba4e5cb9170b82870d9\n"
    },
    {
      "commit": "2f92ec8a52faa4bc566af8fa34212f3e749e82c8",
      "tree": "78b9ee38ae016f1198bc21ae7d913bc961f7624a",
      "parents": [
        "75ee5c28ab583c532066b64d6337a5f78d6aa2ad",
        "61b28a17d9b6e8e998103646e98e4a9772e11927"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Apr 04 13:35:53 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 04 13:35:53 2016 +0000"
      },
      "message": "Merge \"Use bit-level packing for InlineInfo in stackmaps as well.\""
    },
    {
      "commit": "75ee5c28ab583c532066b64d6337a5f78d6aa2ad",
      "tree": "21f4ff61cee75c35157366278641916786cfc58b",
      "parents": [
        "7e168f65949e70069418148b0b60ac86d04339d0",
        "fa3912edfac60a9f0a9b95a5862c7361b403fcc2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 04 12:58:23 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 04 12:58:23 2016 +0000"
      },
      "message": "Merge \"Fix BitCount intrinsics assertions.\""
    },
    {
      "commit": "7e168f65949e70069418148b0b60ac86d04339d0",
      "tree": "2fda16039c6fee2eaa4fd81a60cfe223b545f8ca",
      "parents": [
        "a999af471f4288b7f7e03b59f66e2387839676bf",
        "3a448e4af9595392c1a2308f59c084842c955e3e"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 04 11:37:58 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 04 11:37:58 2016 +0000"
      },
      "message": "Merge \"Improve debugging in art/compiler/optimizing/common_arm64.h.\""
    },
    {
      "commit": "e3ff7b293be2a6791fe9d135d660c0cffe4bd73f",
      "tree": "d578d27cb78e6d2caef683cd8ac94c9a9752b192",
      "parents": [
        "86ea7eeabe30c98bbe1651a51d03cb89776724e7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 02 16:48:20 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 11:21:30 2016 +0100"
      },
      "message": "Refactor HGraphBuilder and SsaBuilder to remove HLocals\n\nThis patch merges the instruction-building phases from HGraphBuilder\nand SsaBuilder into a single HInstructionBuilder class. As a result,\nit is not necessary to generate HLocal, HLoadLocal and HStoreLocal\ninstructions any more, as the builder produces SSA form directly.\n\nSaves 5-15% of arena-allocated memory (see bug for more data):\n  GMS      20.46MB  \u003d\u003e  19.26MB  (-5.86%)\n  Maps     24.12MB  \u003d\u003e  21.47MB  (-10.98%)\n  YouTube  28.60MB  \u003d\u003e  26.01MB  (-9.05%)\n\nBug: 27894376\nChange-Id: Iefe28d40600c169c5d306fd2c77034ae19476d90\n"
    },
    {
      "commit": "86ea7eeabe30c98bbe1651a51d03cb89776724e7",
      "tree": "01702f6df5c39925b354a3152dd04289e7d97062",
      "parents": [
        "0cb5c86b7021e70cbf584c1455aad1ef383af786"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 16 09:26:07 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 11:21:20 2016 +0100"
      },
      "message": "Build dominator tree before generating HInstructions\n\nSecond CL in the series of merging HGraphBuilder and SsaBuilder. This\npatch refactors the builders so that dominator tree can be built\nbefore any HInstructions are generated. This puts the SsaBuilder\nremoval of HLoadLocals/HStoreLocals straight after HGraphBuilder\u0027s\nHInstruction generation phase. Next CL will therefore be able to\nmerge them.\n\nThis patch also adds util classes for iterating bytecode and switch\ntables which allowed to simplify the code.\n\nBug: 27894376\nChange-Id: Ic425d298b2e6e7980481ed697230b1a0b7904526\n"
    },
    {
      "commit": "3a448e4af9595392c1a2308f59c084842c955e3e",
      "tree": "0fa1cdf37049487b61fc2f34f02d9477c55d8805",
      "parents": [
        "cbfa10557ab6e2669747a1e21a87adf212ec44c2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 01 18:37:46 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 01 18:37:46 2016 +0100"
      },
      "message": "Improve debugging in art/compiler/optimizing/common_arm64.h.\n\nChange-Id: I44ff2cb64c1fd45390ed4a6517af2488fdbdaf41\n"
    },
    {
      "commit": "fa3912edfac60a9f0a9b95a5862c7361b403fcc2",
      "tree": "2c39b911f1e68335c45ba30690f170a47e298c68",
      "parents": [
        "fe2b13717879abae993603534a145372e3110aae"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 01 18:21:55 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 01 18:21:55 2016 +0100"
      },
      "message": "Fix BitCount intrinsics assertions.\n\nBug: 27852035\nChange-Id: Iba43039aadd9ba288b476d53cc2306a58356465f\n"
    },
    {
      "commit": "61b28a17d9b6e8e998103646e98e4a9772e11927",
      "tree": "438c4a73f72423ddc71e6dca9f082d9e1d533996",
      "parents": [
        "cf0f8560f41467331427418584687830932e66ed"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 25 21:55:03 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Apr 01 17:01:55 2016 +0100"
      },
      "message": "Use bit-level packing for InlineInfo in stackmaps as well.\n\nUse the same approach as we do for stackmaps to reduce the size.\n\nIt saves 4.0 MB from non-debuggable boot.oat (AOSP).\nIt does not affect debuggable boot.oat.\n\nIt saves 3.6 MB (of 96.6 MB) from /system/framework/arm/ (GOOG).\nIt saves 0.6 MB (of 26.7 MB) from /system/framework/oat/arm/ (GOOG).\n\nField loads from inline-info get around 5% slower.\n(based on the time it takes to load all inline-infos from boot.oat)\n\nChange-Id: I67b0fa5eef74c1fdb013680d0231fd44ea696176\n"
    },
    {
      "commit": "fe2b13717879abae993603534a145372e3110aae",
      "tree": "5b499eb28af5e91e00ff86683f51df029a2b86b4",
      "parents": [
        "5c26e430fbeaf56e3a5da4e3f167ff35fbb71ef9",
        "09ed09866da6d8c7448ef297c148bfa577a247c2"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Apr 01 12:28:51 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 01 12:28:51 2016 +0000"
      },
      "message": "Merge \"Pack stack map entries on bit level to save space.\""
    },
    {
      "commit": "c2ec9ad9a0008a95b29185e6a971244ef108c766",
      "tree": "ef12d3e20217c0e4473e42eba187cdf51582d9b2",
      "parents": [
        "afc4829d593c173e8e9bdca90257a4cc8a104537"
      ],
      "author": {
        "name": "donghui.bai",
        "email": "donghui.bai@linaro.org",
        "time": "Thu Mar 10 14:02:55 2016 +0800"
      },
      "committer": {
        "name": "donghui.bai",
        "email": "donghui.bai@linaro.org",
        "time": "Fri Apr 01 15:07:08 2016 +0800"
      },
      "message": "Implement ARM64 support for SystemArrayCopy()\n\nChange-Id: Iaaf6a9e8c1bea17fa9fde768869bcd4442ebc7d9\n"
    },
    {
      "commit": "09ed09866da6d8c7448ef297c148bfa577a247c2",
      "tree": "dad6a5dae6ca6131f1eba201eaa371edc6d9929d",
      "parents": [
        "e28ad4b91591c226ed404a2b01104bb99bfeb28f"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Feb 12 21:58:43 2016 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Mar 31 22:12:07 2016 +0100"
      },
      "message": "Pack stack map entries on bit level to save space.\n\nUse only the minimum number of bits required to store stack map data.\nFor example, if native_pc needs 5 bits and dex_pc needs 3 bits, they\nwill share the first byte of the stack map entry.\n\nThe header is changed to store bit offsets of the fields rather than\nbyte sizes. Offsets also make it easier to access later fields without\ncalculating sum of all previous sizes.\n\nAll of the header fields are byte sized or encoded as ULEB128 instead\nof the previous fixed size encoding. This shrinks it by about half.\n\nIt saves 3.6 MB from non-debuggable boot.oat (AOSP).\nIt saves 3.1 MB from debuggable boot.oat (AOSP).\n\nIt saves 2.8 MB (of 99.4 MB) from /system/framework/arm/ (GOOG).\nIt saves 1.0 MB (of 27.8 MB) from /system/framework/oat/arm/ (GOOG).\n\nField loads from stackmaps seem to get around 10% faster.\n(based on the time it takes to load all stackmap entries from boot.oat)\n\nBug: 27640410\nChange-Id: I8bf0996b4eb24300c1b0dfc6e9d99fe85d04a1b7\n"
    },
    {
      "commit": "b0170f0457f60b81dd232bb3fa505b22f10f324c",
      "tree": "b7297d1969458814ae5184cc62dc0a8eac437929",
      "parents": [
        "6656f30115c4a6a52ca01f46ca84df125179466a",
        "f355c3ff08710ac2eba3aac2aacc5e65caa06b4c"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Mar 31 10:39:52 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 31 10:39:53 2016 +0000"
      },
      "message": "Merge \"Fix Boolean to integral types conversions.\""
    },
    {
      "commit": "922b88cd4203482b66ea4bee28e9921717ad2e6a",
      "tree": "3a3e8b53b812608b1a9bf6ae8ed9583698f948ab",
      "parents": [
        "20eef176101924d5047895214bad4e73b8ae35ec",
        "4c858cd53e0efba9ee0c3e20d035900fcf14c145"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 31 10:00:41 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 31 10:00:41 2016 +0000"
      },
      "message": "Merge \"ART: Fix TypeConversion from long const to float on x86_64\""
    },
    {
      "commit": "4c858cd53e0efba9ee0c3e20d035900fcf14c145",
      "tree": "d82e352a151e15f2889b796e4d8fe93b3b99efee",
      "parents": [
        "085055f933d76579c32586488951a4497ffcf10e"
      ],
      "author": {
        "name": "Pavel Vyssotski",
        "email": "pavel.n.vyssotski@intel.com",
        "time": "Wed Mar 16 13:59:53 2016 +0600"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 31 10:44:47 2016 +0100"
      },
      "message": "ART: Fix TypeConversion from long const to float on x86_64\n\nLocationsBuilderX86_64::VisitTypeConversion should load 32-bit\nconstant for float type.\n\nChange-Id: I24335568af65e6b98bf07d36f90c8696497dd137\nSigned-off-by: Pavel Vyssotski \u003cpavel.n.vyssotski@intel.com\u003e\n"
    },
    {
      "commit": "20eef176101924d5047895214bad4e73b8ae35ec",
      "tree": "8cedf03a31a39914ed7787652dfb8a1aa31cbf77",
      "parents": [
        "13ce07a99ac84ec5819dbb1d872e3eebc087e355",
        "968056faf5c2cf118321871ebf234fe70db1c3c8"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 30 18:59:27 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 30 18:59:27 2016 +0000"
      },
      "message": "Merge \"Fix arm64 simplifier bug that tries to remove same statement twice. With fail-before/pass-after test (on arm64).\""
    },
    {
      "commit": "968056faf5c2cf118321871ebf234fe70db1c3c8",
      "tree": "2f7a6a13a80adfa2b552bf3e3f76919ac4c9ee0a",
      "parents": [
        "6f51d7756a9c66007fe7666b19399e1f60ff6092"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Mar 29 13:54:53 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Mar 30 11:10:45 2016 -0700"
      },
      "message": "Fix arm64 simplifier bug that tries to remove same statement twice.\nWith fail-before/pass-after test (on arm64).\n\nRationale:\nThis visitor removes statement \"forward\", which is a bit unusual, and\nexposes a bug if statement is revisited and qualifies for removal again.\n\nBUG\u003d27851582\n\nChange-Id: Ia8cddba32b4dfe9fd480852deb358eaa977f0e1f\n"
    }
  ],
  "next": "f355c3ff08710ac2eba3aac2aacc5e65caa06b4c"
}
