)]}'
{
  "log": [
    {
      "commit": "e7e123a581073d1cd1458e2b677c20f095b3cd40",
      "tree": "dfdeb9f9ffaced22a68d45ba8de997a683d96f06",
      "parents": [
        "6ef707212d72b93daf90d01b9fb2f89f5d35b3b0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 28 11:15:08 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 28 13:27:49 2021 +0000"
      },
      "message": "Fix checker tests after inlining change.\n\nThis fixes target tests broken by\n    https://android-review.googlesource.com/1843319 .\nIn one case we use the `$noinline$` tag to prevent inlining.\nIn the other one, we specify the field name to avoid newly\ninlined instructions from matching CHECK-NOT assertions.\n\nTest: testrunner.py --target --64 --optimizing \\\n      -t 450-checker-types -t 530-checker-lse\nBug: 154012332\nChange-Id: Ie82f425bfcaebba1c53877c223aeefcba213921e\n"
    },
    {
      "commit": "cf6a926f4041e5cb88fe70c701ce6aa043ae9df3",
      "tree": "005d37921c6dfa69a635461a8f3b22a2df1101e5",
      "parents": [
        "f513a7650e0bce9225e598b0fe4825b4ee1dc4cb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 17 07:58:04 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 17 09:29:38 2021 +0000"
      },
      "message": "Revert \"Restore partial LSE.\"\n\nThis reverts commit c2aa7a31fb825f51a9d1973fb877ee043cb0ff4c.\n\nBug: 197981962\nBug: 200168065\n\nReason for revert: b/200168065\n\nChange-Id: I3c28edfed2bc2d544891c30d070feb282993c79a\n"
    },
    {
      "commit": "c2aa7a31fb825f51a9d1973fb877ee043cb0ff4c",
      "tree": "e6da7b57b10b004571f749b26e47a974a8925b31",
      "parents": [
        "8214de1bb682b2d0fc4968943ecddd9415d6b75f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 15 14:14:17 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 16 13:32:11 2021 +0000"
      },
      "message": "Restore partial LSE.\n\nThis fixes a bug where we were using the wrong value for initializing an\nallocation that we moved. See this test:\nhttps://android-review.googlesource.com/c/platform/art/+/1825138/4/test/828-partial-lse/src/Main.java\n\nRun LSE twice: one for the classical load store eliminiation, one for\nmoving allocations.\n\nTest: test.py\nBug: 197981962\nChange-Id: If317e10e239488876180047040dba66ae3fc8d4c\n"
    },
    {
      "commit": "18074d2b59ae56dcfccea770ceb515215c8eb53f",
      "tree": "e4c1c7d71254cfddd9420408bb7456504b1c5968",
      "parents": [
        "92e5d840ce0c3727a515eba1ed505dfe6770b1a9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 13 14:07:10 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 13 16:11:26 2021 +0000"
      },
      "message": "Temporarily disable partial LSE.\n\nDue to a bug in it. Add a regression test.\n\nBug: 197818595\nTest: 828-partial-lse\nChange-Id: I65da4f7ef09cd2a1f6c4b21799ecd7a42c1adac2\n"
    },
    {
      "commit": "dac82393785d1d2fddae6bf6d8364b55b001925a",
      "tree": "2870783966316c965d40c3a6cd4b2cadce632c79",
      "parents": [
        "b1db5a110d312c5a51a52f7f6bc870f9205b6ff8"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 10 15:44:24 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 13 08:49:06 2021 +0000"
      },
      "message": "Fix array location aliasing checks in LSE.\n\nTest: New tests in load_store_elimination_test.\nTest: New test in 539-checker-lse.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 187487955\nChange-Id: Iff66d5406cf1b36c3bebbce1d48117f83bb50553\n"
    },
    {
      "commit": "2558abeb7acd49b7de357ca43b0c34354c20a3a0",
      "tree": "dad63d4e0153765d2edd155ac2c78473a40b4a77",
      "parents": [
        "60e29745625405654fb968ba2572ebddd8a0211d"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Wed Oct 14 18:01:37 2020 +0100"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Thu Feb 11 15:44:16 2021 +0000"
      },
      "message": "ARM64: Adjust SIMD checker tests for SVE.\n\nAdds SVE-specific checker line for SIMD tests\nusing isaHasFeature() function.\n\nTest: test-art-target with Neon.\nTest: art tests on FVP (steps in test/README.arm_fvp.md)\n      with FVP arg:\n      -C SVE.ScalableVectorExtension.veclen\u003d[2,4]\n      (SVE vector [128,256] bits wide)\n\nChange-Id: I8f2134861b47437823797da48a3ffb680bafc544\n"
    },
    {
      "commit": "3a73ffb70151dbc99fa41f300a237f8c29783e0e",
      "tree": "8debef1b372e5bea27d5265a9019446229955e3d",
      "parents": [
        "e585964df42e9fd2fab6f209810cb03e1b261ab1"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jan 25 14:11:05 2021 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jan 25 07:01:32 2021 -0800"
      },
      "message": "Revert^4 \"Partial Load Store Elimination\"\n\nThis reverts commit 791df7a161ecfa28eb69862a4bc285282463b960.\nThis unreverts commit fc1ce4e8be0d977e3d41699f5ec746d68f63c024.\nThis unreverts commit b8686ce4c93eba7192ed7ef89e7ffd9f3aa6cd07.\n\nWe incorrectly failed to include PredicatedInstanceFieldGet in a few\nconditions, including a DCHECK. This caused tests to fail under the\nread-barrier-table-lookup configuration.\n\nReason for revert: Fixed 2 incorrect checks\n\nBug: 67037140\nTest: ./art/test/testrunner/run_build_test_target.py -j70 art-gtest-read-barrier-table-lookup\n\nChange-Id: I32b01b29fb32077fb5074e7c77a0226bd1fcaab4\n"
    },
    {
      "commit": "791df7a161ecfa28eb69862a4bc285282463b960",
      "tree": "a43b022307ea2df82a360164bdf2627cd07eb5b1",
      "parents": [
        "805769bb3800c1e47b0a76ce2c5ebb270a4ac69d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 13:28:56 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Jan 24 17:18:55 2021 +0000"
      },
      "message": "Revert \"Revert^2 \"Partial Load Store Elimination\"\"\n\nThis reverts commit fc1ce4e8be0d977e3d41699f5ec746d68f63c024.\n\nBug: 67037140\n\nReason for revert: Fails read-barrier-table-lookup tests.\n\nChange-Id: I373867c728789bc14a4370b93a045481167d5f76\n"
    },
    {
      "commit": "fc1ce4e8be0d977e3d41699f5ec746d68f63c024",
      "tree": "b656aa7c9e62aa181dfbf7fd4f2a0d32b8bf0704",
      "parents": [
        "c6da1be58086e873c9695f8c4c1a3a8ca718696e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 22 14:05:13 2021 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 22 07:15:51 2021 -0800"
      },
      "message": "Revert^2 \"Partial Load Store Elimination\"\n\nThis reverts commit 47ac53100303e7e864b7f6d65f17b23088ccf1d6.\n\nThere was a bug in LSE where we would incorrectly record the\nshadow$_monitor_ field as not having a default initial value. This\ncaused partial LSE to be unable to compile the Object.identityHashCode\nfunction, causing crashes. This issue was fixed in a parent CL. Also\nupdated all Offsets in LSE_test to be outside of the object header\nregardless of configuration.\n\nTest: ./test.py --host\nBug: 67037140\n\nReason for revert: Fixed issue with shadow$_monitor_ field and offsets\n\nChange-Id: I4fb2afff4d410da818db38ed833927dfc0f6be33\n"
    },
    {
      "commit": "47ac53100303e7e864b7f6d65f17b23088ccf1d6",
      "tree": "95730c6ba84ef0eebca6236428c8ba51c5eaf280",
      "parents": [
        "51d771db35cc0647bc1fd2a32ed6348d181a7a41"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 08:41:08 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 08:41:39 2021 +0000"
      },
      "message": "Revert \"Partial Load Store Elimination\"\n\nThis reverts commit b8686ce4c93eba7192ed7ef89e7ffd9f3aa6cd07.\n\nBug: 67037140\n\nReason for revert: Fails a few tests.\n\nChange-Id: Icf0635bffbfbba93bf0a5b854a9582c418198136\n"
    },
    {
      "commit": "b8686ce4c93eba7192ed7ef89e7ffd9f3aa6cd07",
      "tree": "1721ee940f978736a2212d693271ee698897cb0b",
      "parents": [
        "625048049558d394d50b6e98885b8c210e481bf1"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 02 08:48:33 2020 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 21 17:58:10 2021 +0000"
      },
      "message": "Partial Load Store Elimination\n\nAdd partial load-store elimination to the LSE pass. Partial LSE will\nmove object allocations which only escape along certain execution\npaths closer to the escape point and allow more values to be\neliminated. It does this by creating new predicated load and store\ninstructions that are used when an object has only escaped some of the\ntime. In cases where the object has not escaped a default value will\nbe used.\n\nTest: ./test.py --host\nTest: ./test.py --target\nBug: 67037140\n\nChange-Id: Idde67eb59ec90de79747cde17b552eec05b58497\n"
    },
    {
      "commit": "86fe9b85c5243debe5f695c1625bae03bf738452",
      "tree": "5de78b8292a0225b617e1825817cbd12b46b6fa3",
      "parents": [
        "cc9df4fa1e666b90c5dd8eac94773763f8421f1e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 16 16:54:01 2020 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 18 20:26:53 2020 +0000"
      },
      "message": "Revert^4 \"Partial LSE analysis \u0026 store removal\"\n\nWe incorrectly handled merging unknowns in some situations.\nSpecifically in cases where we are unable to materialize loop-phis we\ncould end up with PureUnknowns which could end up hiding stores that\nneed to be kept.\n\nIn an unrelated issue we were incorrectly considering some values as\nescapes when live at the point of an invoke. Since\nSearchPhiPlaceholdersForKeptStores used a more precise notion of\nescapes we could end up removing stores without being able to replace\nthe values.\n\nThis reverts commit 2316b3a0779f3721a78681f5c70ed6624ecaebef.\nThis unreverts commit b6837f0350ff66c13582b0e94178dd5ca283ff0a\nThis reverts commit fe270426c8a2a69a8f669339e83b86fbf40e25a1.\nThis unreverts commit bb6cda60e4418c0ab557ea4090e046bed8206763.\n\nBug: 67037140\nBug: 173120044\n\nReason for revert: Fixed issue causing incorrect store elimination\nTest: ./test.py --host\nTest: Boot cuttlefish\n      atest FrameworksServicesTests:com.android.server.job.BackgroundRestrictionsTest#testPowerWhiteList\n\nChange-Id: I2ebae9ccfaf5169d551c5019b547589d0fce1dc9\n"
    },
    {
      "commit": "2316b3a0779f3721a78681f5c70ed6624ecaebef",
      "tree": "8aa4682729b839a97b2578e6cbe05ee5d35be923",
      "parents": [
        "aeb7f9f8fe718219cfb04e0da5df62683250477d"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Sat Nov 14 01:28:22 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Nov 14 02:54:26 2020 +0000"
      },
      "message": "Revert^3 \"Partial LSE analysis \u0026 store removal\"\n\nThis reverts commit b6837f0350ff66c13582b0e94178dd5ca283ff0a\nThis unreverts commit fe270426c8a2a69a8f669339e83b86fbf40e25a1.\nThis rereverts commit bb6cda60e4418c0ab557ea4090e046bed8206763.\n\nBug: 67037140\nBug: 173120044\n\nReason for revert: Git-blame seems to point to the CL as cause of\nb/173120044. Revert during investigation.\n\nChange-Id: I46f557ce79c15f07f4e77aacded1926b192754c3\n"
    },
    {
      "commit": "b6837f0350ff66c13582b0e94178dd5ca283ff0a",
      "tree": "f79fff81352545efe967850e3d17e32255dcfecd",
      "parents": [
        "32c2eb81320f24b5bab24754204b8be95faa08b0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 12 17:05:28 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 13 10:07:21 2020 +0000"
      },
      "message": "Revert^2 \"Partial LSE analysis \u0026 store removal\"\n\nA ScopedArenaAllocator in a single test was accidentally loaded using\noperator new which is not supported. This caused a memory leak.\n\nThis reverts commit fe270426c8a2a69a8f669339e83b86fbf40e25a1.\nThis unreverts commit bb6cda60e4418c0ab557ea4090e046bed8206763.\n\nBug: 67037140\n\nReason for revert: Fixed memory leak in\nLoadStoreAnalysisTest.PartialEscape test case\n\nTest: SANITIZE_HOST\u003daddress ASAN_OPTIONS\u003ddetect_leaks\u003d0 m test-art-host-gtest-dependencies\n      Run art_compiler_tests\n\nChange-Id: I34fa2079df946ae54b8c91fa771a44d56438a719\n"
    },
    {
      "commit": "fe270426c8a2a69a8f669339e83b86fbf40e25a1",
      "tree": "c048fdec8e37cefb7238218a087709c01d5d3923",
      "parents": [
        "e17530a19a717879c8dd8e70073de6aaf4ee455f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 12 14:12:52 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 12 16:33:50 2020 +0000"
      },
      "message": "Revert \"Partial LSE analysis \u0026 store removal\"\n\nThis reverts commit bb6cda60e4418c0ab557ea4090e046bed8206763.\n\nBug: 67037140\n\nReason for revert: memory leak detected in the test.\n\nChange-Id: I81cc2f61494e96964d8be40389eddcd7c66c9266\n"
    },
    {
      "commit": "bb6cda60e4418c0ab557ea4090e046bed8206763",
      "tree": "f6b94510108cb653a80e0ea14d50ad6616c9f44a",
      "parents": [
        "670ff8854cf075617e0abee77b2259903757d86e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 09 13:24:56 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 12 02:08:44 2020 +0000"
      },
      "message": "Partial LSE analysis \u0026 store removal\n\nThis is the first piece of partial LSE for art. This CL adds analysis\ntools needed to implement partial LSE. More immediately, it improves\nLSE so that it will remove stores that are provably non-observable\nbased on the location they occur. For example:\n\n```\nFoo o \u003d new Foo();\nif (xyz) {\n  check(foo);\n  foo.x++;\n} else {\n  foo.x \u003d 12;\n}\nreturn foo.x;\n```\n\nThe store of 12 can be removed because the only escape in this method\nis unreachable and was not executed by the point we reach the store.\n\nThe main purpose of this CL is to add the analysis tools needed to\nimplement partial Load-Store elimination. Namely it includes tracking\nof which blocks are escaping and the groups of blocks that we cannot\nremove allocations from.\n\nThe actual impact of this change is incredibly minor, being triggered\nonly once in a AOSP code. go/lem shows only minor effects to\ncompile-time and no effect on the compiled code. See\ngo/lem-allight-partial-lse-2 for numbers. Compile time shows an\naverage of 1.4% regression (max regression is 7% with 0.2 noise).\n\nThis CL adds a new \u0027reachability\u0027 concept to the HGraph. If this has\nbeen calculated it allows one to quickly query whether there is any\nexecution path containing two blocks in a given order. This is used to\ndefine a notion of sections of graph from which the escape of some\nallocation is inevitable.\n\nTest: art_compiler_tests\nTest: treehugger\nBug: 67037140\nChange-Id: I0edc8d6b73f7dd329cb1ea7923080a0abe913ea6\n"
    },
    {
      "commit": "0571d479f52781df0b4d94caaf704631122ba6e6",
      "tree": "4d2ec8b223d592074bc380cd6dc40ddc063ecad9",
      "parents": [
        "5437e6fa3c5a1865e4146356d05e0a48764a5e3b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 22 10:14:39 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 24 10:08:56 2020 +0000"
      },
      "message": "LSE: Better elimination of array stores.\n\nThis replaces the workaround from\n    https://android-review.googlesource.com/1427546\nwith a proper fix that precisely tracks the needed stores.\n\nAlso fix spelling of Floyd-Warshall.\n\nTest: Additional tests in 530-checker-lse\nTest: testrunner.py --host --optimizing --interpreter --jvm -t 530\nTest: testrunner.py --host --optimizing\nBug: 168446366\nBug: 77906240\nChange-Id: I0cd7acb600ed210ac09d0006b28f045758c2c3ec\n"
    },
    {
      "commit": "9dec90a069386a5e538f5cfb9ff7ef789bdbafdb",
      "tree": "61db592006bf40f0a120efeb3ecf0aca5820b898",
      "parents": [
        "77cba3cc758ac6141abbf1297de8bd2df7083bbd"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 14 17:58:28 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 16 21:28:50 2020 +0000"
      },
      "message": "Fix LSE-array overlap issue\n\nIn cases where an array has overlapping accesses on separate\niterations LSE could get confused and incorrectly believe removing\narray stores is safe even when later iterations rely on the store\noccurring. For example consider the following code:\n\n```\nint do_cal(int len) {\n  if (len \u003c 5) {\n    return -1;\n  }\n  int w[] \u003d new w[len];\n  int t \u003d 0;\n  for (int i \u003d 5; i \u003c w.length; i++) {\n    w[i] \u003d please_interleave(w[i - 1], w[i - 5]);\n    t \u003d please_select(w[i], i);\n  }\n  return t;\n}\n```\n\nWe would either need to materialize 5 PHIs to hold the values\n`w[i - 1], ..., w[i - 5]` or avoid removing the write to `w[i]`. Our\nLSE pass is unable to do the former and would (incorrectly) fail to\nrecognize that, by not being able to determine the values of `w[i -\n1]` and `w[i-5]` that the later store to `w[i]` must be preserved.\n\nBug: 168446366\nTest: ./test.py --host\nChange-Id: I89772c8bf49ebf6de70f86bd68484e14bd189406\n"
    },
    {
      "commit": "cbeedc8a0258dfa774363adef936f9e7a09674e0",
      "tree": "5f65e0c4b6e46c86e95266ac0817dda2a58a8c82",
      "parents": [
        "2cee2131f1f08c8004447cdf17be3940a9ecca64"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 25 14:31:10 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 25 15:04:54 2020 +0000"
      },
      "message": "LSE: Fix tracking stores for merged default values.\n\nTest: Additional test in 530-checker-lse.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 166246377\nBug: 77906240\nChange-Id: Ia31099fdfcdf416cb35c9baac6e7c13572e81eb7\n"
    },
    {
      "commit": "3224f38567100e62f9cdf8258f4b308f6bc671e1",
      "tree": "a493903b987d8cc5be7cfa4b48a732bf2f9295be",
      "parents": [
        "3e8caebc5fe05c02d05b5e315d6d8945fd509a26"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 23 14:19:53 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 21 09:12:16 2020 +0000"
      },
      "message": "Improved LSE: Replacing loads with Phis.\n\nCreate \"Phi placeholders\" for tracking heap values that can\nmerge from different values and try to match existing Phis\nor create new Phis to replace loads. For Phi placeholders\nfrom loop headers we do not know whether they are fed by\nunknown values through back-edges when processing the loop\nheader, so we delay processing loads that depend on them\nuntil we walked the entire graph. We then try to match them\nwith existing instructions (when the location is unchanged\nin the loop) or Phis or create new Phis if needed. If we\nfind a loop Phi placeholder fed with unknown value from a\nback-edge, we mark the Phi placeholder unreplaceable and\nreprocess loads and stores to propagate the unknown value.\nThis can sometimes allow other loads to be replaced. At the\nend we re-calculate the heap values to find stores that can\nbe eliminated because they write over the same value.\n\nGolem results:\n  art-opt-cc           arm  arm64    x86 x86-64\n  CaffeineFloat      +6.7%  +3.0%  +5.9%  +3.8%\n  KotlinMicroWhen   +33.7%  +4.8%  +1.8%  +0.6%\n  art-opt (more noisy than art-opt-cc)\n  CaffeineFloat      +4.1%  +4.4%  +7.8% +10.5%\n  KotlinMicroWhen   +33.6%  +2.0%  +1.8%  +1.8%\nThe MoveLiteralColumn benchmark seems to gain significantly\n(up to 22% on art-opt-cc but under 10% on art-opt) but it is\nvery noisy and the results are therefore unreliable.\n\nInsignificant code size changes for aosp_blueline-userdebug:\n  - before:\n    arm boot*.oat: 15303468\n    arm64 boot*.oat: 18184736\n    services.odex: 25195944\n    grep -c pAllocObject boot.arm64.oatdump.txt: 27213\n    grep -c pAllocArray boot.arm64.oatdump.txt: 3620\n  - after:\n    arm boot*.oat: 15299524 (-4KiB, -0.03%)\n    arm64 boot*.oat: 18176528 (-8KiB, -0.05%)\n    services.odex: 25191832 (-4KiB, -0.02%)\n    grep -c pAllocObject boot.arm64.oatdump.txt: 27206 (-7)\n    grep -c pAllocArray boot.arm64.oatdump.txt: 3615 (-5)\n\nTest: New tests in 530-checker-lse.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: blueline-userdebug boots.\nBug: 77906240\nChange-Id: Ia9fe0cd3530f9d3941650dfefc00a7f7fd821994\n"
    },
    {
      "commit": "4307cd77319dd88eb65e88e5b4763250eff9c543",
      "tree": "bec7345debfa105c1dd0e8c161eaf89281eb4d53",
      "parents": [
        "76228ffa13c3101c1a74cc561c171c4064593796"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 17 14:35:56 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 20 08:21:11 2020 +0000"
      },
      "message": "LSE: Fix tracking heap values for small types.\n\nWe previously inserted TypeConversion to 8-bit and 16-bit\ntypes only when replacing loads at the end of LSE. This is\ninsufficient as it allowed incorrect merging of values that\nhad different type. We now insert the TypeConversion when we\ndesignate a load for replacement and therefore when a value\nretrieved by such load is stored in another heap location,\nwe record the substitute TypeConversion as the heap value.\n\nThis replaces the insufficient fix from\n    https://android-review.googlesource.com/538635 .\n\nTest: New tests in 530-checker-lse and 530-checker-lse3.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 161521389\nChange-Id: I7c41931126455411d25f0d675857f104700a15af\n"
    },
    {
      "commit": "fab6f1c479f6053a0c1eaaa889e0ff067d596211",
      "tree": "14d18defe0ae9ab78a52f19b74d1532ac2a29391",
      "parents": [
        "d2c30c33ed4d6ba33efa1be1813449621d43deb4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 14 16:25:05 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 15 08:04:01 2020 +0000"
      },
      "message": "Fix incorrect LSE across throwing ArraySet.\n\nTest: Additional test in 530-checker-lse.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 161233339\nChange-Id: I0aaa6a4a1060e1a5abdbb49b6241e7e0bf58a7d5\n"
    },
    {
      "commit": "b122cd67c50837e66ab60310f9f417232afc72fc",
      "tree": "b70743eaf31a6f0059bd15f48c30815e8d80bb4d",
      "parents": [
        "9974e3cdc1564edc3143b90d7bb2a416f1f887e7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 11 09:15:21 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 11 12:57:02 2020 +0000"
      },
      "message": "Revert \"ART-tests: Remove DX-dependency from 530-checker-lse\"\n\nThis reverts commit 4b9bac7ee87d9c41ce3d129ff0db42f602c98259.\n\nReason for revert: Move test back to Java to enable RI testing.\nAdjust CHECK statements and do not print the AIOOBE message as\nit differs on RI.\n\nTest: testrunner.py --host --optimizing --jvm -t 530-checker-lse\nBug: 65168732\nBug: 73888836\nChange-Id: I033d832b8536abacc8d66f90708c8bfee3834f15\n"
    },
    {
      "commit": "faada5ed094a4d357882e6a4a372266c49d0b700",
      "tree": "d69918c7aa2c86d3fd5b08f2d998100359624ff4",
      "parents": [
        "638c28f22c42826fff80208d2b4c436209f2652c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 10 10:38:40 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 10 12:57:22 2020 +0000"
      },
      "message": "Revert \"Move a 530-checker-lse test from java to smali\"\n\nThis reverts commit ab86413a9b5fab9eb7d3967d30277b2e7b580e9a.\nAlso reverts commit dabd5639e3b65f8e96e4aafe004f1c0ccae3c5c3.\n\nReason for revert: Move test back to Java to enable RI testing.\nMake the checker assertions more robust by using CHECK-DAG\nand checking for excessive instructions in separate blocks.\n\nTest: testrunner.py --host --optimizing --jvm -t 530-checker-lse\nBug: 65168732\nBug: 73888836\nChange-Id: I3767c3515e910e7e7e50e62e5b536f2976721236\n"
    },
    {
      "commit": "ab86413a9b5fab9eb7d3967d30277b2e7b580e9a",
      "tree": "aec564fbeda491eb02360ab65335d26dd924a8e5",
      "parents": [
        "0e4563c4ccd3a36dff11c33fc98aa9cedae722e4"
      ],
      "author": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Wed Jul 04 15:45:13 2018 +0200"
      },
      "committer": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Wed Jul 04 15:45:13 2018 +0200"
      },
      "message": "Move a 530-checker-lse test from java to smali\n\nThe test expectations was updated in\nhttps://android-review.googlesource.com/c/platform/art/+/707705 due\nto D8 also performing the same optimization.\n\nMoved the test to smali to be independent of the dexer output, and reverted\nthe test expectations to test this optimization on Art again.\n\nTest: art/test/testrunner/testrunner.py -b --host -t 530-checker-lse\nChange-Id: I8c8a37ea08adb44ea9e00284cce43d93a768e7bf\n"
    },
    {
      "commit": "dabd5639e3b65f8e96e4aafe004f1c0ccae3c5c3",
      "tree": "bb1aeb61432133ddb05308e0ded4ab7472ac10c2",
      "parents": [
        "b1775a8bc48bc1b3d90c34a509285c02e56548da"
      ],
      "author": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Wed Jun 20 17:40:14 2018 +0200"
      },
      "committer": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Wed Jun 20 17:40:14 2018 +0200"
      },
      "message": "Update test expectations for 530-checker-lse\n\nWith D8 version 1.3.1-dev the optimization \"Eliminate redundant field loads.\"\n(https://r8-review.googlesource.com/c/r8/+/22160) removes an instruction in\none of the methods in the test 530-checker-lse.\n\nThe dex code for\n\n  static int test10(TestClass obj) {\n    TestClass.si +\u003d obj.i;\n    return obj.i;\n  }\n\nwill only have one instance field get instruction generated.\n\nTest: art/test/testrunner/testrunner.py -b --host -t 530-checker-lse\nChange-Id: Id238d53b7cbcc2667a842ff7a6393ba92e702b72\n"
    },
    {
      "commit": "4b9bac7ee87d9c41ce3d129ff0db42f602c98259",
      "tree": "e34165c0dcbe5d98f4d317002771128b52676ecf",
      "parents": [
        "08f1973a345d78a9336b7ce2bf1df82f1c2515db"
      ],
      "author": {
        "name": "Tamas Kenez",
        "email": "tamaskenez@google.com",
        "time": "Thu May 31 15:54:18 2018 +0200"
      },
      "committer": {
        "name": "Tamas Kenez",
        "email": "tamaskenez@google.com",
        "time": "Thu May 31 16:01:43 2018 +0200"
      },
      "message": "ART-tests: Remove DX-dependency from 530-checker-lse\n\nThe test relied on DX-specific code patterns and was failing with D8.\nThis CL moves the compiler-sensitive test cases to smali code and enables\nD8.\n\nTest: art/test.py --host -r -b -t 530-checker-lse\ntested with --target and --gcstress locally.\n\nBug: 65168732\nChange-Id: I1d5ef4545456a6b5c6bae6954dba76766fa2a5db\n"
    },
    {
      "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": "7cf9af2ce0bb72c5bd2ff7c5bd82df5c05877355",
      "tree": "7cd74d68e4a43e1e82bcf3ca49017db5a0a39fa6",
      "parents": [
        "8bcecf915545581bf23b5348cd94d3f5ec6eb669"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Feb 06 15:02:42 2018 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Feb 07 10:33:41 2018 -0800"
      },
      "message": "Do not eliminate array allocation if it may throw NegativeArraySizeException\n\nBug: 70023972\nTest: run-test on host. 530-checker-lse.\nChange-Id: I00e2d69f82b3dda21559ffcba827e0a52d900ff1\n"
    },
    {
      "commit": "a354053541f478ff4f6dcba4dc7cc236e1718aaa",
      "tree": "1b07fd636ab53d692a7bbe1a76e8edc340a159df",
      "parents": [
        "e65948f7c78919083224c1cd2ca47e827ced6d3e"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Jan 25 12:17:28 2018 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Feb 02 15:29:07 2018 -0800"
      },
      "message": "Revert \"Revert \"More general store elimination\"\"\n\nThis reverts commit e97949e878bb364adadc167ac158ffc9660ce996.\n\nA store before an invocation that only has write side effects\n(true for some intrinsics) needs to be kept since the store isn\u0027t used\nto track the heap value anymore.\n\nTest: ART_TEST_OPTIMIZING\u003dtrue ./test.py -j20 --host --run-test -b\nTest: using the device (marlin) with the CL.\n\nBug: 35745320\nBug: 72440777\n\nChange-Id: I0d1ce499008553e48ecca50f9ad94bb7c8c07583\n"
    },
    {
      "commit": "e97949e878bb364adadc167ac158ffc9660ce996",
      "tree": "22af74ac7c6017d0333a50ebaa504a4b0488c92e",
      "parents": [
        "aec4e73779e5034b6f84032a1649023c1333bad2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 10:42:01 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 10:42:01 2018 +0000"
      },
      "message": "Revert \"More general store elimination\"\n\nbug: 35745320\n\nGot a few failures:\nbug: 72440777\nbug: 72480435\n\nThis reverts commit aec4e73779e5034b6f84032a1649023c1333bad2.\n\nChange-Id: I32f0a80a590c4558bf252c2d426ee2e78a2296b7\n"
    },
    {
      "commit": "aec4e73779e5034b6f84032a1649023c1333bad2",
      "tree": "9f3e9546ff6cd28a56367c321fa48d1d76487066",
      "parents": [
        "7c6137448f21e48d8a6dc917393b32930096223e"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Jan 08 13:11:35 2018 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Jan 17 14:32:34 2018 -0800"
      },
      "message": "More general store elimination\n\nExpand store elimination to non-singleton instance fields and static\nfields. See the added comments in load_store_elimination.cc for more\ndetails on how LSE works now.\n\nBug: 35745320\nTest: ART_TEST_OPTIMIZING\u003dtrue ./test.py -j20 --host --run-test -b\nTest: using the device (marlin) with the CL.\n\nChange-Id: I66ac4eacea593c3ee843ed5e26cdcfe2135947f6\n"
    },
    {
      "commit": "206070c99219584d9b873a8a17aad3a213128575",
      "tree": "85537591c9d3345ccd978cd017a93c2adb0adafe",
      "parents": [
        "45d3efbc433e321d0fdb3de54b01cf056c3d85ba"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 29 23:01:58 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Sun Dec 03 23:14:53 2017 -0800"
      },
      "message": "Enhance removed loads/substitutes in LSE.\n\nLSE does load removal in the end in order to maintain the validity of\nall the heap locations collected in the first pass. We should however\nproactively retrieve a removed load\u0027s substitute as its value. This\nsimplifies the handling of substitutes by making sure the substitute\nitself has no substitute. It also enables some additional optimizations\nby using the true heap value for merging/same-value test, etc.\n\nTest: run-test on host.\nChange-Id: I26d97e7794d80a141ab02bf446dd07656f5cde1d\n"
    },
    {
      "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": "2202d56061941b4fecbdb018d84bcefb05b6c683",
      "tree": "b6773b2bc1f7e34b7651c547a1a40a53ba8c56ef",
      "parents": [
        "66946a2cbf55d36fa7b9232a8a381a19f65b2fcb",
        "293f1c006cc283345630ea38266f3ee38b624d5d"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 09 18:55:25 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 09 18:55:25 2017 +0000"
      },
      "message": "Merge \"Check invocation\u0027s side effects for LSE.\""
    },
    {
      "commit": "293f1c006cc283345630ea38266f3ee38b624d5d",
      "tree": "9560d72041ab5dfad71aa38030529997bc528bdc",
      "parents": [
        "3b5df92d613bb72c8e6f8a766c60835d8313414f"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 08 15:22:17 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 08 15:26:15 2017 -0800"
      },
      "message": "Check invocation\u0027s side effects for LSE.\n\nMore optimization is allowed if an invocation doesn\u0027t do read/write.\n\nTest: run-test on host.\nChange-Id: Id80e2fa90b8c843afd852778e8f7e6c69c765ad5\n"
    },
    {
      "commit": "025c1a69ea548f1477d160bd477364336109078a",
      "tree": "3ad583c8b8ecc76b800b8da6adb70480b29cb865",
      "parents": [
        "3b5df92d613bb72c8e6f8a766c60835d8313414f"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Oct 30 11:19:57 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 08 10:53:10 2017 -0800"
      },
      "message": "Simplify handling of finalizable in LSE.\n\nFinalizable is treated as being returned which simplifies its handling.\n\nTest: run-test on host, 530-checker-lse contains tests on finalizable.\nChange-Id: I492470e4d2ba88865029675c51cf10325af47057\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": "eb2d2d346e9506e5fe2c8e1e72a146821192b973",
      "tree": "3c7b7f1cac227248aaf9ac313825a6a71ae4c66e",
      "parents": [
        "caa348cee1312150a957bd308ce77ad406f3eb64"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Mar 02 13:26:17 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Mar 08 12:56:41 2017 -0800"
      },
      "message": "Allow store elimination for singleton that\u0027s returned\n\nAllow store elimination for singleton that\u0027s visible after method return\nor deoptimization. Add additional detection for keeping stores for such\nsingletons at block merge/deoptimization point.\n\nBug: 35745320\nTest: m test-art-host\nChange-Id: I8a75a304491dafaeb689787402afa3d7468e3789\n"
    },
    {
      "commit": "86974900268b1d903d74b39a32746d60c77d21f3",
      "tree": "de0ef3b3499611fa07a6989462ed60400c15a588",
      "parents": [
        "b2a6d1218c527a685c421984292c47d241cf4a11"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Mar 01 14:03:51 2017 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Mar 06 10:22:17 2017 -0800"
      },
      "message": "Array store/allocation elimination\n\nAllow array store/allocation elimination if it\u0027s only accessed\nby constant index, so that there is no index-aliasing.\n\nBug: 35634932\nTest: m -j20 test-art-host-run-test\nChange-Id: Ief6e27f5bdbb30988ff4f318a34b4251c93865fa\n"
    },
    {
      "commit": "e58bdcace75affd0b01f9b68ee2347e507a4a1af",
      "tree": "7380ed2e254fa5f1bb5c15538f5ed489fa6f0d94",
      "parents": [
        "6f1b65d3b1f5037620f3d52cb703d20baf6e49dc"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Oct 28 11:07:24 2016 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Nov 04 15:33:02 2016 -0700"
      },
      "message": "Allow HDeoptimize to co-exist with LSE.\n\nThe env use of HDeoptimize counts as escaping at the end of\nexecuting the compiled code for a singleton, just like a return.\nSo store elimination won\u0027t happen for that singleton\u0027s locations.\n\nTest: make test-art-host\nBug: 31716107\n\nChange-Id: I09838e80586d279714c676a2f7294ae518f61457\n"
    },
    {
      "commit": "58d9bfce4a305f4c59f2a1b466b7b8386da6b353",
      "tree": "a79996a163a2bc464196cb343f8700da14d45425",
      "parents": [
        "fedec90ec52a05167d7f4e7a8aee630750ab1955"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Nov 01 13:31:58 2016 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 02 12:12:25 2016 -0700"
      },
      "message": "More store/allocation elimination.\n\nWhen merging values of an unreturned singleton\u0027s location,\ndo more analysis on the singleton\u0027s liveness since the singleton\nmay not be live in some of the predecessors. And only those\npredecessors where the singleton is live should participate in\nmerging the value of the location.\n\nTest: make test-art-host\nBug: 31716107\n\nChange-Id: I1bf61a84d3473646eb38fd9924bbb063cf664f7f\n"
    },
    {
      "commit": "0a845200354f5dc3a3344c35823d2614cd5850ef",
      "tree": "1c0d779c5b90f58e7088773434cc35d7eff6ab39",
      "parents": [
        "c25dfeab1a66c942ae658fc7cd367f7c1ac502a1"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Oct 14 16:26:08 2016 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Oct 17 12:20:08 2016 -0700"
      },
      "message": "More store/allocation elimination for singletons in case of loops\n\nFor a store into a singleton\u0027s location, if it happens inside a loop, it\nmeans the singleton\u0027s location value may be killed by loop side effects.\nHowever if the singleton is defined inside that loop, that loop should\nbe skipped since its loop side effects kill values at loop header where\nthe singleton\u0027s location doesn\u0027t exist yet.\n\nTest: test-art-host\n\nBug: 31716107\nChange-Id: Iae2494ea93295977f90d1463ee136a7e2e09ba9b\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": "40bcb9356f951af2db4b9b671511841eedf59427",
      "tree": "0d46c2a097fe925cedc8e6eb72d3ccd5997399cf",
      "parents": [
        "009a195c5507ddc799cf7a52927b0ac02aa7f7e6"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Feb 03 05:46:57 2016 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Feb 08 22:59:13 2016 -0800"
      },
      "message": "Some clean-up for the handling of HSelect in LSE\n\nUse $noinline and throwing an Exception for doing no-inlining in\nthe test.\nAlso create reference info early for HSelect if it has reference\ntype, which may help the pre-existence-based alias analysis.\n\nChange-Id: Ia825058a457b049f87a13087bb78f5233513e0a8\n"
    },
    {
      "commit": "e5c71f98cb74943157d22f7cf408847156eae402",
      "tree": "995beca986d038ac499e07fad59b94a362083216",
      "parents": [
        "88df4892c8b48de3019fd48c2ea2f49cf8eed098"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Feb 02 20:10:32 2016 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Feb 02 20:53:21 2016 -0800"
      },
      "message": "Handle HSelect in LSE.\n\nHSelect essentially creates an alias which breaks the singleton\nassumption. Need to handle the case in singleton detection.\n\nBug: 26922558\nChange-Id: I259deefe16e1e16c08179a10369cfe5ae23ae155\n"
    },
    {
      "commit": "74eb1b264691c4eb399d0858015a7fc13c476ac6",
      "tree": "0b6fc4f3003d50bf6c388601013cdfc606e53859",
      "parents": [
        "75fd2a8ab9b4aff59308034da26eb4986d10fa9e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 11:44:01 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 28 15:50:27 2016 +0000"
      },
      "message": "ART: Implement HSelect\n\nThis patch adds a new HIR instruction to Optimizing. HSelect returns\none of two inputs based on the outcome of a condition.\n\nThis is only initial implementation which:\n - defines the new instruction,\n - repurposes BooleanSimplifier to emit it,\n - extends InstructionSimplifier to statically resolve it,\n - updates existing code and tests accordingly.\n\nCode generators currently emit fallback if/then/else code and will be\nupdated in follow-up CLs to use platform-specific conditional moves\nwhen possible.\n\nChange-Id: Ib61b17146487ebe6b55350c2b589f0b971dcaaee\n"
    },
    {
      "commit": "4833f5a1990c76bc2be89504225fb13cca22bedf",
      "tree": "8e096f222368f30bf821b154bc78bac12d5cd2e5",
      "parents": [
        "bb41b250153308ef51664d7a6cc26c6a2e588fb7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Dec 16 10:37:39 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Dec 31 09:58:33 2015 +0000"
      },
      "message": "ART: Refactor SsaBuilder for more precise typing info\n\nThis reverts commit 68289a531484d26214e09f1eadd9833531a3bc3c.\n\nNow uses Primitive::Is64BitType instead of Primitive::ComponentSize\nbecause it was incorrectly optimized by GCC.\n\nBug: 26208284\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: Ib39f3da2b92bc5be5d76f4240a77567d82c6bebe\n"
    },
    {
      "commit": "803cbb9c9319af10b01317abb849303fb8329fb7",
      "tree": "be2111df46daca89d711c7517570df99e68640e3",
      "parents": [
        "045d37ae20ae9481f6c967ab5db4240991ff151f"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Dec 01 12:24:36 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Dec 18 10:23:59 2015 -0800"
      },
      "message": "For LSE, further optimize stores for singleton references.\n\nLoop side effects shouldn\u0027t affect singletons whose fields are never stored into\ninside a loop.\n\nChange-Id: If3715d7b7e621bb077ef9481072a56f7fec87f2b\n"
    },
    {
      "commit": "ecf52dfa46addbbd5d1ee92a4bc9b7a9fd960629",
      "tree": "581d6d5071b7a0450d676eee167aeb34812240fa",
      "parents": [
        "273941131aed5248a8c75b2d3f2952a88c7ab02d"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 16:58:08 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 18 13:58:22 2015 +0000"
      },
      "message": "ART: Fix bug in LSE\n\nLSE will not remove a load if the type of the heap value does not\nmatch the type of the load. This was a workaround for b/22538329 but\nbackfires for integers. For example, \u0027IntConstant 0\u0027 has type int\nbut can be retrieved from a boolean field. The corresponding store is\nremoved but not the load, loading uninitialized memory. This fixes the\nissue until the workaround is not needed any more.\n\nChange-Id: I2a47783e8d5f93104854e5216b69b6c220832c76\n"
    },
    {
      "commit": "68289a531484d26214e09f1eadd9833531a3bc3c",
      "tree": "6f87852b9d14e479ea2c7ef92de35c3118a0fd1e",
      "parents": [
        "bc90a0538e56f98b8e138cb622e6b9d834244ad9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 15 17:30:30 2015 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 15 17:40:08 2015 -0800"
      },
      "message": "Revert \"ART: Refactor SsaBuilder for more precise typing info\"\n\nThis reverts commit d9510dfc32349eeb4f2145c801f7ba1d5bccfb12.\n\nBug: 26208284\n\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: I5f491becdf076ff51d437d490405ec4e1586c010\n"
    },
    {
      "commit": "d9510dfc32349eeb4f2145c801f7ba1d5bccfb12",
      "tree": "9f4e4ffb5fae25c4f14059fd1d772726e9d96170",
      "parents": [
        "ceec5a3c81925cf80a18954b2e585316450c575c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 04 23:30:22 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 13:03:19 2015 +0000"
      },
      "message": "ART: Refactor SsaBuilder for more precise typing info\n\nThis patch refactors the SsaBuilder to do the following:\n\n1) All phis are constructed live and marked dead if not used or proved\nto be conflicting.\n\n2) Primitive type propagation, now not a separate pass, identifies\nconflicting types and marks corresponding phis dead.\n\n3) When compiling --debuggable, DeadPhiHandling used to revive phis\nwhich had only environmental uses but did not attempt to resolve\nconflicts. This pass was removed as obsolete and is now superseded\nby primitive type propagation (identifying conflicting phis) and\nSsaDeadPhiEliminiation (keeping phis live if debuggable + env use).\n\n4) Resolving conflicts requires correct primitive type information\non all instructions. This was not the case for ArrayGet instructions\nwhich can have ambiguous types in the bytecode. To this end,\nSsaBuilder now runs reference type propagation and types ArrayGets\nfrom the type of the input array.\n\n5) With RTP being run inside the SsaBuilder, it is not necessary to\nrun it as a separate optimization pass. Optimizations can now assume\nthat all instructions of type kPrimNot have reference type info after\nSsaBuilder (with the exception of NullConstant).\n\n6) Graph now contains a reference type to be assigned to NullConstant.\nAll reference type instructions therefore have RTI, as now enforced\nby the SsaChecker.\n\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: I7a3aee1ff66c82d64b4846611c547af17e91d260\n"
    },
    {
      "commit": "8ab1d645dfbc84e4b19c0db5e3a0d3081924dc0f",
      "tree": "bcbdf43935238eeeff308919105891c1aa3f1ef5",
      "parents": [
        "840d22928c09bf373c8f559171fdba3f7448345e"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Dec 03 14:11:15 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Dec 10 16:38:35 2015 -0800"
      },
      "message": "For LSE, add a few non-aliasing cases due to pre-existence.\n\nCreate reference info for a few instructions that can return a reference.\nSo they will be treated as not-aliasing with future allocations.\n\nChange-Id: Ided3db790b95f8d6f1468bbf4b7f3e6d71d81eb2\n"
    },
    {
      "commit": "729645a937eb9f04a311b3c22471dcf3ebe9bcec",
      "tree": "100c5d843a4d436b166d52e7a463ef6b283abc8c",
      "parents": [
        "d846a2cc45aae5b1c84b5ac51cdd37a22b8447ff"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 19 13:29:02 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 20 22:19:02 2015 +0000"
      },
      "message": "Explicitly add HLoadClass/HClinitCheck for HNewInstance.\n\nbug:25735083\nbug:25173758\n\nChange-Id: Ie81cfa4fa9c47cc025edb291cdedd7af209a03db\n"
    },
    {
      "commit": "fb8464ae5f5194dc16278e528cfcbff71498c767",
      "tree": "9361521497f31fd024f36980464d17bee7c83d52",
      "parents": [
        "9231730cd0e285373afd73331168b289309ebee4"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Nov 02 10:56:59 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Nov 18 13:27:16 2015 -0800"
      },
      "message": "Revert \"Revert \"Enable store elimination for singleton objects.\"\"\n\nThis reverts commit 55d02cf056f993aeafebd54e7b7c68c7a48507c9, and\nmakes the following change:\nCurrently we leverage loop side effects to decide whether heap values are\nkilled by the loop. Stores need to be kept if heap values may be killed\nby loops and the corresponding loads cannot be eliminated. Similar thing\nneed to be done for each predecessor when we merge predecessor heap values.\nTo do that, the HInstanceFieldSet instruction itself is put in the heap\nvalue array instead of the value of the store instruction. The store\ninstruction may be added to possibly_removed_stores_ first, but can later\nbe removed from possibly_removed_stores_ when it\u0027s found out that the store\nneeds to be kept due to merging/loop side effects.\n\nChange-Id: I4f7bb1960f7b47240873e00ff1adac46fc102a02\n"
    },
    {
      "commit": "55d02cf056f993aeafebd54e7b7c68c7a48507c9",
      "tree": "bcdd800831f98a896b2b712932e769f46fbeefab",
      "parents": [
        "7f43a3d48fc29045875d50e10bbc5d6ffc25d61e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 29 02:59:50 2015 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 29 02:59:50 2015 +0000"
      },
      "message": "Revert \"Enable store elimination for singleton objects.\"\n\nThis reverts commit 7f43a3d48fc29045875d50e10bbc5d6ffc25d61e.\n\nFails booting.\n\nBug: 25357772\nChange-Id: Ied19536f3ce8d81e76885cb6baed4853e2ed6714\n"
    },
    {
      "commit": "7f43a3d48fc29045875d50e10bbc5d6ffc25d61e",
      "tree": "3be4590986faae499384f564acafa5fe04eb68b4",
      "parents": [
        "3dca4c04170bb4c7b26609e55f3f4966d46b681a"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Oct 27 16:38:33 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Oct 27 16:43:45 2015 -0700"
      },
      "message": "Enable store elimination for singleton objects.\n\nEnable store elimination for singleton objects. However for finalizable object,\ndon\u0027t eliminate stores. Also added a testcase.\n\nChange-Id: Icf991e7ded5b490f55f580ef928ece5c45e89902\n"
    },
    {
      "commit": "e9d6e6083e845194548e0705fdf9e172c7a043e5",
      "tree": "53d917afc88d97a5ccae881720075aacf573e1c5",
      "parents": [
        "b5172e8e8c4a5cfff5a0bdb0a7f1810ee9c7bbd1"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Oct 23 17:08:42 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Oct 23 17:40:26 2015 -0700"
      },
      "message": "Disable store elimination on singleton object.\n\nStores into singleton objects that are finalizable need to be kept.\nDisable those store eliminations before we have the finalizable info available.\n\nChange-Id: I281e0c442588ec291b1002fdc9b59a144c15dc8e\n"
    },
    {
      "commit": "8df69d42a9e3ccd9456ff72fac8dbd1999f98755",
      "tree": "b2d7617d4d2e1ae80ab7024b47802dafbaee3b3a",
      "parents": [
        "823e693aa946ba75cd047429e1290011a2ed8729"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Oct 22 15:40:58 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Oct 22 16:37:46 2015 -0700"
      },
      "message": "Revert \"Revert \"load store elimination.\"\"\n\nThis reverts commit 8030c4100d2586fac39ed4007c61ee91d4ea4f25.\n\nChange-Id: I79558d85484be5f5d04e4a44bea7201fece440f0\n"
    },
    {
      "commit": "8030c4100d2586fac39ed4007c61ee91d4ea4f25",
      "tree": "9d16c721b449e84aa04681440a79b85d86fa2aa2",
      "parents": [
        "589dac7f0ce078d19aad7e35bb0195c47ddf01d2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 15 10:30:18 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 15 10:30:18 2015 +0000"
      },
      "message": "Revert \"load store elimination.\"\n\nBreaks libcore tests:\n\n  libcore.java.lang.ref.FinalizeTest#testWatchdogDoesNotFailForObjectsThatAreNearTheDeadline\n  libcore.java.util.ResourceLeakageDetectorTest#testDetectsUnclosedCloseGuard\n  org.apache.harmony.tests.java.lang.ref.ReferenceTest#test_finalizeReferenceInteraction\n\nThis reverts commit 589dac7f0ce078d19aad7e35bb0195c47ddf01d2.\n\nChange-Id: I55115765c10762d5bc152d3425e4622560d8b9f4\n"
    },
    {
      "commit": "589dac7f0ce078d19aad7e35bb0195c47ddf01d2",
      "tree": "5c77fb845997b21ce1aa97b1fa176c64a76e14f1",
      "parents": [
        "d2e0dd179fd2e8c6c820194e187fc5e9164154ff"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Aug 24 11:21:42 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Oct 15 01:36:34 2015 -0700"
      },
      "message": "load store elimination.\n\nThis adds a pass to eliminate some unnecessary heap loads/stores. It\nfirst collects heap locations and then tracks values stored to those heap\nlocations. Alias analysis is done based on offset, type, singleton,\npre-existence, etc.\n\nChange-Id: I11a9d8ef20d1b2f245607eb25118e9aff9be472a\n"
    }
  ]
}
