)]}'
{
  "log": [
    {
      "commit": "5c824937bb82adbde857bc99cb03c769c9f68f7b",
      "tree": "7aaa6cc94120e39ed93e3c0e127318f41e7bb456",
      "parents": [
        "95313c5d14447ff5d75f51263bfd82fc6352dd72"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 02 15:54:17 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 03 08:09:43 2021 +0000"
      },
      "message": "Reduce Partial LSE memory usage.\n\nInstantiate ExecutionSubgraph only for partial singleton\ncandidates (currently NewInstance, possibly NewArray in the\nfuture). This reduces \"LSA\" allocations.\n\nReserve memory for PartialLoadStoreEliminationHelper members\nbased on the number of partial singletons instead of the\nnumber of reference infos. This reduces \"LSE\" allocations.\n\nThe peak scoped arena allocation for one compiled method\nis reduced from\n  MEM: used: 97424004, allocated: 99006568, lost: 1115968\n    LSA            46015104\n    LSE            51408900\ndown to\n  MEM: used: 17000744, allocated: 26713880, lost: 3332496\n    GVN            17000744\nwhere the LSA+LSE memory use is lower than GVN use.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 33650849\nChange-Id: I323b9f144b258f0fab034794770971547ce94b59\n"
    },
    {
      "commit": "06fb7fa55cca3210f38c92ac7cc7ad525ff30c83",
      "tree": "ee970452d8b5e63d09d1dd8157e11124fa35d731",
      "parents": [
        "dc65a4505a62b8ebd7e8c65bccbc469c01e500a7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 18 15:53:17 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 20 13:39:53 2021 +0000"
      },
      "message": "Fix ReplacementOrValue() for Partial LSE.\n\nAlso fix a bad DCHECK() in `FindSubstiute()` and fix the\nHeapLocationCollector::VisitPredicatedInstanceFieldGet()\nto use the correct input.\n\nTest: New tests in load_store_elimination_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 188188275\nChange-Id: Ifdace5ddbe1777af2109189013c0557f226d9cc9\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": "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": "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": "ef898425c975f150caaed077ca204fa86b951e7f",
      "tree": "1ad038b90bb860fe1b9a20872b990c7918fcd1e1",
      "parents": [
        "f7290cac4af6a981d98122af1a6d48b0e80da574"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 08 10:26:06 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 08 12:41:04 2020 +0000"
      },
      "message": "Run LSA as a part of the LSE pass.\n\nMake LSA a helper class, not an optimization pass. Move all\nits allocations to ScopedArenaAllocator to reduce the peak\nmemory usage a little bit.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I7fc634abe732d22c99005921ffecac5207bcf05f\n"
    },
    {
      "commit": "0a51605ddd81635135463dab08b6f7c21b58ffb0",
      "tree": "820f338333010f4d6e4b543ffea47e9ff7d2dd3f",
      "parents": [
        "e2727154f25e0db9a5bb92af494d8e47b181dfcf"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 14 13:00:44 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 14 13:00:44 2019 +0000"
      },
      "message": "Revert \"Make compiler/optimizing/ symbols hidden.\"\n\nThis reverts commit e2727154f25e0db9a5bb92af494d8e47b181dfcf.\n\nReason for revert: Breaks ASAN tests (ODR violation).\nBug: 142365358\n\nChange-Id: I38103d74a1297256c81d90872b6902ff1e9ef7a4\n"
    },
    {
      "commit": "e2727154f25e0db9a5bb92af494d8e47b181dfcf",
      "tree": "0ddc6eec3ad9508d7eb1f2b941786dd0ed7d2cd8",
      "parents": [
        "c78860b91ae07eed92f86876e7a03132adea6fcd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 10 10:46:42 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 14 08:22:00 2019 +0000"
      },
      "message": "Make compiler/optimizing/ symbols hidden.\n\nMake symbols in compiler/optimizing hidden by a namespace\nattribute. The unit intrinsic_objects.{h,cc} is excluded as\nit is needed by dex2oat.\n\nAs the symbols are no longer exported, gtests are now linked\nwith the static version of the libartd-compiler library.\n\nlibart-compiler.so size:\n  - before:\n    arm: 2396152\n    arm64: 3345280\n  - after:\n    arm: 2016176 (-371KiB, -15.9%)\n    arm64: 2874480 (-460KiB, -14.1%)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nBug: 142365358\nChange-Id: I1fb04a33351f53f00b389a1642e81a68e40912a8\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "b765a3f7f7b7c7efaab5fb331796b53439dbe04c",
      "tree": "feba405a8f483f2dcf14ceab0528848f24468e91",
      "parents": [
        "487ad46b7ee79eb4a03d3560072c309280069c04"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu May 10 14:47:48 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue May 15 13:23:29 2018 -0700"
      },
      "message": "Refactoring LSE/LSA: introduce heap location type\n\nRationale:\nThis refactoring introduces data types to heap locations.\nThis will allow better type disambiguation in the future.\nAs a first showcase, it already removes rather error-prone\n\"exceptional\" code in LSE dealing with array types on null\nvalues. Furthermore, many LSA specific details started to \"leak\"\ninto clients, which is also error-prone. This refactoring moves\nsuch details back into just LSA, where it belongs.\n\nTest: test-art-host,target\n\nBug: b/77906240\n\nChange-Id: Id327bbe86dde451a942c9c5f9e83054c36241882\n"
    },
    {
      "commit": "2477320a8d9de58ede68e2645ea53c10f71dcd57",
      "tree": "f428a6856e10d8ebaff0bb2da544a8d41c35ab77",
      "parents": [
        "5a87e19e4bf1b6719c2aad3effde1b38d2c3085c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 26 10:28:51 2018 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Apr 26 10:28:51 2018 -0700"
      },
      "message": "Step 1 of 2: conditional passes.\n\nRationale:\nThe change adds a return value to Run() in preparation of\nconditional pass execution. The value returned by Run() is\nbest effort, returning false means no optimizations were\napplied or no useful information was obtained. I filled\nin a few cases with more exact information, others\nstill just return true. In addition, it integrates inlining\nas a regular pass, avoiding the ugly \"break\" into\noptimizations1 and optimziations2.\n\nBug: b/78171933, b/74026074\n\nTest: test-art-host,target\nChange-Id: Ia39c5c83c01dcd79841e4b623917d61c754cf075\n"
    },
    {
      "commit": "2ca10eb3f47ef3c2535c137853f7a63d10bb908b",
      "tree": "3684d1d5ef4791795b64620e97f952896c5a2011",
      "parents": [
        "02f41015a0933f146b886c62bb5b02c322ddf882"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Nov 15 15:17:53 2017 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 20 10:38:26 2017 -0800"
      },
      "message": "Refactored optimization passes setup.\n\nRationale:\nRefactors the way we set up optimization passes\nin the compiler into a more centralized approach.\nThe refactoring also found some \"holes\" in the\nexisting mechanism (missing string lookup in\nthe debugging mechanism, or inablity to set\nalternative name for optimizations that may repeat).\n\nBug: 64538565\n\nTest: test-art-host test-art-target\nChange-Id: Ie5e0b70f67ac5acc706db91f64612dff0e561f83\n"
    },
    {
      "commit": "0e3151b70450ce3ed81543c4b22d99069713f979",
      "tree": "a9e1a8667aed657229a14a17b1a138d8d27bc4ea",
      "parents": [
        "6fde072609bd65ee1e8bd71dec9bc5899c99f9d7"
      ],
      "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": "Fri Nov 10 12:14:57 2017 -0800"
      },
      "message": "Improvement on array element aliasing analysis.\n\nMore robust array element aliasing analysis which covers aliasing\nbetween all heap locations.\n\nTest: run-test on host.\nTest: 530-checker-lse/load_store_analysis_test.cc cover array index aliasing.\nChange-Id: Ie0d1696bedb7811c6a4bc0786ef93ca724493de2\n"
    },
    {
      "commit": "b50b16a68ababbc9acab6102bf0bb63bd5083763",
      "tree": "f440f12f8ab3b14b8c4b02c978561f43356e61b0",
      "parents": [
        "2202d56061941b4fecbdb018d84bcefb05b6c683"
      ],
      "author": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Tue Sep 19 17:43:29 2017 +0100"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Nov 09 15:48:04 2017 -0800"
      },
      "message": "Support VecLoad and VecStore in LSA.\n\nTest: test-art-host\nTest: test-art-target\nTest: load_store_analysis_test\n\nChange-Id: I7d819061ec9ea12f86a926566c3845231fce6e26\n"
    },
    {
      "commit": "e0eb48353ddf0c1b79bfec2ba15c899a413c2c70",
      "tree": "71dfe896afa05c39d64373518d1e1e36cb8d8d43",
      "parents": [
        "3e6c13997373efac343a65740da0c4f6e77338b9"
      ],
      "author": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Mon Oct 30 13:43:14 2017 +0000"
      },
      "committer": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Thu Nov 02 16:17:17 2017 +0000"
      },
      "message": "Fix LSA hunt for original reference bug.\n\nFix a bug in LSA where it doesn\u0027t take IntermediateAddress\ninto account during hunting for original reference.\n\nIn following example, original reference i0 can be transformed\nby NullCheck, BoundType, IntermediateAddress, etc.\n  i0 NewArray\n  i1 HInstruction(i0)\n  i2 ArrayGet(i1, index)\n\nTest: test-art-host\nTest: test-art-target\nTest: load_store_analysis_test\nTest: 706-checker-scheduler\n\nChange-Id: I162dd8a86fcd31daee3517357c6af638c950b31b\n"
    },
    {
      "commit": "009d166842195711eca4d5768c59a8f7404e6875",
      "tree": "297cbed4084e905767bd979d54697693fd0c7262",
      "parents": [
        "52d52f5dc3e005829926e68c656fb27e8b008ae9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 10 13:21:15 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 12 10:43:29 2017 +0100"
      },
      "message": "Use ScopedArenaAllocator in BCE, DCE, LSE, ...\n\n... ReferenceTypePropagation and GraphChecker.\n\nDefine and use a new allocation kind for LoadStoreAnalysis.\n\nMemory needed to compile the two most expensive methods for\naosp_angler-userdebug boot image:\n  BatteryStats.dumpCheckinLocked() : 19.7MiB -\u003e 19.6MiB (-79KiB)\n  BatteryStats.dumpLocked(): 39.4MiB -\u003e 39.3MiB (-120KiB)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 64312607\nChange-Id: Ib0cf074ac21ab67d8f8f2efabbdfb84cce9cae8e\n"
    },
    {
      "commit": "ca6fff898afcb62491458ae8bcd428bfb3043da1",
      "tree": "195a6b16d3a4b34acc2faf91ce56f448efb15e07",
      "parents": [
        "aa7273e56fbafc2692c8d20a31b50d2f4bdd2aa1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 03 14:49:14 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 06 17:53:50 2017 +0100"
      },
      "message": "ART: Use ScopedArenaAllocator for pass-local data.\n\nPasses using local ArenaAllocator were hiding their memory\nusage from the allocation counting, making it difficult to\ntrack down where memory was used. Using ScopedArenaAllocator\nreveals the memory usage.\n\nThis changes the HGraph constructor which requires a lot of\nchanges in tests. Refactor these tests to limit the amount\nof work needed the next time we change that constructor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Build with kArenaAllocatorCountAllocations \u003d true.\nBug: 64312607\nChange-Id: I34939e4086b500d6e827ff3ef2211d1a421ac91a\n"
    },
    {
      "commit": "0ebe0d83138bba1996e9c8007969b5381d972b32",
      "tree": "a5ee66ebc5b587ade97e56ac8fc7d832fbbed4af",
      "parents": [
        "e1e347dace0ded83774999bb26c37527dcdb1d5a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 21 22:50:39 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 25 15:45:01 2017 +0100"
      },
      "message": "ART: Introduce compiler data type.\n\nReplace most uses of the runtime\u0027s Primitive in compiler\nwith a new class DataType. This prepares for introducing\nnew types, such as Uint8, that the runtime does not need\nto know about.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 23964345\nChange-Id: Iec2ad82454eec678fffcd8279a9746b90feb9b0c\n"
    },
    {
      "commit": "fef2884b18bcc01cc40edb2ae809d42b5a510c33",
      "tree": "8649630bb875a85aeb0086fafc25fcf43fbc703c",
      "parents": [
        "02cb397857c979dffae95e2db2678a72ec407cf0"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Aug 28 15:20:57 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Aug 28 16:33:04 2017 -0700"
      },
      "message": "Simplify CreateReferenceInfoForReferenceType() in load-store-analysis\n\nWe now do CreateReferenceInfoForReferenceType() in VisitInstruction()\nwhich catches all cases where a reference value is created.\n\nTest: run-test on hosts\nChange-Id: I14ce59ba44558e3e800fc2543f4e190cbb2fd75e\n"
    },
    {
      "commit": "1f0eefc59d34fb5b6f088791cdd268a5ee194407",
      "tree": "d8511d10a121b52830f132824ef5b984223ae82b",
      "parents": [
        "52a3c989f96984f9bc9e02620694fc44708a1df2"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Aug 03 16:43:40 2017 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Aug 03 16:51:50 2017 -0700"
      },
      "message": "Add VisitNewArray() in lsa.\n\nWe missed one VisitNewArray() to create reference info right when a\nNewArray is seen. This may break pre-existence based aliasing analysis\nsince another reference may be wrongly treated as existing before the\nNewArray.\n\nAlso doing the same for a few more nodes that have reference values.\nThis is not correctness issue but can open up more opportunities for\ndetecting false aliases.\n\nTest: run-test on host.\nBug: 64018485\nChange-Id: I11f7857ab6b933448e7ba9ab6451d77dfc5c61a7\n"
    },
    {
      "commit": "016c0f165dc6872d22c12c239d19b094983519f1",
      "tree": "bef8e9912412d02b7aa3913f2750147835454b2e",
      "parents": [
        "d1c983a5bc3ae50eab3af405ae8a415e1f36f532"
      ],
      "author": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Fri May 12 18:16:31 2017 +0100"
      },
      "committer": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Mon Jun 26 11:30:39 2017 +0100"
      },
      "message": "Improve array index analysis in LSA.\n\nThis CL improves analysis on array index in load store analysis.\n\nTest: m test-art-host\nTest: m test-art-target\nTest: m test-art-host-gtest-load_store_analysis_test\n\nChange-Id: Id5e5aa8b396c68e082db95809659494107985fa2\n"
    },
    {
      "commit": "c239a2bb9474a1266c4882638fdb19056370e16d",
      "tree": "57fc8b0ba198cc6a6db65cbf48a600c38d269890",
      "parents": [
        "80dd30abe3fac52f6de4aec0543918d360f7d08a"
      ],
      "author": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Thu Apr 27 15:31:37 2017 +0100"
      },
      "committer": {
        "name": "xueliang.zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Fri May 19 17:17:06 2017 +0100"
      },
      "message": "Create load store analysis pass\n\nThis CL separates load store analysis from LSE pass.\n\nThe load and store analysis in LSE pass records information\nabout heap memory accesses for arrays and fields.\nSuch information can also be used in the other optimizations like\ninstruction scheduling pass which can eliminate side-effect\ndependencies between memory accesses to different locations.\n\nTest: m test-art-host\nTest: m test-art-target\nTest: m test-art-host-gtest-load_store_analysis_test\nTest: 530-checker-lse\n\nChange-Id: I353a2b9a03b19bfa0e7ef07716d60bd4254c7ea7\n"
    }
  ]
}
