)]}'
{
  "log": [
    {
      "commit": "3de02fb67de386368c9fe39ab5a0133afcf1d785",
      "tree": "39b82839945a26dfb857a403effa4ba248145715",
      "parents": [
        "18074d2b59ae56dcfccea770ceb515215c8eb53f"
      ],
      "author": {
        "name": "Stelios Ioannou",
        "email": "stelios.ioannou@linaro.org",
        "time": "Fri Jul 09 17:06:03 2021 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 13 17:54:53 2021 +0000"
      },
      "message": "ART: Removes SuspendCheck for plain loops with a low trip count.\n\nThis change removes SuspendCheck for plain loops with a low trip count.\n\nThe SuspendCheck in the codegen makes sure that the thread can be\ninterrupted during execution for GC. Not being able to do so might\ndecrease the responsiveness of GC in the case when a very long loop\nor a long recursion is being executed.\n\nHowever, for plain loops with a small trip count, the removal of\nSuspendCheck should not affect the GC\u0027s responsiveness by a large\nmargin. Consequently, since the thread won\u0027t be interrupted for\nplain loops, it is assumed that the performance might increase\nby removing SuspendCheck.\n\nTest: art/test.py -v -j12 --host --64 -t 2233-checker\\\n-remove-loop-suspend-check --run-test --optimizing\n\nChange-Id: Ic9f1387059669645ad836d8277bfbc7553aa6e2f\n"
    },
    {
      "commit": "4f990714b13e0b4446305a5411648a1a9ae42a7a",
      "tree": "4568386e3e6f3c98c819851f6573e2c7cbc184fb",
      "parents": [
        "7744b69abf073101b09b9043f0f0eb109768fcfe"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 14 12:45:13 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 14 15:18:36 2021 +0000"
      },
      "message": "Modernize typedefs with `using`.\n\nReplace many occurences of `typedef` with `using`. For now,\ndo not update typedefs for function types and aligned types\nand do not touch some parts such as jvmti or dmtracedump.\n\nTest: m\nChange-Id: Ie97ecbc5abf7e7109ef4b01f208752e2dc26c36d\n"
    },
    {
      "commit": "ffafe8babb6b278c9e4748f64670f99f223411a9",
      "tree": "d1509e5ebab6872798980f291ec6d40b19c0ff3f",
      "parents": [
        "f2e1bc757e354530e41b8d0e0c3f04c12d1f8ab7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 23 10:29:27 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 23 13:07:48 2021 +0000"
      },
      "message": "Clean up Handle\u003c\u003e comparison with null.\n\nThese operators do not need the mutator lock.\n\nTest: buildbot-build.sh\nChange-Id: I48f51853f1b3c2e56463140f23777ad26d8122f2\n"
    },
    {
      "commit": "7432805b24cb8b6d8c754807143a691dc51adaba",
      "tree": "7693475b3520e1673cdba6210e8dc64d2becf1c4",
      "parents": [
        "1a660c0bd57313bae9cd5632ab4252f417590a96"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 29 18:11:23 2021 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 30 18:01:00 2021 +0000"
      },
      "message": "Fix simplifier issue with predicated ifield get\n\nIn cases where all targets of a HPredicatedInstanceFieldGet\ninstruction are known to not be null the simplifier would attempt to\nreplace the default value with a null instruction. This would cause a\nnull-pointer dereference. Correct the simplifier to handle this case\ncorrectly.\n\nMoved some LSE test helper functions to CommonCompilerTestHelper to\navoid duplicating code.\n\nFixed an incorrect (though until now unused) constructor for\nHPredicatatedInstanceFieldGet (the default value and target we\nswapped).\n\nTest: ./test.py --host\nTest: ./art/tools/compile_jars.py --profile-file bad-compile.txt ~/imgur.apk\nBug: 183942773\nChange-Id: I66f4ce37d768d5e457047a3f80bd4cb9aa4546a3\n"
    },
    {
      "commit": "ac27ac01490f53f9e2413dc9b66fbb2880904c96",
      "tree": "271018e1ef33667bee8d57c40ffa3f4d9f8cf930",
      "parents": [
        "26bf47a60064fcc42e1b5e7b4b41deb8312d7330"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 01 09:31:02 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 05 10:48:17 2021 +0000"
      },
      "message": "Implement Reference.refersTo() intrinsic.\n\nTest: Added tests to 122-npe and 160-read-barrier-stress\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 172573708\nChange-Id: I8342510565289058df218d3249ffac1eb993ca4f\n"
    },
    {
      "commit": "a7c66e7e5845b26711b261773179abf0f8b34ced",
      "tree": "a621a91059f9a7d2cefc92710fac2cd28350d133",
      "parents": [
        "af2aabc47d97556bf0fde258e6ddb472eebe0855"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 27 11:41:58 2021 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 28 21:23:25 2021 +0000"
      },
      "message": "Avoid potential null dereference\n\nIn a log statement we were dereferencing a pointer that could\npotentially be null. Add support for safely dereferencing a pointer\nfor ostreams.\n\nTest: ./test.py --host\nBug: 67037140\nChange-Id: Ibe04811883575902a9b2fe8a064f18de2b2cea7b\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": "dc281e776c0395b54200c62626f90417f092a2bf",
      "tree": "5e0a458e7ec1968f365b5a6dcc7454d417f11416",
      "parents": [
        "da946fc92b3f6f9664167ef3a0f1324694417b71"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 06 12:35:31 2021 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 08 22:35:17 2021 +0000"
      },
      "message": "Add operator\u003c\u003c for HGraph and HInstructions.\n\nInclude helpers for printing arguments as well.\n\nTest: ./test.py --host\nChange-Id: I692fd5bd32a8a39da0defd9454d56ccf2480f229\n"
    },
    {
      "commit": "c9fcfd02a69170cedcd4cf2e66826f246dff6267",
      "tree": "2bc39091ec4dbc71bad37efafde41d13d168f0ca",
      "parents": [
        "782fb716122d37dc4c4d7482afb21f6e68be04b4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 05 16:57:30 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 06 15:06:24 2021 +0000"
      },
      "message": "Optimizing: Add debugging output for HInstruction.\n\nAllow printing individual instruction and its arguments with\nthe HGraphVisualizer. Arguments are dumped \"recursively\"\n(but implemented with a queue instead of actual recursion).\n\nFor example, printing the Return instruction from the method\nMain.testLoop17 in 530-checker-lse yields\n\nv28 Return [i27] dex_pc:23 loop:none\n  i27 Add [i24,i26] dex_pc:22 loop:none\n    i24 Phi [i5,i15] dex_pc:n/a reg:0 is_catch_phi:false loop:none\n      i5 IntConstant dex_pc:0 1 loop:none\n      i15 IntConstant dex_pc:5 2 loop:none\n    i26 InstanceFieldGet [l6] dex_pc:20 field_name:TestClass.i field_type:Int32 loop:none\n      l6 NullCheck [l1] dex_pc:1 env:[[i5,_,_,l1,i2]] loop:none\n        l1 ParameterValue dex_pc:n/a loop:none\n\nTest: Manual; modify LSE to print the instruction above.\nChange-Id: Iaf41ba62cd6a5a36236ad0abca082ebffcf6a20e\n"
    },
    {
      "commit": "210a78d9ec4349601ac57381046229f4da1197f4",
      "tree": "dba581ba26ba7f6add0c3c1a2968d4f5d5dc8336",
      "parents": [
        "59d4b53e70bc1e0589ce05428c945b4585e28d0f"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 30 16:58:05 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 01 20:12:45 2020 +0000"
      },
      "message": "Ensure ClearLoopInformation doesn\u0027t require particular ordering\n\nThe ClearLoopInformation call used to use the RPO list to find\nblocks which potentially had loop-information. This meant that if one\nwas also clearing the dominance information (which is quite common)\none needed to be sure to call ClearLoopInformation before calling\nClearDominanceInformation or else loop information will not be fully\ncleared. This could cause quite perplexing errors if dominance\ninformation is recomputed later (also quite common). This error is in\nfact present in several tests (none of which use loops which is how it\ngot missed).\n\nFix this issue by just looping over all blocks. Also add a new\nGetActiveBlocks function which does the filtering of null blocks\nautomatically. In many cases (such as these) we use RPO purely because\nit doesn\u0027t require filtering. This should be able to replace these\nuses.\n\nTest: ./test.py --host\nChange-Id: I60c7defc409111471064e9bf02b7ae3a0eb10584\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": "8f2eb25ca40136a36a5d7002c8ca5a05723e334e",
      "tree": "51778c592bdd3eb65d3fde8c21997eec30bd1e23",
      "parents": [
        "8411c5ddb824bae1d3202a3bc2e42c77d351e916"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 06 13:39:54 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 06 15:26:27 2020 +0000"
      },
      "message": "Remove NeedsDexCache logic from the compiler.\n\nThe compiled code and runtime stubs don\u0027t need to have direct access to\nthe dex cache anymore.\n\nTest: test.py\nChange-Id: Id3aab9b10445ba2599e1a9ffd8e36506a745bfec\n"
    },
    {
      "commit": "8d34a182fea1b24f7b8361b55e930cb953cf3fb2",
      "tree": "4f5ed9d9ac417dfd69fd18f64412b2272c448e05",
      "parents": [
        "8ecbc4e844fc3b73e6a5c5151eda914d53297180"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 16 09:46:58 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 07 08:32:52 2020 +0000"
      },
      "message": "Change interface conflict stub to take the interface method.\n\nTo avoid doing dex cache lookup, pass the interface method instead. This\ncosts a few hundred KBs on speed compiled APKs (\u003c 0.5% code size), but\nimproves performance when hitting a conflict (as seen on dogfood data).\n\nFor nterp, we currently pass the conflict method instead of the\ninterface method. We need to handle default methods before optimizing\nit.\n\nThis removes our last use of dex cache in compiled code. A follow-up CL\nwill remove the NeedsDexCacheOfDeclaringClass from HInvokeInterface.\n\nTest: test.py\n\nChange-Id: I3cdd4543ad7d904b3e81950af46a48a48af6991a\n"
    },
    {
      "commit": "8f63f1084b013a129f66cf8a7ed8ab1cae9f02aa",
      "tree": "6e9bbf5ad71a55f701f740e2995e0b84e9b87307",
      "parents": [
        "7aa2bfc09541ea5d2516738de84c24cd0269fed0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 28 12:10:28 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 30 13:58:32 2020 +0000"
      },
      "message": "Faster access to unresolved classes from compiled code.\n\nAdd two new load kinds to LoadClass, similar to kBssEntry\nbut using the access-checking entrypoint on the slow-path.\nOne is used for classes that are in the literal package and\nthe other for classes outside the literal package of the\ncompiling class. Associate new .bss entries with these load\nkinds and update them from entrypoints based on the resolved\nclass properties. If the resolved class is public, both\ntypes of entries can be updated, otherwise only the package\nlocal entry can be updated and only if the defining class\nloader of the class is the same as the caller\u0027s defining\nclass loader (which is identical for all code in an oat\nfile) because the run time access check for same package\nrequires both class loader and literal package name match.\n\nTest: Additional tests in 727-checker-unresolved-class.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_blueline-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 161898207\nChange-Id: I281e06ac2825caf81c6d7ee3128af833abd39992\n"
    },
    {
      "commit": "b0f405e1482df602fc57ee2ed4434456c4dc2555",
      "tree": "61d493a3ae65489090b186767ae83c7c1d893de1",
      "parents": [
        "5ba66998281af9719e5d5ef84fd095181d4cf9a8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 24 15:10:35 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 25 08:39:47 2020 +0000"
      },
      "message": "Move the resolved_method_reference to HInvoke.\n\nIn order to also be used by HInvokeInterface.\n\nTest: test.py\nChange-Id: If72071a5347a13843f2c3ad8da4af4d6aaee6444\n"
    },
    {
      "commit": "6d69b52f331f788cbd1f21ffd5b87cb3b39965e4",
      "tree": "2bca1001afb4c3fc45cbb198765c51aa65e45c42",
      "parents": [
        "e407d97b0f25562110511d025058dcefdacca623"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 23 14:47:28 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 23 14:47:28 2020 +0100"
      },
      "message": "Move MethodLoadKind out of HInvokeStaticOrDirect.\n\nTo prepare for using it in HInvokeInterface. For consistency, also move\nCodePtrLocation.\n\nTest: test.py\nChange-Id: I84f973764275002e2adb71080ebc833b2bafb975\n"
    },
    {
      "commit": "e6c0f2a75bd969253279580e2e4772e54787034b",
      "tree": "79598b2b6b457d9c718ddb18e29a0211a73ae85a",
      "parents": [
        "63c0c2d9da31d26781f5e77aba6125f0d0988795"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 07 08:30:52 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 08 13:51:53 2020 +0000"
      },
      "message": "Pass a full  MethodReference of the invoke in HInvoke nodes.\n\nCleanup to ensure we don\u0027t make mistakes when passing a dex method index\nto the HInvoke constructor, and we know which dex file it relates to.\n\nTest: test.py\nChange-Id: I625949add88a6b97e1dafeb7aed37961e105d6aa\n"
    },
    {
      "commit": "73c3180e6355ce82fc40b3ded2c6eec0fee199f9",
      "tree": "b793b5066fa9f3fd3fe3297e867a11be207d2541",
      "parents": [
        "f96ef4d4253adbc1418ed02386463e37027f998c"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Tue Sep 01 13:17:05 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 07 10:31:32 2020 +0000"
      },
      "message": "X86: Implement VarHandle.set() for fields.\n\nThis commit implements VarHandle set access mode for fields (both static\nand instance). This also implied refactorizing the common parts of get\nand set access modes (e.g. coordinate type checks).\n\nNon-constant Int64 set value is not implemented.\n\nTest: ART_HEAP_POISONING\u003dtrue art/test.py --host --32 -r -t 712-varhandle-invocations\nTest: ART_HEAP_POISONING\u003dfalse art/test.py --host --32 -r -t 712-varhandle-invocations\nBug: 65872996\nChange-Id: I384c09e08f7a772fc7ec372b1ebb5f882ecc5586\n"
    },
    {
      "commit": "49a19f38c35605e675eee271691ed465802859bf",
      "tree": "cc65dba30611c13bd3c6a6a7e1331541015ad013",
      "parents": [
        "0280e5d21e387812b7a1719d75ef2e3a94280c60"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Thu Aug 27 12:44:25 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 28 11:18:16 2020 +0000"
      },
      "message": "X86: Replace VarHandle.get() return type check with CheckCast node\n\nThis commit removes the varType check against the callsite return type.\nThe check is done after by an added HCheckCast node.\n\nTest: art/test.py --host --32 -r -t 712-varhandle-invocations\nBug: 65872996\nChange-Id: If4d966e0087da28349390474188e10dfb6f63832\n"
    },
    {
      "commit": "aa3588350bd483db207055b9481b0a57b2245122",
      "tree": "a5e55d47aae2e172fbba1c96226739ecbadfbff6",
      "parents": [
        "9e3fe99cba7dd3a1dba2439d86697a293dc003ba"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Tue Aug 25 15:09:43 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Aug 26 11:04:50 2020 +0000"
      },
      "message": "Revert^2 \"X86: VarHandle.get() for reference type static fields.\"\n\nThis reverts commit 6a6cca588df43a180534db0b49475a8a5ab4c35a.\n\nThis commit extends the VarHandle.get() implementation to work with\nreference type fields, not only primitive types.\n\nTest: ART_HEAP_POISONING\u003dtrue art/test.py --host --32 -r -t 712-varhandle-invocations\nBug: 65872996\n\nReason for revert: Fix loading the reference field.\n\nChange-Id: Ide1f13fb9c6a4e97876862fb4772e9d543847f1f\n"
    },
    {
      "commit": "6a6cca588df43a180534db0b49475a8a5ab4c35a",
      "tree": "adafb795eafe8960d664ad18121004f470fb944d",
      "parents": [
        "466c66be45cafea4f5339f42acd90b9f40f1ec69"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Tue Aug 25 08:17:37 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 25 09:46:29 2020 +0000"
      },
      "message": "Revert \"X86: VarHandle.get() for reference type static fields.\"\n\nThis reverts commit a18ed1bcdb665320c901e1c07b9f92af186077d7.\n\nReason for revert: Fails 712-varhandle-invocations for art-heap-poisoning and art-read-barrier-heap-poisoning in master-art-host\n\nChange-Id: I703923e2c7b5bc07c2270d0a0328bac8d02b655d\n"
    },
    {
      "commit": "a18ed1bcdb665320c901e1c07b9f92af186077d7",
      "tree": "43abfa05a8a80d630303e4ca2522854db6af7cf9",
      "parents": [
        "77773ac28e30fa56f69096bf0b6cf5543a465347"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Fri Aug 21 12:53:08 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Aug 24 16:40:49 2020 +0000"
      },
      "message": "X86: VarHandle.get() for reference type static fields.\n\nThis commit extends the VarHandle.get() implementation to work with\nreference type fields, not only primitive types.\n\nTest: art/test.py --host --32 -r -t 712-varhandle-invocations\nBug: 65872996\nChange-Id: I7c0d3487e94ae00d120a5d1167b7a33ffabc6d20\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": "d3e9c62976780e830da79ae32be4192dee196db2",
      "tree": "bf7855545f49ea039c6824d340ce2a162ad40ebd",
      "parents": [
        "60ef3997cbcd866c505e51ecde7f06a0535110a0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 05 12:20:28 2020 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Aug 10 09:17:34 2020 +0000"
      },
      "message": "ARM: Allow FP args in core regs for @CriticalNative.\n\nIf a float or double argument needs to be passed in core\nregister to a @CriticalNative method due to soft-float\nnative ABI, insert a fake call to Float.floatToRawIntBits()\nor Double.doubleToRawLongBits() to satisfy type checks in\nthe compiler.\n\nWe cannot do that for intrinsics that expect those inputs in\nactual FP registers, so we still prevent such intrinsics\nfrom using `kCallCriticalNative`. This should be irrelevant\nif an actual intrinsic implementation is emitted. There are\ncurrently two unimplemented intrinsics that are affected by\nthe carve-out, namely MathRoundDouble and FP16ToHalf, and\nfour intrinsics implemented only when ARMv8A is supported,\nnamely MathRint, MathRoundFloat, MathCeil and MathFloor.\n\nTest: testrunner.py --target --32 -t 178-app-image-native-method\nBug: 112189621\nChange-Id: Id14ef4f49f8a0e6489f97dc9588c0e6a5c122632\n"
    },
    {
      "commit": "2091019e6c3ca07454b97730f29bb7200fa9d46e",
      "tree": "483ed18c115ec2db233ffa15c1d5084c4ef1578e",
      "parents": [
        "098faa82913d24a0c71b5debc164ea717fac2b3e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 28 10:08:11 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 28 13:17:59 2020 +0000"
      },
      "message": "Update invoke-type in HInvokePolymorphic\n\nBug: 154693569\nTest: art/test.py --host -r\nChange-Id: Ibdf88397e1c13caf7e333fd4c52bbc75f316bbfb\n"
    },
    {
      "commit": "b931b8c25c93c9384fa6c02bc487cf7424fa6057",
      "tree": "eaa091cac485552c71e7e2e88a2d970f223eb9e5",
      "parents": [
        "853fc2ea8c4fb30d71adb1dbba6ebf0e8493ba51"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Mon Jul 27 13:16:37 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 28 10:01:23 2020 +0000"
      },
      "message": "Add clarification for HInvokePolymorphic constructor parameter\n\nAdded a comment that clarifies why the ArtMethod object is needed\nfor HInvokePolymorphic nodes.\n\nBug: b/65872996\nChange-Id: I9dd0451aa29492b17c5963ffb3e9925601262f3b\n"
    },
    {
      "commit": "a0130e8d2842a9a82e4fd4e811ee699272eb2e0b",
      "tree": "1468e015b7c4b001e40d847cf1448311706516e7",
      "parents": [
        "75c8b635178d0c59691c2bc22f3bd1101d5516b5"
      ],
      "author": {
        "name": "Andra Danciu",
        "email": "andradanciu@google.com",
        "time": "Thu Jul 23 12:34:56 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 24 10:11:54 2020 +0000"
      },
      "message": "Prepare compiler for adding VarHandle support.\n\nThis commit prepares the ground for adding VarHandle support\nin the compiler. The intrinsic locations builder and code\ngenerator are now triggered for HInvokePolymorphic nodes.\nVarHandle and MethodHandle intrinsics are marked as unimplemented\nrather than unreachable.\n\nSince the Varhandle intrinsics are not implemented yet, the\nfunctionality is not changed (i.e. the intrinsics are evaluated\nat runtime and not compiled). I manually tested that the intrinsic\nVisit* methods are triggered for the VarHandle methods.\n\nBug: b/65872996\nTest: art/test.py --host -r -t 713-varhandle-invokers\nTest: art/test.py --host --all-compiler -r\n\nChange-Id: I3333728c5f16d8dc4f92ceae2738ed59b3e31e6a\n"
    },
    {
      "commit": "af92a0f06fe3ab2618ccc220df3dacc3a20d8bb1",
      "tree": "a1825765fba713b9805a26b35743506907cdefe8",
      "parents": [
        "8d799686ff11ef800a8489272f4e0b36b6ab21b3"
      ],
      "author": {
        "name": "Evgeny Astigeevich",
        "email": "evgeny.astigeevich@linaro.org",
        "time": "Fri Jun 26 13:28:33 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 02 10:49:08 2020 +0000"
      },
      "message": "ARM: Optimize Div/Rem by 2^n for non-negative dividends\n\nWhen it can be proved that dividends are non-negative or the min integer\nif their type is integral, there is no need to generate instructions\ncorrecting the result.\n\nThe CL implements this optimization for ARM32/ARM64.\n\nTest: 411-checker-hdiv-hrem-pow2\nTest: test.py --host --optimizing --jit --gtest --interpreter\nTest: test.py -target --optimizing --jit --interpreter\nTest: run-gtests.sh\n\nChange-Id: I11211a42918b5801fce8e78f305e69549739c23c\n"
    },
    {
      "commit": "86c8752f64629325026945cd4eabd1dcea224acb",
      "tree": "9dc2be978f9e784a3ce16fa29d46941a94ac1c94",
      "parents": [
        "f97a859e85f703644d897f0e3e1bc54315557aaa"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 11 16:55:55 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 19 08:26:46 2020 +0000"
      },
      "message": "Direct calls to @CriticalNative methods.\n\nEmit direct calls from compiled managed code to the native\ncode registered with the method, avoiding the JNI stub.\n\nGolem results:\nart-opt-cc                       x86 x86-64    arm  arm64\nNativeDowncallStaticCritical  +12.5% +62.5% +75.9% +41.7%\nNativeDowncallStaticCritical6 +55.6% +87.5% +72.1% +35.3%\nart-opt                          x86 x86-64    arm  arm64\nNativeDowncallStaticCritical  +28.6% +85.6% +76.4% +38.4%\nNativeDowncallStaticCritical6 +44.6% +44.6% +74.6% +32.2%\n\nTest: Covered by 178-app-image-native-method.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --debuggable --ndebuggable \\\n          --optimizing --jit --jit-on-first-use\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nTest: testrunner.py --target --debuggable --ndebuggable \\\n          --optimizing --jit --jit-on-first-use -t 178\nTest: aosp_cf_x86_phone-userdebug boots.\nTest: aosp_cf_x86_phone-userdebug/jitzygote boots.\nBug: 112189621\nChange-Id: I8b37da51e8fe0b7bc513bb81b127fe0416068866\n"
    },
    {
      "commit": "0d60a2b1eaa2cd2ec3481e49578b77405353efa1",
      "tree": "91f16b9321ef7631aff731b10da2024c6c9d2029",
      "parents": [
        "289bd1cccdb3aa37e2d129980f5c151f52f84897"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 17 14:31:56 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 08:37:10 2020 +0000"
      },
      "message": "Introduce an enum for the compilation kind.\n\nTest: test.py\nChange-Id: I5329e50a6b4521933b6b171c8c0fbc618c3f67cd\n"
    },
    {
      "commit": "9974e3cdc1564edc3143b90d7bb2a416f1f887e7",
      "tree": "4f9746e6b237b2a17cc1e2543a141817d4946c19",
      "parents": [
        "2d19902c3d140c7b9b1d7ae905bd1023a4e649a1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 10 16:27:06 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 11 10:06:12 2020 +0000"
      },
      "message": "Clean up generated operator\u003c\u003c(os, enum).\n\nPass enums by value instead of const reference.\n\nDo not generate operator\u003c\u003c sources for headers that have no\nenums or no declarations of operator\u003c\u003c. Do not define the\noperator\u003c\u003c for flag enums; these were unused anyway.\n\nAdd generated operator\u003c\u003c for some enums in nodes.h . Change\nthe operator\u003c\u003c for ComparisonBias so that the graph\nvisualizer can use it but do not use the generated\noperator\u003c\u003c yet as that would require changing checker tests.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Ifd4c455c2fa921a9668c966a13068d43b9c6e173\n"
    },
    {
      "commit": "077188411c692f82b0785597fee030810a2a5841",
      "tree": "f74ced58d91dcb215601175dc7d29854d46aee0d",
      "parents": [
        "1715efa0b46d57d587237829d1c0695aaca2c344"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Mon Feb 24 18:51:42 2020 +0000"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Tue Jun 09 13:11:45 2020 +0000"
      },
      "message": "ART: Introduce predicated vector instructions.\n\nThis CL introduces a minimal changes to the IR to support\nautovectorization with use of predicated execution of SIMD\ninstructions (e.g. Arm SVE).\n\nTest: test-art-target, test-art-host.\nChange-Id: Ibb7c5520fec6b858fb29f0dde19ec65501831a3a\n"
    },
    {
      "commit": "695348f4b0541f4373b46eac5830cdd87f71c076",
      "tree": "f2f6019f0c394f99aaaf9f2f7deec16bf6116b0f",
      "parents": [
        "1f5300a211202442a07607830c6550773ca50b50"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 14:42:02 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 20 08:41:09 2020 +0000"
      },
      "message": "Add compiler type to CompilerOptions.\n\nLet CompilerOptions hold the information whether it is AOT\nor JIT compilation, or Zygote JIT for shared code.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: aosp_taimen-userdebug boots.\nChange-Id: Id9200572406f8e43d99b8b61ef0e3edf43b52fff\n"
    },
    {
      "commit": "02ca05a5a6e3f5028c6c2987a81be481d07bc617",
      "tree": "a364c4a46c573fdfddf607b0e78e5fd3f455c17f",
      "parents": [
        "5868adaefe72cc8bcdcd8325c40f712375a506d1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 12 13:58:51 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 13 08:00:22 2020 +0000"
      },
      "message": "Move HandleCache to HGraph.\n\nThis avoids passing the `VariableSizedHandleScope*` argument\naround and eliminates HGraph::inexact_object_rti_ and its\ninitialization. The latter shall allow running Optimizing\ngtests that do not require type information without creating\na Runtime in future. (To be implemented in a separate CL.)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optmizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: I36fe9bc556c6d610d644c8c14cc74c9985a14d64\n"
    },
    {
      "commit": "5a62af5dc9e9bafeffcac7820e1a5b7586e58477",
      "tree": "94308509fc9e9610c2d058e0458648807ccb5ae8",
      "parents": [
        "aba509f1624de7fd68409508d7c1600308a4ccc3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 11 15:16:24 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 13 08:00:22 2020 +0000"
      },
      "message": "Optimizing: Create fewer handles in inliner.\n\nUse ObjPtr\u003c\u003e and bool instead of ReferenceTypeInfo to avoid\ncreating unnecessary temporary Handle\u003c\u003es. This should reduce\ncompiler memory use a little bit.\n\nAnd rewrite ReferenceTypePropagation::IsAdmissible() with\nan explicit loop instead of a tail recursion.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: Ic9952134d669b336fb28e6ea13117446d11dc145\n"
    },
    {
      "commit": "1a719e4de83532a1dcd9ddfad2c92d4130f28ea9",
      "tree": "445026effb3298ca8e962701ee01f65785be6fe6",
      "parents": [
        "e33dca6d44463606168330d2f84bc616e8c147f6"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Jul 18 14:24:55 2019 +0100"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Mon May 04 08:19:17 2020 +0000"
      },
      "message": "RFC: ARM64: Split arm64 codegen into scalar and vector (SVE and NEON).\n\nThis is a first CL in the series of introducing arm64 SVE support\nin ART. The patch splits the codegen functionality into scalar and\nvector ones and for the latter introduces NEON and SVE\nimplementations. SVE one currently is an exact copy of NEON one -\nfor the sake of testing and an easy diff when the next CL comes\nwith an actual SVE instructions support.\n\nThe patch effectively doesn\u0027t change any behavior; NEON mode is\nused for vector instructions, tests pass.\n\nTest: test-art-target.\nChange-Id: I5f7f2c8218330998e5a733a56f42473526cd58e6\n"
    },
    {
      "commit": "5f84607854775be67a8eb2437ce1071af7d477d2",
      "tree": "4d28da38b7170fad07ce08878cedb239f51279da",
      "parents": [
        "c8150b5def82058c23df377a5006a78e7668afeb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 09 13:20:11 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 17 15:43:48 2020 +0000"
      },
      "message": "Optimizing: Construct intrinsic HIR in builder.\n\nTo help baseline compiler emit better code, construct\nintermediate representation for intrinsics that have\ncorresponding HIR classes in the instruction builder,\ninstead of doing it in the instruction simplifier.\n\nNote: The generated code is sometimes different than\nbefore because GVN uses instruction ids for input\nordering for commutative operations.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: Ifa3a5774f8f3fbff4e3ca359c38eceee993d62cd\n"
    },
    {
      "commit": "b47b978486572492140b63b0c8c5daa58dc28d41",
      "tree": "546c065d9396ef25bbd08b02d5ef4f6d269babfc",
      "parents": [
        "e778fa6ead79e9cb26810d484c5a594e9612de9b"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Wed Dec 04 21:02:09 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 14 10:26:59 2020 +0000"
      },
      "message": "ART: Fix vectorizer HalvingAdd idiom.\n\nIsAddConst2 function tried to extract addition chains\nfor the halving add idiom: (A + B) \u003e\u003e 1. The problem\nwas that regular shift right (x \u003e\u003e 1) was accepted for the\nidiom (with {A: x, B: 0}) and not processed as a shift - which\nbroke the assumptions on shifts right and operand signedness.\nThis CL fixes that.\n\nTest: 646-checker-simd-hadd.\nTest: test-art-target.\n\nChange-Id: Icf71e1a8e8c54e68114d7d5d6c4aa8a47ea5234d\n"
    },
    {
      "commit": "b1fe5e18318c3af8d0cedc3f19cb6bc51817b859",
      "tree": "4d88d27299206410ab0908baa9f7d0be14075790",
      "parents": [
        "69828ac1c6de77fadb3660d6f20b52d46440a0a9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 10 14:30:49 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 10 17:08:03 2020 +0000"
      },
      "message": "HStringBuilderAppend cannot be null.\n\nFix DCHECK() failure where we replaced an instruction\nwith non-null result (HInvoke StringBuilder.toString())\nwith an instruction that did not report that the result\ncannot be null (HStringBuilderAppend) and then used the\nresult as both receiver and argument for String.equals().\nThe fix is to preserve the \"cannot be null\" invariant.\n\nTest: Additional test in 697-checker-string-append.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 151107293\nBug: 19575890\nChange-Id: I205f002bf8d2dfee6079ea0e14786ca0ab2e2e9c\n"
    },
    {
      "commit": "1868de9c954e057c30ff9a086a213c86a75d7fb6",
      "tree": "cea533316ad0d1605a62620571426c28fbae147b",
      "parents": [
        "5b768893456ca3a998b7a2a93490229febbec1cf"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Wed Feb 12 09:10:21 2020 -0800"
      },
      "committer": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Fri Feb 21 18:51:23 2020 +0000"
      },
      "message": "Refactor inliner\n\nThis change rearranges some of the inliner code. The main goal is to\nmake some of the larger functions more readable and make clearer how to\nmodify the inliner in the future.\n\nSome of the specific changes include:\n\n* Code to find the actually call target has been factored into a\n  separate method.\n\n* The call to TryInlineFromEarlyCache has been made into an early exit\n  rather than a fall through case. This lowers the indentation level for\n  the main inline case.\n\n* Split the initial checks for whether inlining is possible into\n  IsInliningAllowed, IsInliningSupported, and\n  IsInliningBudgetAvailable. This is to make it more clear why these\n  restrictions are in place. Note that some of these checks are now in a\n  different order.\n\n* Factor the checks that come after the inlined body has been optimized\n  into a separate method. These haven\u0027t been further broken down yet,\n  but this would be worthwhile future work.\n\n* Remove CanAllocateRegistersFor. We should be able to allocate\n  registers for any compiler we support, and if not, this should be\n  caught when we try to allocate registers instead.\n\nBug: 149392334\nTest: ./test/testrunner/testrunner.py --host --optimizing --no-jvmti --ndebug \\\n      \t\t\t\t      --64\nChange-Id: Ic1b919e306b7b93944ee5686e2a487b2190c087c\n"
    },
    {
      "commit": "54f4fbd1a6834f06dc9b644b865423fdc03afb15",
      "tree": "4f55b2a196453a8a197a1787a688cc299682e55d",
      "parents": [
        "2d3de3a40015af07f7645a298f77b398af0c6c2c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 12 10:52:22 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 13 09:14:02 2020 +0000"
      },
      "message": "Remove MIPS support from Optimizing.\n\nTest: aosp_taimen-userdebug boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 147346243\nChange-Id: I97fdc15e568ae3fe390efb1da690343025f84944\n"
    },
    {
      "commit": "a59af8aeaad8fe7d68d8f8de63eab9cf85b6ab31",
      "tree": "83195c74b135731cc4555254763a8f449691c1b0",
      "parents": [
        "5c8cc64b5f1580faf510f27527e7e22987174963"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 27 17:42:32 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 14:32:09 2019 +0000"
      },
      "message": "JIT baseline: trigger optimized compilation on hotness threshold.\n\n- Add a new hotness count in the ProfilingInfo to not conflict with\ninterpreter hotness which may use it for OSR.\n- Add a baseline flag in the OatQuickMethodHeader to identify baseline\ncompiled methods.\n- Add a -Xusetieredjit flag to experiment and test.\n\nBug: 119800099\nTest: test.py with Xusetieredjit to true\n\nChange-Id: I8512853f869f1312e3edc60bf64413dee9143c52\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": "7cfc8f5b2a7c1af68de5f2e79652cf55954794dc",
      "tree": "bef388a5083ed2b9cf497cd6689489828f2ae13e",
      "parents": [
        "70b93ffca22d665db661a7f15f2f1b59dc60839a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 07 10:41:09 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 07 15:49:47 2019 +0000"
      },
      "message": "Don\u0027t compile OSR methods that have phi equivalents at loop entry.\n\nWe currently don\u0027t handle this in the stack map, where we only encode\none stack slot for a dex register.\n\nBug: 136698025\nTest: 721-osr\nChange-Id: Ib395ed1165387ad5446a463c307cc0a45e365885\n"
    },
    {
      "commit": "b45a435e25d69592f27084a615b351760f040875",
      "tree": "6920830856dbe3cceb648b365b0d057ea3ea93ec",
      "parents": [
        "5132e0d1433b0962f9609dbbd68427e1fb5a4b9d"
      ],
      "author": {
        "name": "Shalini Salomi Bodapati",
        "email": "shalini.salomi.bodapati@intel.com",
        "time": "Wed Jul 10 16:09:41 2019 +0530"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 17 11:12:22 2019 +0000"
      },
      "message": "Add AVX support for packed mul/div instructions.\n\nThis is a follow up for the below patch:\nhttps://android-review.googlesource.com/c/platform/build/+/830841\n\nTest: ./test.py --host --64, test-art-host-gtest\nChange-Id: Id2aa473035556ee230e66addeb69707df8530e75\nSigned-off-by: Shalini Salomi Bodapati \u003cshalini.salomi.bodapati@intel.com\u003e\n"
    },
    {
      "commit": "2808be84a8f86542450670acdb5e6b55498ff5f0",
      "tree": "f41b63e3109a6a6a9bd534f32b8d92f20eb9ef35",
      "parents": [
        "460f05480379d5c75555d06c4938bc990ce6ff83"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Dec 20 19:15:11 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 15 09:30:36 2019 +0000"
      },
      "message": "ART: Introduce stackmap with no DexRegInfo.\n\nSome of safepoints don\u0027t need to have DexRegisterMap info;\nthis will decrease the stackmap size.\n\n.oat file size reduction:\n - boot.oat:           -233 kb (-5.4%)\n - boot-framework.oat: -704 kb (-4.9%)\n\nTest: 461-get-reference-vreg, 466-get-live-vreg.\nTest: 543-env-long-ref, 616-cha*.\nTest: test-art-target, +gc-stress.\n\nChange-Id: Idbad355770e30a30dcf14127642e03ee666878b8\n"
    },
    {
      "commit": "a48c3dfcebece7ee4b893757b715319f0b5b1fa7",
      "tree": "eb846bcf242f7e9f4243196b5f4546b0a222cfa0",
      "parents": [
        "1459929a7e9ea96932b6c24597e1692b9b05606c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 13:11:12 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 28 06:37:34 2019 +0000"
      },
      "message": "Revert \"Revert \"Make the JIT zygote memory shared.\"\"\n\nThis reverts commit 2fef66b294417d447630f9d98de68227eef476d3.\n\nBug: 119800099\nBug: 136110523\n\nReason for revert: Fixed webview_zygote case.\n\nChange-Id: Iaae8c999463d77b7b1e62b55458493bdbc97a104\n"
    },
    {
      "commit": "ee1f1264314303829f6dca288781ed114c65dd93",
      "tree": "ac042304d0cb4b978d1532cad704e8604236a897",
      "parents": [
        "da5e041d8cbd714e791974dbdd876c23141801cb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 26 14:37:17 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 27 14:37:54 2019 +0000"
      },
      "message": "Fix search for implicit null check.\n\nThere are additional instructions that can be emitted at use\nsite for x86/x86-64, such as ArrayLength, and the implicit\nnull check may therefore be emitted later than at the next\ninstruction. Search for the implicit null check until we\nreach an instruction that\u0027s not emitted at use site.\n\nThis also reverts the blacklisting of the test, i.e.\n    commit 5be5260cfec2fc0a8c21ef1a08e7144523a8bfcd.\n\nTest: testrunner.py --host \\\n      --jit-on-first-use --debuggable -t 122-npe\nTest: testrunner.py --host \\\n      --optimizing --jit --jit-on-first-use \\\n      --debuggable --ndebuggable\nBug: 136021898\nChange-Id: I768f55d8c8975dbd0376802c10ca8508df3fe3b0\n"
    },
    {
      "commit": "2fef66b294417d447630f9d98de68227eef476d3",
      "tree": "59fc4ea6cf13217eb92fbdd4e39561b5ad518cf0",
      "parents": [
        "21d5994583c679cd5d8573b5d35dbd659bdca2c7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 26 22:00:02 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 26 22:00:38 2019 +0000"
      },
      "message": "Revert \"Make the JIT zygote memory shared.\"\n\nThis reverts commit 05f87217ddc9b4b9186710c0135b918f456c5aef.\n\nBug: 119800099\nBug: 136110523\n\nReason for revert: testWebview flaking\n\nChange-Id: I96afa6bc9c56c4aaf5ed72ae370f6f69c096c559\n"
    },
    {
      "commit": "05f87217ddc9b4b9186710c0135b918f456c5aef",
      "tree": "6e7bc0d2a3d8faa94c303d7d753319f3850fadcd",
      "parents": [
        "8d335b61d637fa9b040eb9d559dbac98067467f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 19 10:00:00 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 26 12:24:15 2019 +0000"
      },
      "message": "Make the JIT zygote memory shared.\n\nTest: boots\nBug: 119800099\nChange-Id: I75ff8a58eea4de5cb833139641b4e15b8394d9b1\n"
    },
    {
      "commit": "1e52a07b4de0f000028e55c332aa46495f60879c",
      "tree": "1eb7dfdce749461c5a8997cbde49ed6d0fea2aa0",
      "parents": [
        "e0ce8bf743b7fc5816bc4045716d75378ce3b654"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jun 25 09:12:04 2019 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jun 25 16:25:13 2019 +0000"
      },
      "message": "Correct Indicies -\u003e Indices\n\nThis is a misspelling that is somewhat common in art/.\nFix up all the instances I could find.\n\nTest: ./test.py --host\nChange-Id: I0a5def6e4126cf4e61efb0619bd59eb45ba7f324\n"
    },
    {
      "commit": "3fae12960c2d411dff450fce95c096af0e8d74de",
      "tree": "5cc26dc33db8f391b3c7ab1fe24546b17f33d389",
      "parents": [
        "b7c640d364d32b79cb52d04750b063667a9a0c86"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 07 11:26:25 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 11 08:58:34 2019 +0000"
      },
      "message": "Move IntrusiveForwardList\u003c\u003e to libartbase.\n\nIt\u0027s generally useful, not just for the compiler.\n\nTest: m test-art-host-gtest\nChange-Id: I3ca742d93a0bca961d1b8b8209356747d2de08a0\n"
    },
    {
      "commit": "81d15be76923ec23b86e72bbc2d3a2a6542a325e",
      "tree": "57bf31c2951cbeebddd72c94a415711423c88f88",
      "parents": [
        "5fd673488c25991ecc85d26c2dc54415773eb407"
      ],
      "author": {
        "name": "Shalini Salomi Bodapati",
        "email": "shalini.salomi.bodapati@intel.com",
        "time": "Thu May 30 11:00:42 2019 +0530"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 05 16:06:49 2019 +0000"
      },
      "message": "Add AVX support for packed add/sub instructions on x86\n\nTest: ./test.py --host, test-art-host-gtest\n\nChange-Id: I48d05e6f6befd54657d962119a543b27a8a51d71\nSigned-off-by: Shalini Salomi Bodapati \u003cshalini.salomi.bodapati@intel.com\u003e\n"
    },
    {
      "commit": "552a13415573da19eafa46e1ac00fb0eb68f2b23",
      "tree": "8cae5f3602d8f8e65cd3cbc349af17d785128605",
      "parents": [
        "0dda8c84938d6bb4ce5a1707e5e109ea187fc33d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 31 10:56:47 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 16 14:44:09 2019 +0000"
      },
      "message": "ART: Optimize StringBuilder append pattern.\n\nRecognize appending with StringBuilder and replace the\nentire expression with a runtime call that perfoms the\nappend in a more efficient manner.\n\nFor now, require the entire pattern to be in a single block\nand be very strict about the StringBuilder environment uses.\nAlso, do not accept StringBuilder/char[]/Object/float/double\narguments as they throw non-OOME exceptions and/or require a\ncall from the entrypoint back to a helper function in Java;\nthese shall be implemented later.\n\nBoot image size for aosp_taimen-userdebug:\n - before:\n   arm/boot*.oat: 19653872\n   arm64/boot*.oat: 23292784\n   oat/arm64/services.odex: 22408664\n - after:\n   arm/boot*.oat: 19432184 (-216KiB)\n   arm64/boot*.oat: 22992488 (-293KiB)\n   oat/arm64/services.odex: 22376776 (-31KiB)\nNote that const-string in compiled boot image methods cannot\nthrow, but for apps it can and therefore its environment can\nprevent the optimization for apps. We could implement either\na simple carve-out for const-string or generic environment\npruning to allow this pattern to be applied more often.\n\nResults for the new StringBuilderAppendBenchmark on taimen:\n  timeAppendLongStrings: ~700ns -\u003e ~200ns\n  timeAppendStringAndInt: ~220ns -\u003e ~140ns\n  timeAppendStrings: ~200ns -\u003e 130ns\n\nBug: 19575890\nTest: 697-checker-string-append\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nTest: vogar --benchmark art/benchmark/stringbuilder-append/src/StringBuilderAppendBenchmark.java\nChange-Id: I51789bf299f5219f68ada4c077b6a1d3fe083964\n"
    },
    {
      "commit": "d456117108c1efad790808698787868813b428e2",
      "tree": "d5785c40ad689dbd158fc52eed8b32c9ced967d5",
      "parents": [
        "ba2531826613a21736dd170d09877d3eb7990c5d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 30 17:48:25 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 13 15:36:23 2019 +0000"
      },
      "message": "ART: Mark StringBuilder.append()s as intrinsics.\n\nWe do not actually emit intrinsic implementations for these\nmethods but we use this designation to simplify their use\nknowing that they \"return this\". This also prepares for\nrecognizing and optimizing the StringBuilder append pattern.\n\nNote that intrinsics are never inlined but these methods are\ndefined in core-oj and therefore the rest of the boot image\nand prebuilts are not allowed to inline them anyway.\n\nBoot image sizes for aosp_taimen-userdebug:\n - before:\n   arm/boot*.oat: 19756400\n   arm64/boot*.oat: 23415656\n - after:\n   arm/boot*.oat: 19653872 (-100KiB)\n   arm64/boot*.oat: 23292784 (-120KiB)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 19575890\nChange-Id: I2f3bac17830ac1c51287b090a96facddd3d09f5c\n"
    },
    {
      "commit": "39402548017c99f9b33afaa851f412371013e911",
      "tree": "80c4d53cb7ae12ab9f4800cb358e53d5109593da",
      "parents": [
        "2fde9bdc252e209d722f83410f2ced42ab73e8a4"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sun Mar 24 02:47:16 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 29 18:18:00 2019 +0000"
      },
      "message": "Modernise code to use override specifier\n\nGenerated by clang-tidy, with IgnoreDestructors option enabled.\n\nTest: m checkbuild\nBug: 116509795\nChange-Id: I5dafa10c2cf605165581b8cf7dd2633ed101ed65\n"
    },
    {
      "commit": "44a6f978d7989f368155480a2d75e52a7d663879",
      "tree": "cc7a55280ce9579c574bbbd6c5e30bdaab0f273b",
      "parents": [
        "a9c9e85ea1c77d9badf27aebd63d617ccdf70dc3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 08 18:07:49 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 08 18:08:31 2019 +0000"
      },
      "message": "ART: Remove obsolete comment.\n\nHInstruction::GetKind() no longer involves virtual dispatch.\n\nTest: Rely on TreeHugger\nChange-Id: Id0cc04ab5e4b30c69fb32367558405f9c11b30ff\n"
    },
    {
      "commit": "206348cea8b086a484b8bde37b2e281e5f7db638",
      "tree": "1e83b6484dbd9218ace7c94d266dc90ed7e66505",
      "parents": [
        "58a268aa3569d8ad4f0e831de578620e1079ed59"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Dec 05 11:11:33 2018 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Jan 28 09:37:57 2019 -0800"
      },
      "message": "Selectively allow dead reference elimination\n\nAllow dead reference elimination in methods not containing\n@ReachabilitySensitive accesses or calls, when the class is marked\n@DeadReferenceSafe.\n\nAdd 1339-dead-reference-safe to aggressively check that everything\nworks as intended.\n\nBug: 111453875\n\nTest: art/test/testrunner/testrunner.py --host --64 -t 1339-dead-reference-safe\n\nDetect ReachabilitySensitive annotations.\n\nChange-Id: I70c20431fdbcfcfd2692b2255d12ad59e37cb669\n"
    },
    {
      "commit": "ebc3b25e187cb39a12dcb05ae1c44de23aa5696e",
      "tree": "589f80a876f899a14608ee657b10fd4b821f463f",
      "parents": [
        "458a948d4fc954d767103b5a95803a0a60be9f1c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 09 10:47:02 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 09 12:40:22 2019 +0000"
      },
      "message": "Fix compiler bug when typing exceptions.\n\nHandlers of different exception types can start at the same\nbytecode address, so we should update the type in the compiler\nto avoid wrongly typing the exception.\n\nbug: 119944057\nTest: 689-multi-catch\nChange-Id: I66e43890634965ee7790436c8e5a718564c6040f\n"
    },
    {
      "commit": "3db70689e3e1c92344d436a8ea4265046bdef449",
      "tree": "3db08743e968062ed5bdc143233cdb3c4564696b",
      "parents": [
        "1650dafad62578a1766bd617d78458a4cf1e2a9a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 26 15:12:03 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 27 12:56:39 2018 -0800"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles compiler.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: I5cdfe73c31ac39144838a2736146b71de037425e\n"
    },
    {
      "commit": "7fbc4a59ba2e60d869313d7961662430df83b2cb",
      "tree": "59520285df8d2075412ddc566a0d4d96d4c7e109",
      "parents": [
        "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 28 08:26:47 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Move to using locks.h instead of mutex.h\n\nWhen only annotating lock requirements, use locks.h.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1608b03254712feff0072ebad012c3af0cc3dda4\n"
    },
    {
      "commit": "dd121f637509a50d6744a0ad596f5dc627e0c60a",
      "tree": "1e20c636cd40a5a87cae1cd0d0b55940c8111a20",
      "parents": [
        "fe59955fc41e277bf1c60378202ba785abb1e4a8"
      ],
      "author": {
        "name": "Shalini Salomi Bodapati",
        "email": "shalini.salomi.bodapati@intel.com",
        "time": "Fri Oct 26 15:03:53 2018 +0530"
      },
      "committer": {
        "name": "Shalini Salomi Bodapati",
        "email": "shalini.salomi.bodapati@intel.com",
        "time": "Thu Nov 08 14:50:29 2018 +0530"
      },
      "message": "Emit bit manipulation instructions for x86 and x86_64\n\nThis patch performs instruction simplification to\ngenerate instructions andn, blsmsk and blsr on\ncpus that have avx2.\n\nTest: test.py --host --64, test-art-host-gtest\nChange-Id: Ie41a1b99ac2980f1e9f6a831a7d639bc3e248f0f\nSigned-off-by: Shalini Salomi Bodapati \u003cshalini.salomi.bodapati@intel.com\u003e\n"
    },
    {
      "commit": "c1c3452e465e473df499196b387330a793b89680",
      "tree": "1b144182126bfc73c5d82d1941e1673826d39343",
      "parents": [
        "3b5062083d3e203d1c72b066150b4fe441588a25"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 31 13:56:49 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 01 17:01:31 2018 +0000"
      },
      "message": "Do not cache RequiresConstructorBarrier() results.\n\nAvoid caching the results. Caching was broken for JIT in the\npresence of class unloading; entries for unloaded dex files\nwere leaked and potentially used erroneously with a newly\nloaded dex file.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Pixel 2 XL boots.\nTest: m test-art-target-gtest\nTest: testrunner.py --target\nBug: 118808764\nChange-Id: Ic1163601170364e060c2e3009752f543c9bb37b7\n"
    },
    {
      "commit": "b546163926889130354ccdbcccb80c0331c13f3c",
      "tree": "b4a3fb30e11e2abc671fb0b4b8098acd8fc49ce2",
      "parents": [
        "8db807252e1d4d0bab7785be231e20a1e5fd8e74"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 15 14:24:21 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 16 10:47:24 2018 +0100"
      },
      "message": "Fix HNewArray with unresolved primitive array type.\n\nAnd enable test 920-objects that was crashing because\nof this bug.\n\nTest: testrunner.py --host --jit-on-first-use -t 920\nTest: testrunner.py --host --optimizing\nTest: m test-art-host-gtest\nBug: 117638896\nChange-Id: I47dc893b121c82de537b3147c86d37a6eecf2d62\n"
    },
    {
      "commit": "acc56ac6a33a23abbf4a9a62528e352ea28c5407",
      "tree": "e1dd4569fd5b49879ec8dfd1b5ef5204a1084407",
      "parents": [
        "4ca6cc7ddcbd568b365c428371ea9675799775af"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 09 08:45:24 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 10 11:10:08 2018 +0100"
      },
      "message": "Introduce a \u0027baseline\u0027 variant for the compiler.\n\nImplemented as a stripped down version of the optimizing compiler,\nnot running any optimization.\n\nAdjust code to still work with expectations in code generators.\n\nbug: 111397239\n\nTest: test.py --baseline\nChange-Id: I4328283825f9a890616e7496ed4c1e77d6bcc5dd\n"
    },
    {
      "commit": "0846a8ffafffdf4c18d52f9896b13f40a1c9828d",
      "tree": "299636dbde6772b4d11ce9ae3a3cd5675f3d0feb",
      "parents": [
        "9ec8559bc2e18075cdcd9a2f09206b698d3c1993"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 12 15:21:07 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 03 10:21:24 2018 +0000"
      },
      "message": "Fix ReplaceUninitializedStringPhis.\n\nMove the analysis after redundant phi and dead phi elimination,\nknowing that only graphs with irreducible loops may still have\na phi as input of the invoke. In such a case, we bail.\n\nbug: 112537407\nTest: 563-checker-fake-string\nChange-Id: Ib9eefa4ce905b7fb418ca9b2a3c26ea4df74ce8f\n"
    },
    {
      "commit": "f02046e103f856a0766634886dedeed6a14f68d3",
      "tree": "c173a1074c8df741f8409166eb1b6f0687e96153",
      "parents": [
        "8d72551de46efe5cd9ba2b5e43c845a10a6a0bce"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 02 15:31:32 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 02 15:33:06 2018 +0100"
      },
      "message": "Add packed bits check to HBoundsCheck.\n\nTest: m\nChange-Id: If8581d6edc2649ea1a6a306e84cde23597a59b76\n"
    },
    {
      "commit": "0de9c08aefc2465fd1d2fcedec3d3fa2164056fe",
      "tree": "4c88b795d07b57ebef23accb87523600e8e217fe",
      "parents": [
        "91be58aaa16ecf36642d9c274d48885c84f09f9d",
        "76d4bb0f3d460671982bf40b9a9365e236501d80"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 28 12:09:52 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 28 12:09:52 2018 +0000"
      },
      "message": "Merge \"Remove need for intrinsic recognizer to be a pass.\""
    },
    {
      "commit": "76d4bb0f3d460671982bf40b9a9365e236501d80",
      "tree": "30cef155340112a3c3628cfd95b9cc6ea49348a3",
      "parents": [
        "8f676995c00154f48d6b68b1656b654d0cd4593c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 21 12:58:45 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 28 10:36:00 2018 +0100"
      },
      "message": "Remove need for intrinsic recognizer to be a pass.\n\nInstead just recognize the intrinsic when creating an invoke\ninstruction.\n\nAlso remove some old code related to compiler driver sharpening.\n\nTest: test.py\nChange-Id: Iecb668f30e95034970fcf57160ca12092c9c610d\n"
    },
    {
      "commit": "aaac0e3cbfe72217cad204d0122f2b73a602d2dd",
      "tree": "d148274452b3a409c9d6b8ef749c34185375d2ea",
      "parents": [
        "7dca45b9677c16a54347cdc0d08bfa2bdd94b464"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Aug 07 00:52:22 2018 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Sep 25 14:47:48 2018 +0100"
      },
      "message": "ART: ARM64: Support DotProd SIMD idiom.\n\nImplement support for vectorization idiom which performs dot\nproduct of two vectors and adds the result to wider precision\ncomponents in the accumulator.\n\nviz. DOT_PRODUCT([ a1, .. , am], [ x1, .. , xn ], [ y1, .. , yn ]) \u003d\n                 [ a1 + sum(xi * yi), .. , am + sum(xj * yj) ],\n     for m \u003c\u003d n, non-overlapping sums,\n     for either both signed or both unsigned operands x, y.\n\nThe patch shows up to 7x performance improvement on a micro\nbenchmark on Cortex-A57.\n\nTest: 684-checker-simd-dotprod.\nTest: test-art-host, test-art-target.\n\nChange-Id: Ibab0d51f537fdecd1d84033197be3ebf5ec4e455\n"
    },
    {
      "commit": "04695984d8687f13174ca03a943603831d7d0227",
      "tree": "897d895e7ca561347215ec2d1babdabb922509c0",
      "parents": [
        "ddfbb5f63c1ceb445bc62f48e9333706f9eebe2f",
        "d1aa7d0eec33e5f297d1eadedda714d4d0a3ef91"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 03 12:11:51 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 03 12:11:51 2018 +0000"
      },
      "message": "Merge \"ART: Remove unneeded SideEffects for fatal instructions.\""
    },
    {
      "commit": "d1aa7d0eec33e5f297d1eadedda714d4d0a3ef91",
      "tree": "e8a3876705be966611a06659e9f4b848205f3957",
      "parents": [
        "11529ab4cdf06e579182fa4252170aa4541f4ce9"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Fri Jun 22 11:35:46 2018 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Fri Aug 31 12:34:32 2018 +0100"
      },
      "message": "ART: Remove unneeded SideEffects for fatal instructions.\n\nRemove \"CanTriggerGC\" side effect for NullCheck, BoundsCheck and\nDivZeroCheck - instructions which have fatal slow paths. Even though\nGC might happen after going through those instructions\u0027 slow path\nexecution doesn\u0027t return to the next instruction after the\nexceptional one so side effects can be relaxed.\n\nPerformance improvement (angler, arm64, little core):\n - Geomean:                      2.8%\n - Particular benchmarks\n   - algorithm/Sort.SystemSort: 13.0%\n   - stanford/IntMM:            12.7%\n   - stanford/Puzzle:            9.5%\n   - benchmarksgame/revcomp:     8.9%\n   - reversigame/Reversi:        3.5%\n\nTest: 510-checker-try-catch.\nTest: 706-checker-scheduler.\nTest: 527-checker-array-access-split.\nTest: test-art-host, test-art-target.\n\nChange-Id: I55ac011822e5dbac82c828a700213dbea87329c8\n"
    },
    {
      "commit": "625ca4759941299e8a9cc876c985558c4d76bdc0",
      "tree": "d8085b20c9cc9dd2304e61f40807cd8fb072ca72",
      "parents": [
        "f73cacaae3d8f89327d8886b37792a849cabd9ac"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 19:14:16 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 14:51:00 2018 +0100"
      },
      "message": "Remove \u0027virtual\u0027 and \u0027override\u0027 qualifiers on final methods.\n\nCpplint considers that \u0027virtual\u0027 and \u0027override\u0027 qualifers are\nredundant for methods declared \u0027final\u0027.\n\nTest: mmma art\nChange-Id: If4de1e1fe306f2ee3db9534930b1d24abeaf9fe4\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": "61ba8d2421a98e9b16510be4f9af7ca7bc4c9055",
      "tree": "9a79331dd5ebd46ed46f853b24ab072f43debf28",
      "parents": [
        "eb369ce3669be74dd89b21f8b3ab31ace4a47086"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Aug 07 09:55:57 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 20 17:18:31 2018 +0100"
      },
      "message": "Fix longstanding bug around implicit NPEs and GC, version 2.\n\nThe TODO has been there since M (so forever :)):\nhttps://android-review.googlesource.com/c/platform/art/+/122794/13//COMMIT_MSG#13\n\nWe hardly see the issue in our tests as we need to have:\n1) A GC happening while creating the NPE object.\n2) ParallelMoves between the NullCheck and implicit null check operation\n   that moves references.\n\nThe CL piggy backs on the \"IsEmittedAtUseSite\" flag, to set implicit\nnull checks with it. The liveness analysis then special cases implicit\nnull checks to record environment uses at the location of the actual\ninstruction that will do the implicit null check.\n\nTest: test.py --gcstress\nTest: run-libcore-tests --gcstress\nbug: 111545159\nChange-Id: I3ecea4fe0d7e483e93db83281ca10db47da228c5\n"
    },
    {
      "commit": "a9f303c089aa2b2fc82d97201352945678ef54ae",
      "tree": "0df0eb5294a3ee72aea8ca670762c02ca9ffa8dd",
      "parents": [
        "1bfd891d06e276d602b4a6ccf1a9f70967195218"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 20 16:43:56 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 02 17:41:21 2018 +0100"
      },
      "message": "Rewrite Class init entrypoint to take a Class arg.\n\nFixes invalid type index being passed to the entrypoint for\nclass init check across dex files when the target type does\nnot have a TypeId in the compilation unit\u0027s DexFile.\n\nThe size of the aosp_taimen-userdebug prebuilts:\n  - before:\n    arm/boot*.oat: 16782748\n    arm64/boot*.oat: 19764400\n    oat/arm64/services.odex: 20162432\n  - after:\n    arm/boot*.oat: 16811692 (+28.3KiB, +0.17%)\n    arm64/boot*.oat: 19801032 (+35.8KiB, +0.19%)\n    oat/arm64/services.odex: 20232208 (+68.1KiB, +0.35%)\nThis increase comes from doing two runtime calls instead of\none for HLoadClass/kBssEntry that MustGenerateClinitCheck().\n\nTest: Additional test in 476-clinit-inline-static-invoke\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --jvm\nBug: 111433619\nChange-Id: I2fccd6944480ab4dac514f60d38e72c1014ae7b2\n"
    },
    {
      "commit": "8e524ad3c690c183b1a71f6114796974a107c5dd",
      "tree": "6ee124814e8f33fd4706eb15fcad2cae0019546b",
      "parents": [
        "5991b184a40e4ce181d67d683ced46caa6143b53"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 13 10:27:43 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 16 10:12:51 2018 +0100"
      },
      "message": "Always produce PIC code for AOT compilation.\n\nChange sharpening to use PIC load kinds for AOT compilation\nand add \"Jit\" to the direct addressing load kind names. Use\nPIC code also for the Integer.valueOf() intrinsic codegen.\nRemove all support for non-PIC linker patches.\n\nThe dex2oat --compile-pic option is retained for now but\nignored by the compiler.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing\nBug: 77856493\nChange-Id: I54d666f6522f160a1b6ece4045a15d19363acbb6\n"
    },
    {
      "commit": "8a62a4c9570b345b715a022d33d443413a634392",
      "tree": "4b34426f14301f230e9d6b5f23486a038cf6e548",
      "parents": [
        "b5271dd44a30f498689e503340d3c8d01bf31f07"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 03 09:39:07 2018 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 03 11:22:34 2018 +0100"
      },
      "message": "Handle String.\u003cinit\u003e with a phi input.\n\nWe wrongly assumed only irreducible loops could lead\nto this situation, but any loop can actually be in between\na String NewInstance and a String.\u003cinit\u003e.\n\nbug: 109666561\nTest: 563-checker-fakestring\nChange-Id: I018a22f7e22c15e140252544415f51d544f7cc13\n"
    },
    {
      "commit": "a6e2614354803077bd6e2f015873a717a7cc6690",
      "tree": "c0bc563a2e002b18166912c7497ae2e1d66cd75b",
      "parents": [
        "f28f96987c9a8fc3d01154f51f0a37fd32967949"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Jun 19 14:55:17 2018 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Fri Jun 22 14:41:50 2018 +0100"
      },
      "message": "ART: Extend the range of clonable instructions.\n\nMake a bunch of instructions clonable: DivZeroCheck,\nTypeConversion, InstanceOf, CheckCast.\n\nTest: with forced peeling and unrolling (applied to every clonable\nloop) all the test pass and device boots to GUI.\n\nTest: angler boots to GUI.\nTest: test-art-target, test-art-host.\nTest: 530-checker-peel-unroll.\n\nChange-Id: Id056b998e0a656dbada6958e7c667b7331047059\n"
    },
    {
      "commit": "4d277ba858389980525c16c4b0655ee72af5a44c",
      "tree": "5f8c522b1340e52a94af1d329cf069c74d1bb288",
      "parents": [
        "0e3a330f4a545a6a2d352bd4a803c8387f54e76b"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Tue Jun 05 20:54:42 2018 +0100"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Fri Jun 15 16:37:44 2018 +0100"
      },
      "message": "ART: Make GVN work with BoundType.\n\nSupport BoundType instruction treatment in GVN.\nNote: BoundType must not be a subject to LICM as it must not be\nmoved from more control dependent basic blocks to less control\ndependent (e.g. hoisted out from the loop) due to semantics of\nbounding the type.\n\nTest: 477-checker-bound-type.\nTest: test-art-target, test-art-host.\n\nChange-Id: I64263d6ec7d9ad75d1fb07d3a89e9973be67682b\n"
    },
    {
      "commit": "4c8e12e66968929b36fac6a2237ca4b04160161e",
      "tree": "d8bbfd72a978c69ef2eef98c37e7869673c52295",
      "parents": [
        "20c64f8d802cc575cc9a1a1f6c493a611b23e2ee"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri May 18 08:33:20 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jun 11 10:57:17 2018 +0100"
      },
      "message": "ART: Adds an entrypoint for invoke-custom\n\nAdd support for the compiler to call into the runtime for\ninvoke-custom bytecodes.\n\nBug: 35337872\nTest: art/test.py --host -r -t 952\nTest: art/test.py --target --64 -r -t 952\nTest: art/test.py --target --32 -r -t 952\nChange-Id: I821432e7e5248c91b8e1d36c3112974c34171803\n"
    },
    {
      "commit": "ca210e34eac5b262a85c05e8815ab266f7f983d2",
      "tree": "b4bcbb77cc00c62b62b4c84541c40daadb89f3fe",
      "parents": [
        "e46752658eaf41c0cc818c51a3e1cd95876bac93"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Fri Dec 15 13:43:20 2017 +0000"
      },
      "committer": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu May 24 18:13:31 2018 +0100"
      },
      "message": "ART: SBC: Support single exit loops with live_outs.\n\nSupport copying subgraphs with a single exit and live-outs -\nvalues which are defined inside the subgraph and have uses outside.\n\nTest: test-art-target, test-art-host.\nTest: 530-checker-peel-unroll.\n\nChange-Id: Id06a6f08d14c6e86f6437d662e24489f955e9edf\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": "06d10a78506fae7e033795cda7b1d9d0e1f1fff5",
      "tree": "91f94a605395776710f3d14298613a803158f3aa",
      "parents": [
        "93d301397c83b08f6fc165847a3d518e1031f392"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 14 08:53:38 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 14 16:49:55 2018 +0100"
      },
      "message": "ART: Add dex::ProtoIndex\n\nTest: m -j32 test-art-host\nChange-Id: Ic2d2a7a43be1b8590b97cdf3729200b043ffc6a3\n"
    },
    {
      "commit": "dbaa5c7ba8935cf87ceb40a4054f9842929e9a51",
      "tree": "5037625c80cb97a0e13026dc450db28e59ff72ca",
      "parents": [
        "51dda39549033b3c50a7fce5522ffc81325db54b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 08:22:46 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri May 11 11:55:30 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-handle\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I67f461c819a7d528d7455afda8b4a59e9aed381c\n"
    },
    {
      "commit": "18259d7fb7164a5e029df4f883b3a79ccc2403e8",
      "tree": "ba378bfdef4127bb0607215186e3b150fd38bcdf",
      "parents": [
        "922501b4bbf724e4259477a27764291684eedffb"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Apr 12 11:18:23 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 15:04:09 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-type\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I4b3d3969d455d0198cfe122eea8abd54e0ea20ee\n"
    },
    {
      "commit": "6d5b7e38fd5aba9eaad3a630b4859d214fa8f77c",
      "tree": "c6e9d055840bbc5a9b57de2128656d80f6ef7cd6",
      "parents": [
        "48af3b39cd7c8abaa7f9671191ec8260630239b2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 16:52:48 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 16:57:43 2018 +0100"
      },
      "message": "ART: Clean up after HInstruction::Is##type() rewrite.\n\nAddress late comments on\n    https://android-review.googlesource.com/679021 .\n\nTest: Rely on TreeHugger.\nChange-Id: Id82976651aced36b8ee2808b6a9effbfb3224d42\n"
    },
    {
      "commit": "a90dd515c4451ad3d6e7ecdf0f0527fcc1e32d91",
      "tree": "1d551b2ce84dd87e7622d011354cea24b856047a",
      "parents": [
        "b865d9af3bb5f4777dbe9cbd60cdb2a8fe5f0557"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 15:04:45 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 17:16:51 2018 +0100"
      },
      "message": "Reimplement HInstruction::Is##type().\n\nUse a table-based implementation for abstract kinds. This\nimplementation can be fully inlined and even eliminated if\nthe range of possible kinds is known.\n\nThere is a small (\u003c0.5%) improvement of dex2oat compile\ntime for a big app (sum of \"Compile Dex File Quick\" dumped\nfor --dump-timings with the timing of compiler passes hacked\naway) on aosp_taimen-userdebug, little cores, -j4. The sizes\nof libart-compiler.so have changed:\n  - lib/libart-compiler.so: 2178608 -\u003e 2169136 (-9472)\n    .rodata: 0xd36c -\u003e 0xd55c (+496)\n    .text: 0x175914 -\u003e 0x175f44 (+1584)\n    .data.rel.ro: 0xa858 -\u003e 0x84e8 (-9072)\n  - lib64/libart-compiler.so: 3091432 -\u003e 3064248 (-27184)\n    .rodata: 0x15aa4 -\u003e 0x15c94 (+496)\n    .text: 0x203304 -\u003e 0x202294 (-4208)\n    .data.rel.ro: 0x151d8 -\u003e 0x10a68 (-18288)\nNote that .data.rel.ro is always dirty memory, .rodata and\n.text is always clean.\n\nTest: Rely on TreeHugger\nChange-Id: I95e6040ecd23cad83f024970c3bf785d32169deb\n"
    },
    {
      "commit": "e394622583774d7e3c32bea0c7ffc4777ee47e56",
      "tree": "129435b4db6c780b1750b3a1a9b3f4cc8612b322",
      "parents": [
        "0dcccd815684b4c7540f9c6d39de161e44e5f51c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 14:18:47 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "ART: Do not define abstract HIR kinds.\n\nThey were never used and the two cases in HSchedulerARM64\u0027s\nIsSchedulable() were unreachable.\n\nTest: Rely on TreeHugger.\nChange-Id: I506bc2a89a6fbf556f32e25ecfe61eaad236a40a\n"
    },
    {
      "commit": "0dcccd815684b4c7540f9c6d39de161e44e5f51c",
      "tree": "89fce5c16f7d05f81c302a75e2ff744a002a1a3e",
      "parents": [
        "bd78567cef305e35481734b7fc24f68ded031439"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 13:32:25 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "ART: Remove InstructionTypeEquals().\n\nAvoid the virtual call and simply compare the instruction\nkinds.\n\nTest: Rely on TreeHugger.\nChange-Id: I7310de976614c5ec63d61a447a40047de5bc654d\n"
    },
    {
      "commit": "bd78567cef305e35481734b7fc24f68ded031439",
      "tree": "e3873b73e3631c5cd70c1a3f8f38e79dad25d890",
      "parents": [
        "9926e4615d75cb6c9371e1766a14b0a80089ae18"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 03 17:09:09 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 08 11:36:11 2018 +0100"
      },
      "message": "Store HIR type in HInstruction::packed_field_.\n\nThis is similar to\n    https://android-review.googlesource.com/609566\nthough the performance impact has not been measured.\nHowever, avoiding a virtual call reduces pressure on the\nbranch predictor and provides better optimization\nopportunities for the C++ compiler.\n\nAs there is now no difference between HTemplateInstruction\u003c\u003e\nand HExpression\u003c\u003e (the type is stored in HInstruction), we\nremove the former and use HExpression\u003c\u003e for all instructions\nthat have a fixed number of inputs.\n\nTest: Rely on TreeHugger.\nChange-Id: Ib3fd111048b0ac38ee65386a7e5af70c5ccc98de\n"
    }
  ],
  "next": "75ff2c96c37485ff8c74cf9942c0a4bf0710e91c"
}
