)]}'
{
  "log": [
    {
      "commit": "2e7cd752452d02499a2f5fbd604c5427aa372f00",
      "tree": "505527250317827f56378f4b786534793ccfbb61",
      "parents": [
        "f16b820fc18ff86e765a14176f05417305d689a0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 10 11:38:52 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 10 18:21:13 2015 +0100"
      },
      "message": "[optimizing] Don\u0027t rely on the verifier for String.\u003cinit\u003e.\n\nContinue work on cutting the dependency on the verifier.\n\nChange-Id: I0f95b1eb2e10fd8f6bf54817f1202bdf6dfdb0fe\n"
    },
    {
      "commit": "72783ff32da5d3f025bbe1636cee84328f1135c6",
      "tree": "577db39a020c61360fa69080160c15115bdc91e8",
      "parents": [
        "7b3d3bc1a4ea7546e4743e90e695f4fc7ecadf3a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jul 09 14:36:05 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jul 09 15:31:40 2015 +0100"
      },
      "message": "ART: Fix bug in GraphBuilder\n\nThis fixes a bug where the GraphBuilder would split a throwing catch\nblock but would not update info about which blocks throw.\n\nChange-Id: If5415f0c320aa488e06eb042e8fea6f03e30246a\n"
    },
    {
      "commit": "6cd788f2b00e6a8149f46a17aab9162314960c00",
      "tree": "f40acd7129e406a5774b2cbd39233bb48277bf5b",
      "parents": [
        "4880fd5695ea1726dde27bb448dae1338d0a0973"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 16:44:00 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 19:02:18 2015 +0100"
      },
      "message": "Address small comments in HGraphBuilder\n\nChange-Id: Ife0a19f6e07146c8e03922f1330527d092f5e236\n"
    },
    {
      "commit": "bff7503625400b610a43678c6930354146ce5f92",
      "tree": "9b1c98a1a1d041fa464cddb074fca677708b5151",
      "parents": [
        "98bea9fdab2c5f964a95f9e76620b0b35c050a8a"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 17:26:51 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 18:33:31 2015 +0100"
      },
      "message": "Revert \"Revert \"ART: Ignore try blocks with no throwing instructions\"\"\n\nThe original CL broke libcore tests because monitor-exit instructions\ndid not have any side-effects and got removed by DCE once not labelled\nthrowing any more.\n\nThis reverts commit efe374d7c25c1d48945a9198d96469de99e0c1bd.\n\nChange-Id: I624c0f91676d9baaada6f33be9d7091f68d57535\n"
    },
    {
      "commit": "efe374d7c25c1d48945a9198d96469de99e0c1bd",
      "tree": "5bcba0fdbdb056c1d33c5a33c581192bdf26d315",
      "parents": [
        "8f8ee680bec71a28d9d7b7538e8c7ca100a18184"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 16:58:07 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 16:58:07 2015 +0000"
      },
      "message": "Revert \"ART: Ignore try blocks with no throwing instructions\"\n\nTurns out monitor-exit *can* throw... Need to investigate\n\nThis reverts commit 8f8ee680bec71a28d9d7b7538e8c7ca100a18184.\n\nChange-Id: I8b42690918833c917b6a7fc3ceea932b7c1a6f15\n"
    },
    {
      "commit": "8f8ee680bec71a28d9d7b7538e8c7ca100a18184",
      "tree": "ac955c2a57563dfbeb09ec2fee5cc33ae2a926a4",
      "parents": [
        "3e18a8958d2caa4980c4cee4e537313a61adf3d8"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 12:11:42 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 08 16:22:05 2015 +0100"
      },
      "message": "ART: Ignore try blocks with no throwing instructions\n\nIn order to avoid complex removal of redundant exceptional edges in\nthe SSA builder, this patch modified the graph builder to consider\nblocks without throwing instructions as not in a try block, even if\ncovered by a TryItem.\n\nIn some corner cases, this may generate more TryBoundaries than\nnecessary, but those can be removed once the SSA form is built.\n\nChange-Id: I158c4542b2c1964a8dd532f82e921b9cb1997e1e\n"
    },
    {
      "commit": "3e18a8958d2caa4980c4cee4e537313a61adf3d8",
      "tree": "5bcba0fdbdb056c1d33c5a33c581192bdf26d315",
      "parents": [
        "569e81e500725f52116b7d0342ec80a6d1e0089b",
        "c470193cfc522fc818eb2eaab896aef9caf0c75a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 08 10:36:47 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 08 10:36:48 2015 +0000"
      },
      "message": "Merge \"Fuse long and FP compare \u0026 condition on x86/x86-64 in Optimizing.\""
    },
    {
      "commit": "c470193cfc522fc818eb2eaab896aef9caf0c75a",
      "tree": "9887d434f8d9e33c41b98ca406e7c060c68c9016",
      "parents": [
        "c87c8939ea1bcfbddb954478d527cf1138f4f343"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 10 13:18:51 2015 -0400"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 07 16:49:53 2015 +0100"
      },
      "message": "Fuse long and FP compare \u0026 condition on x86/x86-64 in Optimizing.\n\nThis is a preliminary implementation of fusing long/float/double\ncompares with conditions to avoid materializing the result from the\ncompare and condition.\n\nThe information from a HCompare is transferred to the HCondition if it\nis legal.  There must be only a single use of the HCompare, the HCompare\nand HCondition must be in the same block, the HCondition must not need\nmaterialization.\n\nAdded GetOppositeCondition() to HCondition to return the flipped\ncondition.\n\nBug: 21120453\nChange-Id: I1f1db206e6dc336270cd71070ed3232dedc754d6\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "281a6320242fd4c229607a663874a8a3b19804f0",
      "tree": "c83a06e68fcb2fd3e6c115ae7d1eba3a4deb3991",
      "parents": [
        "4a305daf77a9b80d6abb7817a836aa59d2db521d"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jul 03 10:34:57 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jul 06 10:28:46 2015 +0100"
      },
      "message": "ART: Fix graph for switch leaving a try block\n\nBlocks that GraphBuilder creates for switch-case logic are given\na dex_pc of the branch targets they serve, while in fact they should\nbe considered part of the switch instruction itself and get its pc.\nThis caused the try/catch algorithm to either miss try boundaries or\ncreate bogus edges.\n\nThis patch fixed the dex_pc of the switch-case blocks and modifies\nthe try/catch logic to iterate over all blocks as opposed to just\nbranch targets since multiple blocks can now cover the same dex_pc.\n\nChange-Id: I30fe4f8db0647b869979197a3bc847cf212a7315\n"
    },
    {
      "commit": "49bace1ccbec6f12b5b475ccc2ce76e0b666b500",
      "tree": "5a318a6fc2009bfe49d7073af6d660ed1d4fed67",
      "parents": [
        "8922e0b575742aaabbb4168b8703f7c1a4cb346c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 01 15:28:26 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 01 15:28:26 2015 +0100"
      },
      "message": "Address additional comments on try-catch CL\n\nExtra documentation of try-catch building.\n\nChange-Id: I5048c5fcb354c76fa4a60c3d8d21dd216bc9f6cd\n"
    },
    {
      "commit": "56e1accf3966ae92e151567abf4561ef3f6466f4",
      "tree": "7dc23852fe89290f1e01626342dc2a2d5a7de492",
      "parents": [
        "3b0667c1d68ba88c71b031757b757dca659afd69"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jun 30 15:41:36 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jul 01 14:51:21 2015 +0100"
      },
      "message": "ART: Changes to try-catch in GraphBuilder\n\nThis patch adds an additional case into the insertion algorithm for\nHTryBoundary inside HGraphBuilder in order to better handle catch\nblocks covered by a TryItem.\n\nBuilding SSA form also required to stop combining HTryBoundaries for\nneighbouring TryItems because it was not clear which exception\nhandlers belong to which try block.\n\nChange-Id: Ic68bd6ef98fee784609fa593cb08dca1f00a15e0\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": "b809daaffdd42dc01457ae06ae83f2d7ebdb5e65",
      "tree": "16c3d455297fbf79a1d084392aada209ac2e8704",
      "parents": [
        "1c7f2f10230baf7a549af5bfd16fd3f0fb73ba21",
        "fe659462e7d58bb2585b1bd029f9e08fd9dd32ae"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 24 13:56:48 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 24 13:56:49 2015 +0000"
      },
      "message": "Merge \"ART: Stop creating a fallthrough block for Goto\""
    },
    {
      "commit": "fe659462e7d58bb2585b1bd029f9e08fd9dd32ae",
      "tree": "987b9dd7f8278766d2b6a4a65397f2852f1d7ef4",
      "parents": [
        "582195dfcee32586b71b0ed00a973cfc7d7b8b57"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 24 14:23:56 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 24 14:25:48 2015 +0100"
      },
      "message": "ART: Stop creating a fallthrough block for Goto\n\nOptimizing\u0027s Builder used to create a basic block after a Goto under\nthe assumption that control flow can fall through.\n\nBug: 19084197\nChange-Id: Id85f31df98a4177466750d3cd0bc8bb74782ca2d\n"
    },
    {
      "commit": "1efcc22cd1895c48adccbe49270d8e8583c2b12d",
      "tree": "9ea6171a7670f8930e219f8a74875c4af19e5c9f",
      "parents": [
        "264e63bb899320a779264964aee6b868de25515e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 24 12:41:20 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 24 13:58:20 2015 +0100"
      },
      "message": "Fix another case of un-verified dead code.\n\nbug:22042796\nhttps://code.google.com/p/android/issues/detail?id\u003d178008\n\nChange-Id: Ie77ccf17ce2a69c86b2278f7920aa4ad39bf142b\n"
    },
    {
      "commit": "b783b408112d1797da646f576a40f94bcb5162f3",
      "tree": "c6046874de725b77a8744637f470ade1861fa7c7",
      "parents": [
        "a63d8f44740a8406adda6aaff7ed75ef923c085f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 11:06:43 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 14:39:02 2015 +0100"
      },
      "message": "Revert \"Revert \"Use IsAssignableFrom instead of IsSubclass for robustness.\"\"\n\nDon\u0027t use IsAssignableFrom, but check beforehand if the referrer is an\ninterface. Otherwise, we are being too aggressive on removing clinit\nchecks on interfaces (being a subclass doesn\u0027t imply the interface\nhas been initialized).\n\nbug:21870666\n\nThis reverts commit 463580ca5a1e75e27ad0207537ffc6252091326a.\n\nChange-Id: I2a13974d28477ee3e5224142cc260cbf46d19aa9\n"
    },
    {
      "commit": "ae370391057b88607b0e451fdea020b257684b91",
      "tree": "7946765faa7834863c4f9160ade9baffb6c50a7d",
      "parents": [
        "a948b1a0a917b9fd4bbd10a5ba4823594b78373d",
        "afd06414598e011693137ba044e38756609b2179"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 11:09:24 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 22 11:09:25 2015 +0000"
      },
      "message": "Merge \"Use compiling class instead of outer class for access checks.\""
    },
    {
      "commit": "0f0be7261c68ebb701677b70d40e373accef4d09",
      "tree": "6ea3fd862cfe430b3c1e2ebcdcdbd69936e0ff26",
      "parents": [
        "e85647ed00d07169193cc07ffa09e3b70ce38f59",
        "463580ca5a1e75e27ad0207537ffc6252091326a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 10:05:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 22 10:05:59 2015 +0000"
      },
      "message": "Merge \"Revert \"Use IsAssignableFrom instead of IsSubclass for robustness.\"\""
    },
    {
      "commit": "463580ca5a1e75e27ad0207537ffc6252091326a",
      "tree": "c0cb71ddac18ab10c38ffdc5e406ed5283932ca2",
      "parents": [
        "af268bbc4fbd0b9847acf1f7b79c038806118467"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 10:04:29 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 10:05:01 2015 +0000"
      },
      "message": "Revert \"Use IsAssignableFrom instead of IsSubclass for robustness.\"\n\nNot correct for Quick.\n\nBug:21870666\n\nThis reverts commit af268bbc4fbd0b9847acf1f7b79c038806118467.\n\nChange-Id: Id44849cc877a42495619fd71bfd2db75159b6868\n"
    },
    {
      "commit": "afd06414598e011693137ba044e38756609b2179",
      "tree": "fe75ed1f0b7e0d7af27872287e68822fa69aceee",
      "parents": [
        "97d207c3beba0a4ed6402e882c5909c5ac5bde6d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jun 20 22:44:47 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 09:45:33 2015 +0100"
      },
      "message": "Use compiling class instead of outer class for access checks.\n\nbug:21869678\nChange-Id: Ica6ecc759adc76950dcfe9d4d859dd593a742c62\n"
    },
    {
      "commit": "e85647ed00d07169193cc07ffa09e3b70ce38f59",
      "tree": "8050e51ee09ee93bf33f1446d6489032d20b53e6",
      "parents": [
        "8cf7cbf7854199cfd5001fa9503c78c3b15f0b58",
        "af268bbc4fbd0b9847acf1f7b79c038806118467"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 22 07:53:43 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 22 07:53:44 2015 +0000"
      },
      "message": "Merge \"Use IsAssignableFrom instead of IsSubclass for robustness.\""
    },
    {
      "commit": "aa919207d2fb63af11d72d3b7cdbc435769565af",
      "tree": "dd5e34a864dcb866eea52e85c49f514a39bacda5",
      "parents": [
        "74f774f0d6389c432122ca262c6705118f5ebd6e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Jun 21 18:57:02 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Jun 21 18:57:02 2015 +0100"
      },
      "message": "Fix String Change baseline compiler errors.\n\nThe String Change adds multiple move results if the uninitialized string\nis in multiple registers. This adds StoreLocals on the same instruction,\nwhich isn\u0027t allowed. Now, a LoadLocal is added for each extra move\nneeded.\n\nChange-Id: I49f676cb85de051e737e0653138cbb947a73e48b\n"
    },
    {
      "commit": "af268bbc4fbd0b9847acf1f7b79c038806118467",
      "tree": "66c3c20a7776cd27368dfcccc307af4745dc6057",
      "parents": [
        "87a135e8699119c9ef99b0221acf481d7d6501d4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 18:35:41 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 18:42:17 2015 +0100"
      },
      "message": "Use IsAssignableFrom instead of IsSubclass for robustness.\n\nWe can get interface methods as referrer. Instead of crashing,\njust use IsAssignableFrom.\n\nbug:21870666\n\nChange-Id: I7978e36fb981d44611635fbaf3899138bae60672\n"
    },
    {
      "commit": "e102f1937ca14df87594469430d2e6e0ebe0f357",
      "tree": "df8cb62b5ddd25f2ecb038639287c6b2d8f42abd",
      "parents": [
        "e4bb626ff09e409c9482e515716de7cd595ea466",
        "cad65427d39c8ca9849d49d049ca6d263ada938a"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Jun 19 17:38:55 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 19 17:38:56 2015 +0000"
      },
      "message": "Merge \"Fix StringChange for optimizing compiler.\""
    },
    {
      "commit": "4dda3376b71209fae07f5c3c8ac3eb4b54207aa8",
      "tree": "0d96a327d1b3a7e09eff178a66c0b5fb946cfc85",
      "parents": [
        "71af6f7aab7491665fe2d6beb9af4c251a99ad56"
      ],
      "author": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Mon Jun 01 18:31:49 2015 -0700"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jun 19 15:43:58 2015 +0100"
      },
      "message": "MIPS: Initial version of optimizing compiler for MIPS64R6.\n\nBug: 21555893\nChange-Id: I874dc356eee6ab061a32f8f3df5f8ac3a4ab7dcf\nSigned-off-by: Alexey Frunze \u003cAlexey.Frunze@imgtec.com\u003e\nSigned-off-by: Douglas Leung \u003cdouglas.leung@imgtec.com\u003e\n"
    },
    {
      "commit": "30451743493bc2f589e96d68ab98f557461f97f9",
      "tree": "7d663eaeba566457b54691c03f377fbfdd609cae",
      "parents": [
        "f12ffdb549f1947125e3f56694cb479a619f02bf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 13:32:41 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 13:59:38 2015 +0100"
      },
      "message": "Use compiling class instead of referrer for access checks.\n\nbug:21869670\nChange-Id: Ief329247e90202835e27fa38803e02dd2e2ae8ca\n"
    },
    {
      "commit": "cad65427d39c8ca9849d49d049ca6d263ada938a",
      "tree": "431225d33b11d0c23f6f151314c8920f5a0a314b",
      "parents": [
        "f12ffdb549f1947125e3f56694cb479a619f02bf"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Jun 18 21:16:08 2015 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Jun 18 21:24:03 2015 -0700"
      },
      "message": "Fix StringChange for optimizing compiler.\n\nUses optimizing compiler more and fixes x86_64 invoke codegen.\n\nBug: 21902634\n\n(cherry-picked from commit e0a9a53ec4b4ccbf9b1d67957fb99a45b469ccc2)\n\nChange-Id: I56881889bee7092b8401b090af1c0f1004c11667\n"
    },
    {
      "commit": "69505f86a1a653bf86c1f2b423b3e0605137d5d1",
      "tree": "5c10c1175fbed15f18ad6502b24bc09f2c437d43",
      "parents": [
        "46ff9b6100e66306233534e26c16d3c6738070a9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 18:04:12 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 18:10:09 2015 +0100"
      },
      "message": "Don\u0027t check the return type in the builder.\n\nThe verifier will not complain about dead code. For the compiler,\nit is benign.\n\nbug:21863767\n\nChange-Id: I6ef7be233d1cd69dddcc4499e4e4fad54753099f\n"
    },
    {
      "commit": "2e33525bd4eb892246b4c244c6d4ebf6c6d07501",
      "tree": "ce1eb1ea3fe8310d4320ea71579fb12f74dd916e",
      "parents": [
        "3c4fb2d1836a81823677191ad91203779427b610"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 11:11:27 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 12:47:06 2015 +0100"
      },
      "message": "Bailout from compilation if an invoke is malformed.\n\nBecause the verifier does not check trivially dead instructions,\nthe compilers must prepare for bogus instructions. This change\nfixes the case the arguments for an invoke do not match the\nformal parameters.\n\nbug:21865459\n\nChange-Id: Ie9fa9dbaedaad0350a52391252e18c045056454d\n"
    },
    {
      "commit": "2ef645ba50544b879a82ea30e606f18c9af98917",
      "tree": "25d18676c87c9738624793f2983bc0e87faecf6e",
      "parents": [
        "43d154bed3ad0bba766211af1f2637500d30a93f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 17 18:20:52 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 17 18:25:03 2015 +0100"
      },
      "message": "ART: Allow PackedSwitch instructions with zero targets\n\nOptimizing and the interpreter wrongly assumed that a PackedSwitch\nalways has at least one target. This patch removes the corresponding\nDCHECKs and adds a regression test case.\n\nThis is a resubmission of CL I32b7033ed38de6f1d1a6ee5d5bf12f3a47c9b37e\n\nBug: 21863783\nChange-Id: I04e6e124bdd16591ba27c79490e6ce183c36b691\n"
    },
    {
      "commit": "15875b0d36fce555534bb840b13b39d61fd108f2",
      "tree": "53de01908990954cdf0f46168cb437d5c12ebf2e",
      "parents": [
        "241f9c41924e33e0c3bab9a7c4306397458749ca"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 17 16:59:53 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 17 16:59:53 2015 +0000"
      },
      "message": "Revert \"ART: Allow PackedSwitch instructions with zero targets\"\n\nThis fixed Optimizing but revealed the same issue in the interpreter.\n\nThis reverts commit 241f9c41924e33e0c3bab9a7c4306397458749ca.\n\nChange-Id: Iad5a28b24f2c21d3575cf8ecc8b7c8fbf98d1132\n"
    },
    {
      "commit": "241f9c41924e33e0c3bab9a7c4306397458749ca",
      "tree": "bdffe0a82c85051607a5ecd61056262836eac212",
      "parents": [
        "edb83c606e034d76bed1331f34cdc435df47bb95"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 17 15:38:35 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 17 17:18:32 2015 +0100"
      },
      "message": "ART: Allow PackedSwitch instructions with zero targets\n\nOptimizing\u0027s Builder wrongly assumed that a PackedSwitch always has\nat least one target. This patch removes the corresponding DCHECK and\nadds a regression test case.\n\nBug:21863783\nChange-Id: I32b7033ed38de6f1d1a6ee5d5bf12f3a47c9b37e\n"
    },
    {
      "commit": "ae09d2d244cf2f506822b3e14731b81c3b278f9d",
      "tree": "73e019e1b7e79800477ecf801c2a70f71cd3605c",
      "parents": [
        "ff924fb2700decce131fb10dd28de1e251465792"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Fri May 29 10:52:55 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Mon Jun 15 12:30:43 2015 +0100"
      },
      "message": "Bring ReferenceTypePropagation to HInvoke return types\n\nChange-Id: Id0683f67e32874713a30c072c71dc537b1271926\n"
    },
    {
      "commit": "6c0c4f230f417ed484bae5c01b79551af7659389",
      "tree": "9c603f9e2015a405ed1932f397df4f42930c23e2",
      "parents": [
        "a981f9d5cac9a479d3b5d16508d71cfe17d95117"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 12 15:40:42 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 12 15:40:42 2015 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Bring ReferenceTypePropagation to HInvoke return types\"\"\"\n\nThis reverts commit a981f9d5cac9a479d3b5d16508d71cfe17d95117.\n\nChange-Id: I69faf16d5ef0ecc234fb52e071b682e728a8bf97\n"
    },
    {
      "commit": "a981f9d5cac9a479d3b5d16508d71cfe17d95117",
      "tree": "aa840457d4f757723f4838c06b3f25416a05d56e",
      "parents": [
        "958857d0f9686770a3b1117166d5fa700b39704a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 12 15:26:21 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 12 15:26:21 2015 +0000"
      },
      "message": "Revert \"Revert \"Bring ReferenceTypePropagation to HInvoke return types\"\"\n\nThis reverts commit 958857d0f9686770a3b1117166d5fa700b39704a.\n\nChange-Id: I196ff2a4453489f0105efc54eee73a2a9321ac4e\n"
    },
    {
      "commit": "958857d0f9686770a3b1117166d5fa700b39704a",
      "tree": "9c603f9e2015a405ed1932f397df4f42930c23e2",
      "parents": [
        "ddedddcedaae78fc6aa29940fdb1fbe40bb05774"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 12 12:13:43 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jun 12 12:13:43 2015 +0000"
      },
      "message": "Revert \"Bring ReferenceTypePropagation to HInvoke return types\"\n\nWe exceed stack frame size with Clang in art::OptimizingCompiler::CompileOptimized\n\n\nThis reverts commit ddedddcedaae78fc6aa29940fdb1fbe40bb05774.\n\nChange-Id: I6f992dda228acb9cae2087d1e6c78f2afdf30050\n"
    },
    {
      "commit": "ddedddcedaae78fc6aa29940fdb1fbe40bb05774",
      "tree": "aa840457d4f757723f4838c06b3f25416a05d56e",
      "parents": [
        "6dbf5a5a075a371cb2ff3659058e93a985485baa"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Fri May 29 10:52:55 2015 +0100"
      },
      "committer": {
        "name": "Guillaume Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Wed Jun 10 20:00:31 2015 +0100"
      },
      "message": "Bring ReferenceTypePropagation to HInvoke return types\n\nChange-Id: I9a7e974787cb8ba75b86bd07e8a37c5fe99911c3\n"
    },
    {
      "commit": "73d01bc3b227a2090be4b383c4731e1a520a282d",
      "tree": "212f20bd769ad495cb15da9aa71426f0f2ab8f06",
      "parents": [
        "edc9ea1047a0e31fc55442c60871ebe1f7eb15f4",
        "da9badb9edea5e0d18cd9f97eff0d0937ad48310"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 09 23:00:48 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 09 23:00:49 2015 +0000"
      },
      "message": "Merge \"ART: Check long and double register pairs in invokes\""
    },
    {
      "commit": "da9badb9edea5e0d18cd9f97eff0d0937ad48310",
      "tree": "ed2f0b85561daa715988f644482fbdd99995656d",
      "parents": [
        "ccd6337f31d13706c602f3d9436e9b4025075b63"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 05 20:22:12 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 09 11:25:42 2015 -0700"
      },
      "message": "ART: Check long and double register pairs in invokes\n\nFor invokes, ensure that long and double parameters are actually\nin registers pairs. We were testing the pair, but skipping the\nactual high parameter register.\n\nBug: 17410612\nChange-Id: I8f4c3335ea8b7dc3cf252bee52a5a706ae8905f8\n"
    },
    {
      "commit": "69aa60163989c33a008115205d39732a76ecc1dc",
      "tree": "058392dc104a8e7b3594a548239dca2d3ec06cce",
      "parents": [
        "aa77f6e5839b2ad3bf8ca2c06a44ec92e2667af1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 09 10:34:25 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 09 16:01:49 2015 +0100"
      },
      "message": "Revert \"Revert \"Pass current method to HNewInstance and HNewArray.\"\"\n\nProblem exposed by this change was fixed in:\nhttps://android-review.googlesource.com/#/c/154031/\n\nThis reverts commit 7b0e353b49ac3f464c662f20e20e240f0231afff.\n\nChange-Id: I680c13dc9db9ba223ab11c7af255222860b4e6d2\n"
    },
    {
      "commit": "7b0e353b49ac3f464c662f20e20e240f0231afff",
      "tree": "b5c936df891b08521176065ccaddb1f9e27c9f46",
      "parents": [
        "e21aa42e1341d34250742abafdd83311ad9fa737"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 09 09:25:50 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 09 09:25:50 2015 +0000"
      },
      "message": "Revert \"Pass current method to HNewInstance and HNewArray.\"\n\n082-inline-execute fails on x86.\n\nThis reverts commit e21aa42e1341d34250742abafdd83311ad9fa737.\n\nChange-Id: Ib3fd25faee2e0128001e40d3d51a74f959bc4449\n"
    },
    {
      "commit": "e21aa42e1341d34250742abafdd83311ad9fa737",
      "tree": "d2c9f8530e59876588d32f04b4effc25ebc0fa89",
      "parents": [
        "c47908e8c32fd58bc4dc75998a80f706954db1dc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 08 15:35:07 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 08 15:36:27 2015 +0100"
      },
      "message": "Pass current method to HNewInstance and HNewArray.\n\nAlso remove unsed CodeGenerator::LoadCurrentMethod.\n\nChange-Id: I4b8d3f2a30b8e2c76b6b329a72555483c993cb73\n"
    },
    {
      "commit": "c345f141f11faad177aa9635a78088d00cf66086",
      "tree": "0a9fbb0f1f90dfe273d94659f077cc1e6b84966c",
      "parents": [
        "38207af82afb6f99c687f64b15601ed20d82220a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 04 17:17:32 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 04 17:17:32 2015 +0000"
      },
      "message": "Revert \"Use HCurrentMethod in HInvokeStaticOrDirect.\"\n\nFails on baseline/x86.\n\nThis reverts commit 38207af82afb6f99c687f64b15601ed20d82220a.\n\nChange-Id: Ib71018367eb7c6046965494a7e996c22af3de403\n"
    },
    {
      "commit": "38207af82afb6f99c687f64b15601ed20d82220a",
      "tree": "f9360949b92e5b6b01c5828c03ac67d01adffe1d",
      "parents": [
        "6a0d5e7fe6dc0c9d3dd941ab991203f2d5d1c354"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 01 15:46:22 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 04 14:39:06 2015 +0100"
      },
      "message": "Use HCurrentMethod in HInvokeStaticOrDirect.\n\nChange-Id: I0d15244b6b44c8b10079398c55da5071a3e3af66\n"
    },
    {
      "commit": "012a072d06474404ff488d181eb3d4a504c5cbe7",
      "tree": "6255ee152eb537b68f1828539f32ae1e9584be88",
      "parents": [
        "82cc909ff81cc25f7fe97ddac3a1a1f6dc9f5792"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 02 15:55:24 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 02 15:55:24 2015 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Bring ReferenceTypePropagation to HInvoke return types\"\"\"\n\nThis reverts commit 82cc909ff81cc25f7fe97ddac3a1a1f6dc9f5792.\n\nChange-Id: If29dbe0dfd65998047c7ac4ef06c4789355b6bda\n"
    },
    {
      "commit": "82cc909ff81cc25f7fe97ddac3a1a1f6dc9f5792",
      "tree": "fa9bc3fe2e1ca79557ea99799362306ee15c19f0",
      "parents": [
        "8ccf8a0ce31083faa0d9c502f1f0f12a825f6c5d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 02 15:13:34 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 02 15:13:34 2015 +0000"
      },
      "message": "Revert \"Revert \"Bring ReferenceTypePropagation to HInvoke return types\"\"\n\nThis reverts commit 8ccf8a0ce31083faa0d9c502f1f0f12a825f6c5d.\n\nChange-Id: I729c147989e0e98d0739d7596b5bb41a72971624\n"
    },
    {
      "commit": "8ccf8a0ce31083faa0d9c502f1f0f12a825f6c5d",
      "tree": "6255ee152eb537b68f1828539f32ae1e9584be88",
      "parents": [
        "77e48c64e7c1c0084217b8df1b47ac6367e61cc7"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 02 13:23:08 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jun 02 13:23:08 2015 +0000"
      },
      "message": "Revert \"Bring ReferenceTypePropagation to HInvoke return types\"\n\nThis reverts commit 77e48c64e7c1c0084217b8df1b47ac6367e61cc7.\n\nChange-Id: Ic6967b2ea7588862ac190e1c0555af615027b5b6\n"
    },
    {
      "commit": "77e48c64e7c1c0084217b8df1b47ac6367e61cc7",
      "tree": "fa9bc3fe2e1ca79557ea99799362306ee15c19f0",
      "parents": [
        "a96bea54b7e3def5490d169f2bf92be2e68dd001"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Fri May 29 10:52:55 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Tue Jun 02 11:36:18 2015 +0100"
      },
      "message": "Bring ReferenceTypePropagation to HInvoke return types\n\nChange-Id: Ie8f6b0ea5bd841c9555f3b1b6d4b7dce92a117f1\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "66a7d7a4612b0dfb8a409fbf05bbefd07122fd80",
      "tree": "cb9d448af1b932c52c8017b53e70b7243c3093d8",
      "parents": [
        "bd699ea018d12b061282f17a6abf329590ab263c",
        "d23eeef3492b53102eb8093524cf37e2b4c296db"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 29 14:03:10 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 29 14:03:10 2015 +0000"
      },
      "message": "Merge \"Support for inlining methods that call/throw.\""
    },
    {
      "commit": "bd699ea018d12b061282f17a6abf329590ab263c",
      "tree": "9b4613ab6cd80e02795dddd1d675ed5097991a87",
      "parents": [
        "05f763b892c1fea61428752aa5576f4f656a6463",
        "104fd8a3f30ddcf07831250571aa2a233cd5c04d"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri May 29 13:57:36 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 29 13:57:36 2015 +0000"
      },
      "message": "Merge \"Bring Reference Type Propagation to Instance/StaticInstanceField\""
    },
    {
      "commit": "d23eeef3492b53102eb8093524cf37e2b4c296db",
      "tree": "57d3e9ab2853d5b8092568bb3d29bc850c113315",
      "parents": [
        "a15c78d3cc28f514a482ffd792a767e97fe53c95"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 18 22:31:29 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 29 14:15:04 2015 +0100"
      },
      "message": "Support for inlining methods that call/throw.\n\nMostly fixes here and there to make it working.\n\nChange-Id: I1b535e895105d78b65634636d675b818551f783e\n"
    },
    {
      "commit": "fbdaa30a448029d75422c76f29087a4e39630f4a",
      "tree": "e28784ff44d740884a7949f11745706e2831c873",
      "parents": [
        "b4e2fbbed28c3bcdb8fd0fee5a201ba78e1edf28"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 29 12:06:56 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 29 12:06:56 2015 +0100"
      },
      "message": "Use the new HCurrentMethod in HLoadString.\n\nChange-Id: I23d27e5e10736d127519eb3238ff8f25df3843a2\n"
    },
    {
      "commit": "104fd8a3f30ddcf07831250571aa2a233cd5c04d",
      "tree": "7aec8353b7d3906da500595fc81de11ad6f1ad40",
      "parents": [
        "81d804a51d4fc415e1544a5a09505db049f4eda6"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Wed May 20 17:52:13 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Fri May 29 11:43:04 2015 +0100"
      },
      "message": "Bring Reference Type Propagation to Instance/StaticInstanceField\n\nFor this, we need the field index in FieldInfo, hence the add of the field.\n\nChange-Id: Id219bd826d8496acf3981307a8c42e2eb6ddb712\n"
    },
    {
      "commit": "b4e2fbbed28c3bcdb8fd0fee5a201ba78e1edf28",
      "tree": "2da8c563cca7c9e7e125819ba3022915dca18ca9",
      "parents": [
        "31db3432157caac55584a59827c69b303ba09d13",
        "76b1e1799a713a19218de26b171b0aef48a59e98"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 28 10:10:24 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 28 10:10:24 2015 +0000"
      },
      "message": "Merge \"Add a HCurrentMethod node.\""
    },
    {
      "commit": "76b1e1799a713a19218de26b171b0aef48a59e98",
      "tree": "897d0d22d246367eb09d8b825b43c384074083f4",
      "parents": [
        "382f5c24eb663ca8fa39a94a038349138a00272a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 27 17:18:33 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 28 10:44:36 2015 +0100"
      },
      "message": "Add a HCurrentMethod node.\n\nThis enables register allocation for the current method, so\nthat users of it don\u0027t always load it from the stack.\n\nCurrently only used by HLoadClass. Will make follow-up\nCLs for the other users.\n\nChange-Id: If73324d85643102faba47fabbbd2755eb258c59c\n"
    },
    {
      "commit": "81d804a51d4fc415e1544a5a09505db049f4eda6",
      "tree": "fcb1fbb3acf1c6328c5e6a8147e5a6f12a907534",
      "parents": [
        "c06841dac1443e99e92596f15caa82c99bfee010"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Wed May 20 12:42:25 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Wed May 27 18:10:31 2015 +0100"
      },
      "message": "Bring Reference Type Propagation to NewArray\n\nChange-Id: Ieff4f38854e06b0ed4b5689ced94a4289053d80d\n"
    },
    {
      "commit": "d5111bf05fc0a9974280a80eeb43db6d5227a81e",
      "tree": "cd119fb5d07f8347699ce7551e9471f2740b21ba",
      "parents": [
        "aa49c23d47e5fdfcf51380550ee864e9d30d082b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 22 15:37:09 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 22 15:37:09 2015 +0100"
      },
      "message": "Do not use dex_compilation_unit after inlining.\n\nIt\u0027s incompatible with inlining, as inlined invokes/load class/new\ncan be from another dex file.\n\nChange-Id: I8897b6a012942bc8e136f2bea70252d3fb3a7fa5\n"
    },
    {
      "commit": "3cd4fc8bbb40a57d2ffde85f543c124f53237c1d",
      "tree": "97eee6cc70206f605e251ad85f6f2941f4eb0383",
      "parents": [
        "2f9d1379fdebcdeeac52eaeff25ad5697c6b6ffb"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 14 15:15:42 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue May 19 15:54:19 2015 +0100"
      },
      "message": "Eliminate redundant constructor barriers when inlining.\n\nBug: 20410297\nChange-Id: I2097743d00eb795d050d390b1918e38c7f41d506\n"
    },
    {
      "commit": "702d26018769f9fbc4763c7ed02331aed596ac7d",
      "tree": "74578ce3cb0abfd2e25c53d7272415c82717e035",
      "parents": [
        "fd5f56d4604eeeacdf6be5189187b6ef49157280"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 30 19:28:21 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri May 01 14:23:32 2015 +0100"
      },
      "message": "Skip compilation when falling-through out of method code.\n\nBug: 19988134\nChange-Id: I68638ce9551848a67af587595f264b51f976df11\n"
    },
    {
      "commit": "2af2307f3903a75a379029c049b86f9903fc81a5",
      "tree": "89168f24337d7ec41648568c48b0dd5fb5194c39",
      "parents": [
        "781733632637db98d79dfffad72bf063be3259be"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:15:40 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:15:40 2015 +0000"
      },
      "message": "Revert \"GVN final fields even with side effects.\"\n\nThis reverts commit 781733632637db98d79dfffad72bf063be3259be.\n\nChange-Id: Id7c4591f6b8190921852044b278d11627457c570\n"
    },
    {
      "commit": "781733632637db98d79dfffad72bf063be3259be",
      "tree": "a4ea455e89adb9db77e25525a81737f3b0ab0c58",
      "parents": [
        "36ad3f1c3c08a49680a8f5d34bba43199ab9dd5b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 29 16:46:27 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 30 11:20:21 2015 +0100"
      },
      "message": "GVN final fields even with side effects.\n\nTwo accesses of a final field can be GVN\u0027ed even if there are\nside effects between them.\n\nChange-Id: I04495ae83c7858f4216b083ad1c29851954320ad\n"
    },
    {
      "commit": "80613ffd5699e6207d6b1264d600a0fc168074ce",
      "tree": "dbe8971e367e2529586821f3caa223fd22c28ce3",
      "parents": [
        "a94fb1f99ee3390bca9531b2512f8fc65f13ceee",
        "3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 28 10:31:38 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 28 10:31:38 2015 +0000"
      },
      "message": "Merge \"Have HInvoke instructions know their number of actual arguments.\""
    },
    {
      "commit": "3e3d73349a2de81d14e2279f60ffbd9ab3f3ac28",
      "tree": "69ad3378263c9a4b967cb7e27de0027264c12eb6",
      "parents": [
        "a0ee862288b702468f8c2b6d0ad0f1c61be0b483"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 28 11:00:54 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 28 11:00:54 2015 +0100"
      },
      "message": "Have HInvoke instructions know their number of actual arguments.\n\nAdd an art::HInvoke::GetNumberOfArguments routine so that\nart::HInvoke and its subclasses can return the number of\nactual arguments of the called method.  Use it in code\ngenerators and intrinsics handlers.\n\nConsequently, no longer remove a clinit check as last input\nof a static invoke if it is still present during baseline\ncode generation, but ensure that static invokes have no such\ncheck as last input in optimized compilations.\n\nChange-Id: Iaf9e07d1057a3b15b83d9638538c02b70211e476\n"
    },
    {
      "commit": "848f70a3d73833fc1bf3032a9ff6812e429661d9",
      "tree": "b0349b3a40aab5a915af491b100659a5ca9fbbf6",
      "parents": [
        "d14438f0c5071962be7fab572b54687d32d9d087"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 15 13:49:50 2014 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 27 18:54:52 2015 -0700"
      },
      "message": "Replace String CharArray with internal uint16_t array.\n\nSummary of high level changes:\n  - Adds compiler inliner support to identify string init methods\n  - Adds compiler support (quick \u0026 optimizing) with new invoke code path\n    that calls method off the thread pointer\n  - Adds thread entrypoints for all string init methods\n  - Adds map to verifier to log when receiver of string init has been\n    copied to other registers. used by compiler and interpreter\n\nChange-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01\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": "76f1413492c228bfa710e1eaa4c60370eaffbb8a",
      "tree": "24fc73f101c9c9ad7a76984a770f0a8f1a8e75fe",
      "parents": [
        "3507b795c034617e1c94fc9544a208d6c6f75735",
        "20e8d43ab82b28f16b1630d5081d75a922d3f67a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 24 20:18:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 24 20:18:53 2015 +0000"
      },
      "message": "Merge \"[optimizing] Ensure FillNewArray sets array access\""
    },
    {
      "commit": "20e8d43ab82b28f16b1630d5081d75a922d3f67a",
      "tree": "aa5aa67ab9161cba08eb0eebf5dae5b5fa1cfb07",
      "parents": [
        "83134ec5f26979cbb9131dccaf849a72cdd752f6"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 24 14:39:42 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 24 14:39:42 2015 -0400"
      },
      "message": "[optimizing] Ensure FillNewArray sets array access\n\nA method that only used filled new like \u0027int[]{0,0}\u0027 didn\u0027t have the\narray access flag set, so BCE didn\u0027t remove the checks.\n\nChange-Id: Iedec50daf0d25b1cc3872eb1a4cfc7b8bb31e6bf\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "5f02c6caf9f38be49e655f8bdeeeb99b6faf9383",
      "tree": "e0675b7691662a452a2bb48ebbf5410ceac51c85",
      "parents": [
        "eb5459ca861b58ee8a9907789f11400dcdddb87b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 19:14:22 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 19:18:27 2015 +0100"
      },
      "message": "Reduce the number of explicit clinit checks for static invokes.\n\nDo not generate explicit clinit checks for static invokes\nwhen the class of the called method is a super class of the\ncaller method\u0027s class (referrer class).\n\nChange-Id: I86ba18facef261fbb71f7ed20867756630ed3c53\n"
    },
    {
      "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": "0c25d1048154495ae0523ba2f5063385eb15aa5f",
      "tree": "28f34fec11f70ea72dd929e3a98130c257cb37aa",
      "parents": [
        "27df758e2e7baebb6e3f393f9732fd0d064420c8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Apr 20 14:49:09 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Apr 20 14:49:21 2015 +0100"
      },
      "message": "optimizing: fix gtests\n\nby taking into account that the compilation unit is null during tests.\n\nChange-Id: I01a28ce8f03c927ff679b84bcdf2464fa97e0924\n"
    },
    {
      "commit": "27df758e2e7baebb6e3f393f9732fd0d064420c8",
      "tree": "261207281fd574deffb4dc1c1bc6bea8f150993e",
      "parents": [
        "f8bdd9f3a002970e4b8fdcf6fe6730116f1626c3"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Apr 17 19:12:31 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Apr 20 14:02:51 2015 +0100"
      },
      "message": "[optimizing] Add memory barriers in constructors when needed\n\nIf a class has final fields we must add a memory barrier before\nreturning from constructor. This makes sure the fields are visible to\nother threads.\n\nBug: 19851497\nChange-Id: If8c485092fc512efb9636cd568cb0543fb27688e\n"
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "04914da1385564fca1990863d9a2690af10e1946",
      "tree": "e5063acb3665374b49c7b8a803264fb2cc0a4b8b",
      "parents": [
        "14d20c010a783ae27e8c1610595512085d7133c7",
        "1b498727f79e85756a9eee86d31214393dc7002c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 01 09:03:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 01 09:03:29 2015 +0000"
      },
      "message": "Merge \"ART: Same skip-compilation heuristic in both backends\""
    },
    {
      "commit": "1b498727f79e85756a9eee86d31214393dc7002c",
      "tree": "45c42ed6e28304e3ee9b713289fc32007f2faa06",
      "parents": [
        "ebbb1e322d8c89e69424a543faa03402e5b63673"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 31 11:37:18 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 31 16:36:31 2015 +0100"
      },
      "message": "ART: Same skip-compilation heuristic in both backends\n\nWhen deciding if a method should be compiled, Optimizing counts the\nDEX instructions while Quick approximates this figure as the size of\nthe CodeItem. This patch modifies Optimizing to use the same logic\nso that the two backends reject the same set of methods.\n\nChange-Id: Icb12bf2977f948198df08d59f243532ec8c61783\n"
    },
    {
      "commit": "20f85597828194c12be10d3a927999def066555e",
      "tree": "486c10dca0811b036a0cd5f80c02650ac43b11a5",
      "parents": [
        "7d8c6776d7bdcc04411154aa215ba5909939192a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 19 10:07:02 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 31 08:56:17 2015 +0100"
      },
      "message": "Fixed layout for dex caches in boot image.\n\nDefine a fixed layout for dex cache arrays (type, method,\nstring and field arrays) for dex caches in the boot image.\nThis gives those arrays fixed offsets from the boot image\ncode and allows PC-relative addressing of their elements.\n\nUse the PC-relative load on arm64 for relevant instructions,\ni.e. invoke-static, invoke-direct, const-string,\nconst-class, check-cast and instance-of. This reduces the\narm64 boot.oat on Nexus 9 by 1.1MiB.\n\nThis CL provides the infrastructure and shows on the arm64\nthe gains that we can achieve by having fixed dex cache\narrays\u0027 layout. To fully use this for the boot images, we\nneed to implement the PC-relative addressing for other\narchitectures. To achieve similar gains for apps, we need\nto move the dex cache arrays to a .bss section of the oat\nfile. These changes will be implemented in subsequent CLs.\n\n(Also remove some compiler_driver.h dependencies to reduce\nincremental build times.)\n\nChange-Id: Ib1859fa4452d01d983fd92ae22b611f45a85d69b\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": "790412959a6413a585f45fc5f77fe7106311a00c",
      "tree": "94d7d6016c5a58d6c5f31d8350330c8025baa014",
      "parents": [
        "9ed05c4cf76aaeee48a1eb5bbae659b0acbabe67"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 26 10:05:54 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 26 10:05:54 2015 +0000"
      },
      "message": "Use the original invoke type when inlining.\n\nWhen resolving a method through the compiler driver, the code makes\nsure the call in the DEX bytecode matches the kind of method found,\nto check for IncompatibleClassChangeError. Because when we sharpen\nan invoke virtual, we transform the invoke kind to direct, we must not\nuse the new kind, but the one in DEX.\n\nChange-Id: Iaf77b27b529c659ea48ffb19f46427552c9e3654\n"
    },
    {
      "commit": "9437b78780f9e6ffa5797ebe82de8e8d7f3a5ed6",
      "tree": "d99027ae9295f162865c01f9a8795ac8cda09b84",
      "parents": [
        "11e99b19f48576f1bb6d0993635b34b6e09c9832"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 25 10:08:51 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 25 17:13:54 2015 +0000"
      },
      "message": "Revert \"Revert \"Inline across dex files.\"\"\n\nThis reverts commit 6a816cf624ba56bf2872916d7b65b18fd9a411ef.\n\nChange-Id: I36cb524108786dd7996f2aea0443675be1f1b859\n"
    },
    {
      "commit": "b64b782f9ae7a94ecbbf64c83cbcdc7d716ba560",
      "tree": "df3aa814ff7762d681c50781c413fd510440ae61",
      "parents": [
        "2c2d00e8ca841aa2f57fa2f852e896378ef67144",
        "46e2a3915aa68c77426b71e95b9f3658250646b7"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 17:31:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 24 17:31:31 2015 +0000"
      },
      "message": "Merge \"ART: Boolean simplifier\""
    },
    {
      "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": "6a816cf624ba56bf2872916d7b65b18fd9a411ef",
      "tree": "47d03a97a9b5101ea543beda55f29cce339bd06e",
      "parents": [
        "7e4c3508e4f5512650b63c41f7872a749e99aee9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 24 16:17:56 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 24 16:17:56 2015 +0000"
      },
      "message": "Revert \"Inline across dex files.\"\n\nbug: 19904089\nbug: 19903495\n\nThis reverts commit 7e4c3508e4f5512650b63c41f7872a749e99aee9.\n\nChange-Id: I15df746b5f1882cce78eedde6c05c0d3b69bfa4a\n"
    },
    {
      "commit": "7e4c3508e4f5512650b63c41f7872a749e99aee9",
      "tree": "b6f9f89eb384a386ee756e6dd98d9f979feef2ce",
      "parents": [
        "0b1692cd451053198362993d1f6939fde90c2f50"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 18 11:00:52 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 23 17:42:01 2015 +0000"
      },
      "message": "Inline across dex files.\n\nChange-Id: I5c2c44f5130b50f0bad21a6877a3935dc60b4a85\n"
    },
    {
      "commit": "9ccd151d0d27a729f88af9d00285afe4d147981a",
      "tree": "edfef268a0ecda957dfaa91ec35dd99c9ad3761f",
      "parents": [
        "3743174267159ec0c39bce1ca28c2081468dda94"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Mar 20 18:11:45 2015 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Mar 20 18:40:32 2015 -0700"
      },
      "message": "Fix verifier handling of empty switch as last instruction.\n\nAlso fixes optimizing compiler\u0027s assumption that switch is non-empty and\nadds test case.\n\nBug: 19827056\nChange-Id: I5ac891d5062f528ef3be787b1094cba7b4c0fbd0\n"
    },
    {
      "commit": "e4335eb5bcbca6927e51c10cf0de3516d94ef599",
      "tree": "3f69b4a17dc5d7ac5f6cab1ffee5a4091b5c9ba9",
      "parents": [
        "5e42cd3eee2c89214a331a36fe226cfcc57917a3"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Mar 02 15:14:13 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Mar 03 17:39:04 2015 -0800"
      },
      "message": "Make BCE a no-op if there is no array access.\n\nChange-Id: I8456182808c1dbaa0c0ae1b8c2e94bb17baf5f29\n"
    },
    {
      "commit": "5e8b137d28c840b128e2488f954cccee3e86db14",
      "tree": "c56e4c709ce07d605ab4b754e89f7739264feb73",
      "parents": [
        "f9af19413333c271192c3b11425f865bd8054c0c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 23 14:39:08 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Feb 04 13:47:49 2015 +0000"
      },
      "message": "Create HGraph outside Builder, print timings\n\nThis patch refactors the way HGraph objects are created, moving the\ninstantiation out of the Builder class and creating the CodeGenerator\nearlier. The patch uses this to build a single interface for printing\ntimings info and dumping the CFG.\n\nChange-Id: I2eb63eabf28e2d0f5cdc7affaa690c3a4b1bdd21\n"
    },
    {
      "commit": "2fd6aa5cb76f0c71cbdcd1189c76e68bf84e8308",
      "tree": "79bc01ffc77cec97eb4b785b8bde9aeb59ab24c7",
      "parents": [
        "852eaffe8e478186e134d88a02843a469118ef8c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 02 18:58:27 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 02 19:02:47 2015 +0000"
      },
      "message": "Fix broken gtests after SuspendCheck optimization\n\nFixes hardcoded graph dumps in pretty printer tests and an assumption\nthat non-zero branch offset in dex implies presence of HInstructions.\n\nChange-Id: Iee273c06b7b36410b4621107bef2f3592ece2f5b\n"
    },
    {
      "commit": "852eaffe8e478186e134d88a02843a469118ef8c",
      "tree": "fa00068edc1391698af4d771430578fccd9dcd77",
      "parents": [
        "e5deafe9cdd81238c3916b04301ea884c93f46b5"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 02 15:23:05 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 02 17:58:02 2015 +0000"
      },
      "message": "No SuspendChecks when branching to return block\n\nThe return basic block is usually placed at the beginning of the DEX\nfile, making the branches to it back edges where the Optimizing\u0027s\ngraph builder places SuspendCheck instructions, only to be removed\nlater by the instruction_simplifier pass. Since huge auto-generated\nmethods tend to contain hundreds/thousands of these, this patch\nrecognizes the pattern and prevents builder from generating the\nredundant check in the first place.\n\nChange-Id: I065a3c2f71964b8fc2e53dc20730ba42938b78a1\n"
    },
    {
      "commit": "cb1b00aedd94785e7599f18065a0b97b314e64f6",
      "tree": "fdde101b239c66325243bcc60d3d94f07ff56492",
      "parents": [
        "9544368685b4aa65e746332e602491a3e8e5b247"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 28 14:50:01 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 30 17:43:16 2015 +0000"
      },
      "message": "Use the non access check entrypoint when possible.\n\nChange-Id: I0b53d63141395e26816d5d2ce3fa6a297bb39b54\n"
    },
    {
      "commit": "193f785e471b38009f7406a030d741ae415c8bb0",
      "tree": "be891d7ae765cce10552faa20b57e5546ca3e8d8",
      "parents": [
        "dff2d8422cee19d35d7eac467ac0fc2315c1c899",
        "10e244f9e7f6d96a95c910a2bedef5bd3810c637"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 29 12:02:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 29 12:02:13 2015 +0000"
      },
      "message": "Merge \"optimizing: NullCheck elimination\""
    },
    {
      "commit": "10e244f9e7f6d96a95c910a2bedef5bd3810c637",
      "tree": "bc2b90ce716129115c05f79e21c58fe13b01fd20",
      "parents": [
        "ab7f56d9b9838811cb01773e45999e2cda4aa03a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jan 26 18:54:32 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 29 12:01:26 2015 +0000"
      },
      "message": "optimizing: NullCheck elimination\n\nHow it works:\n- run a type analysis to propagate null information on instructions\n- during the last instruction simplifier remove null checks for which\nthe input is known to be not null\n\nThe current type analysis is actually a nullability analysis but it will\nbe reused in follow up CLs to propagate type information: so it keeps\nthe more convenient name.\n\nChange-Id: I54bb1d32ab24604b4d677d1ecdaf8d60a5ff5ce9\n"
    },
    {
      "commit": "1cf95287364948689f6a1a320567acd7728e94a3",
      "tree": "70a8b60c768894d635cf63b0a480baa5073d2bed",
      "parents": [
        "4a50662eeaa0b1a26be66e7584fb765151dabc59"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 12 19:22:03 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 29 10:52:14 2015 +0000"
      },
      "message": "Small optimization for recursive calls: avoid dex cache.\n\nChange-Id: I044757a2f06e535cdc1480c4fc8182b89635baf6\n"
    },
    {
      "commit": "71fb52fee246b7d511f520febbd73dc7a9bbca79",
      "tree": "444d91e910433aaf887bbdada28dfaa3160bebc2",
      "parents": [
        "420457e6040184a6e1639a4c84fcc8e237bd8a3d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 29 17:43:08 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 15 10:21:11 2015 -0800"
      },
      "message": "ART: Optimizing compiler intrinsics\n\nAdd intrinsics infrastructure to the optimizing compiler.\n\nAdd almost all intrinsics supported by Quick to the x86-64 backend.\nFurther intrinsics require more assembler support.\n\nChange-Id: I48de9b44c82886bb298d16e74e12a9506b8e8807\n"
    },
    {
      "commit": "02d81cc8d162a31f0664249535456775e397b608",
      "tree": "8bce70d3d44dcc9384d72e4edc1505e4d1a6ea07",
      "parents": [
        "8558375377946aabbbda6ab584e13f754590bd89"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Mon Jan 05 16:08:49 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jan 05 18:23:33 2015 +0000"
      },
      "message": "Opt Compiler: ARM64: Add support for rem-float, rem-double and volatile.\n\nAdd support for rem-float, rem-double and volatile memory accesses\nusing acquire-release and memory barriers.\n\nChange-Id: I96a24dff66002c3b772c3d8e6ed792e3cb59048a\nSigned-off-by: Serban Constantinescu \u003cserban.constantinescu@arm.com\u003e\n"
    },
    {
      "commit": "52c489645b6e9ae33623f1ec24143cde5444906e",
      "tree": "a39667aa354645bd42a7a061d08ca82df3004143",
      "parents": [
        "193c7a94822f765b0b6b0cecd54c9f08dfd26425"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Dec 16 17:02:57 2014 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Dec 19 09:58:27 2014 +0000"
      },
      "message": "[optimizing compiler] Add support for volatile\n\n- for backends: arm, x86, x86_64\n- added necessary instructions to assemblies\n- clean up code gen for field set/get\n- fixed InstructionDataEquals for some instructions\n- fixed comments in compiler_enums\n\n* 003-opcode test verifies basic volatile functionality\n\nChange-Id: I144393efa312dfb2c332cb84056b00edffee338a\n"
    },
    {
      "commit": "4e44c829e282b3979a73bfcba92510e64fbec209",
      "tree": "42375a128b28bb886955214336f63391dfc41d5c",
      "parents": [
        "390f59f9bec64fd81b05e796dfaeb03ab6d4cc81"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 17 12:25:12 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 17 12:25:12 2014 +0000"
      },
      "message": "Revert \"Small optimization for recursive calls: avoid dex cache.\"\n\nFails on target.\n\nThis reverts commit 390f59f9bec64fd81b05e796dfaeb03ab6d4cc81.\n\nChange-Id: Ic3865b8897068ba20df0fbc2bcf561faf6c290c1\n"
    },
    {
      "commit": "390f59f9bec64fd81b05e796dfaeb03ab6d4cc81",
      "tree": "d418b4a488390d718144bf5a5a180d965d1d762e",
      "parents": [
        "240016da1d6615b26c8342bdeb4bae381570ac47"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 12 19:22:03 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 17 11:53:33 2014 +0000"
      },
      "message": "Small optimization for recursive calls: avoid dex cache.\n\nChange-Id: Ic4054b6c38f0a2a530ba6ef747647f86cee0b1b8\n"
    },
    {
      "commit": "e53798a7e3267305f696bf658e418c92e63e0834",
      "tree": "8979bbed96b107a5a6bbae9285ff4e0c362dad95",
      "parents": [
        "e6c0cdd11097dd72275ac24f1e98217c299d973e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 01 10:31:54 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 15 22:52:27 2014 +0000"
      },
      "message": "Inlining support in optimizing.\n\nCurrently only inlines simple things that don\u0027t require an\nenvironment, such as:\n- Returning a constant.\n- Returning a parameter.\n- Returning an arithmetic operation.\n\nChange-Id: Ie844950cb44f69e104774a3cf7a8dea66bc85661\n"
    }
  ],
  "next": "48c2b03965830c73cdddeae8aea8030f08430137"
}
