)]}'
{
  "log": [
    {
      "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": "85c7bab43d11180d552179c506c2ffdf34dd749c",
      "tree": "337976b69d3b2a35cc9f12284cda03c8eb2a58c7",
      "parents": [
        "819a9c5638b6d6b579c89fe36df96acc1f378182"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 18 13:40:46 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 18 15:19:04 2015 +0100"
      },
      "message": "Revert \"Revert \"Optimize code generation of check-cast and instance-of.\"\"\n\nThis reverts commit 7537437c6a2f89249a48e30effcc27d4e7c5a04f.\n\nChange-Id: If759cb08646e47b62829bebc3c5b1e2f2969cf84\n"
    },
    {
      "commit": "6766eae2d91e894b4ceab9f29cc983900e7bc0c7",
      "tree": "4a3aac762e01c7933bcbffebb5277bde208e975b",
      "parents": [
        "930761fb7a4db70fbd5e75faa1fca07e5b494ae9",
        "7537437c6a2f89249a48e30effcc27d4e7c5a04f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 17 17:12:37 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 17 17:12:37 2015 +0000"
      },
      "message": "Merge \"Revert \"Optimize code generation of check-cast and instance-of.\"\""
    },
    {
      "commit": "7537437c6a2f89249a48e30effcc27d4e7c5a04f",
      "tree": "3f5f1d89f27d549cf40901f906ffab86bb05b520",
      "parents": [
        "64acf303eaa2f32c0b1d8cfcbf044a822c5eec08"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 17 17:12:19 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 17 17:12:19 2015 +0000"
      },
      "message": "Revert \"Optimize code generation of check-cast and instance-of.\"\n\nFailures with libcore tests.\n\nThis reverts commit 64acf303eaa2f32c0b1d8cfcbf044a822c5eec08.\n\nChange-Id: Ie6f323fcf5d86bae5c334c1352bb21f1bad60a88\n"
    },
    {
      "commit": "ca83cd09bde09dac73ed66f38dec4bc0bd6afb54",
      "tree": "a4d1a7267ae3009758b704d8aa0dd30133baea08",
      "parents": [
        "e3b223594e2e9d91903a62180c9660664052506b",
        "76c92ac73eeda2582caee39dd427ca035caf172b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 17 15:53:10 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 17 15:53:10 2015 +0000"
      },
      "message": "Merge \"Optimizing: Allow storing value objects in containers.\""
    },
    {
      "commit": "b7d8e8cf7063fdec1cce6ebd33e33804976bd978",
      "tree": "8d60856999139cf5b0b0f145f69c35a84a60716c",
      "parents": [
        "a201d5eeb0903408df925a1ed1686a55238a274c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 17 15:47:05 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 17 16:06:59 2015 +0100"
      },
      "message": "Optimizing: Do not use range-based loop when inserting elements.\n\nWhen we iterate over the elements of a container and we may\ninsert new elements into that container, it\u0027s wrong to use\nthe range-based loop.\n\nBug: 24133462\nChange-Id: Iee35fbcf88ed3bcd6155cbeba09bd256032a16be\n"
    },
    {
      "commit": "76c92ac73eeda2582caee39dd427ca035caf172b",
      "tree": "7d5baae363d7c380476ce8842ad1f43b59d48af5",
      "parents": [
        "a201d5eeb0903408df925a1ed1686a55238a274c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 17 15:39:16 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 17 15:45:39 2015 +0100"
      },
      "message": "Optimizing: Allow storing value objects in containers.\n\nChange-Id: Ic9c6b62e36706e571fd71c18d24d8e76ae2d5c7b\n"
    },
    {
      "commit": "a201d5eeb0903408df925a1ed1686a55238a274c",
      "tree": "d59b87e3c0bddb1d244199e9fbcc9301cb7dc52f",
      "parents": [
        "271d30dd847fb72d78d3178b8b3b225192c2d1c0",
        "64acf303eaa2f32c0b1d8cfcbf044a822c5eec08"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 17 14:18:03 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 17 14:18:03 2015 +0000"
      },
      "message": "Merge \"Optimize code generation of check-cast and instance-of.\""
    },
    {
      "commit": "e6f49b47b6a4dc9c7684e4483757872cfc7ff1a1",
      "tree": "6a5f45136832f73138ced75fcd3c6110b74116ea",
      "parents": [
        "23a8e35481face09183a24b9d11e505597c75ebb"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 14:04:33 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 14:04:33 2015 +0000"
      },
      "message": "Revert \"Support unresolved fields in optimizing\"\nbreaks debuggable tests.\n\nThis reverts commit 23a8e35481face09183a24b9d11e505597c75ebb.\n\nChange-Id: I8e60b5c8f48525975f25d19e5e8066c1c94bd2e5\n"
    },
    {
      "commit": "64acf303eaa2f32c0b1d8cfcbf044a822c5eec08",
      "tree": "1e9829deb0621b3cb9b275846c8d08381956fecf",
      "parents": [
        "017719a03c7c111a2069b5f85e3b9c81566c0902"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 14 22:20:29 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 17 14:45:39 2015 +0100"
      },
      "message": "Optimize code generation of check-cast and instance-of.\n\nOn x86/x64/arm/arm64. Improve code size of selected apks from 0.3% to 1%,\nand performance of DeltaBlue by 20%.\n\nChange-Id: Ib5799f7a53443cd880a121dd7f21932ae9f5c7aa\n"
    },
    {
      "commit": "23a8e35481face09183a24b9d11e505597c75ebb",
      "tree": "bcaafb6ea001349acbf160c2cc89334fab4a38dc",
      "parents": [
        "175dc732c80e6f2afd83209348124df349290ba8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Sep 08 19:56:31 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 12:29:59 2015 +0100"
      },
      "message": "Support unresolved fields in optimizing\n\nChange-Id: I9941fa5fcb6ef0a7a253c7a0b479a44a0210aad4\n"
    },
    {
      "commit": "175dc732c80e6f2afd83209348124df349290ba8",
      "tree": "6a5f45136832f73138ced75fcd3c6110b74116ea",
      "parents": [
        "5d01db1aa7634a012109d43e6403451b76de1daa"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Aug 25 15:42:32 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Sep 17 12:29:51 2015 +0100"
      },
      "message": "Support unresolved methods in Optimizing\n\nChange-Id: If2da02b50d2fa668cd58f134a005f1752e7746b1\n"
    },
    {
      "commit": "71bf8090663d02869cafafdd530976f7f2a9db7f",
      "tree": "70f910498031be392dd1f851cf38fe68bdc3154c",
      "parents": [
        "4919c34ead9a10d6cbdaba9967952c344b32e5b9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 15 15:33:14 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 16 16:41:01 2015 +0100"
      },
      "message": "Optimizing: Tag arena allocations in SsaBuilder.\n\nReplace GrowableArray with ArenaVector in SsaBuilder and\ntag allocations with a new arena allocation type.\n\nChange-Id: I27312c51d7be9d2ad02a974cce93b365c65c5fc4\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": "9af47e27674e70e7f82315d39de5bc659c4e1b83",
      "tree": "e1cf3d95c94721cf9e411e544f37105b684d7666",
      "parents": [
        "35717f8cfb6c1de5c89b2f9b990a050b2cbab66f",
        "6058455d486219994921b63a2d774dc9908415a2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 14 11:43:25 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 14 11:43:25 2015 +0000"
      },
      "message": "Merge \"Optimizing: Tag basic block allocations with their source.\""
    },
    {
      "commit": "402ae2dc9b94df62859bd9825e5c00f298dc71b2",
      "tree": "fb63090ac4387af93ad049105b28dbd1885fa0db",
      "parents": [
        "67c5d28da9b0c40343e8a8f68fea4dc86ff554d1",
        "3ecfd65143d95bd7c6cbe4f58c33af517d3761e0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 09 13:16:59 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 13:16:59 2015 +0000"
      },
      "message": "Merge \"Add dex_pc to all HInstructions in builder.\""
    },
    {
      "commit": "3ecfd65143d95bd7c6cbe4f58c33af517d3761e0",
      "tree": "62b3194f0ac2814541170f970996b0a35511e78e",
      "parents": [
        "426514cada274714244290d6447d9f62dc3394bf"
      ],
      "author": {
        "name": "Yevgeny Rouban",
        "email": "yevgeny.y.rouban@intel.com",
        "time": "Mon Sep 07 17:57:00 2015 +0600"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 09 14:12:13 2015 +0100"
      },
      "message": "Add dex_pc to all HInstructions in builder.\n\nOptimizing compiler generates minimum debug line info that\nis built using the dex_pc information about suspend points.\nThis is not enough for performance and debugging needs.\n\nThis patch makes all HInstructions contain\ndex_pc and all allocations in the builder define this value.\n\nChange-Id: I1d14aefe075189b7b1b41b4384c3499474c19afc\nSigned-off-by: Yevgeny Rouban \u003cyevgeny.y.rouban@intel.com\u003e\nSigned-off-by: Serdjuk, Nikolay Y \u003cnikolay.y.serdjuk@intel.com\u003e\n"
    },
    {
      "commit": "0616ae081e648f4b9b64b33e2624a943c5fce977",
      "tree": "20db99d802277cce68f88eda918ae7646383ff14",
      "parents": [
        "e6576390f957c82c2aede438834d028066757368"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 17 12:49:27 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue Sep 08 17:01:05 2015 -0400"
      },
      "message": "[optimizing] Add support for x86 constant area\n\nUse the Quick trick of finding the address of the method by calling the\nnext instruction and popping the return address into a register.  This\ntrick is used because of the lack of PC-relative addressing in 32 bit\nmode on the X86.\n\nAdd a HX86ComputeBaseMethodAddress instruction to trigger generation\nof the method address, which is referenced by instructions needing\naccess to the constant area.\n\nAdd a HX86LoadFromConstantTable instruction that takes a\nHX86ComputeBaseMethodAddress and a HConstant that will be used to load\nthe value when needed.\n\nChange Add/Sub/Mul/Div to detect a HX86LoadFromConstantTable right hand\nside, and generate code that directly references the constant area.\nOther uses will be added later.\n\nChange the inputs to HReturn and HInvoke(s), replacing the FP constants\nwith HX86LoadFromConstantTable instead.  This allows values to be\nloaded from the constant area into the right location.\n\nPort the X86_64 assembler constant area handling to the X86.\n\nUse the new per-backend optimization framework to do this conversion.\n\nChange-Id: I6d235a72238262e4f9ec0f3c88319a187f865932\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\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": "897ce64153e4758663e464fb5fb339f9a7b496c8",
      "tree": "5685e4df884ac806e2b5cdfeabed4420015548c4",
      "parents": [
        "0526f5af91cc6b986e0b439577de0b93f9e5354c",
        "736b560f2d2c89b63dc895888c671b5519afa4c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 22:11:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 03 22:11:02 2015 +0000"
      },
      "message": "Merge \"Reduce how often we call FindDexCache\""
    },
    {
      "commit": "736b560f2d2c89b63dc895888c671b5519afa4c8",
      "tree": "d5aee7ac36f458a5f6e6d75fceb19f8963a71db5",
      "parents": [
        "fe3879e6011f629d0dd6b04fab00b9496bd4ea08"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 02 14:54:11 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 13:27:19 2015 -0700"
      },
      "message": "Reduce how often we call FindDexCache\n\nBefore host boot.oat -j4 optimizing compile:\nreal  1m17.792s\nuser  3m26.140s\nsys 0m8.340s\n\nAfter:\nreal  1m12.324s\nuser  3m22.718s\nsys 0m8.320s\n\nChange-Id: If18e9e79e06cdf1676692e5efacb682bf93889c3\n"
    },
    {
      "commit": "2e8e4ff1b7d78a236c238651dbc0b58f33966c0a",
      "tree": "7b83b227bbaa36465f313542bba9206ac631a8fd",
      "parents": [
        "f7432c60a1d6385ff3dea9b44305007b2bcc1ed1",
        "145acc5361deb769eed998f057bc23abaef6e116"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:33:49 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 03 13:33:49 2015 +0000"
      },
      "message": "Merge \"Revert \"Optimizing: Tag basic block allocations with their source.\"\""
    },
    {
      "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": "f7432c60a1d6385ff3dea9b44305007b2bcc1ed1",
      "tree": "52e509a6343740b629cb75495deadbd8ad384713",
      "parents": [
        "86d92066df8323d5ee7ac7e9c061a79343a82fd8",
        "91e11c0c840193c6822e66846020b6647de243d5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 13:21:07 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 03 13:21:07 2015 +0000"
      },
      "message": "Merge \"Optimizing: Tag basic block allocations with their source.\""
    },
    {
      "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": "2a7c1ef95c850abae915b3a59fbafa87e6833967",
      "tree": "7b83b227bbaa36465f313542bba9206ac631a8fd",
      "parents": [
        "6d889e0e5004ae4d548e6c623a1218f010d1e89b"
      ],
      "author": {
        "name": "Yevgeny Rouban",
        "email": "yevgeny.y.rouban@intel.com",
        "time": "Wed Jul 22 18:36:24 2015 +0600"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Sep 03 10:38:41 2015 +0100"
      },
      "message": "Add more dwarf debug line info for Optimized methods.\n\nOptimizing compiler generates minimum debug line info that\nis built using the dex_pc information about suspend points.\nThis is not enough for performance and debugging needs.\n\nThis CL generates additional debug line information for\ninstructions which have known dex_pc and it ensures that\nwhole call sites are mapped (as opposed to suspend points\nwhich map only one instruction past the function call).\n\nBug: 23157336\nChange-Id: I9f2b1c2038e3560847c175b8121cf9496b8b58fa\nSigned-off-by: Yevgeny Rouban \u003cyevgeny.y.rouban@intel.com\u003e\n"
    },
    {
      "commit": "f9f6441c665b5ff9004d3ed55014f46d416fb1bb",
      "tree": "3d66a0b44e1ac927156eec6e6488de5fd52b982b",
      "parents": [
        "fe3879e6011f629d0dd6b04fab00b9496bd4ea08"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 02 14:05:49 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 02 20:16:58 2015 +0100"
      },
      "message": "Optimizing: Tag Arena allocations with their source.\n\nThis adds the ability to track where we allocate memory\nwhen the kArenaAllocatorCountAllocations flag is turned on.\n\nAlso move some allocations from native heap to the Arena\nand remove some unnecessary utilities.\n\nBug: 23736311\nChange-Id: I1aaef3fd405d1de444fe9e618b1ce7ecef07ade3\n"
    },
    {
      "commit": "68ad649d3918f2eed3a37209c01a7f0a0faf09f0",
      "tree": "5d6a004a79bffc5c02af02f325faa8df5f8cad52",
      "parents": [
        "bffabfce093e26bffb9e820a8f6b45474d28787a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Aug 18 17:08:12 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Aug 20 12:57:10 2015 +0100"
      },
      "message": "Refactor BuildInvoke.\n\nBuildInvoke got to be too complex an unreadble. This breaks it down in\nsmaller pieces.\n\nChange-Id: Ibda63f69f5a1be537ae13e18a5f67c361173f4a6\n"
    },
    {
      "commit": "e418dda75998e0186f7580c2c54705767c3c8f1f",
      "tree": "49b3183cd1d25b6a5cfb31e0d16678deb023c1e8",
      "parents": [
        "4d786026efaac41acf8278d1c87d842f7ce06fde"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Aug 11 20:03:09 2015 -0700"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 20 11:00:12 2015 +0100"
      },
      "message": "Be more flexible on the code unit size when inlining.\n\nThis change increases the maximum code unit size, and fold\nparameters in the inlinee in the hope to reduce the overall\nsize of the graph. We then make sure we don\u0027t inline methods\nthat have more than N HInstructions.\n\nAlso, remove the kAccDontInline flag on ArtMethod. The compiler\ndoes not need it anymore.\n\nChange-Id: I4cd3da40e551f30ba83b8b274728b87e67f6812e\n"
    },
    {
      "commit": "05f2056b4f11e0b2bac92b2655abe7030771f5dc",
      "tree": "60d94fc6f0e0825bec14a5f8eb52f2b98d285314",
      "parents": [
        "e1e05e0876f303a9f4aca1d8713b7c44f21952b8"
      ],
      "author": {
        "name": "Agi Csaki",
        "email": "agicsaki@google.com",
        "time": "Wed Aug 19 14:58:14 2015 -0700"
      },
      "committer": {
        "name": "Agi Csaki",
        "email": "agicsaki@google.com",
        "time": "Wed Aug 19 18:51:32 2015 -0700"
      },
      "message": "Add support to indicate whether intrinsics require a dex cache\n\nA structural change to indicate whether a given intrinsic requires access\nto a dex cache.  I updated the needs_environment_ field to indicate\nwhether an HInvoke needs an environment or a dex cache, and if an HInvoke\nrepresents an intrisified method, we utilize this field to determine if\nthe HInvoke needs a dex cache.\n\nBug: 21481923\nChange-Id: I9dd25a385e1a1397603da6c4c43f6c1aea511b32\n"
    },
    {
      "commit": "83f8b5bb9e9c52791a02a84d7b0889cab898efe4",
      "tree": "59de59bcd9f166fd892df1887019c846abd539ba",
      "parents": [
        "99429ae0610e8d67d417542942c4befb35950bd3",
        "bbd733e4ef277eff19bf9a6601032da081e9b68f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 19:02:45 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 19:02:45 2015 +0000"
      },
      "message": "Merge \"ART: Enable basic optimizations for try/catch\""
    },
    {
      "commit": "bbd733e4ef277eff19bf9a6601032da081e9b68f",
      "tree": "47c5e9624378d8705e8e448ed951617f680d021f",
      "parents": [
        "a35d4c9d66b372e7ae1014357c48ddfa6104085b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 18 17:48:17 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Aug 19 19:55:43 2015 +0100"
      },
      "message": "ART: Enable basic optimizations for try/catch\n\nGenerating code for try/catch methods requires having run at least the\ninstruction simplifier to remove redundant suspend checks. This patch\nenables the first group of optimizations when try/catch is present.\n\nEnabled optimizations:\n1) IntrinsicsRecognizer\nDoes not modify the graph, only sets HInvoke::intrinsic_.\n\n2) ConstantFolding\nDoes not deal with throwing instructions.\n\n3) InstructionSimplifier\nMay remove a throwing instruction (e.g. LoadClass in VisitCheckCast),\nor may turn a throwing instruction into a non-throwing one (ArraySet).\nTheir corresponding catch phi inputs are not removed but correctness\nis preserved.\n\n4) ReferenceTypePropagation\nDoes not modify the graph, only sets type properties. Typing of\nLoadException from catch handler information was added.\n\n5) DeadCodeElimination\nRemoving individual instructions is fine (same as 3). Removal of dead\nblocks was disabled for try/catch.\n\nChange-Id: I2722c3229eb8aaf326391e07f522dbf5186774b8\n"
    },
    {
      "commit": "99429ae0610e8d67d417542942c4befb35950bd3",
      "tree": "707a048ce213083edcf370a0a021e66a709d157c",
      "parents": [
        "a35d4c9d66b372e7ae1014357c48ddfa6104085b",
        "581550137ee3a068a14224870e71aeee924a0646"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 18:05:46 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 18:05:46 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Optimizing: Better invoke-static/-direct dispatch.\"\"\""
    },
    {
      "commit": "581550137ee3a068a14224870e71aeee924a0646",
      "tree": "f62dd0d07c66a8ce4d7d994ee0e9c27bd8014bb1",
      "parents": [
        "32f264e67afa8654a5570d38b627515fb73fc333"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 12:49:41 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 18:54:36 2015 +0100"
      },
      "message": "Revert \"Revert \"Optimizing: Better invoke-static/-direct dispatch.\"\"\n\nFixed kCallArtMethod to use correct callee location for\nkRecursive. This combination is used when compiling with\ndebuggable flag set.\n\nThis reverts commit b2c431e80e92eb6437788cc544cee6c88c3156df.\n\nChange-Id: Idee0f2a794199ebdf24892c60f8a5dcf057db01c\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": "d9c4d2e9a9bc01fd82a895091126406081fafb1f",
      "tree": "094657600e206c365e365634fab6d4758a3073f4",
      "parents": [
        "464581adaf895d14f73db3d768729f0c9c6f5366",
        "b2c431e80e92eb6437788cc544cee6c88c3156df"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 12:46:09 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 12:46:09 2015 +0000"
      },
      "message": "Merge \"Revert \"Optimizing: Better invoke-static/-direct dispatch.\"\""
    },
    {
      "commit": "b2c431e80e92eb6437788cc544cee6c88c3156df",
      "tree": "6c0ac5f843845e4b09829eb0fd9f1b3013cf4494",
      "parents": [
        "9b688a095afbae21112df5d495487ac5231b12d0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 12:45:42 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 12:45:42 2015 +0000"
      },
      "message": "Revert \"Optimizing: Better invoke-static/-direct dispatch.\"\n\nReverting due to failing ndebug tests.\n\nThis reverts commit 9b688a095afbae21112df5d495487ac5231b12d0.\n\nChange-Id: Ie4f69da6609df3b7c8443412b6cf7f5c43c2c5d9\n"
    },
    {
      "commit": "464581adaf895d14f73db3d768729f0c9c6f5366",
      "tree": "0a839dc0e7add5f1f6f473baa261fe3296a47105",
      "parents": [
        "5a4f0032d797cef0bd110ed03b4342862cd27fc8",
        "9b688a095afbae21112df5d495487ac5231b12d0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 11:27:57 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 11:27:57 2015 +0000"
      },
      "message": "Merge \"Optimizing: Better invoke-static/-direct dispatch.\""
    },
    {
      "commit": "9b688a095afbae21112df5d495487ac5231b12d0",
      "tree": "e5e881d4d124803e66f1e90c1e0a0e4c90d22e13",
      "parents": [
        "009c34cba875885d9540696f33255a9b355d6e15"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 06 14:12:42 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 19 12:23:37 2015 +0100"
      },
      "message": "Optimizing: Better invoke-static/-direct dispatch.\n\nAdd framework for different types of loading ArtMethod*\nand code pointer retrieval. Implement invoke-static and\ninvoke-direct calls the same way as Quick. Document the\ndispatch kinds in HInvokeStaticOrDirect\u0027s new enumerations\nMethodLoadKind and CodePtrLocation.\n\nPC-relative loads from dex cache arrays are used only for\nx86-64 and arm64. The implementation for other architectures\nwill be done in separate CLs.\n\nChange-Id: I468ca4d422dbd14748e1ba6b45289f0d31734d94\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": "837b64974977f615dd1f0662857b97536acdb4dd",
      "tree": "0564fcf0bd8b01644a6453a36983172f5e3d2489",
      "parents": [
        "e28dde5c7907f14042a0c9bcfa8dad436a1d82f4",
        "df3f8227badd0276177774a72f1bcb181688d954"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 13 16:25:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 13 16:25:52 2015 +0000"
      },
      "message": "Merge \"Adjust art::HTypeConversion\u0027s side effects for MIPS64.\""
    },
    {
      "commit": "e28dde5c7907f14042a0c9bcfa8dad436a1d82f4",
      "tree": "2a7663655fa4ca8c9aa4d40df4d6bb1480f0d2be",
      "parents": [
        "7c2af0d873b7033adccf8fa7adf259166c53d369",
        "efa8468c78fdd808043dfb664b56541f3f2dd0e8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 13 15:16:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 13 15:16:40 2015 +0000"
      },
      "message": "Merge \"Small optimization improvements.\""
    },
    {
      "commit": "df3f8227badd0276177774a72f1bcb181688d954",
      "tree": "c64b926ec875e096deb84b13bb464ed69625e917",
      "parents": [
        "7c2af0d873b7033adccf8fa7adf259166c53d369"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 13 12:31:44 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 13 12:32:04 2015 +0100"
      },
      "message": "Adjust art::HTypeConversion\u0027s side effects for MIPS64.\n\nAlso improve debugging information in\nart::CodeGenerator::ValidateInvokeRuntime.\n\nChange-Id: Icfcd1a5cfa5e5449a316251dc20547de6badecb5\n"
    },
    {
      "commit": "7c2af0d873b7033adccf8fa7adf259166c53d369",
      "tree": "ec1a3cffa19b1131abcdd3e64541a14e9bcc4b86",
      "parents": [
        "1d4219ee25dfb228cc72f353d97be69584fc0722",
        "3887c468d731420e929e6ad3acf190d5431e94fc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Aug 13 11:00:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 13 11:00:54 2015 +0000"
      },
      "message": "Merge \"Remove unnecessary `explicit` qualifiers on constructors.\""
    },
    {
      "commit": "efa8468c78fdd808043dfb664b56541f3f2dd0e8",
      "tree": "eeec64ba00456b737b43eaf3d9e61f04fafdfa95",
      "parents": [
        "6a6bd17f68c02139630796a615bd38b929c02e7a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 12 18:28:14 2015 -0700"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 12 18:32:54 2015 -0700"
      },
      "message": "Small optimization improvements.\n\n- Tune CanBeNull for HBoundType.\n- Remove LoadClass when we know the class is loaded.\n- Tune CanBeNull for StringInit.\n\nChange-Id: I564ed33a506d65e991a514342bdfd1610bed0cf5\n"
    },
    {
      "commit": "57b81ecbe74138992dd447251e94ed06cd5eb802",
      "tree": "ec855a19b35d41eb62ac653fde12a5b14cdc2988",
      "parents": [
        "82b844fb449ddc5d7b4e43e71a55eb934a1b0b45"
      ],
      "author": {
        "name": "agicsaki",
        "email": "agicsaki@google.com",
        "time": "Tue Aug 11 17:39:37 2015 -0700"
      },
      "committer": {
        "name": "agicsaki",
        "email": "agicsaki@google.com",
        "time": "Wed Aug 12 18:20:56 2015 -0700"
      },
      "message": "Add support to indicate whether intrinsics require an environment\n\nA structural change to indicate whether a given intrinsic requires\naccess to an environment. I added a field to HInvoke objects to indicate\nif they need an environment whose default value is true and is only updated\nif an intrinsic is marked as not requiring an environment. At this point\nthere is no functional change, as all intrinsics are marked as requiring\nan environment. This change adds the structure for future inliner work\nwhich will allow us to inline more intrinsified calls.\n\nChange-Id: I2930e3cef7b785384bf95b95a542d34af442f3b9\n"
    },
    {
      "commit": "3887c468d731420e929e6ad3acf190d5431e94fc",
      "tree": "67dacb849e722e33e118b97714a48e467c06cbd5",
      "parents": [
        "6a5037eb3340e4c981fd7de3ff45167ee5b7fc82"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Aug 12 18:15:42 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Aug 12 18:15:42 2015 +0100"
      },
      "message": "Remove unnecessary `explicit` qualifiers on constructors.\n\nChange-Id: Id12e392ad50f66a6e2251a68662b7959315dc567\n"
    },
    {
      "commit": "78e3ef6bc5f8aa149f2f8bf0c78ce854c2f910fa",
      "tree": "b8aa83bef462e20e2e7e09650e6c15d3a8d97fa6",
      "parents": [
        "6a5037eb3340e4c981fd7de3ff45167ee5b7fc82"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Aug 12 13:43:29 2015 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Aug 12 13:43:29 2015 +0100"
      },
      "message": "Add a GVN dependency \u0027GC\u0027 for garbage collection.\n\nThis will be used by incoming architecture specific optimizations. The\ndependencies must be conservative. When an HInstruction is created we\nmay not be sure whether it can trigger GC. In that case the\n\u0027ChangesGC\u0027 dependency must be set. We control at code-generation time\nthat HInstructions that can call have the \u0027ChangesGC\u0027 dependency\nset.\n\nChange-Id: Iea6a7f430009f37a9599b0a0039207049906e45d\n"
    },
    {
      "commit": "8c0676ce786f33b8f9c8eedf1ace48988c750932",
      "tree": "024674305019f6e5b47a7aa044c47c87c1d4abaf",
      "parents": [
        "1f3f766d3b365d01f36b85dc19d40f754fa48533"
      ],
      "author": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Mon Aug 03 13:55:33 2015 +0600"
      },
      "committer": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Tue Aug 11 18:12:02 2015 +0600"
      },
      "message": "ART-Optimizing: Fix the type of HDivZeroCheck\n\nHDivZeroCheck is created during the building CFG and at this moment\nits type is not known completely. So it sets the type to int or long.\nHowever, later SSA builder can insert the type conversion and type\nof input of HDivZeroCheck can become byte or short while the type\nof HDivZeroCheck remains the same.\n\nIn reality the type of HDivZeroCheck should be always equal to\nits input parameter.\nTo fix this inconsistency we return the type of HDivZeroCheck as its\ninput type. Code generators are updated accordingly.\n\nChange-Id: I6a5aedc8d479cfc6328704e7ddf252bca830076b\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "1339409345cc8b46d64570430ca3197408fda159",
      "tree": "4e2a3dfea6fab0f902beb70140d38b6edfecba3e",
      "parents": [
        "902ec264e1040cbfd783c44809ed10b261bd78ee",
        "9867bc722f7c41e07a95397bc08b790cd21dc758"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Aug 05 12:52:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 05 12:52:12 2015 +0000"
      },
      "message": "Merge \"Have constant folding be more flexible.\""
    },
    {
      "commit": "9867bc722f7c41e07a95397bc08b790cd21dc758",
      "tree": "6bad203433f24a5556fe98e6480326ed30956c75",
      "parents": [
        "c90bc7c07f9bd24b5424cfb1e3f064fbae5334d6"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Aug 05 10:21:34 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Aug 05 11:01:53 2015 +0100"
      },
      "message": "Have constant folding be more flexible.\n\n- Have Evaluate methods take as argument(s) and return value\n  instances of HConstant (instead of built-in 32- or 64-bit\n  integer values), to let the evaluated instruction choose\n  the type of the statically evaluated node; for instance,\n  art::HEqual::Evaluate shall return a HIntConstant\n  node (as implementation of a Boolean constant) whatever\n  the type of its inputs (a pair of HIntConstant or a pair\n  of HLongConstant).\n- Split the evaluation job from the operation logic: the\n  former is addressed by Evaluate methods, while the latter\n  is done by a generic Compute method.\n- Adress valid BinOp(int, long) and BinOp(long, int) cases.\n- Add a constructor to art::HIntConstant to build an integer\n  constant from a `bool` value.\n\nChange-Id: If84b6fe8406bb94ddb1aa8b02e36628dff526db3\n"
    },
    {
      "commit": "cb1c0557033065f2436ee79e7fa6c19d87064801",
      "tree": "741b623b2e370a133b5cef9feed2542151186db6",
      "parents": [
        "e238414eee3ec933a4ceb1894666c9ef331ace0c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 04 16:22:25 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Aug 04 16:39:38 2015 +0100"
      },
      "message": "ART: Move exception clearing into own instruction\n\nRuntime delivers exceptions only to catch blocks which begin with a\nMOVE_EXCEPTION instruction (in DEX). In that case, the catch block is\nexpected to clear the thread-local exception storage after having\nread the exception reference.\n\nThis patch changes Optimizing to represent MOVE_EXCEPTION with two\ninstructions - HLoadException and HClearException - instead of one.\nIf the exception reference is not used, HLoadException can be safely\nremoved, saving a memory load without breaking the runtime behaviour.\n\nChange-Id: Idad8a714467bf9d9d5fccefbc43c0bd8ae13ddba\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": "2e76830f0b3f23825677436c0633714402715099",
      "tree": "71bd6bd7d327ff3ef8a46af2a7514c5434adb5fd",
      "parents": [
        "a5ae3c3f468ffe3a317b498d7fde1f8e9325346a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 14:41:11 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 29 17:08:28 2015 +0100"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Use the object class as top in reference type propagation\"\"\"\"\n\nThis reverts commit b734808d0c93af98ec4e3539fdb0a8c0787263b0.\n\nChange-Id: Ifd925f166761bcb9be2268ff0fc9fa3a72f00c6f\n"
    },
    {
      "commit": "a5ae3c3f468ffe3a317b498d7fde1f8e9325346a",
      "tree": "0b4252128815c8520128a3dbc2dacac698634ba0",
      "parents": [
        "6df1d46a5d0d4d8f90ee94921657f5bd1420301e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 14:40:50 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 15:42:08 2015 +0100"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Fixes and improvements in ReferenceTypePropagation\"\"\"\"\n\nThis reverts commit e344a8070d4549d513413c06767abf8a2c5e9709.\n\nChange-Id: I400fab0e02ce3c11376cc1f3ae9c7cf2c82ffcc1\n"
    },
    {
      "commit": "e344a8070d4549d513413c06767abf8a2c5e9709",
      "tree": "69543b9e11746fe1e390651a972c1045864ad549",
      "parents": [
        "00e3b38be4b280d6d7a7e843cd336ffbd2ba4365"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 11:52:23 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 11:52:23 2015 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Fixes and improvements in ReferenceTypePropagation\"\"\"\n\nThis reverts commit 00e3b38be4b280d6d7a7e843cd336ffbd2ba4365.\n\nChange-Id: I4dbadb2d7312a410f1c56283f063dd82156cf702\n"
    },
    {
      "commit": "00e3b38be4b280d6d7a7e843cd336ffbd2ba4365",
      "tree": "a9a0a67143d5af9c375dbb9db9d874b61586f7e1",
      "parents": [
        "f7efc9ef90c38212f8c4fbece99080f784a53181"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 15 14:41:29 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jul 27 19:50:04 2015 +0100"
      },
      "message": "Revert \"Revert \"Fixes and improvements in ReferenceTypePropagation\"\"\n\nThis reverts commit 9b0096ba77e7e61bc2dcbbf954831dcae54a6c27.\n\nChange-Id: I824f16e800ca32e646577d5e1e0d593887ccead1\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "c5bee2a133f6505b8004075288b19efb99e24b4f",
      "tree": "5d02e757bb0de3ceceec5979f8ae80712679799c",
      "parents": [
        "32d7806b34efda2af0f5a0eaaa384c781565d364",
        "9b0096ba77e7e61bc2dcbbf954831dcae54a6c27"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:20:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 22 17:20:08 2015 +0000"
      },
      "message": "Merge \"Revert \"Fixes and improvements in ReferenceTypePropagation\"\""
    },
    {
      "commit": "32d7806b34efda2af0f5a0eaaa384c781565d364",
      "tree": "365d25bc21b5af5ec6dfab828de2d28acbdb8b26",
      "parents": [
        "d77aa00c583cc72f96bc4522d02d2070dcd72f1c",
        "7733bd644ac71f86d4b30a319624b23343882e53"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:19:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 22 17:19:20 2015 +0000"
      },
      "message": "Merge \"Revert \"Use the object class as top in reference type propagation\"\""
    },
    {
      "commit": "7733bd644ac71f86d4b30a319624b23343882e53",
      "tree": "7f897d8b0545e43da6b6059718685a8e396b3b70",
      "parents": [
        "3fabec7a25d151b26ba7de13615bbead0dd615a6"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:14:50 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:14:50 2015 +0000"
      },
      "message": "Revert \"Use the object class as top in reference type propagation\"\n\nThis reverts commit 3fabec7a25d151b26ba7de13615bbead0dd615a6.\n\nChange-Id: Id8614f6b6e3e0e4c9caeb9f771e4c145d9fec64f\n"
    },
    {
      "commit": "9b0096ba77e7e61bc2dcbbf954831dcae54a6c27",
      "tree": "1d46845e8c5734683077357bf18743d5eec466e2",
      "parents": [
        "b0d5fc0ac139da4aaa1440263416b9bde05630b0"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:14:32 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:14:32 2015 +0000"
      },
      "message": "Revert \"Fixes and improvements in ReferenceTypePropagation\"\n\nThis reverts commit b0d5fc0ac139da4aaa1440263416b9bde05630b0.\n\nChange-Id: Iea8adfc0bd4cb7ee2b292278b8bac80a259acbd1\n"
    },
    {
      "commit": "60f4804fc2dd9abb008a08fc2209a943bedef135",
      "tree": "9e8ec820e7f9cf9b370aea44dcf814ecc4f813bf",
      "parents": [
        "e6e38ce021ef5e0d326d76172307c000e0e6fab3",
        "1c4ccea094965fb5ba491ace846d154f00d30055"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 22 14:42:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 22 14:42:54 2015 +0000"
      },
      "message": "Merge \"Delete extraneous prefix `SideEffects::` in `nodes.h`.\""
    },
    {
      "commit": "1c4ccea094965fb5ba491ace846d154f00d30055",
      "tree": "9de1b2a13bcb6a50b6a54f976509691f090bc965",
      "parents": [
        "236d0a3c35a369da99bb1f0c617a29f23b2f4df8"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Jul 22 11:32:58 2015 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Jul 22 14:13:54 2015 +0000"
      },
      "message": "Delete extraneous prefix `SideEffects::` in `nodes.h`.\n\nChange-Id: Ic0a8442d20323df0d9db9e6a1d26c07bd903a13d\n"
    },
    {
      "commit": "e6e38ce021ef5e0d326d76172307c000e0e6fab3",
      "tree": "c7478d676ab6f0c229f154ab06fbce56f7ae507b",
      "parents": [
        "a3073e24e00274d2957771518be5ecfa74591744",
        "3fabec7a25d151b26ba7de13615bbead0dd615a6"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 11:20:14 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 22 11:20:14 2015 +0000"
      },
      "message": "Merge \"Use the object class as top in reference type propagation\""
    },
    {
      "commit": "a3073e24e00274d2957771518be5ecfa74591744",
      "tree": "0b07b7c0b70bb9e3c89b9b7c1ea58b59079be9c3",
      "parents": [
        "236d0a3c35a369da99bb1f0c617a29f23b2f4df8",
        "b0d5fc0ac139da4aaa1440263416b9bde05630b0"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 11:20:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 22 11:20:01 2015 +0000"
      },
      "message": "Merge \"Fixes and improvements in ReferenceTypePropagation\""
    },
    {
      "commit": "3fabec7a25d151b26ba7de13615bbead0dd615a6",
      "tree": "a73af9489665d5b033e961d1aafe7e0935c8af85",
      "parents": [
        "b0d5fc0ac139da4aaa1440263416b9bde05630b0"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 16 16:51:30 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 21 14:33:42 2015 +0100"
      },
      "message": "Use the object class as top in reference type propagation\n\nThis properly types all instructions, making it safe to query the type\nat any time.\n\nThis also moves a few functions from class.h to class-inl.h to please\ngcc linker when compiling for target.\n\nChange-Id: I6b7ce965c10834c994b95529ab65a548515b4406\n"
    },
    {
      "commit": "b0d5fc0ac139da4aaa1440263416b9bde05630b0",
      "tree": "7f897d8b0545e43da6b6059718685a8e396b3b70",
      "parents": [
        "d1665b7a689086ec5b33a69a05313c46ea1a95e4"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 15 14:41:29 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 21 14:33:33 2015 +0100"
      },
      "message": "Fixes and improvements in ReferenceTypePropagation\n\n- Bound object types after a CheckCast. This increases the precision of\n(inlining) generic operations.\n- Make sure that the BoundType is exact when the class is final.\n- Make sure that we don\u0027t duplicate BoundTypes when we run the analysis\nmore than once.\n\nChange-Id: Ic22b610766fae101f942c0d753ddcac32ac1844a\n"
    },
    {
      "commit": "34c3ba93e74d14ab832297ff590cb76c3f0f519d",
      "tree": "c78f14c5971546b7f216b42b0d26f2a536867ddb",
      "parents": [
        "e07300b712f44397ecbfed1ef7f880686e46274a"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jul 20 14:08:59 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jul 20 17:09:24 2015 -0700"
      },
      "message": "Fix broken tests.\n\nRationale:\n  (1) volatile field write/read need to apply to all\n      to comply with Java memory model\n  (2) clinit only needs only the write\n  (3) added conservative assumptions to memory barrier\n      (nothing broke, but this seems better)\n\nChange-Id: I37787ec8f3f2c8d6166a94c57193fa4544ad3372\n"
    },
    {
      "commit": "e07300b712f44397ecbfed1ef7f880686e46274a",
      "tree": "4b8cd1ecad98b4a797de4ec73205cea52b5360cf",
      "parents": [
        "16a150b8a4c5c8c9e7159aff3b2ffbd918494abd",
        "854a02b1b488327f80c544ca1119b386b8715c26"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jul 20 17:56:35 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 20 17:56:36 2015 +0000"
      },
      "message": "Merge \"Improved side effect analysis (field/array write/read).\""
    },
    {
      "commit": "854a02b1b488327f80c544ca1119b386b8715c26",
      "tree": "7f48f01a7624d07b0c24bf589308673dcb05683c",
      "parents": [
        "8ae3588989ea99d8c60f885e3d830e6e0c87ff5f"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Jul 14 16:07:00 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Jul 20 10:25:26 2015 -0700"
      },
      "message": "Improved side effect analysis (field/array write/read).\n\nRationale:\nTypes (int, float etc.) and access type (field vs. array)\ncan be used to disambiguate write/read side-effects analysis.\nThis directly improves e.g. dead code elimination and licm.\n\nChange-Id: I371f6909a3f42bda13190a03f04c4a867bde1d06\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": "f185fb365e9faf58428762bace96d7729ea5bdbc",
      "tree": "79a2bbbab8cb36523056539d374d5d79e7e5ee4a",
      "parents": [
        "5e094de24827292d8a13be2adbdcca54ae7d5ff0",
        "2e7cd752452d02499a2f5fbd604c5427aa372f00"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 13 11:55:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 13 11:55:20 2015 +0000"
      },
      "message": "Merge \"[optimizing] Don\u0027t rely on the verifier for String.\u003cinit\u003e.\""
    },
    {
      "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": "f40002163fed58215df569e89f0a0b9661e16273",
      "tree": "bf5d9e96f624bf1f7d06731b94c7e4d308c026e9",
      "parents": [
        "f16b820fc18ff86e765a14176f05417305d689a0",
        "4fa13f65ece3b68fe3d8722d679ebab8656bbf99"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 10 10:51:14 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 10 10:51:15 2015 +0000"
      },
      "message": "Merge \"Fuse long and FP compare \u0026 condition on ARM in Optimizing.\""
    },
    {
      "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": "4fa13f65ece3b68fe3d8722d679ebab8656bbf99",
      "tree": "09939739f6ae87e05e91d370007e978b5e72ca8e",
      "parents": [
        "c470193cfc522fc818eb2eaab896aef9caf0c75a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 06 18:11:54 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 08 15:45:22 2015 +0100"
      },
      "message": "Fuse long and FP compare \u0026 condition on ARM in Optimizing.\n\nAlso:\n- Stylistic changes in corresponding parts on the x86 and\n  x86-64 code generators.\n- Update and improve the documentation of\n  art::arm::Condition.\n\nBug: 21120453\nChange-Id: If144772046e7d21362c3c2086246cb7d011d49ce\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": "7d5ea03b2a7d886325b3ad97942038c2336aa855",
      "tree": "10f1978a121247388d016e374bf819f8619b37bb",
      "parents": [
        "06b6da5ccbf9246c697b8cf1be0ba58ce616521d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 02 15:48:27 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 02 17:42:06 2015 +0100"
      },
      "message": "Do not create a HBoundType when the instruction is non-null.\n\nWe don\u0027t need to refine the type after a null check, if the\ninstruction is known non null or null. As a side effect, this\navoids replacing HLoadClass instructions with HBoundType instructions.\n\nbug:22116987\n\n(cherry picked from commit 3abd437507f8ba30a238a52c273c9944dcb9d5a1)\n\nChange-Id: I5e56de293554534195ade9770b7d1e4b078d685b\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": "b485915afd8a6396df7863b651dfe832038fd680",
      "tree": "4d12daee263e31d9603e962c1606cae3356faafe",
      "parents": [
        "4a08e17a9db0f68b9623849bc288c31a47868fbc",
        "fc6a86ab2b70781e72b807c1798b83829ca7f931"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jun 26 14:52:36 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 26 14:52:36 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"ART: Implement try/catch blocks in Builder\"\"\""
    },
    {
      "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": "4a08e17a9db0f68b9623849bc288c31a47868fbc",
      "tree": "6c3d20213dc2882e8af65b1ec95194b9b59412fe",
      "parents": [
        "d3eaade87ac079accca30473ef0a3b38ab600828",
        "f39e0641a6d1a6561b20f6a130d1e763788cd70b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jun 26 11:33:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 26 11:33:02 2015 +0000"
      },
      "message": "Merge \"Minor fixes to mips64 for the arch-specific optimisation framework.\""
    },
    {
      "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": "69ba7b7112c2277ac225615b37e6df74c055740d",
      "tree": "3177340740abfabd80f055b17ab92fb6e740bd87",
      "parents": [
        "b809daaffdd42dc01457ae06ae83f2d7ebdb5e65"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jun 23 18:27:30 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jun 24 15:02:15 2015 +0100"
      },
      "message": "ART: Run GraphChecker after Builder and SsaBuilder\n\nThis patch refactors the way GraphChecker is invoked, utilizing the\nsame scoping mechanism as pass timing and graph visualizer. Therefore,\nGraphChecker will now run not just after instances of HOptimization\nbut after the builders and reg alloc, too.\n\nChange-Id: I8173b98b79afa95e1fcbf3ac9630a873d7f6c1d4\n"
    },
    {
      "commit": "f39e0641a6d1a6561b20f6a130d1e763788cd70b",
      "tree": "1679d6e1c2e77593d67fc519fe8cb8f94ddd6d5e",
      "parents": [
        "a256ee9ccbd01407541958476f388ae7c687a9c2"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Tue Jun 23 11:33:45 2015 +0100"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Jun 24 08:17:25 2015 -0400"
      },
      "message": "Minor fixes to mips64 for the arch-specific optimisation framework.\n\nChange-Id: I9d49ea61c732e4fc6b3393aa8778951e29ce4efe\n"
    },
    {
      "commit": "1f82ecc6a0c9f88d03d6d1a6d95eeb8707bd06c1",
      "tree": "50d71ef83f27827f0acfe6708acdb46e159f7506",
      "parents": [
        "a12f729e7165780e73857e6248af0df00ad6ce2b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 24 12:20:24 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 24 12:37:52 2015 +0100"
      },
      "message": "Recompute dominator tree after DCE.\n\nbug:22031382\nChange-Id: Ifebe169897b76872015e3ce0ed7d0a9662f80cef\n"
    },
    {
      "commit": "87a135e8699119c9ef99b0221acf481d7d6501d4",
      "tree": "c0cb71ddac18ab10c38ffdc5e406ed5283932ca2",
      "parents": [
        "ff3fd957020f0e5cf5cc279f4bbbca3545ce8745",
        "8b20f88b0a8d1b374dd5eaae289d19734c77b8f8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 15:52:24 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 19 15:52:24 2015 +0000"
      },
      "message": "Merge \"Be careful with predecessor/successor index.\""
    },
    {
      "commit": "8b20f88b0a8d1b374dd5eaae289d19734c77b8f8",
      "tree": "7bb855bee3c93bd2d4edec359480b4606606559d",
      "parents": [
        "d8d7b90ca57e8e3762951bb419b6f2645bb414c5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 16:17:05 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 16:46:00 2015 +0100"
      },
      "message": "Be careful with predecessor/successor index.\n\nWhen we simplify the CFG, we must preserve things that were already\nsimplified. For example, the index in the predecessor list or\nsuccessor list of a block must be preserved for ensuring the\nfirst block is a loop pre header.\n\nbug:21867463\n\nChange-Id: Ic3fcb3eb2c3fb109d8a57ee2a6b6d4d65fdb9410\n"
    },
    {
      "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": "f78848f2ced8466b5fb2d7148d608288ee88757b",
      "tree": "72bfc782c51995b8c9d8ec41fafdae32f5341090",
      "parents": [
        "edb83c606e034d76bed1331f34cdc435df47bb95"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 17 11:57:56 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 17 22:15:01 2015 +0100"
      },
      "message": "Don\u0027t special case HCurrentMethod in DCE.\n\nInstead, re-create the HCurrentMethod if it is needed\nafter it has been removed.\n\nChange-Id: Id3bf15ae87b00a1d7eb35bf36d58fe96f788fba4\n"
    },
    {
      "commit": "78f4fa74ae2d392ca9314b7ab25386d0e9a07cdb",
      "tree": "80ba5fc6e070d87f87ee152c6176ea931a2e6f76",
      "parents": [
        "8d86843064912299b71191eabe65ce16fa7f3099"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 12 09:35:05 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 12 10:52:09 2015 +0100"
      },
      "message": "Preserve class loading semantics in optimizing.\n\nWe were being too agressive in removing HLoadClass instructions.\nA HInvokeStaticOrDirect can only remove it if it\u0027s directly before it.\n\nbug: 21711097\nChange-Id: Id63502d90e11da60eccfb46daca62e0d5d022119\n"
    }
  ],
  "next": "3584bce5b1f45e5741d3a6ca24884a36320ecb6b"
}
