)]}'
{
  "log": [
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "4ae432df025804031ea89285dd9f89051124a966",
      "tree": "7eae9b85539dd305d7c0aa02c061e960719e9389",
      "parents": [
        "acac09dad3d5aa3922e6cdf54ff2e4fa6f176484"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu May 04 14:15:08 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu May 04 14:15:08 2017 -0700"
      },
      "message": "optimizing: Fix undefined behavior in graph checker\n\nChecking a variable being null after dereference is undefed behavior\nand the null check is often optimized out.\n\nChange-Id: I4d80510af6d49def1f9f7bd82c25eb366169babb\n"
    },
    {
      "commit": "d01745ef88bfd25df574a885d90a1a7785db5f5b",
      "tree": "058eb1593dbb0fe8a8e26b901909bec8aa01d474",
      "parents": [
        "a57c334075b193de9690fff97acf6c1b1d1283fc"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Apr 05 16:40:31 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue May 02 09:45:45 2017 -0700"
      },
      "message": "optimizing: constructor fence redundancy elimination - remove dmb after LSE\n\nPart one of a few upcoming CLs to optimize constructor fences.\n\nThis improves load-store-elimination; all singleton objects that are not\nreturned will have their associated constructor fence removed.\n\nIf the allocation is removed, so is the fence. Even if allocation is not\nremoved, fences can sometimes be removed.\n\nThis change is enabled by tracking the \"this\" object associated with the\nconstructor fence as an input. Fence inputs are considered weak; they do not keep\nthe \"this\" object alive; if the instructions for \"this\" are all deleted,\nthe fence can also be deleted.\n\nBug: 36656456\nTest: art/test.py --host \u0026\u0026 art/test.py --target\nChange-Id: I05659ab07e20d6e2ecd4be051b722726776f4ab1\n"
    },
    {
      "commit": "72155d2f05e38b265cb79a31abdbe65cd29d3a5b",
      "tree": "b699f16d33985384efa8494ba93866298c59c46b",
      "parents": [
        "0d2ea2f09937e55600f8a1eda6b102fef1ab9c0b"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Apr 25 15:17:16 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Apr 26 10:40:05 2017 -0700"
      },
      "message": "fix a null pointer dereference\n\nCaught by the static analyzer:\nart/compiler/optimizing/graph_checker.cc:501:10: warning: Called C++\nobject pointer is null [clang-analyzer-core.CallAndMessage]\n\nBug: None\nTest: Still builds; static analyzer no longer complains.\nChange-Id: Iba20a0cd859cca0cf38f6e10c3685cc986b5baa5\n"
    },
    {
      "commit": "46ee31b67d7ee1bd085fbc240502053caa3cf8fa",
      "tree": "83e870f293cd60d533207e389d7b094acd87b31f",
      "parents": [
        "9538f9e2a5d03f1b1bc07ebfbd93b61dcf8ad604"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 14 10:11:49 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 15 09:50:39 2016 -0800"
      },
      "message": "ART: Move to libbase StringPrintf\n\nRemove ART\u0027s StringPrintf implementation. Fix up clients. Add\nmissing includes where necessary.\n\nTest: m test-art-host\nChange-Id: I564038d5868595ac3bb88d641af1000cea940e5a\n"
    },
    {
      "commit": "d0f081ecbdf0e932b98c54e5f51ba3614c7a69e0",
      "tree": "82955f9141078b25576f342d7f3cacd0a984c68e",
      "parents": [
        "edcd7929e2bf521316fa5305109c330d563d87db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 01 19:32:26 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 01 20:05:07 2016 -0800"
      },
      "message": "ART: Delete unnecessary ScopedObjectAccess\n\nThis isn\u0027t protecting or serializing anything. Reduces\ndex2oatd compile time.\n\nTest: m test-art-host\nChange-Id: I8e6d1579578740b526070ba784b81bd0590e84b1\n"
    },
    {
      "commit": "e90049140fdfb89080e5cc9b000b0c9be8c18bcd",
      "tree": "66b45c052b6778fabd7847a44af5e610808fa867",
      "parents": [
        "a77ceae14a7be2494874d9256327efa8c522e234"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 16 16:50:52 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 01 13:26:24 2016 +0100"
      },
      "message": "Create a typedef for HInstruction::GetInputs() return type.\n\nAnd some other cleanup after\n    https://android-review.googlesource.com/230742\n\nTest: No new tests. ART test suite passed (tested on host).\nChange-Id: I4743bf17544d0234c6ccb46dd0c1b9aae5c93e17\n"
    },
    {
      "commit": "372f10e5b0b34e2bb6e2b79aeba6c441e14afd1f",
      "tree": "1f29c2467c8909ef0e0147f37f176caa1bcd2ccc",
      "parents": [
        "1b66fdf3f33c72dfdda4d31f6f17b6a0d8607402"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 17 16:30:10 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 02 19:04:20 2016 +0100"
      },
      "message": "Refactor handling of input records.\n\nIntroduce HInstruction::GetInputRecords(), a new virtual\nfunction that returns an ArrayRef\u003c\u003e to all input records.\nImplement all other functions dealing with input records as\nwrappers around GetInputRecords(). Rewrite functions that\npreviously used multiple virtual calls to deal with input\nrecords, especially in loops, to prefetch the ArrayRef\u003c\u003e\nonly once for each instruction.  Besides avoiding all the\nextra calls, this also allows the compiler (clang++) to\nperform additional optimizations.\n\nThis speeds up the Nexus 5 boot image compilation by ~0.5s\n(4% of \"Compile Dex File\", 2% of dex2oat time) on AOSP ToT.\n\nChange-Id: Id8ebe0fb9405e38d918972a11bd724146e4ca578\n"
    },
    {
      "commit": "93a18c5d4160f632ecdb92af099574e9c7098c49",
      "tree": "328e28e160fe894fb9487a625cbbfc4ab94c093c",
      "parents": [
        "f7cda8088ec57ab1422f85f08df78e217a9f7094"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 22 13:16:14 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 27 10:18:48 2016 +0100"
      },
      "message": "Forbid HDeoptimize instructions in OSR methods.\n\nOtherwise dominated instructions will assume something that\nisn\u0027t necessarily correct if coming from the interpreter.\n\nbug:28335959\nbug:28249238\nbug:28348878\nbug:28080135\n\nChange-Id: I842bd1c6a919aff48cf6048d2ea51cf2d40f3c1d\n"
    },
    {
      "commit": "46817b876ab00d6b78905b80ed12b4344c522b6c",
      "tree": "6715bee60b0682a10437866c9617cb442146aa2f",
      "parents": [
        "f59149a151ee694484e21da7b3b207920dead5a6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 29 12:21:58 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 19 18:33:06 2016 +0100"
      },
      "message": "Use iterators \"before\" the use node in HUserRecord\u003c\u003e.\n\nCreate a new template class IntrusiveForwardList\u003c\u003e that\nmimicks std::forward_list\u003c\u003e except that all allocations\nare handled externally. This is essentially the same as\nboost::intrusive::slist\u003c\u003e but since we\u0027re not using Boost\nwe have to reinvent the wheel.\n\nUse the new container to replace the HUseList and use the\niterators to \"before\" use nodes in HUserRecord\u003c\u003e to avoid\nthe extra pointer to the previous node which was used\nexclusively for removing nodes from the list. This reduces\nthe size of the HUseListNode by 25%, 32B to 24B in 64-bit\ncompiler, 16B to 12B in 32-bit compiler. This translates\ndirectly to overall memory savings for the 64-bit compiler\nbut due to rounding up of the arena allocations to 8B, we\ndo not get any improvement in the 32-bit compiler.\n\nCompiling the Nexus 5 boot image with the 64-bit dex2oat\non host this CL reduces the memory used for compiling the\nmost hungry method, BatteryStats.dumpLocked(), by ~3.3MiB:\n\nBefore:\n  MEM: used: 47829200, allocated: 48769120, lost: 939920\n  Number of arenas allocated: 345,\n  Number of allocations: 815492, avg size: 58\n  ...\n  UseListNode    13744640\n  ...\nAfter:\n  MEM: used: 44393040, allocated: 45361248, lost: 968208\n  Number of arenas allocated: 319,\n  Number of allocations: 815492, avg size: 54\n  ...\n  UseListNode    10308480\n  ...\n\nNote that while we do not ship the 64-bit dex2oat to the\ndevice, the JIT compilation for 64-bit processes is using\nthe 64-bit libart-compiler.\n\nBug: 28173563\nChange-Id: I985eabd4816f845372d8aaa825a1489cf9569208\n"
    },
    {
      "commit": "86ea7eeabe30c98bbe1651a51d03cb89776724e7",
      "tree": "01702f6df5c39925b354a3152dd04289e7d97062",
      "parents": [
        "0cb5c86b7021e70cbf584c1455aad1ef383af786"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 16 09:26:07 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 04 11:21:20 2016 +0100"
      },
      "message": "Build dominator tree before generating HInstructions\n\nSecond CL in the series of merging HGraphBuilder and SsaBuilder. This\npatch refactors the builders so that dominator tree can be built\nbefore any HInstructions are generated. This puts the SsaBuilder\nremoval of HLoadLocals/HStoreLocals straight after HGraphBuilder\u0027s\nHInstruction generation phase. Next CL will therefore be able to\nmerge them.\n\nThis patch also adds util classes for iterating bytecode and switch\ntables which allowed to simplify the code.\n\nBug: 27894376\nChange-Id: Ic425d298b2e6e7980481ed697230b1a0b7904526\n"
    },
    {
      "commit": "f355c3ff08710ac2eba3aac2aacc5e65caa06b4c",
      "tree": "1d9f9487897fabc539f748be881f9c8140c16cef",
      "parents": [
        "6f51d7756a9c66007fe7666b19399e1f60ff6092"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 30 19:09:03 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 30 19:09:03 2016 +0100"
      },
      "message": "Fix Boolean to integral types conversions.\n\nBug: 27616343\nChange-Id: I050f92045bca1b8b5d6da53547cc617f17be84b1\n"
    },
    {
      "commit": "947eb700bec9e214a72d4747864398dc238da60c",
      "tree": "f447fb4ce6d19ed014d1096990dc28e011f32ef2",
      "parents": [
        "5d87b29339c5301bea0bf2c3f47e520e3d7b0d16"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 25 15:31:35 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 25 16:29:46 2016 +0000"
      },
      "message": "Optimizing: Reduce arena memory used by GraphChecker.\n\nUse member variables to reuse the storage instead of\nrepeatedly allocating new storage for local variables.\n\nBug: 27690481\nChange-Id: I614db9b8614d585653cfbff62e9cf7d7f0c58810\n"
    },
    {
      "commit": "11edec7e7e8ac93f826d687b644fe700fab68993",
      "tree": "7a1a1bbbc7ae37a31f8301038f56f19b20be62f4",
      "parents": [
        "843a65556616183a36792bbcc1632c6d8d0e78b2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 12:40:52 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 24 14:21:46 2016 +0000"
      },
      "message": "ART: Loosen a GraphChecker rule on Boolean inputs\n\nGraphChecker tries to verify that Boolean inputs are properly typed.\nThis is non-trivial in the presence of simplifying optimizations\nwhich capitalize on the fact that a Boolean value is internally\nrepresented as an integer.\n\nThis patch removes the test from GraphChecker.\n\nBug: 27625564\nChange-Id: Ic61ea2193765b4578550538e965ca4f80fa4b287\n"
    },
    {
      "commit": "541261e66273857c638677424215de91f3d65a6f",
      "tree": "8e2dd00e442612e22ba1473a49597a2ae2735e81",
      "parents": [
        "f8a3dea642fe638f54d181b7ca280b79ee519398",
        "5b5b9319ff970979ed47d41a41283e4faeffb602"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 23 17:10:31 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 23 17:10:31 2016 +0000"
      },
      "message": "Merge \"Fix and improve shift and rotate operations.\""
    },
    {
      "commit": "48e722432bb6e19df7bba02427e4a707e671af06",
      "tree": "1e621756ba6a1fd345f2fb468eed88cdc81886e7",
      "parents": [
        "9a3c1fa119350ebd390c63cc464e0a373dd296dd",
        "0f49c82076b974f65ef37d5e72b04f5345b0d7cb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 22 19:02:00 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 22 19:02:00 2016 +0000"
      },
      "message": "Merge \"Optimizing: Reduce GraphChecker memory usage.\""
    },
    {
      "commit": "0f49c82076b974f65ef37d5e72b04f5345b0d7cb",
      "tree": "c1729e8dcd8cae07ed6d6a9d1d6ace154837be79",
      "parents": [
        "0c25da0276f5b6f6119793ae9d45d1bca8172c2b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 22 17:51:29 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 22 18:32:17 2016 +0000"
      },
      "message": "Optimizing: Reduce GraphChecker memory usage.\n\nBug: 27690481\nChange-Id: I15ce5524d94fc1780da02e6471bede66b3a1b82a\n"
    },
    {
      "commit": "6fa06e6f5a92cd318021afad9b036126438b2de4",
      "tree": "d48878a61532d4d901d5f31c18c569cc6234242d",
      "parents": [
        "2a07b80dfbfb869aabe96c88b10e07d26c0ce137",
        "937e6cd515bbe7ff2f255c8fcd40bf1a575a9a16"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 16:38:18 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 22 16:38:18 2016 +0000"
      },
      "message": "Merge \"Tighten art::HNeg type constraints on its input.\""
    },
    {
      "commit": "5b5b9319ff970979ed47d41a41283e4faeffb602",
      "tree": "e7795abf120cf512627786fd6302efd34535724b",
      "parents": [
        "0c25da0276f5b6f6119793ae9d45d1bca8172c2b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 14:57:31 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 14:57:31 2016 +0000"
      },
      "message": "Fix and improve shift and rotate operations.\n\n- Define maximum int and long shift \u0026 rotate distances as\n  int32_t constants, as shift \u0026 rotate distances are 32-bit\n  integer values.\n- Consider the (long, long) inputs case as invalid for\n  static evaluation of shift \u0026 rotate rotations.\n- Add more checks in shift \u0026 rotate operations constructors\n  as well as in art::GraphChecker.\n\nChange-Id: I754b326c3a341c9cc567d1720b327dad6fcbf9d6\n"
    },
    {
      "commit": "937e6cd515bbe7ff2f255c8fcd40bf1a575a9a16",
      "tree": "90660b3d679cfbd87327e9cda5c783128f1b9a92",
      "parents": [
        "1153282aa91292b740289ab7612a481e5c6bc167"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 11:54:37 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 22 11:54:37 2016 +0000"
      },
      "message": "Tighten art::HNeg type constraints on its input.\n\nEnsure art::HNeg is only passed a type having the kind of\nits input.  For a boolean, byte, short, or char input, it\nmeans HNeg\u0027s type should be int.\n\nBug: 27684275\nChange-Id: Ic8442c62090a8ab65590754874a14a0deb7acd8d\n"
    },
    {
      "commit": "f6a35de9eeefb20f6446f1b4815b4dcb0161d09c",
      "tree": "cf484acbd6889b92a7fe3e8615611129088c3894",
      "parents": [
        "459898dc4470559ba1e1d578bc52a914d1f573f5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 21 12:01:50 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 21 16:50:08 2016 +0000"
      },
      "message": "Optimizing: Fix register allocator validation memory usage.\n\nAlso attribute ArenaBitVector allocations to appropriate\npasses. This was used to track down the source of the\nexcessive memory alloactions.\n\nBug: 27690481\n\nChange-Id: Ib895984cb7c04e24cbc7abbd8322079bab8ab100\n"
    },
    {
      "commit": "22c4922c6b31e154a6814c4abe9015d9ba156911",
      "tree": "8e871f67e327322d24d0c2e4588b165005414077",
      "parents": [
        "0205b58a0d7a9ce5832393857c19c086c78996e9"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 14:04:28 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 18 14:04:28 2016 +0000"
      },
      "message": "Ensure art::HRor support boolean, byte, short and char inputs.\n\nAlso extend tests covering the IntegerRotateLeft,\nLongRotateLeft, IntegerRotateRight and LongRotateRight\nintrinsics and their translation into an art::HRor\ninstruction.\n\nBug: 27682579\nChange-Id: I89f6ea6a7315659a172482bf09875cfb7e7422a1\n"
    },
    {
      "commit": "a5c4a4060edd03eda017abebc85f24cffb083ba7",
      "tree": "85f69512d33c19d82e172a490a241f3a17d66560",
      "parents": [
        "713c519db15aaa8d6f33b744fd28adddb97a07c2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Mar 15 15:02:50 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Mar 16 16:49:36 2016 +0000"
      },
      "message": "Make art::HCompare support boolean, byte, short and char inputs.\n\nAlso extend tests covering the IntegerSignum, LongSignum,\nIntegerCompare and LongCompare intrinsics and their\ntranslation into an art::HCompare instruction.\n\nBug: 27629913\nChange-Id: I0afc75ee6e82602b01ec348bbb36a08e8abb8bb8\n"
    },
    {
      "commit": "916cc1d504f10a24f43b384e035fdecbe6a74b4c",
      "tree": "a68f7276cba6cd75bc0b200337edde8eafccccc7",
      "parents": [
        "442643920a6c539e98aad76594e99b932b5631ba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 11:12:31 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 14:41:25 2016 +0000"
      },
      "message": "Implement polymorphic inlining.\n\nFor example, before:\nHInvokeVirtual\n\nAfter:\nIf (receiver \u003d\u003d Foo) {\n  // inlined code.\n} else if (receiver \u003d\u003d Bar) {\n  // inlined code\n} else {\n  // HInvokeVirtual or HDeoptimize(receiver !\u003d Baz)\n}\n\nChange-Id: I5ce305aef8f39f8294bf2b2bcfe60e0dddcfdbec\n"
    },
    {
      "commit": "badd826664896d4a9628a5a89b78016894aa414b",
      "tree": "a30e8b3e62126ae1e1df1152ac643cfc5f2b074a",
      "parents": [
        "47a2a45a6673ddf3322115ff5058763f82a9368f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 02 16:28:56 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 15 10:21:07 2016 +0000"
      },
      "message": "ART: Run SsaBuilder from HGraphBuilder\n\nFirst step towards merging the two passes, which will later result in\nHGraphBuilder directly producing SSA form. This CL mostly just updates\ntests broken by not being able to inspect the pre-SSA form.\n\nUsing HLocals outside the HGraphBuilder is now deprecated.\n\nBug: 27150508\nChange-Id: I00fb6050580f409dcc5aa5b5aa3a536d6e8d759e\n"
    },
    {
      "commit": "74eb1b264691c4eb399d0858015a7fc13c476ac6",
      "tree": "0b6fc4f3003d50bf6c388601013cdfc606e53859",
      "parents": [
        "75fd2a8ab9b4aff59308034da26eb4986d10fa9e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 11:44:01 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 28 15:50:27 2016 +0000"
      },
      "message": "ART: Implement HSelect\n\nThis patch adds a new HIR instruction to Optimizing. HSelect returns\none of two inputs based on the outcome of a condition.\n\nThis is only initial implementation which:\n - defines the new instruction,\n - repurposes BooleanSimplifier to emit it,\n - extends InstructionSimplifier to statically resolve it,\n - updates existing code and tests accordingly.\n\nCode generators currently emit fallback if/then/else code and will be\nupdated in follow-up CLs to use platform-specific conditional moves\nwhen possible.\n\nChange-Id: Ib61b17146487ebe6b55350c2b589f0b971dcaaee\n"
    },
    {
      "commit": "09aa147f0891ef28a95d89e8ad61c429f82ddd5b",
      "tree": "dbf7ee48d5aa06dc4ba1ca88702e5e667e17a9db",
      "parents": [
        "a65ff5e0576ace8ffeb1a6dc8784a61cd2498fba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 19 10:52:54 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 19 13:24:07 2016 +0000"
      },
      "message": "Disable DCE when there are irreducible loops.\n\nAlso ensure an instruction that requires an environment\ndoes have one.\n\nChange-Id: I41a8460e05ef320f872197d3be7847e7ffaa6ee8\n"
    },
    {
      "commit": "28943466954ca5d6f586bb5496f7f3f0f85fe87a",
      "tree": "56a4f7427addf50aba847ea944ec24396c7e848f",
      "parents": [
        "68c56ae9ccdb6e348501456e374ae65e74f6270c",
        "6de1938e562b0d06e462512dd806166e754035ea"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 15 09:19:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 15 09:19:12 2016 +0000"
      },
      "message": "Merge \"ART: Remove incorrect HFakeString optimization\""
    },
    {
      "commit": "6de1938e562b0d06e462512dd806166e754035ea",
      "tree": "f9df086a73860c20768d17ff7bc5be4139567941",
      "parents": [
        "f5b84ee14a3bc578f799a39dca1ae512b49356ea"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 08 17:37:10 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 14 16:22:13 2016 +0000"
      },
      "message": "ART: Remove incorrect HFakeString optimization\n\nSimplification of HFakeString assumes that it cannot be used until\nString.\u003cinit\u003e is called which is not true and causes different\nbehaviour between the compiler and the interpreter. This patch\nremoves the optimization together with the HFakeString instruction.\n\nInstead, HNewInstance is generated and an empty String allocated\nuntil it is replaced with the result of the StringFactory call. This\nis consistent with the behaviour of the interpreter but is too\nconservative. A follow-up CL will attempt to optimize out the initial\nallocation when possible.\n\nBug: 26457745\nBug: 26486014\n\nChange-Id: I7139e37ed00a880715bfc234896a930fde670c44\n"
    },
    {
      "commit": "15bd22849ee6a1ffb3fb3630f686c2870bdf1bbc",
      "tree": "a261601589163faa4538bcf1c9d156e8ec4a42b3",
      "parents": [
        "5b7b5ddb515828c93f0c2aec67aa513c32d0de22"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 05 15:55:41 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 14 15:00:20 2016 +0000"
      },
      "message": "Implement irreducible loop support in optimizing.\n\nSo we don\u0027t fallback to the interpreter in the presence of\nirreducible loops.\n\nImplications:\n- A loop pre-header does not necessarily dominate a loop header.\n- Non-constant redundant phis will be kept in loop headers, to\n  satisfy our linear scan register allocation algorithm.\n- while-graph optimizations, such as gvn, licm, lse, and dce\n  need to know when they are dealing with irreducible loops.\n\nChange-Id: I2cea8934ce0b40162d215353497c7f77d6c9137e\n"
    },
    {
      "commit": "f555258861aea7df8af9c2241ab761227fd2f66a",
      "tree": "1317545f50f78eb7c9e4dd44ebfb256bdff0af11",
      "parents": [
        "c917d195d8d8d05f90796b1e0842883fc608346d"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sun Dec 27 13:36:12 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 06 10:33:30 2016 +0000"
      },
      "message": "ART: Create BoundType for CheckCast early\n\nReferenceTypePropagation creates a BoundType for each CheckCast and\nreplaces all dominated uses of the casted object with it. This does\nnot include Phi uses on the boundary of the dominated scope, reducing\ntyping precision. This patch creates the BoundType in Builder, causing\nSsaBuilder to replace uses of the object automatically.\n\nBug: 26081304\n\nChange-Id: I083979155cccb348071ff58cb9060a896ed7d2ac\n"
    },
    {
      "commit": "f5f64efda943000168d34bfe44ccbbadd284e55f",
      "tree": "7364ec231d39291af44245dc16b0ca48919862d0",
      "parents": [
        "74768fb83073a2ae84c9173d4fc53654e3092b24"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 15 14:11:59 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 16 12:22:20 2015 +0000"
      },
      "message": "Detect phi cycles.\n\nHaving reference and non-reference phi equivalent, only happened\nfor the 0/null constant. To avoid such occurences, we must\ndetect phi cycles.\n\nbug:25493693\n\nChange-Id: Ie1a8460c3abacca96c299da107fa4407e17dd792\n"
    },
    {
      "commit": "d9510dfc32349eeb4f2145c801f7ba1d5bccfb12",
      "tree": "9f4e4ffb5fae25c4f14059fd1d772726e9d96170",
      "parents": [
        "ceec5a3c81925cf80a18954b2e585316450c575c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Nov 04 23:30:22 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 13:03:19 2015 +0000"
      },
      "message": "ART: Refactor SsaBuilder for more precise typing info\n\nThis patch refactors the SsaBuilder to do the following:\n\n1) All phis are constructed live and marked dead if not used or proved\nto be conflicting.\n\n2) Primitive type propagation, now not a separate pass, identifies\nconflicting types and marks corresponding phis dead.\n\n3) When compiling --debuggable, DeadPhiHandling used to revive phis\nwhich had only environmental uses but did not attempt to resolve\nconflicts. This pass was removed as obsolete and is now superseded\nby primitive type propagation (identifying conflicting phis) and\nSsaDeadPhiEliminiation (keeping phis live if debuggable + env use).\n\n4) Resolving conflicts requires correct primitive type information\non all instructions. This was not the case for ArrayGet instructions\nwhich can have ambiguous types in the bytecode. To this end,\nSsaBuilder now runs reference type propagation and types ArrayGets\nfrom the type of the input array.\n\n5) With RTP being run inside the SsaBuilder, it is not necessary to\nrun it as a separate optimization pass. Optimizations can now assume\nthat all instructions of type kPrimNot have reference type info after\nSsaBuilder (with the exception of NullConstant).\n\n6) Graph now contains a reference type to be assigned to NullConstant.\nAll reference type instructions therefore have RTI, as now enforced\nby the SsaChecker.\n\nBug: 24252151\nBug: 24252100\nBug: 22538329\nBug: 25786318\n\nChange-Id: I7a3aee1ff66c82d64b4846611c547af17e91d260\n"
    },
    {
      "commit": "40a04bf64e5837fa48aceaffe970c9984c94084a",
      "tree": "27aeff3b9492b396050155734d81aba3c57ffbb7",
      "parents": [
        "763fd2d3d131898cad6295a19ae9a30e22ce5f2a"
      ],
      "author": {
        "name": "Scott Wakeling",
        "email": "scott.wakeling@linaro.org",
        "time": "Fri Dec 11 09:50:36 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 11 16:13:44 2015 +0000"
      },
      "message": "Replace rotate patterns and invokes with HRor IR.\n\nReplace constant and register version bitfield rotate patterns, and\nrotateRight/Left intrinsic invokes, with new HRor IR.\n\nWhere k is constant and r is a register, with the UShr and Shl on\neither side of a |, +, or ^, the following patterns are replaced:\n\n  x \u003e\u003e\u003e #k OP x \u003c\u003c #(reg_size - k)\n  x \u003e\u003e\u003e #k OP x \u003c\u003c #-k\n\n  x \u003e\u003e\u003e r OP x \u003c\u003c (#reg_size - r)\n  x \u003e\u003e\u003e (#reg_size - r) OP x \u003c\u003c r\n\n  x \u003e\u003e\u003e r OP x \u003c\u003c -r\n  x \u003e\u003e\u003e -r OP x \u003c\u003c r\n\nImplemented for ARM/ARM64 \u0026 X86/X86_64.\n\nTests changed to not be inlined to prevent optimization from folding\nthem out. Additional tests added for constant rotate amounts.\n\nChange-Id: I5847d104c0a0348e5792be6c5072ce5090ca2c34\n"
    },
    {
      "commit": "4a34277c55279ba57ab361f7580db846a201d9b1",
      "tree": "31d775a871a351357ecd5d6c76a3a827e20e6d07",
      "parents": [
        "f4c539395244ccfc14aebaf53fdc1122287f65a6"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Nov 30 10:17:46 2015 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Dec 01 13:26:16 2015 -0800"
      },
      "message": "Dynamic BCE (based on induction range analysis)\n\nRationale:\nA rewritten dynamic BCE that uses induction variable analysis\nto generate the run-time tests before a loop in order to\neliminate bounds-checks from its body. This CL removes now\nobsoleted induction related code inside the BCE module.\nAlso, the dynamic test generation is placed more strategically,\nsince we missed a few cases where static analysis does better.\n\nMost significant performance improvements (filtering noise) is about:\n\nLinpack +20%\nLU    \u003e +10%\n\nChange-Id: I03d7631857154b6a131b132f26a2dc568af1b3a1\n"
    },
    {
      "commit": "3fc7f357170311689c4c31007a5e168ddea321d5",
      "tree": "c10753139e577cd0fecf9f600228730282bb201f",
      "parents": [
        "d83b9042d67f2a7d5ca5a1f63819c97940033336"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Nov 20 22:03:03 2015 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Nov 20 22:03:03 2015 -0800"
      },
      "message": "Accept synthetic phi nodes and general names for blocks.\n\nRationale: these changes were already approved as part of the dynamic\n           bce changes, but I am now sending them out separately.\n\nChange-Id: I3564bac9f6a0b6a89466457836ff54ad09164faf\n"
    },
    {
      "commit": "d59c70627cc42878cc30b46bd29ff497b4483b22",
      "tree": "b0b7013ea78b10f23fae75ef145e53a696ff797c",
      "parents": [
        "0b5849be045c5683d4a6b6b6c306abadba5f0fcc"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Sat Nov 21 05:21:52 2015 +0000"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Sat Nov 21 05:21:52 2015 +0000"
      },
      "message": "Revert \"Dynamic BCE (based on induction range analysis)\"\n\nThis reverts commit 0b5849be045c5683d4a6b6b6c306abadba5f0fcc.\n\n\nChange-Id: Id33f5da42bbdfb1aff7e2281417c8a7aa492df05\nRationale: so close :-( but bullhead-userdebug (linux) build in git_mnc-dr-dev-plus-aosp reported a breakage with a type inconsistency (long vs int in probably the codegen of dynamic bce); no time to investigate and fix this fully before my trip, so rolling back for now\n"
    },
    {
      "commit": "0b5849be045c5683d4a6b6b6c306abadba5f0fcc",
      "tree": "87245845c05ddef6fb53ac4c3774607a89fa5db4",
      "parents": [
        "3944f7175dcf60316ba58a42698ccf23c65ac57c"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Oct 19 14:59:26 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Nov 20 17:00:04 2015 -0800"
      },
      "message": "Dynamic BCE (based on induction range analysis)\n\nRationale: A rewritten dynamic BCE that uses induction variable analysis\n           to generate the run-time tests before a loop in order to\n           eliminate bounds-checks from its body. This CL removes now\n           obsoleted induction related code inside the BCE module.\n           Also, the dynamic test generation is placed more strategically,\n           since we missed a few cases where static analysis does better.\n\nMost significant performance improvements (after filtering noise) is about:\n  Linpack +20%\n  LU    \u003e +10%\n\nChange-Id: I4e7b8bab0288beff6f98a14856e3536103d32742\n"
    },
    {
      "commit": "d8ef0c69330f74f325f7671236ca6bf44b7ec9c9",
      "tree": "a1fd3b679a67ca623bbb6c2786d5691046617226",
      "parents": [
        "969670298516b9316b36270fcc4c21bfcd499595"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 18:49:28 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 18:49:28 2015 +0000"
      },
      "message": "ART: Remove unnecessary helper method from GraphChecker\n\nChange-Id: I59f50a559da560033f4c9407d83b68fc5d64bd3c\n"
    },
    {
      "commit": "d26a411adee1e71b3f09dd604ab9b23018037138",
      "tree": "7e9267d50fb0a9bcd6b14a97653c8e0baf91a575",
      "parents": [
        "8a6463a7052ec69e7c0b94a65b26807f570e6359"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 11:07:31 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 18:28:21 2015 +0000"
      },
      "message": "ART: Refactor iteration over normal/exceptional successors\n\nAdd helper methods on HBasicBlock which return ArrayRef with the\nsuitable sub-array of the `successors_` list.\n\nChange-Id: I66c83bb56f2984d7550bf77c48110af4087515a8\n"
    },
    {
      "commit": "81e479e5f768fd8ff46c2a894640a094d12800e2",
      "tree": "1c0a319e756eaf59b24c0014ebfd707eea385cad",
      "parents": [
        "1963759e84664b51b617b00e15728f439895033b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 10:12:41 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 10 11:22:42 2015 +0000"
      },
      "message": "ART: Fix critical edge checks in GraphChecker\n\nPrevious CL I5a13b8bb74509b48f5d628906f7158af007f99ae fixed logic for\nsplitting critical edges. The same logic is used in GraphChecker when\ntesting critical edges weren\u0027t introduced by a pass. This patch updates\nit too.\n\nBug: 25493695\nBug: 25454012\nChange-Id: I56226c82324ee55ae2fbe7262608dd2868d930f1\n"
    },
    {
      "commit": "f11f5ebe321fde9f6efb49d75b861606391b6502",
      "tree": "c2cfc64f7cafa0d9a570d99f2c0c03adb92c6dc9",
      "parents": [
        "df7029f2254f67230362c4bdfaddac00c342e660",
        "db51efb3617d15f1cd9e5ff0cc2d934777014e9a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 09 12:47:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 09 12:47:19 2015 +0000"
      },
      "message": "Merge \"ART: Fix critical edge splitting under try/catch\""
    },
    {
      "commit": "db51efb3617d15f1cd9e5ff0cc2d934777014e9a",
      "tree": "fa70acb9f8d090def2cae550db8c2e1f630f31c4",
      "parents": [
        "2649cba0fb7cdbd8fa60cb4f2fb320fb2b18ee37"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 06 01:36:20 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Nov 09 10:27:08 2015 +0000"
      },
      "message": "ART: Fix critical edge splitting under try/catch\n\nA critical edge would not be split if the predecessor ends with\nTryBoundary. This would eventually trip liveness analysis because\na back edge block would have smaller liveness position than a nested\nloop.\n\nAnother implication of this change is that an edge between a loop\u0027s\npre-header ending with TryBoundary and the header will be split,\nguaranteeing that a pre-header always has just one successor.\n\nBug: 25493695\nBug: 25454012\nChange-Id: I5a13b8bb74509b48f5d628906f7158af007f99ae\n"
    },
    {
      "commit": "3e5b3c982a5837384829ffd6726c5a30714cbfcb",
      "tree": "0ad109f906aaf8d427bd6ed6ba2e9f50a348016b",
      "parents": [
        "2649cba0fb7cdbd8fa60cb4f2fb320fb2b18ee37",
        "b554b5a5ae3cdc66969d61be20783a8af816206e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 09 10:14:35 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 09 10:14:35 2015 +0000"
      },
      "message": "Merge \"Optimizing: Remove unused ArtMethod* input from HInvokeStaticOrDirect.\""
    },
    {
      "commit": "b554b5a5ae3cdc66969d61be20783a8af816206e",
      "tree": "c52c69c7e4a3950e4c24065c70b19eebdfc10f29",
      "parents": [
        "2fa684206b0a8bd203d07e1edf74a839b498f74f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 06 12:57:55 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 06 19:54:53 2015 +0000"
      },
      "message": "Optimizing: Remove unused ArtMethod* input from HInvokeStaticOrDirect.\n\nChange-Id: Iea99fa683440673ff517e246f35fade96600f229\n"
    },
    {
      "commit": "9bc436160b4af99067973affb0b1008de9a2b04c",
      "tree": "160fba56aa8ba53a5db624c42c1936dd15a3cdf7",
      "parents": [
        "ef7ef4ce04a46405e15cd91115c6e657235adf83"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Nov 05 21:25:24 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 06 19:20:46 2015 +0000"
      },
      "message": "ART: Fix simplification of catch blocks in the presence of dead code\n\nSimplification of catch blocks transforms the code so that catch\nblocks have only exceptional predecessors. However, it is invoked\nbefore trivially dead code is eliminated which breaks simple\nassumptions such as the fact that a catch block cannot start with\nmove-exception if it has non-exceptional predecessors. This patch\nfixes the algorithm to work under these relaxed conditions.\n\nBug: 25494450\nBug: 25492628\nChange-Id: Idc8d010102a4b8b9a6cd918b98d6e11d1838db0c\n"
    },
    {
      "commit": "655e585073ac271cc9afa7c9d6ff5ab4dbe4b72e",
      "tree": "f02b64d048ae4cd7fa51774f220192ddeef42e1e",
      "parents": [
        "89792b9c5ed09dda2937944b69b1b2016807b6aa"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 12 10:38:28 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 12 13:24:31 2015 +0100"
      },
      "message": "Optimizing: Move GraphChecker memory allocations to arena.\n\nBug: 18120045\nChange-Id: I3934158e6ea4868d9baa1dfcc53b603ca6c521e2\n"
    },
    {
      "commit": "ec7802a102d49ab5c17495118d4fe0bcc7287beb",
      "tree": "08649609604b9c96bc48ca071c48b0af5abb1a3f",
      "parents": [
        "b2e436ffcda1d7a87e7bf9133d8ed878388c73c2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 01 20:57:57 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 08 11:10:18 2015 +0100"
      },
      "message": "Add DCHECKs to ArenaVector and ScopedArenaVector.\n\nImplement dchecked_vector\u003c\u003e template that DCHECK()s element\naccess and insert()/emplace()/erase() positions. Change the\nArenaVector\u003c\u003e and ScopedArenaVector\u003c\u003e aliases to use the new\ntemplate instead of std::vector\u003c\u003e. Remove DCHECK()s that\nhave now become unnecessary from the Optimizing compiler.\n\nChange-Id: Ib8506bd30d223f68f52bd4476c76d9991acacadc\n"
    },
    {
      "commit": "fe57faa2e0349418dda38e77ef1c0ac29db75f4d",
      "tree": "38ba7a406f8a86a1152bd6c9f2d0a6c677423211",
      "parents": [
        "9e30c0e177adabaaf94a66c91130a19a7632fc7c"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Sep 18 09:26:15 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Sep 21 07:23:45 2015 -0400"
      },
      "message": "[optimizing] Add basic PackedSwitch support\n\nAdd HPackedSwitch, and generate it from the builder.  Code generators\nconvert this to a series of compare/branch tests.  Better implementation\nin the code generators as a real jump table will follow as separate CLs.\n\nChange-Id: If14736fa4d62809b6ae95280148c55682e856911\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "3eaa32f72b6abd807964134aad4c158946dc92e3",
      "tree": "003aa2bcd15499c7ebfdc5528b607e23f4f452f0",
      "parents": [
        "9632d5a5ed8295d63fc82fe418a3b776de4e4459"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 18 10:58:32 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 18 14:14:53 2015 +0100"
      },
      "message": "ART: Delete catch phis for undefined vregs.\n\nSSA builder assumed that (eagerly created) catch phis for undefined\nvregs must be dead and will be deleted by dead phi elimination. This,\nhowever, does not hold for --debuggable because the catch phis might\nbe revived for their environment uses. This patch modifies the builder\nto delete the phis itself.\n\nBug: 24054676\nChange-Id: Iaa5f2487ff1c38353b44cb89c709bbff1ecd73cc\n"
    },
    {
      "commit": "fa6b93c4b69e6d7ddfa2a4ed0aff01b0608c5a3a",
      "tree": "3528c88e104dac8e58ae5370ab066b8b1dd0218f",
      "parents": [
        "e295be4a95d7861f6ec179edf6565f58cad747cc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 15 10:15:55 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 16 13:21:33 2015 +0100"
      },
      "message": "Optimizing: Tag arena allocations in HGraph.\n\nReplace GrowableArray with ArenaVector in HGraph and related\nclasses HEnvironment, HLoopInformation, HInvoke and HPhi,\nand tag allocations with new arena allocation types.\n\nChange-Id: I3d79897af405b9a1a5b98bfc372e70fe0b3bc40d\n"
    },
    {
      "commit": "77a48ae01bbc5b05ca009cf09e2fcb53e4c8ff23",
      "tree": "780c7d6bdee784c2f8248979de348491cfb63b34",
      "parents": [
        "659562aaf133c41b8d90ec9216c07646f0f14362"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Sep 15 12:34:04 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Sep 15 12:34:04 2015 +0000"
      },
      "message": "Revert \"Revert \"ART: Register allocation and runtime support for try/catch\"\"\n\nThe original CL triggered b/24084144 which has been fixed\nby Ib72e12a018437c404e82f7ad414554c66a4c6f8c.\n\nThis reverts commit 659562aaf133c41b8d90ec9216c07646f0f14362.\n\nChange-Id: Id8980436172457d0fcb276349c4405f7c4110a55\n"
    },
    {
      "commit": "659562aaf133c41b8d90ec9216c07646f0f14362",
      "tree": "be1beae390262bf2f5a17bfa44de93081a849d07",
      "parents": [
        "b022fa1300e6d78639b3b910af0cf85c43df44bb"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 14 21:26:33 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 14 21:26:33 2015 +0000"
      },
      "message": "Revert \"ART: Register allocation and runtime support for try/catch\"\n\nBreaks libcore test org.apache.harmony.security.tests.java.security.KeyStorePrivateKeyEntryTest#testGetCertificateChain. Need to investigate.\n\nThis reverts commit b022fa1300e6d78639b3b910af0cf85c43df44bb.\n\nChange-Id: Ib24d3a80064d963d273e557a93469c95f37b1f6f\n"
    },
    {
      "commit": "b022fa1300e6d78639b3b910af0cf85c43df44bb",
      "tree": "780c7d6bdee784c2f8248979de348491cfb63b34",
      "parents": [
        "e481c006e8b055a31d9c7cff27f4145e57e3c113"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Aug 20 17:47:48 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Sep 14 20:42:58 2015 +0100"
      },
      "message": "ART: Register allocation and runtime support for try/catch\n\nThis patch completes a series of CLs that add support for try/catch\nin the Optimizing compiler. With it, Optimizing can compile all\nmethods containing try/catch, provided they don\u0027t contain catch loops.\nFuture work will focus on improving performance of the generated code.\n\nSsaLivenessAnalysis was updated to propagate liveness information of\ninstructions live at catch blocks, and to keep location information on\ninstructions which may be caught by catch phis.\n\nRegisterAllocator was extended to spill values used after catch, and\nto allocate spill slots for catch phis. Catch phis generated for the\nsame vreg share a spill slot as the raw value must be the same.\n\nLocation builders and slow paths were updated to reflect the fact that\nthrowing an exception may not lead to escaping the method.\n\nInstruction code generators are forbidden from using of implicit null\nchecks in try blocks as live registers need to be saved before handing\nover to the runtime.\n\nCodeGenerator emits a stack map for each catch block, storing locations\nof catch phis. CodeInfo and StackMapStream recognize this new type of\nstack map and store them separate from other stack maps to avoid dex_pc\nconflicts.\n\nAfter having found the target catch block to deliver an exception to,\nQuickExceptionHandler looks up the dex register maps at the throwing\ninstruction and the catch block and copies the values over to their\nrespective locations.\n\nThe runtime-support approach was selected because it allows for the\nbest performance in the normal control-flow path, since no propagation\nof catch phi values is necessary until the exception is thrown. In\naddition, it also greatly simplifies the register allocation phase.\n\nConstantHoisting was removed from LICMTest because it instantiated\n(now abstract) HConstant and was bogus anyway (constants are always in\nthe entry block).\n\nChange-Id: Ie31038ad8e3ee0c13a5bbbbaf5f0b3e532310e4e\n"
    },
    {
      "commit": "6058455d486219994921b63a2d774dc9908415a2",
      "tree": "3d205227f3ff54cd3a50bc5c0e7cb3ad6c175b86",
      "parents": [
        "637ee0b9c10ab7732a7ee7b8335f3fff4ac1549c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:35:12 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 08 18:09:49 2015 +0100"
      },
      "message": "Optimizing: Tag basic block allocations with their source.\n\nReplace GrowableArray with ArenaVector in HBasicBlock and,\nto track the source of allocations, assign one new and two\nQuick\u0027s arena allocation types to these vectors. Rename\nkArenaAllocSuccessor to kArenaAllocSuccessors.\n\nBug: 23736311\nChange-Id: Ib52e51698890675bde61f007fe6039338cf1a025\n"
    },
    {
      "commit": "145acc5361deb769eed998f057bc23abaef6e116",
      "tree": "3d66a0b44e1ac927156eec6e6488de5fd52b982b",
      "parents": [
        "91e11c0c840193c6822e66846020b6647de243d5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:33:25 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:33:25 2015 +0000"
      },
      "message": "Revert \"Optimizing: Tag basic block allocations with their source.\"\n\nReverting so that we can have more discussion about the STL API.\n\nThis reverts commit 91e11c0c840193c6822e66846020b6647de243d5.\n\nChange-Id: I187fe52f2c16b6e7c5c9d49c42921eb6c7063dba\n"
    },
    {
      "commit": "91e11c0c840193c6822e66846020b6647de243d5",
      "tree": "0c5398ef59c464c1848afd0113c74b6aeb75cf42",
      "parents": [
        "f9f6441c665b5ff9004d3ed55014f46d416fb1bb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 02 17:03:22 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:09:37 2015 +0100"
      },
      "message": "Optimizing: Tag basic block allocations with their source.\n\nReplace GrowableArray with ArenaVector in HBasicBlock and,\nto track the source of allocations, assign one new and two\nQuick\u0027s arena allocation types to these vectors. Rename\nkArenaAllocSuccessor to kArenaAllocSuccessors.\n\nBug: 23736311\nChange-Id: I984aef6e615ae2380a532f5c6726af21015f43f5\n"
    },
    {
      "commit": "ec16f79a4d0aeff319bf52139a0c82de3080d73c",
      "tree": "1306b2cbaa97bbacc2cbc100d6e157e14f9510cb",
      "parents": [
        "32f264e67afa8654a5570d38b627515fb73fc333"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 15:04:01 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 17:43:13 2015 +0100"
      },
      "message": "ART: Refactor try/catch block info, store exception type\n\nThis patch replaces HBasicBlock fields storing try/catch info with a\nsingle TryCatchInformation data structure, saving memory for the\nmajority of non-try/catch blocks. It also changes builder to store\nthe exception type for catch blocks.\n\nChange-Id: Ib3e43f7db247e6915d67c267fc62410420e230c9\n"
    },
    {
      "commit": "29fc008c9689e9036a3f5e3bd186bbfb5de3cb82",
      "tree": "373a288e3bfcc44d6af87c78a3e114eed211eca3",
      "parents": [
        "a539ec06503766fcad4be71480c194a225fb037c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 18 17:17:38 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 18 17:17:38 2015 +0100"
      },
      "message": "ART: Revert storing of exceptional predecessors\n\nAfter change of the approach for try/catch register allocation, it is\nno longer necessary to record instructions which might throw into a\ncatch block.\n\nChange-Id: I7ef12ed06c49a35280029810975fa2a50fe4a424\n"
    },
    {
      "commit": "b618adebbc19e50d7b1aa2f11b84341beb3c64dc",
      "tree": "02338a5656bb8a21b742f6506ce92a07d4a8162a",
      "parents": [
        "7b926cdacc2b67241bc9cb5f2d4b04b13ca79d0e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 29 10:31:29 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jul 30 17:02:41 2015 +0100"
      },
      "message": "ART: Store and check exceptional predecessors\n\nFuture CL on register allocation for try/catch will require the\nknowledge of instructions which throw into a catch block. This patch\nstores that information with the basic block and verifies it in the\ngraph checker.\n\nMore checks on try catch also added to the graph checker and an order\nof exception handlers is enforced in TryBoundary successors.\n\nChange-Id: I3034c610791ea51d96724bcca97f49ec6ecf2af3\n"
    },
    {
      "commit": "ffee3d33f3ea39aa6031c3d2ff29c4806c8dcc51",
      "tree": "9b990552fbf7e0ba91954758b07e2a51d95da9cd",
      "parents": [
        "045da88bd0230ddf48aaf037b3d6c16fbb97ba65"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jul 06 11:48:53 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 15 17:20:30 2015 +0200"
      },
      "message": "ART: Build SSA form when try/catch is present\n\nThis patch implements support for try/catch in the SsaBuilder.\nValues of locals are propagated from throwing sites inside try\nblocks to their respective catch blocks and phis (\"catch phis\")\nare created when necessary.\n\nChange-Id: I0736565c2c4ff3f9f0924b6e3a785a50023f875a\n"
    },
    {
      "commit": "f9a199571417b5a5a62d94d05a064077e14dd2c4",
      "tree": "f2fb9f91e1d29f15c168e7966a1d23bfa92a9dec",
      "parents": [
        "2e232ce8c7e7accc1b9654f111266d28fe45b08d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 29 13:43:54 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 29 13:45:31 2015 +0100"
      },
      "message": "Revert \"Revert \"Do not update the type of something we already know.\"\"\n\nThis reverts commit 63107a804ce17db9789051e1fe310d99d1dae1cb.\n\nbug:22116987\nChange-Id: I49a376a5bd2073a69babe122ec0d26e5d2f82461\n"
    },
    {
      "commit": "63107a804ce17db9789051e1fe310d99d1dae1cb",
      "tree": "6c63aac8871de4143ee37f2a513023f1247b2117",
      "parents": [
        "30eb58c548bee08468f68eb140a74a51dd7d9b43"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jun 29 11:43:16 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jun 29 11:43:16 2015 +0000"
      },
      "message": "Revert \"Do not update the type of something we already know.\"\n\nThis reverts commit 30eb58c548bee08468f68eb140a74a51dd7d9b43.\n\nChange-Id: Icd959e868160fc3ee7031dd2927554ac5b21d40f\n"
    },
    {
      "commit": "30eb58c548bee08468f68eb140a74a51dd7d9b43",
      "tree": "28412484547b9bfb4a4773df103cef5f485c3a67",
      "parents": [
        "8d1a8c00b89775a251ac5e26a557f81ac1491a44"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 29 10:56:34 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 29 10:59:19 2015 +0100"
      },
      "message": "Do not update the type of something we already know.\n\nThis is both an optimization to avoid unneeded nodes,\nand correctness to avoid replacing the second input\nof `HInstanceOf` and `HCheckCast` to something that is\nnot `HLoadClass`.\n\nbug:22116987\n\nChange-Id: I4907197a9002883d7cae8265a9642512b6201396\n"
    },
    {
      "commit": "fc6a86ab2b70781e72b807c1798b83829ca7f931",
      "tree": "90201491e811cf7be0e0469d7a06a828f4384cad",
      "parents": [
        "d3eaade87ac079accca30473ef0a3b38ab600828"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jun 26 10:33:45 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jun 26 13:49:50 2015 +0100"
      },
      "message": "Revert \"Revert \"ART: Implement try/catch blocks in Builder\"\"\n\nThis patch enables the GraphBuilder to generate blocks and edges which\nrepresent the exceptional control flow when try/catch blocks are\npresent in the code. Actual compilation is still delegated to Quick\nand Baseline ignores the additional code.\n\nTo represent the relationship between try and catch blocks, Builder\nsplits the edges which enter/exit a try block and links the newly\ncreated blocks to the corresponding exception handlers. This layout\nwill later enable the SsaBuilder to correctly infer the dominators of\nthe catch blocks and to produce the appropriate reverse post ordering.\nIt will not, however, allow for building the complete SSA form of the\ncatch blocks and consequently optimizing such blocks.\n\nTo this end, a new TryBoundary control-flow instruction is introduced.\nCodegen treats it the same as a Goto but it allows for additional\nsuccessors (the handlers).\n\nThis reverts commit 3e18738bd338e9f8363b26bc895f38c0ec682824.\n\nChange-Id: I4f5ea961848a0b83d8db3673763861633e9bfcfb\n"
    },
    {
      "commit": "3e18738bd338e9f8363b26bc895f38c0ec682824",
      "tree": "708013ef06cfb524f040b2b5c494f7f3cb84ac2c",
      "parents": [
        "0b5c7d1994b76090afcc825e737f2b8c546da2f8"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jun 26 09:59:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jun 26 09:59:52 2015 +0000"
      },
      "message": "Revert \"ART: Implement try/catch blocks in Builder\"\n\nCauses OutOfMemory issues, need to investigate.\n\nThis reverts commit 0b5c7d1994b76090afcc825e737f2b8c546da2f8.\n\nChange-Id: I263e6cc4df5f9a56ad2ce44e18932ca51d7e349f\n"
    },
    {
      "commit": "0b5c7d1994b76090afcc825e737f2b8c546da2f8",
      "tree": "057eddf8830b1991f02af3c3ce1b63dee90dd2ad",
      "parents": [
        "1dd3136d9f6b1c7d551897a2d96c8314e40f7324"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jun 11 11:17:49 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jun 25 16:58:08 2015 +0100"
      },
      "message": "ART: Implement try/catch blocks in Builder\n\nThis patch enables the GraphBuilder to generate blocks and edges which\nrepresent the exceptional control flow when try/catch blocks are\npresent in the code. Actual compilation is still delegated to Quick\nand Baseline ignores the additional code.\n\nTo represent the relationship between try and catch blocks, Builder\nsplits the edges which enter/exit a try block and links the newly\ncreated blocks to the corresponding exception handlers. This layout\nwill later enable the SsaBuilder to correctly infer the dominators of\nthe catch blocks and to produce the appropriate reverse post ordering.\nIt will not, however, allow for building the complete SSA form of the\ncatch blocks and consequently optimizing such blocks.\n\nTo this end, a new TryBoundary control-flow instruction is introduced.\nCodegen treats it the same as a Goto but it allows for additional\nsuccessors (the handlers).\n\nChange-Id: I415b985596d5bebb7b1bb358a46e08b7b04bb53a\n"
    },
    {
      "commit": "1d8b49fad0798fef57a0e2f799dbd51e29812120",
      "tree": "56a08bb0fed3547e36487810a064a54765c2e4ed",
      "parents": [
        "9d50775046a51941f86cced03593c61c89ae615e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue May 12 12:40:07 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue May 12 12:40:07 2015 +0000"
      },
      "message": "Revert \"Add new rule to the graph checker.\"\n\nThis reverts commit 9d50775046a51941f86cced03593c61c89ae615e.\n\nChange-Id: I9533116bbaef5fd5d2944c4ebebd2f01b0047e34\n"
    },
    {
      "commit": "9d50775046a51941f86cced03593c61c89ae615e",
      "tree": "0ba58dfe1fec1d49f89797579228ad584759f0f4",
      "parents": [
        "6108ed86bb2663e73262e290463f014e2698abc1"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon May 11 18:25:51 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon May 11 18:25:56 2015 +0100"
      },
      "message": "Add new rule to the graph checker.\n\nPhis typed as `reference` should not have equivalents after building the\nSSA.\n\nChange-Id: I9cac189362583ef7c9c7defd3da7338f419f2f94\n"
    },
    {
      "commit": "0a23d74dc2751440822960eab218be4cb8843647",
      "tree": "39d69de5d812826c4065d0acd38a58cd983f21f0",
      "parents": [
        "cdeb0b5fede4c06488f43a212591e661d946bc78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 11:57:35 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 14:17:22 2015 +0100"
      },
      "message": "Add a parent environment to HEnvironment.\n\nThis code has no functionality change. It adds a placeholder\nfor chaining inlined frames.\n\nChange-Id: I5ec57335af76ee406052345b947aad98a6a4423a\n"
    },
    {
      "commit": "db216f4d49ea1561a74261c29f1264952232728a",
      "tree": "8b7914435ad1ba519a3d88b5cca7f0f6e842cd4f",
      "parents": [
        "bc3b93eadd155342b6124d2d5ef3806ecec5dfd6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 05 17:02:20 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 07 09:54:09 2015 +0100"
      },
      "message": "Relax the only one back-edge restriction.\n\nThe rule is in the way for better register allocation, as\nit creates an artificial join point between multiple paths.\n\nChange-Id: Ia4392890f95bcea56d143138f28ddce6c572ad58\n"
    },
    {
      "commit": "5d7b7f81ed5455893f984752c00571ef27cc97c5",
      "tree": "a497582ae4ab5a69ba7035c1f95af0ee0f0b025b",
      "parents": [
        "01ce498499eed47e87fceb8736d26fe49b2a4346"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 28 00:52:43 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 01 10:07:52 2015 +0100"
      },
      "message": "Update the remaining input index of phis after deleting an input.\n\nbug:20715803\nbug:20690906\n\nChange-Id: Iaf08f0c30d629e766be2b04815dc3e38b6e7ff35\n"
    },
    {
      "commit": "1152c926076a760490085c4497c3f117fa8da891",
      "tree": "215d3f45a946f51ae680ec50239ebc48f929aed7",
      "parents": [
        "76f1413492c228bfa710e1eaa4c60370eaffbb8a"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 24 17:06:35 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 24 19:25:51 2015 -0400"
      },
      "message": "[optimizing] Rename HasArrayAccesses and check it\n\nSince the flag is only used to see if there is a HBoundsCheck, rename\nHasArrayAccesses() to HasBoundsChecks().\n\nAdd a check in graph_checker to see that the flag is set if we see a\nHBoundsCheck instruction.\n\nChange-Id: I10fe92897374fb247082152dd75c3611cc40ff30\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "eb5459ca861b58ee8a9907789f11400dcdddb87b",
      "tree": "36c1f328c48f0ec111ee31702cc4a82ddb2ad784",
      "parents": [
        "ae803f6efbe8378b5423c51ee3c5564cae0e6e59",
        "4c0eb42259d790fddcd9978b66328dbb3ab65615"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 18:17:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 24 18:17:41 2015 +0000"
      },
      "message": "Merge \"Ensure inlined static calls perform clinit checks in Optimizing.\""
    },
    {
      "commit": "4c0eb42259d790fddcd9978b66328dbb3ab65615",
      "tree": "9d1ac505dfd4d0225f479d860b72a58747c8f6ce",
      "parents": [
        "223f2f5b2a20ca8246da1523494900a2424d5956"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 16:43:49 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 16:43:49 2015 +0100"
      },
      "message": "Ensure inlined static calls perform clinit checks in Optimizing.\n\nCalls to static methods have implicit class initialization\n(clinit) checks of the method\u0027s declaring class in\nOptimizing.  However, when such a static call is inlined,\nthe implicit clinit check vanishes, possibly leading to an\nincorrect behavior.\n\nTo ensure that inlining static methods does not change the\nbehavior of a program, add explicit class initialization\nchecks (art::HClinitCheck) as well as load class\ninstructions (art::HLoadClass) as last input of static\ncalls (art::HInvokeStaticOrDirect) in Optimizing\u0027 control\nflow graphs, when the declaring class is reachable and not\nknown to be already initialized.  Then when considering the\ninlining of a static method call, proceed only if the method\nhas no implicit clinit check requirement.\n\nThe added explicit clinit checks are already removed by the\nart::PrepareForRegisterAllocation visitor.  This CL also\nextends this visitor to turn explicit clinit checks from\nstatic invokes into implicit ones after the inlining step,\nby removing the added art::HLoadClass nodes mentioned\nhereinbefore.\n\nChange-Id: I9ba452b8bd09ae1fdd9a3797ef556e3e7e19c651\n"
    },
    {
      "commit": "2d7352ba5311b8f57427b91b7a891e61497373c1",
      "tree": "3f3426f4f30663ee252ebc1f02ecd0eb114bad85",
      "parents": [
        "c5cb691ca6a746a193bfbe3525aafa7cbb281d40"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 20 14:52:42 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 24 16:19:31 2015 +0100"
      },
      "message": "ART: Dead block removal\n\nAdds a new pass which finds all unreachable blocks, typically due to\nsimplifying an if-condition to a constant, and removes them from the\ngraph. The patch also slightly generalizes the graph-transforming\noperations.\n\nChange-Id: Iff7c97f1d10b52886f3cd7401689ebe1bfdbf456\n"
    },
    {
      "commit": "c3d743fa2a26effcb35627d8a1338029c86e582a",
      "tree": "cf883e9b7f707ac2e6c2a6627e462b20e634c17c",
      "parents": [
        "8d1ba74fe48703fc2b5a5920dd5eea0c65db5b15"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 22 13:40:50 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 22 14:43:19 2015 +0100"
      },
      "message": "ART: Update last_instruction when adding Phis\n\nHBasicBlock::InsertPhiAfter would not update the last_instruction\npointer when adding at the end of the list. This could cause problems\nwhen iterating over phis backwards. Fortunately, we don\u0027t do that\nanywhere in the existing code.\n\nChange-Id: I4487265bf2cf3d3819623fafd7ce7c359bac190e\n"
    },
    {
      "commit": "7d275379bf490a87805852129e3fe2e8afe961e7",
      "tree": "d0bbe856872c92773931c62e6881b0305a916236",
      "parents": [
        "223f2f5b2a20ca8246da1523494900a2424d5956"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 21 16:36:35 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Apr 21 17:17:11 2015 +0100"
      },
      "message": "ART: Update loop info of all nested loops when inlining\n\nWhen inlining into a nested loop, the inliner would only add the new\nblocks into the innermost loop info object. This patch fixes that and\nmodifies SsaChecker to verify the property.\n\nChange-Id: I21d343a6f7d972f5b7420701f816c65ab3f20566\n"
    },
    {
      "commit": "2fa194bf16678e9e8f9e2653e47cb703dbbc9738",
      "tree": "6421285a359953e0290785d94987965e0660cb23",
      "parents": [
        "f5091eee4abe73c64959e53bda684bd689569643"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 20 10:14:42 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 20 13:51:46 2015 +0100"
      },
      "message": "ART: Extend list of instructions accepted as boolean inputs\n\nPrevious change allowed integer Phis as inputs of instructions\nexpecting a boolean type. This list, however, was not exhaustive as\nbinary operations And, Or and Xor are also valid inputs. This patch\nextends the list in SSAChecker.\n\nChange-Id: I5b5c9e7a17992cc4987e3a078ee23ea80028ecfc\n"
    },
    {
      "commit": "e7bee3b7d307508243f4a00b5cf8a8867fcaaff5",
      "tree": "b9d350a3d1432d7546e5feab77e25807d328300a",
      "parents": [
        "59bb47675b1f1bafbcababadb4a6ba1c345fec1a",
        "a4f8831d6533e4fe5aed18433099e1130d95a877"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 15:53:22 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 16 15:53:23 2015 +0000"
      },
      "message": "Merge \"Remove duplicates phis created during SSA transformation\""
    },
    {
      "commit": "a4f8831d6533e4fe5aed18433099e1130d95a877",
      "tree": "914c97dd322f59b282f01ca5659a960609e0aa0b",
      "parents": [
        "e015a31e509c3f4de8a90b57b77329ba6609ce2f"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 12:57:19 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 16 16:48:25 2015 +0100"
      },
      "message": "Remove duplicates phis created during SSA transformation\n\nWhen creating equivalent phis we copy the inputs of the original phi\nwhich may be improperly typed. This will be fixed during the type\npropagation but as a result we may have two equivalent phis with the\nsame type for the same dex register. This is correct but generates more\ncode and prevent some optimizations.\n\nThis CL adds another step in the SSA builder to remove the extra Phi\nnodes created due to equality operators.\n\nThe graph checker verifies that for a given dex register not two phis\nhave the same type.\n\nAlso, replace zero int constant with null constant when we compare a\nreference against null.\n\nChange-Id: Id37cc11a016ea767c7e351575e003d822a9d2e60\n"
    },
    {
      "commit": "13b4718ecd52a674b25eac106e654d8e89872750",
      "tree": "34d6efd2cda3ceb233118e4d135c4a897f02ea12",
      "parents": [
        "da93333d568f3c5bd8eeb58341d10a332e1d42bf"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 15 16:29:32 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Apr 16 11:09:55 2015 +0100"
      },
      "message": "ART: Remove DCHECKs for boolean type\n\nSince bool and int are interchangeable types, checking whether an\ninput is kPrimBoolean can fail when replaced with 0/1 constant or\na phi. This patch removes the problematic DCHECKs, adds a best-effort\nverification into SSAChecker but leaves the phi case empty until a\nsuitable analysis is implemented.\n\nChange-Id: I31e8daf27dd33d2fd74049b82bed1cb7c240c8c6\n"
    },
    {
      "commit": "8d5b8b295930aaa43255c4f0b74ece3ee8b43a47",
      "tree": "c26fc49bbc74615e7f0b9657aaf3757a8282d7a9",
      "parents": [
        "c8924c6ea9e83ba3832dd5551df38ab06f4aaca9"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 10:51:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 26 14:10:03 2015 +0000"
      },
      "message": "ART: Force constants into the entry block\n\nOptimizations such as GVN and BCE make the assumption that all\nconstants are located in the entry block of the CFG, but not all\npasses adhere to this rule.\n\nThis patch makes constructors of constants private and only accessible\nto friend classes - HGraph for int/long constants and SsaBuilder for\nfloat/double - which ensure that they are placed correctly and not\nduplicated.\n\nNote that the ArenaAllocatorAdapter was modified to not increment\nthe ArenaAllocator\u0027s internal reference counter in order to allow\nfor use of ArenaSafeMap inside an arena-allocated objects. Because\ntheir destructor is not called, the counter does not get decremented.\n\nChange-Id: I36a4fa29ae34fb905cdefd482ccbf386cff14166\n"
    },
    {
      "commit": "46e2a3915aa68c77426b71e95b9f3658250646b7",
      "tree": "2b0a4470b05291894db73c631fe94f0fdff8c46b",
      "parents": [
        "bce0855ca1dbb1fa226c5b6a81760272ce0b64ef"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Mar 16 17:31:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 17:28:37 2015 +0000"
      },
      "message": "ART: Boolean simplifier\n\nThe optimization recognizes the negation pattern generated by \u0027javac\u0027\nand replaces it with a single condition. To this end, boolean values\nare now consistently assumed to be represented by an integer.\n\nThis is a first optimization which deletes blocks from the HGraph and\ndoes so by replacing the corresponding entries with null. Hence,\nexisting code can continue indexing the list of blocks with the block\nID, but must check for null when iterating over the list.\n\nChange-Id: I7779da69cfa925c6521938ad0bcc11bc52335583\n"
    },
    {
      "commit": "e0fe7ae36180863e45cbb9d1e6e9c30b1b1a949c",
      "tree": "26269a55f16d8bee5b5898318fa18491fd72061c",
      "parents": [
        "3dd536ffd7e8f82e4587964545b272acbd61d68e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:02:49 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 16:20:35 2015 +0000"
      },
      "message": "Make the SSA builder honor the debuggable flag.\n\nThis requires to properly type phis that are only\nused by environments, and discard phis with incomptable types.\nThe code generators do not handle these conflicting types. In\nthe process, ensure a phi has a type that does not depend\non the order of the inputs (for example (char, short) -\u003e short),\nand set int for int-like types. We can refine this later.\n\nChange-Id: I60ab601d6d00b1cbf18623ee4ff1795aa28f84a1\n"
    },
    {
      "commit": "1abb4191a2e56d8dbf518efcaeefb266c1acdf2b",
      "tree": "e9cd0006df96b167c5da9f8f872713ff05b72803",
      "parents": [
        "735969139b162f9d45a3c0e47dc24a8aec63c736"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 17 18:33:36 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 23 15:12:24 2015 +0000"
      },
      "message": "Optimizing: Speed up HInstruction use removal\n\nSimilarly to a previous commit on HEnvironment use removal, this patch\nadds links from instructions to their respective inputs\u0027 use lists for\ncontant-time removal at the cost of doubling the size of input lists\n(from one pointer per entry to two). Manual testing shows that this\nsignificantly reduces the time required to transform HGraph to SSA\nform for some huge methods.\n\nChange-Id: I8dc3e4b0c48a50ac1481eb55c31093b99f4dc29f\n"
    },
    {
      "commit": "d6138ef1ea13d07ae555542f8898b30d89e9ac9a",
      "tree": "a8ffd5fd966512fd280bc1b3214f4e57a9e1805f",
      "parents": [
        "92095533ac28879ddd8b44b559d700527ca12b8a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 18 14:48:53 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 19 14:01:18 2015 +0000"
      },
      "message": "Ensure the graph is correctly typed.\n\nWe used to be forgiving because of HIntConstant(0) also being\nused for null. We now create a special HNullConstant for such uses.\n\nAlso, we need to run the dead phi elimination twice during ssa\nbuilding to ensure the correctness.\n\nChange-Id: If479efa3680d3358800aebb1cca692fa2d94f6e5\n"
    },
    {
      "commit": "276d9daaedfbff716339f94d55e6eff98b7434c6",
      "tree": "fdef0e2d95396aedae484dc5163689f282a8dd12",
      "parents": [
        "bd17c3b46b035861ced434d6ed4d4fe183736e65"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 02 18:24:11 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 03 18:11:46 2015 +0000"
      },
      "message": "Inline methods with multiple blocks.\n\nChange-Id: I3431af60e97fae230e0b6e98bcf0acc0ee9abf8c\n"
    },
    {
      "commit": "ed59619b370ef23ffbb25d1d01f615e60a9262b6",
      "tree": "6c93bb6ceff95f7aaf232825e050eecc05c7282d",
      "parents": [
        "f90eec005997f98c1a9f874fbbf68414e5f9c766"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 23 10:39:45 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 26 16:13:57 2015 +0000"
      },
      "message": "Optimizing: Speed up HEnvironment use removal\n\nRemoval of use records from HEnvironment vregs involved iterating over\npotentially large linked lists which made compilation of huge methods\nvery slow. This patch turns use lists into doubly-linked lists, stores\npointers to the relevant nodes inside HEnvironment and subsequently\nturns the removals into constant-time operations.\n\nChange-Id: I0e1d4d782fd624e7b8075af75d4adf0a0634a1ee\n"
    },
    {
      "commit": "5c4405e8ca4a0c1ee2d7759e650530c9aff77fd0",
      "tree": "02d05457c8810966018c1c852f78a16da78cddc6",
      "parents": [
        "48aba6847270221c3f189732ecc69a0258d3aaca"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jan 21 11:39:58 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jan 21 11:39:58 2015 +0000"
      },
      "message": "Improve error messages in art::GraphChecker and art::SSAChecker\n\n- Add an art::GraphChecker::AddError helper.\n- Use StringPrintf instead of std::stringstream.\n- Rephrase some error messages.\n\nChange-Id: Ia741e9e67cb5122f086a7383a2bc02d60ca637df\n"
    },
    {
      "commit": "aecbd26b29c6122d1eacfd67e0bd5aa26b96eebb",
      "tree": "22ea87d86ca7a095c0af2b6a34b62492fd25abf3",
      "parents": [
        "d599b39357cb0d3ab8b719357c86ffe609bb3fcb"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jan 19 12:44:01 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jan 19 12:44:01 2015 +0000"
      },
      "message": "Ensure HCondition nodes on objects are either HEqual or HNotEqual\n\nChange-Id: I47efae209b7ab931d7d314e5b37582a7e21085d5\n"
    },
    {
      "commit": "9ee66183d8e046ea661f642ba884626f16b46e06",
      "tree": "d400690c920b0857dafd06efd3db6336c9eeba5b",
      "parents": [
        "36740379b9b1c81b7eb06ea9c9df411d0a9a765e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 16 12:35:40 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 19 09:29:40 2015 +0000"
      },
      "message": "Constant fold after inlining.\n\n- Inlining opens up new opportunities for constant folding.\n- Fix a bug in constant folder where the result type was not\n  correctly set for the folding of a HCompare.\n- Improve graph checker\u0027s coverage.\n\nChange-Id: I0943bf8ff65505c4addc4a555a526b55e00b5268\n"
    },
    {
      "commit": "7c5367badfe61b96c5836d495d286cee64861579",
      "tree": "0468316d467302abc1f9feae3af8e64c2877610b",
      "parents": [
        "240016da1d6615b26c8342bdeb4bae381570ac47"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 17 10:13:46 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 17 14:11:29 2014 +0000"
      },
      "message": "Fix ids and remove invoke when inlining.\n\nBugs found by Razvan Lupusoru.\n\nChange-Id: I3a5a9af280d8700d18f52abb4a2cff0e3a9aac74\n"
    },
    {
      "commit": "3159674c0863f53cfbc1913d493550221ac47f02",
      "tree": "5dc34e8da8dc695cf80040ba0dbc5312060c10c1",
      "parents": [
        "4d3ed1a6f34bd31ed30faaca0433cf2a4b19bb7b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 24 15:28:45 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 25 00:55:07 2014 +0000"
      },
      "message": "Fix a bug in the type analysis phase of optimizing.\n\nDex code can lead to the creation of a phi with one\nfloat input and one integer input. Since the SSA builder trusts\nthe verifier, it assumes that the integer input must be converted\nto float. However, when the register is not used afterwards, the\nverifier hasn\u0027t ensured that. Therefore, the compiler must remove\nthe phi prior to doing type propagation.\n\nChange-Id: Idcd51c4dccce827c59d1f2b253bc1c919bc07df5\n"
    },
    {
      "commit": "91356c028022180dfbe54ed7f5f465041c8b23ff",
      "tree": "0c2b3324e455d8da09de9d97431f19fc8da41e44",
      "parents": [
        "fe2579badfd2b76a1592cca4a4435f75a0fc5170"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 07 10:34:36 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 07 10:34:36 2014 -0800"
      },
      "message": "ART: Use std::vector in GraphChecker\n\n(Temporarily) move GraphChecker to use std::vector for errors, as\nstd::strings need to be destructed.\n\nBug: 18120045\nChange-Id: I7d38001e6b1f3cee14299194d4515b985541d656\n"
    },
    {
      "commit": "6c82d40eb142771086f5531998de2273ba5cc08c",
      "tree": "31eb699ae915d2c58603417eff8a4b71f585070a",
      "parents": [
        "75be28332b278cff9039b54bfb228ac72f539ccc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Oct 13 16:10:27 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Oct 17 17:11:44 2014 +0100"
      },
      "message": "Have HInstruction::StrictlyDominates compute strict dominance.\n\nChange-Id: I3a4fa133268615fb4ce54a0bcb43e0c2458cc865\n"
    },
    {
      "commit": "a8069ce1c3caa4f9b1651988986f3732152c186d",
      "tree": "bfeaeefaec1aae17905bb9df72959193a539ca75",
      "parents": [
        "e161a2a60c0325793f04be42a0f05228955ecfdd"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Oct 01 10:48:29 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Oct 14 14:44:16 2014 +0100"
      },
      "message": "Improve art::SSAChecker::VisitInstruction.\n\nActually inspect the uses of an instruction to ensure the\nlatter dominates all of the former, instead of browsing the\ninputs of this instruction (to ensure they dominate the\ninstruction).\n\nAlso check instruction domination with respect to environment\nuses.\n\nChange-Id: I967f34a45f48930607bf9683180d02e7c27b4e06\n"
    },
    {
      "commit": "6b46923ff0197c95f1e7ea0bc730961df6725cc9",
      "tree": "45cf685a23c70f95b1d16b7d3d67369d6148a514",
      "parents": [
        "c0d36abb12cdbb9469039c1dc153a586bd984015"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Sep 25 10:10:38 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Sep 25 10:10:38 2014 +0100"
      },
      "message": "Optimizing compiler: check inputs \u0026 uses definitions in CFG.\n\nEnsure each input and each use of an instruction is defined\nin a block of the control-flow graph.\n\nChange-Id: If4a83b02825230329b0b4fd84255dcb7c3219684\n"
    },
    {
      "commit": "7e53b415e5e587cd7961978f6da7347248f40b29",
      "tree": "383d8ab17f50abcc501410ba3b33600ec1a66d26",
      "parents": [
        "6b879ddc0959df1cec871f0d41f11cce35a11716"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Sep 23 10:50:22 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Sep 23 10:50:22 2014 +0100"
      },
      "message": "Optimizing compiler: ensure loop header dominates loop\u0027s blocks.\n\nChange-Id: I6b2f1fdaac9f91dc5d9901cc2ad4c83745e90e70\n"
    },
    {
      "commit": "6b879ddc0959df1cec871f0d41f11cce35a11716",
      "tree": "7ca75abcea8c26601efe3d41d9e55bc24a835bad",
      "parents": [
        "ef3e89b9281525d6c084136c379346608b44d933"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Sep 22 17:13:44 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Sep 22 17:13:44 2014 +0100"
      },
      "message": "Add loop- and phi-related checks in the optimizing compiler.\n\n- Ensure the pre-header block is first in the list of\n  predecessors of a loop header.\n- Ensure the loop header has only two predecessors and that\n  only the second one is the back edge.\n- Ensure there is only one back edge per loop.\n- Ensure the first input of a phi is not itself.\n- Ensure the number of phi inputs is the same as the number\n  of its predecessors.\n- Ensure phi input at index I either comes from the Ith\n  predecessor or from a block that dominates this\n  predecessor.\n\nChange-Id: I4db5c68cfbc9b74d2d03125753d0143ece625378\n"
    }
  ],
  "next": "ccc07a9579c554443cd03a306ca9b4f943fd2a93"
}
