)]}'
{
  "log": [
    {
      "commit": "e299f167c9559401548eab71678d4b779e46c2fb",
      "tree": "91c978735eb51ae4835facb7e86f9929735ce966",
      "parents": [
        "f07f71f9af8f56e738ef0451c60734ec6022d08e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 07 12:25:40 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 07 16:01:02 2015 +0100"
      },
      "message": "Quick: Abolish kMirOpCheckPart2.\n\nThe tricks played with kMirOpCheckPart2 are making the\nnative GC map generation unnecessarily complex. They have\ncaused problems in the past and now there is bad interaction\nwith the DCE. Rather than fixing it time and again, remove\nthe pseudo-insn.\n\n(The whole purpose of those tricks seems to be to allow the\nregister tracking to be used for the throwing insn before\nresetting the tracking for the next block. However, it\u0027s\nquestionable whether that\u0027s better than processing the\nthrowing insn with the subsequent instructions.)\n\nBug: 20736048\nChange-Id: I4767e4609914d3b6990da4416e5093e4ca209780\n"
    },
    {
      "commit": "c91df2d6339dd4adf2da582372451df19ce2ff44",
      "tree": "1aed25cec12d9bf8dc2d07945ed45b8b230010df",
      "parents": [
        "9d4d13f38398e880e610323242fe73d609bac40d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 23 09:29:21 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 23 11:11:33 2015 +0100"
      },
      "message": "Revert \"Revert \"Quick: Rewrite type inference pass.\"\"\n\nFix the type of the ArtMethod* SSA register.\n\nBug: 19419671\nThis reverts commit 1b717f63847de8762e7f7bdd6708fdfae9d24a67.\n\nChange-Id: Ie4da3c03a0e0334a39a24718f6dc31f9255cfb53\n"
    },
    {
      "commit": "1b717f63847de8762e7f7bdd6708fdfae9d24a67",
      "tree": "e87208bc72796fb310750677650b2e8344f9f81c",
      "parents": [
        "8e58d76eb30a50e38c46bd6277186116937ba396"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Apr 22 18:45:06 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Apr 22 18:45:06 2015 -0700"
      },
      "message": "Revert \"Quick: Rewrite type inference pass.\"\n\nBreaks arm64, as the method register is not correctly flagged\nas ref and thus 32bit.\n\nBug: 19419671\nThis reverts commit e490b01c12d33f3bd5c247b55b47e507cc9c8fab.\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "e490b01c12d33f3bd5c247b55b47e507cc9c8fab",
      "tree": "9b04b5390f0f29986d9951bdce4a2cb083113809",
      "parents": [
        "fac10700fd99516e8a14f751fe35553021ce6982"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 24 11:32:46 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 22 20:40:00 2015 +0100"
      },
      "message": "Quick: Rewrite type inference pass.\n\nUse method signatures, field types and types embedded in dex\ninsns for type inference. Perform the type inference in two\nphases, first a simple pass that records all types implied\nby individual insns, and then an iterative pass to propagate\nthose types further via phi, move, if-cc and aget/aput insns.\n\nBug: 19419671\nChange-Id: Id38579d48a44fc5eadd13780afb6d370093056f9\n"
    },
    {
      "commit": "cc23481b66fd1f2b459d82da4852073e32f033aa",
      "tree": "f2192d5fff8591e4e5b87d04fa6fce770f7e7f08",
      "parents": [
        "e5c76c515a481074aaa6b869aa16490a47ba98bc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 07 09:36:09 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 07 19:13:40 2015 +0100"
      },
      "message": "Promote pointer to dex cache arrays on arm.\n\nDo the use-count analysis on temps (ArtMethod* and the new\nPC-relative temp) in Mir2Lir, rather than MIRGraph. MIRGraph\nisn\u0027t really supposed to know how the ArtMethod* is used by\nthe backend.\n\nChange-Id: Iaf56a46ae203eca86281b02b54f39a80fe5cc2dd\n"
    },
    {
      "commit": "d7cbf8a6629942e7bd315ffae7e1c77b082f3e11",
      "tree": "fc8c3371ed4ddac96bbe90a2f94ef5fb5c5472ee",
      "parents": [
        "f5988cf0c47ff935bb19c89ed0398be5fbe44bb6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 19 12:43:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 19 20:00:50 2015 -0700"
      },
      "message": "Change RETURN_VOID_BARRIER to RETURN_VOID_NO_BARRIER\n\nWe want to default to having a barrier for the case where we don\u0027t\ndex to dex.\n\nBug: 19762303\nChange-Id: I60348d89eaf0b9e1e480298afcecbb5f52e8661b\n"
    },
    {
      "commit": "e5f13e57ff8fa36342beb33830b3ec5942a61cca",
      "tree": "02e370ecc4e0d955f28bfc71a41015f94fbb19b7",
      "parents": [
        "354d58ba776866ea7b1c71f0d0848d5aaa013ae3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 09:37:21 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 10:47:02 2015 -0800"
      },
      "message": "Revert \"Revert \"Add JIT\"\"\n\nAdded missing EntryPointToCodePointer.\n\nThis reverts commit a5ca888d715cd0c6c421313211caa1928be3e399.\n\nChange-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af\n"
    },
    {
      "commit": "a5ca888d715cd0c6c421313211caa1928be3e399",
      "tree": "bdb08a2cbcf277ab7f02626a23b52a3fdf272ffe",
      "parents": [
        "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "message": "Revert \"Add JIT\"\n\nSorry, run-test crashes on target:\n0-05 12:15:51.633 I/DEBUG   (27995): Abort message: \u0027art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast\u003cuintptr_t\u003e(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc\u003d71e3366b code\u003d0x71e3362d size\u003dad000000\u0027\n10-05 12:15:51.633 I/DEBUG   (27995):     r0 00000000  r1 0000542b  r2 00000006  r3 00000000\n10-05 12:15:51.633 I/DEBUG   (27995):     r4 00000006  r5 b6f9addc  r6 00000002  r7 0000010c\n10-05 12:15:51.633 I/DEBUG   (27995):     r8 b63fe1e8  r9 be8e1418  sl b6427400  fp b63fcce0\n10-05 12:15:51.633 I/DEBUG   (27995):     ip 0000542b  sp be8e1358  lr b6e9a27b  pc b6e9c280  cpsr 40070010\n10-05 12:15:51.633 I/DEBUG   (27995): \n\nBug: 17950037\nThis reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4.\n\nChange-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3\n"
    },
    {
      "commit": "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4",
      "tree": "140026ff9638ff34050680b6c706b82fa1740b56",
      "parents": [
        "38fee8ef4bc0f4dbe2c6d1f5585895f0c4d16984"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 17 10:38:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 23 16:45:49 2015 -0800"
      },
      "message": "Add JIT\n\nCurrently disabled by default unless -Xjit is passed in.\n\nThe proposed JIT is a method JIT which works by utilizing interpreter\ninstrumentation to request compilation of hot methods async during\nruntime.\n\nJIT options:\n-Xjit / -Xnojit\n-Xjitcodecachesize:N\n-Xjitthreshold:integervalue\n\nThe JIT has a shared copy of a compiler driver which is accessed\nby worker threads to compile individual methods.\n\nAdded JIT code cache and data cache, currently sized at 2 MB\ncapacity by default. Most apps will only fill a small fraction of\nthis cache however.\n\nAdded support to the compiler for compiling interpreter quickened\nbyte codes.\n\nAdded test target ART_TEST_JIT\u003dTRUE and --jit for run-test.\n\nTODO:\nClean up code cache.\nDelete compiled methods after they are added to code cache.\nAdd more optimizations related to runtime checks e.g. direct pointers\nfor invokes.\nAdd method recompilation.\nMove instrumentation to DexFile to improve performance and reduce\nmemory usage.\n\nBug: 17950037\n\nChange-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca\n"
    },
    {
      "commit": "7a01dc2107d4255b445c32867d15d45fcebb3acd",
      "tree": "5f25d4a2889e6fbcb5119484f2b0b6a4253f9b00",
      "parents": [
        "bce889940f10319bf67bdc5630c84dd7f6e5c246"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 02 17:00:44 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 17 21:06:27 2015 +0000"
      },
      "message": "Dead code elimination based on GVN results.\n\nChange-Id: I5b77411a8f088f0b561da14b123cf6b0501c9db5\n"
    },
    {
      "commit": "e4fcc5ba2284c201c022b52d27f7a1201d696324",
      "tree": "2f490060978baeb85c79d6184fcc08135f506637",
      "parents": [
        "8240a8af33aedea9a4fe5c3b394d7c025ad081fb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 13 10:28:29 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 13 11:29:04 2015 +0000"
      },
      "message": "Clean up Scoped-/ArenaAlocator array allocations.\n\nChange-Id: Id718f8a4450adf1608306286fa4e6b9194022532\n"
    },
    {
      "commit": "6a8946ba3d170fee0ff06de42209be4b14e6aff3",
      "tree": "096e0cf6e9d4b529e22b417dad8432c42b9a8c82",
      "parents": [
        "4ba86c428f839cb75f5838b8327e893694377590"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 09 12:35:05 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 10 18:09:21 2015 +0000"
      },
      "message": "Quick: Rewrite Phi node insertion.\n\nDelay Phi node insertion to the SSAConversion pass to allow\nupdating the vreg_to_ssa_map_ with INVALID_SREG when we omit\na Phi in the pruned SSA form.\n\nChange-Id: I450dee21f7dc4353d25fc66f4d0ee01671de6e0e\n"
    },
    {
      "commit": "0b9203e7996ee1856f620f95d95d8a273c43a3df",
      "tree": "a9715986cfdbb21e4d64f72b56fac255cc8b9309",
      "parents": [
        "4dfe58d8f2d398963f31831a57fbd12e282e1196"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 22 20:39:27 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jan 26 14:30:40 2015 -0800"
      },
      "message": "ART: Some Quick cleanup\n\nMake several fields const in CompilationUnit. May benefit some Mir2Lir\ncode that repeats tests, and in general immutability is good.\n\nRemove compiler_internals.h and refactor some other headers to reduce\noverly broad imports (and thus forced recompiles on changes).\n\nChange-Id: I898405907c68923581373b5981d8a85d2e5d185a\n"
    },
    {
      "commit": "1c6ea4483982803b3bc3635b7dd71744c1fe1cef",
      "tree": "3fe7873cde1f13b68851e95c8d2a80d62164ea32",
      "parents": [
        "a64d0142edd7c325c0a59d170d8c82c8176faa03"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 19 18:11:35 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 19 18:11:35 2014 +0000"
      },
      "message": "Move two members out of MIRGraph::temp_::ssa.\n\nIt turns out they are used outside the SSA transformation\nby the x86 back-end.\n\nThis is a partial revert of\n  https://android-review.googlesource.com/120571\n\nChange-Id: Ia5cb2988ab0625d8519901124bd4fc184d5f0886\n"
    },
    {
      "commit": "ffda4993af78484feb7a4ce5497c1796463c0ba1",
      "tree": "f2e4ba0f5ee95e86d0a7b6be3e7a8bfbd6cb8f70",
      "parents": [
        "363bd99a72eba9be223e45e97d5c46dda2b81580"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 18 17:05:58 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 19 13:56:03 2014 +0000"
      },
      "message": "Clean up post-opt passes, perform only those we need.\n\nChange-Id: If802074d780d91151d236ef52236b6f33ca47258\n"
    },
    {
      "commit": "a262f7707330dccfb50af6345813083182b61043",
      "tree": "a8ab4e42654f47c9deea517f6c4e2020c62d5724",
      "parents": [
        "3e465bec65067ebfdf662469cf85dd82cd077bdd"
      ],
      "author": {
        "name": "Ningsheng Jian",
        "email": "ningsheng.jian@arm.com",
        "time": "Tue Nov 25 16:48:07 2014 +0800"
      },
      "committer": {
        "name": "Ningsheng Jian",
        "email": "ningsheng.jian@arm.com",
        "time": "Thu Dec 11 09:08:22 2014 +0800"
      },
      "message": "ARM: Combine multiply accumulate operations.\n\nTry to combine integer multiply and add(sub) into a MAC operation.\nFor AArch64, also try to combine long type multiply and add(sub).\n\nChange-Id: Ic85812e941eb5a66abc355cab81a4dd16de1b66e\n"
    },
    {
      "commit": "8b858e16563ebf8e522df026a6ab409f1bd9b3de",
      "tree": "910900d8eefd5bed3f3c144894c970bb1973c71e",
      "parents": [
        "f7ebda43cb185b6414a2e86eef95eaf10b74db2c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 27 14:52:37 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 09 10:07:30 2014 +0000"
      },
      "message": "Quick: Redefine the notion of back-egdes.\n\nRedefine a back-edge to really mean an edge to a loop head\ninstead of comparing instruction offsets. Generate suspend\nchecks also on fall-through to a loop head; insert an extra\nGOTO for these edges.\n\nAdd suspend checks to fused cmp instructions.\n\nRewrite suspend check elimination to track whether there is\nan invoke on each path from the loop head to a given back\nedge, instead of using domination info to look for a basic\nblock with invoke that must be on each path. Ignore invokes\nto intrinsics and move the optimization to a its own pass.\n\nThe new loops in 109-suspend-check should prevent intrinsics\nand fused cmp-related regressions.\n\nBug: 18522004\nChange-Id: I96ac818f76ccf9419a6e70e9ec00555f9d487a9e\n"
    },
    {
      "commit": "6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f",
      "tree": "9df58b57af13240a93a6da4eefcf03f70cce9ad9",
      "parents": [
        "c6e0955737e15f7c0c3575d4e13789b3411f4993"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 31 00:33:20 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 03 20:01:04 2014 -0800"
      },
      "message": "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.\n\nFix associated errors about unused paramenters and implict sign conversions.\nFor sign conversion this was largely in the area of enums, so add ostream\noperators for the effected enums and fix tools/generate-operator-out.py.\nTidy arena allocation code and arena allocated data types, rather than fixing\nnew and delete operators.\nRemove dead code.\n\nChange-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b\n"
    },
    {
      "commit": "66c6d7bdfdd535e6ecf4461bba3804f1a7794fcd",
      "tree": "178908b5c657241305f99aa44949427c18d1900a",
      "parents": [
        "1ef3495abfa2a858b3cc7a1844383c8e7dff0b60"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 16 15:41:48 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 27 10:04:25 2014 +0000"
      },
      "message": "Rewrite class initialization check elimination.\n\nSplit the notion of type being in dex cache away from the\nclass being initialized. Include static invokes in the class\ninitialization elimination pass.\n\nChange-Id: Ie3760d8fd55b987f9507f32ef51456a57d79e3fb\n"
    },
    {
      "commit": "312eb25273dc0e2f8880d80f00c5b0998febaf7b",
      "tree": "17e5320af33efc462a38fe907e5b526dec39c388",
      "parents": [
        "7baa6f8783b12bb4b159ed4648145be5912215f2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 07 15:01:57 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 15 18:44:33 2014 +0100"
      },
      "message": "Quick: Improve the BBCombine pass.\n\nEliminate exception edges for insns that cannot throw even\nwhen inside a try-block. Run the BBCombine pass before the\nSSA transformation to reduce the compilation time.\n\nBug: 16398693\nChange-Id: I8e91df593e316c994679b9d482b0ae20700b9499\n"
    },
    {
      "commit": "7baa6f8783b12bb4b159ed4648145be5912215f2",
      "tree": "bb8bca51183039dcf5f375efebe3534503e29735",
      "parents": [
        "5c5efc253507eb43265997c9afcd778f72b6cef4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 09 18:01:24 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 15 17:11:24 2014 +0100"
      },
      "message": "Rewrite null check elimination to work on dalvik regs.\n\nAnd move the null check and class init check elimination\nbefore the SSA transformation. The new pass ordering is in\nanticipation of subsequent changes. (An improved class init\ncheck elimination can benefit special method inlining. An\nimproved block combination pass before SSA transformation\ncan improve compilation time.)\n\nAlso add tests for the NCE.\n\nChange-Id: Ie4fb1880e06334a703295aef454b437d58a3e878\n"
    },
    {
      "commit": "ff0ac4772d489d8780bbb6bb271dc6d5333cca7c",
      "tree": "81674499f2657395263b2a8ad63aa2e0ed0f3caf",
      "parents": [
        "6e301ec84ff8cd55a29386cff9b3b00d51675b64"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 02 17:24:53 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 02 17:24:53 2014 +0100"
      },
      "message": "Remove all uses of MIR_INLINED.\n\nThey are not needed since\n  https://android-review.googlesource.com/103763\n\nChange-Id: I1dffe5e219db615be9d9aaceb72ad9bd7c69b58e\n"
    },
    {
      "commit": "f4ae8d8976abd1dcbb33824ced27775bff73f600",
      "tree": "c4e46d4055591c9d10eaed96e26adf2ab91aede9",
      "parents": [
        "a2a91086feb01c1465f063e10da70b7fa37a19eb",
        "6f4dcae28c23a9ac42fd1283ea1c2462f5e1e210"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@android.com",
        "time": "Tue Sep 30 19:17:28 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 30 19:17:29 2014 +0000"
      },
      "message": "Merge \"ART: Allow overridable calculation of basic block dataflow\""
    },
    {
      "commit": "6f4dcae28c23a9ac42fd1283ea1c2462f5e1e210",
      "tree": "cda59f07940539a985273c2ee214790ba1738641",
      "parents": [
        "c70535b4f9f1ff3e3da451734bb7d9601012ccc1"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Mon Sep 29 11:59:12 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Tue Sep 30 10:33:48 2014 -0700"
      },
      "message": "ART: Allow overridable calculation of basic block dataflow\n\nCurrently dataflow information is not calculated for catch blocks in order to\nreduce overhead. However, this makes assumption that the lack of this\ninformation is only preventing local optimizations to catch block. But in\nreality this problematic for global optimizations.\n\nHowever, since no optimizations need complete information for now, simply\nleave logic same but factor it out in separate method.\n\nChange-Id: I5c13344c18409bd172a5d9b07577b4a1353cc733\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\n"
    },
    {
      "commit": "750359753444498d509a756fa9a042e9f3c432df",
      "tree": "4261bdcbe1fcd6a1163eda372b6ef4796731017c",
      "parents": [
        "c70535b4f9f1ff3e3da451734bb7d9601012ccc1"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Thu Sep 11 15:24:59 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Mon Sep 29 17:49:59 2014 +0000"
      },
      "message": "ART: Deprecate CompilationUnit\u0027s code_item\n\nThe code_item field is tracked in both the CompilationUnit and the MIRGraph.\nHowever, the existence of this field in CompilationUnit promotes bad practice\nbecause it creates assumption only a single code_item can be part of method.\n\nThis patch deprecates this field and updates MIRGraph methods to make it\neasy to get same information as before. Part of this is the update to\ninterface GetNumDalvikInsn which ensures to count all code_items in MIRGraph.\n\nSome dead code was also removed because it was not friendly to these updates.\n\nChange-Id: Ie979be73cc56350321506cfea58f06d688a7fe99\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\n"
    },
    {
      "commit": "e39c54ea575ec710d5e84277fcdcc049f8acb3c9",
      "tree": "407209e732961074488043f6ccba8f1d692298a6",
      "parents": [
        "b36bba6d35e88687852b108c8d4b73b3ec2a9397"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 22 14:50:02 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 23 14:42:17 2014 +0100"
      },
      "message": "Deprecate GrowableArray, use ArenaVector instead.\n\nPurge GrowableArray from Quick and Portable.\nRemove GrowableArray\u003cT\u003e::Iterator.\n\nChange-Id: I92157d3a6ea5975f295662809585b2dc15caa1c6\n"
    },
    {
      "commit": "b3a84e2f308b3ed7d17b8e96fc7adfcac36ebe77",
      "tree": "381fb72a42defc934f01cddab40a63299c0ba592",
      "parents": [
        "2a09504334a3a3b4c47100197df0827cc6740433"
      ],
      "author": {
        "name": "Lupusoru, Razvan A",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Mon Jul 28 14:11:01 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Wed Sep 03 10:05:40 2014 -0700"
      },
      "message": "ART: Vectorization opcode implementation fixes\n\nThis patch fixes the implementation of the x86 vectorization opcodes.\n\nChange-Id: I0028d54a9fa6edce791b7e3a053002d076798748\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\nSigned-off-by: Udayan Banerji \u003cudayan.banerji@intel.com\u003e\nSigned-off-by: Philbert Lin \u003cphilbert.lin@intel.com\u003e\n"
    },
    {
      "commit": "8d0d03e24325463f0060abfd05dba5598044e9b1",
      "tree": "06e8ed7e47a4cfe108d4ed750de6a60e588b2f7a",
      "parents": [
        "709368e616791209b02d39adb6da5e55782cb45f"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Fri Jun 06 17:04:52 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Tue Aug 26 18:36:46 2014 -0700"
      },
      "message": "ART: Change temporaries to positive names\n\nChanges compiler temporaries to have positive names. The numbering now\nputs them above the code VRs (locals + ins, in that order). The patch also\nintroduces APIs to query the number of temporaries, locals and ins.\n\nThe compiler temp infrastructure suffered from several issues\nwhich are also addressed by this patch:\n-There is no longer a queue of compiler temps. This would be polluted\nwith Method* when post opts were called multiple times.\n-Sanity checks have been added to allow requesting of temps from BE\nand to prevent temps after frame is committed.\n-None of the structures holding temps can overflow because they are\nallocated to allow holding maximum temps. Thus temps can be requested\nby BE with no problem.\n-Since the queue of compiler temps is no longer maintained, it is no\nlonger possible to refer to a temp that has invalid ssa (because it\nwas requested before ssa was run).\n-The BE can now request temps after all ME allocations and it is guaranteed\nto actually receive them.\n-ME temps are now treated like normal VRs in all cases with no special\nhandling. Only the BE temps are handled specially because there are no\nreferences to them from MIRs.\n-Deprecated and removed several fields in CompilationUnit that saved\nregister information and updated callsites to call the new interface from\nMIRGraph.\n\nChange-Id: Ia8b1fec9384a1a83017800a59e5b0498dfb2698c\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\nSigned-off-by: Udayan Banerji \u003cudayan.banerji@intel.com\u003e\n"
    },
    {
      "commit": "b5bce7cc9f1130ab4932ba8e6917c362bf871f24",
      "tree": "45d3b064227213da49d047c3c718e23f33b47cad",
      "parents": [
        "3b6711faf7b0b10eaa6c48ba854160bcecd00166"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Fri Jul 25 12:32:18 2014 -0700"
      },
      "committer": {
        "name": "Chao-ying Fu",
        "email": "chao-ying.fu@intel.com",
        "time": "Tue Aug 26 11:38:04 2014 -0700"
      },
      "message": "ART: Add non-temporal store support\n\nAdded non-temporal store support as a hint from the ME.\nAdded the implementation of the memory barrier\nextended instruction that supports non-temporal stores\nby explicitly serializing all previous store-to-memory instructions.\n\nChange-Id: I8205a92083f9725253d8ce893671a133a0b6849d\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\nSigned-off-by: Chao-ying Fu \u003cchao-ying.fu@intel.com\u003e\n"
    },
    {
      "commit": "fb0ea2df9a52e5db18e1aa85da282938bbd92f2e",
      "tree": "2c73e8bf5e2811a81e0ede8c007e6b896eb724a5",
      "parents": [
        "02cdc91cae56a91e7833eae154fe9a7694103ae5"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Tue Jul 29 13:20:42 2014 -0700"
      },
      "committer": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Mon Aug 25 13:49:12 2014 -0700"
      },
      "message": "ART: Extending FlagsOf\n\nModified FlagsOf to handle extended flags.\n\nChange-Id: I9e47e0c42816136b2b53512c914200dd9dd11376\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\n"
    },
    {
      "commit": "7642324bc8a5c839c669aebbb1fba61c05418651",
      "tree": "1abf21ecf589c62c47ba320bf35d00bbff7d4e97",
      "parents": [
        "07277a700cdc7de2f40773a05c7a791b71abd581"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Mon Aug 04 09:38:46 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Wed Aug 20 17:42:10 2014 +0000"
      },
      "message": "ART: Implement kMirOpNullCheck\n\nThe semantics of kMirOpNullCheck is to check object for null and\nthrow exception in that case. However, the implementation for it\nis empty. This has been changed and appropriate dataflow have been\nadded to correctly reflect behavior.\n\nIn order to allow testing of implementation, the SpecialMethodInliner\nhas been updated to get rid of invoke and use this instead. This helps\nall optimizations which do not check the MIR_INLINED flag because\nwhen invoke is left in, they believe that invoke will still be done.\n\nChange-Id: I62e425e42bdbc6357246fb949db5f79de73cf358\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e"
    },
    {
      "commit": "2ab40eb3c23559205ac7b9b039bd749458e8a761",
      "tree": "6a1534716a39aeb9874f4dc5c5d291f77d2cb887",
      "parents": [
        "fe12035ea434be9b24f578cf51e53c3bb34d945c"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Mon Jun 02 09:03:14 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 10 12:06:25 2014 -0700"
      },
      "message": "ART: Add Invokes to DecodedInstruction\n\nAdd a method Invokes to test for the kInvoke flag.\nAlso moved IsPseudoMirOp to DecodedInstruction to use it for the various\n  querry methods.\n\nChange-Id: I59a2056b7b802b8393fa2b0d977304d252b38c89\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\n"
    },
    {
      "commit": "f2466a766947f952c5c41186a6c5e26fb862bb37",
      "tree": "428073155ac7223cb6f8b2a1b95bda1d99d14cdc",
      "parents": [
        "a76dc41fb21b6fba74f70188fdc53e1a5bf2c2cb"
      ],
      "author": {
        "name": "Udayan Banerji",
        "email": "udayan.banerji@intel.com",
        "time": "Wed Jul 09 19:14:53 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Thu Jul 10 02:51:15 2014 +0000"
      },
      "message": "ART: Handle Extended MIRs in a uniform manner\n\nThe special handling is needed since some extended MIRs can hold values in\nargs array, and we might want to handle the dataflow for those in a\nspecialized manner. Current dataflow attributes may not be able to describe\nit for the extended MIRs.\n\nChange-Id: I8b64f3142a4304282bb31f1d4686eba72284d97d\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\nSigned-off-by: Udayan Banerji \u003cudayan.banerji@intel.com\u003e"
    },
    {
      "commit": "60bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43",
      "tree": "496acee66205218843ed6bddc300ae3653794e75",
      "parents": [
        "cecec712e1e05aab1fe3469077016320b7bf9583"
      ],
      "author": {
        "name": "Udayan Banerji",
        "email": "udayan.banerji@intel.com",
        "time": "Tue Jul 08 19:59:43 2014 -0700"
      },
      "committer": {
        "name": "Udayan Banerji",
        "email": "udayan.banerji@intel.com",
        "time": "Tue Jul 08 19:59:43 2014 -0700"
      },
      "message": "X86 Backend support for vectorized float and byte 16x16 operations\n\nAdd support for reserving vector registers for the duration of vector loop.\nAdd support for 16x16 multiplication, shifts, and add reduce.\n\nChanged the vectorization implementation to be able to use the dataflow\nelements for SSA recreation and fixed a few implementation details.\n\nChange-Id: I2f358f05f574fc4ab299d9497517b9906f234b98\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\nSigned-off-by: Olivier Come \u003colivier.come@intel.com\u003e\nSigned-off-by: Udayan Banerji \u003cudayan.banerji@intel.com\u003e\n"
    },
    {
      "commit": "35ba7f3a78d38885ec54e61ed060d2771eeceea7",
      "tree": "ec2d7963f38205bf5eae6b1a35b3f85d0e1da4f8",
      "parents": [
        "e4e04bbd86d1131b9f380a52a46b1a3b83335d5f"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat May 31 08:59:01 2014 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat May 31 09:07:15 2014 -0700"
      },
      "message": "Quick compiler: fix array overrun.\n\nMIRGraph::InlineCalls() was using the MIR opcode to recover\nDalvik instruction flags - something that is only valid for\nDalvik opcodes and not the set of extended MIR opcodes.\n\nThis is probably the 3rd or 4th time we\u0027ve had a bug using\nthe MIR opcode in situations that are only valid for the Dalvik\nopcode subset.  I took the opportunity to scan the code for\nother cases of this (didn\u0027t find any), and did some cleanup while\nI was in the neighborhood.\n\nWe should probably rework the DalvikOpcode/MirOpcode model whenver we\nget around to removing DalvikInstruction from MIR.\n\nInternal bug b/15352667: out-of-bound access in mir_optimization.cc\n\nChange-Id: I75f06780468880892151e3cdd313e14bfbbaa489\n"
    },
    {
      "commit": "2469e60e6ff08c2a0b4cd1e209246c5d91027679",
      "tree": "37b2f537fca7ba56cb787913557ee12d6e533d55",
      "parents": [
        "29b53d3d715b1ec19349e8cbf7c5e4ff529bd5fe"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Tue May 06 20:36:55 2014 -0700"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 30 10:15:48 2014 +0100"
      },
      "message": "ART: Setting up cleanup\n\n- Moved code around to actually have the clean-up code in a PassDriver format.\n    This allows us to better control what is being called after an optimization\n    It also allows the use of a centralized pass system for both optimizations\n      and cleanup.\n\nChange-Id: I9d21e9bb9ee663739722f440d82adf04f73e380c\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\nSigned-off-by: Yixin Shou \u003cyixin.shou@intel.com\u003e\nSigned-off-by: Chao-ying Fu \u003cchao-ying.fu@intel.com\u003e\nSigned-off-by: Udayan Banerji \u003cudayan.banerji@intel.com\u003e\n"
    },
    {
      "commit": "4896d7b6fb75add25f2d6ba84346ac83d8ba9d51",
      "tree": "b3e2da5fa23c984d4ed1f2f83429350edb67f929",
      "parents": [
        "1b1aea22c0cc5567b5967590cb3f949cc45c3a9a"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Thu May 01 15:36:22 2014 -0700"
      },
      "committer": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Tue May 27 08:58:39 2014 -0700"
      },
      "message": "ART: Better SSA Allocation when recreating SSA\n\nThe SSA calculation is not allocation friendly. This makes the\nSSARepresentation remember how much is allocated and not reallocate\nif SSA should be recalculated.\n\nAlso added some allocation friendly code for the dominance code.\n\nChange-Id: Icd5586b7e2fefae8e1535975ab400b1ca95b500f\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\n"
    },
    {
      "commit": "919ed6b2e2aa58a6153eb1d74edc29edc50d514a",
      "tree": "b7bee8ce11c89c48dd7e9ef387ce4916849a9054",
      "parents": [
        "be7ba65210f0eb9cd86b3b76337020b039191ba6",
        "d4750f202170a448119c1813a964574bfea0dded"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@android.com",
        "time": "Fri May 23 23:02:20 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 23 23:02:21 2014 +0000"
      },
      "message": "Merge \"Revert \"ART: Better SSA Allocation when recreating SSA\"\""
    },
    {
      "commit": "d4750f202170a448119c1813a964574bfea0dded",
      "tree": "b324f2a3ce4b216e98084d0a586fdbea806cd1ce",
      "parents": [
        "cb73fb35e5f7c575ed491c0c8e2d2b1a0a22ea2e"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@android.com",
        "time": "Fri May 23 23:00:22 2014 +0000"
      },
      "committer": {
        "name": "Bill Buzbee",
        "email": "buzbee@android.com",
        "time": "Fri May 23 23:00:22 2014 +0000"
      },
      "message": "Revert \"ART: Better SSA Allocation when recreating SSA\"\n\nTemporarily reverting until memory footprint cost of adding a vreg to ssa entrance map on every applicable MIR node can be assessed..\n\nThis reverts commit cb73fb35e5f7c575ed491c0c8e2d2b1a0a22ea2e.\n\nChange-Id: Ia9c03bfc5d365ad8d8b949e870f1e3bcda7f9a54\n"
    },
    {
      "commit": "be7ba65210f0eb9cd86b3b76337020b039191ba6",
      "tree": "6af802647807a383a4d066bbd42acb04edefce21",
      "parents": [
        "18622c81fcfd870dc775bb3567511e669591efd8",
        "cb73fb35e5f7c575ed491c0c8e2d2b1a0a22ea2e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 23 22:45:34 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 23 22:45:35 2014 +0000"
      },
      "message": "Merge \"ART: Better SSA Allocation when recreating SSA\""
    },
    {
      "commit": "0add77a86599260aba3ea4b56e9db3da6bb881a8",
      "tree": "df2129b88907d4f9739ab93907f2e10803fdd80b",
      "parents": [
        "66762055847a40fe4454782826d2bb7a4ea9e316"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon May 05 22:28:55 2014 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue May 06 07:18:03 2014 -0400"
      },
      "message": "ART: Ensure use counts updated when adding SSA reg\n\nEnsure that matching data structures are updated when adding SSA\nregisters late in the compile.\n\nChange-Id: I8e664dddf52c1a9095ba5b7a8df84e5a733bbc43\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "29a2648821ea4d0b5d3aecb9f835822fdfe6faa1",
      "tree": "2eb972b2b006e4d2842c8cf6a1d6631f90a39249",
      "parents": [
        "dbb8727b0b3ae73e84fb8db55e051336d6222add"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 02 15:27:29 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 02 15:35:19 2014 -0700"
      },
      "message": "Move DecodedInstruction into MIR.\n\nChange-Id: I188dc7fef4f4033361c78daf2015b869242191c6\n"
    },
    {
      "commit": "cb73fb35e5f7c575ed491c0c8e2d2b1a0a22ea2e",
      "tree": "e89c34c5bb21f69c8c0104ba4b679a0a1e28dbce",
      "parents": [
        "851a9a9c0c9b94e24eb0b3d322e810bb388a81a0"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Thu May 01 15:36:22 2014 -0700"
      },
      "committer": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Fri May 02 13:20:32 2014 -0700"
      },
      "message": "ART: Better SSA Allocation when recreating SSA\n\nThe SSA calculation is not allocation friendly. This makes the\nSSARepresentation remember how much is allocated and not reallocate\nif SSA should be recalculated.\n\nAlso added some allocation friendly code for the dominance code.\n\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\nChange-Id: I6418b402434bd850b45771c75b7631b7b84a8f66\n"
    },
    {
      "commit": "cc794c3dc5b45601da23fb0d7bc16f9b4ef04065",
      "tree": "6fe8cf16892ee3c25dc67f5688be7ce8f5247c7e",
      "parents": [
        "56a341a82ece9aa4f2a071629f3e1fd1adf988ae"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Fri May 02 09:34:13 2014 -0700"
      },
      "committer": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Fri May 02 10:45:38 2014 -0700"
      },
      "message": "ART: Move oat_data_flow_attributes_ to private and put an API\n\nThe oat_data_flow_attributes had no checking mechanism to ensure bound\n correctness.\n\nThis fix handles this and also offers two functions to retrieve the\n attributes: using the MIR and DecodedInstruction.\n\nChange-Id: Ib4f1f749efb923a803d364a4eea83a174527a644\nSigned-Off-By: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\n"
    },
    {
      "commit": "9820b7c1dc70e75ad405b9e6e63578fa9fe94e94",
      "tree": "2fff53b061b16d758870a2a5299a383bdbe550b6",
      "parents": [
        "80f9d0c48d6f8561700630b8b08adb4398d61008"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 02 16:40:37 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 18 16:16:16 2014 +0000"
      },
      "message": "Early inlining of simple methods.\n\nInlining \"special\" methods: empty methods, methods returning\nconstants or their arguments, simple getters and setters.\n\nBug: 8164439\nChange-Id: I8c7fa9c14351fbb2470000b378a22974daaef236\n"
    },
    {
      "commit": "3d73ba2ce682edfaf41f29521bd6039c6499a1c5",
      "tree": "8a08b63016c0a0ad0422d0cebe793438e8c34c07",
      "parents": [
        "c5bb05eb5e4e8a22ff9c1e96ddac72d3f95106a7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 06 15:18:04 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 11 10:52:37 2014 +0000"
      },
      "message": "Avoid Cache*LoweringInfo pass when there\u0027s no GET/PUT/INVOKE.\n\nAdd new data flow flags indicating instance/static field\naccess. Record merged flags of all insns and use them to skip\nthe CacheFieldLoweringInfo pass if the method uses no fields\nand the CacheMethodLoweringInfo pass if it has no invokes.\n\nChange-Id: I36a36b438ca9b0f104a7baddc0497d736495cc3c\n"
    },
    {
      "commit": "83cc7ae96d4176533dd0391a1591d321b0a87f4f",
      "tree": "6b3c607119c1dc2850810f8463dfd968c486fba4",
      "parents": [
        "8785d615122d4abbd22db702139584e8c472f502"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 12 18:02:05 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 06 15:37:40 2014 +0000"
      },
      "message": "Create a scoped arena allocator and use that for LVN.\n\nThis saves more than 0.5s of boot.oat compilation time\non Nexus 5.\n\nTODO: Move other stuff to the scoped allocator. This CL\nalone increases the peak memory allocation. By reusing\nthe memory for other parts of the compilation we should\nreduce this overhead.\n\nChange-Id: Ifbc00aab4f3afd0000da818dfe68b96713824a08\n"
    },
    {
      "commit": "da7a69b3fa7bb22d087567364b7eb5a75824efd8",
      "tree": "17aea3b34d6059b52fab73fc206470eca5e9d305",
      "parents": [
        "353e494a7108f382daf1782596fc0a93d92f38a4"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Wed Jan 08 15:09:50 2014 -0800"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Fri Jan 31 13:58:28 2014 -0800"
      },
      "message": "Enable compiler temporaries\n\nCompiler temporaries are a facility for having virtual register sized space\nfor dealing with intermediate values during MIR transformations. They receive\nexplicit space in managed frames so they can have a home location in case they\nneed to be spilled. The facility also supports \"special\" temporaries which\nhave specific semantic purpose and their location in frame must be tracked.\n\nThe compiler temporaries are treated in the same way as virtual registers\nso that the MIR level transformations do not need to have special logic. However,\ngenerated code needs to know stack layout so that it can distinguish between\nhome locations.\n\nMIRGraph has received an interface for dealing with compiler temporaries. This\ninterface allows allocation of wide and non-wide virtual register temporaries.\n\nThe information about how temporaries are kept on stack has been moved to\nstack.h. This is was necessary because stack layout is dependent on where the\ntemporaries are placed.\n\nChange-Id: Iba5cf095b32feb00d3f648db112a00209c8e5f55\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\n"
    },
    {
      "commit": "4e97c539408f47145526f0062c1c06df99146a73",
      "tree": "f196db2807a8e3640ad86e1d8026f2007348db19",
      "parents": [
        "121f6a1ebaf8abd2b7ec99df8347ec87b78548f7"
      ],
      "author": {
        "name": "Jean Christophe Beyler",
        "email": "jean.christophe.beyler@intel.com",
        "time": "Tue Jan 07 10:07:18 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 13 19:34:52 2014 -0800"
      },
      "message": "Added pass framework\n\nThe patch adds a Middle-End pass system and normalizes the current\n passes into the pass framework.\n\nPasses have:\n - A start, work, and end functions.\n - A gate to determine to apply the pass.\n - Can provide a CFG dump folder.\n\nmir_dataflow.cc, mir_graph.cc, mir_optimization.cc, ssa_transformation.cc:\n - Changed due to moving code into bb_optimizations.cc.\n - Moved certain functions from private to public due to needed from the passes.\n\npass.cc, pass.h:\n - Pass base class\n\npass_driver.cc, pass_driver.h:\n - The pass driver implementation.\n\nfrontend.cc:\n - Replace the function calls to the passes with the pass driver.\n\nChange-Id: I88cd82efbf6499df9e6c7f135d7e294dd724a079\nSigned-off-by: Jean Christophe Beyler \u003cjean.christophe.beyler@intel.com\u003e\n"
    },
    {
      "commit": "1da1e2fceb0030b4b76b43510b1710a9613e0c2e",
      "tree": "01ff0b0545450439200b81627bfc43ae60f414c2",
      "parents": [
        "21be5b21017823b3785f94349e2e2b57d82431e6"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Nov 15 13:37:01 2013 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 26 12:10:55 2013 -0800"
      },
      "message": "More compile-time tuning\n\nAnother round of compile-time tuning, this time yeilding in the\nvicinity of 3% total reduction in compile time (which means about\ndouble that for the Quick Compile portion).\n\nPrimary improvements are skipping the basic block combine optimization\npass when using Quick (because we already have big blocks), combining\nthe null check elimination and type inference passes, and limiting\nexpensive local value number analysis to only those blocks which\nmight benefit from it.\n\nFollowing this CL, the actual compile phase consumes roughly 60%\nof the total dex2oat time on the host, and 55% on the target (Note,\nI\u0027m subtracting out the Deduping time here, which the timing logger\nnormally counts against the compiler).\n\nA sample breakdown of the compilation time follows (this taken on\nPlusOne.apk w/ a Nexus 4):\n\n39.00% -\u003e MIR2LIR: 1374.90 (Note: includes local optimization \u0026 scheduling)\n10.25% -\u003e MIROpt:SSATransform: 361.31\n 8.45% -\u003e BuildMIRGraph: 297.80\n 7.55% -\u003e Assemble: 266.16\n 6.87% -\u003e MIROpt:NCE_TypeInference: 242.22\n 5.56% -\u003e Dedupe: 196.15\n 3.45% -\u003e MIROpt:BBOpt: 121.53\n 3.20% -\u003e RegisterAllocation: 112.69\n 3.00% -\u003e PcMappingTable: 105.65\n 2.90% -\u003e GcMap: 102.22\n 2.68% -\u003e Launchpads: 94.50\n 1.16% -\u003e MIROpt:InitRegLoc: 40.94\n 1.16% -\u003e Cleanup: 40.93\n 1.10% -\u003e MIROpt:CodeLayout: 38.80\n 0.97% -\u003e MIROpt:ConstantProp: 34.35\n 0.96% -\u003e MIROpt:UseCount: 33.75\n 0.86% -\u003e MIROpt:CheckFilters: 30.28\n 0.44% -\u003e SpecialMIR2LIR: 15.53\n 0.44% -\u003e MIROpt:BBCombine: 15.41\n\n(cherry pick of 9e8e234af4430abe8d144414e272cd72d215b5f3)\n\nChange-Id: I86c665fa7e88b75eb75629a99fd292ff8c449969\n"
    },
    {
      "commit": "17189ac098b2f156713db1821b49db7b2f018bbe",
      "tree": "112bbb910fadb310ef98d3b1bb306f9ef876984e",
      "parents": [
        "3b6f0fae76fddf81930a263a075dc87b6039b7fc"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Nov 08 11:07:02 2013 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Nov 14 08:01:23 2013 -0800"
      },
      "message": "Quick compiler compile-time/memory use improvement\n\nThis CL delivers a surprisingly large reduction in compile time,\nas well as a significant reduction in memory usage by conditionally\nremoving a CFG construction feature introduced to support LLVM\nbitcode generation.\n\nIn short, bitcode requires all potential exception edges to be\nexplicitly present in the CFG.  The Quick compiler (based on the\nold JIT), can ignore, at least for the purposes of dataflow\nanalysis, potential throw points that do not have a corresponding\ncatch block.\n\nTo support LLVM, we create a target basic block for every\npotentially throwing instruction to give us a destination for\nthe exception edge.  Then, following the check elimination pass,\nwe remove blocks whose edges have gone away.\n\nHowever, if we\u0027re not using LLVM, we can skip the creation of\nthose things in the first place.  The savings are significant.\n\nSingle-threaded compilation time on the host looks to be reduced\nby something in the vicinity of 10%.  We create roughly 60% fewer\nbasic blocks (and, importantly, the creation of fewer basic\nblock nodes has a multiplying effect on memory use reduction\nbecause it results in fewer dataflow bitmaps).\n\nSome basic block redution stats:\n\nboot: 2325802 before, 844846 after.\nPhonesky: 485472 before, 156014 after.\nPlusOne: 806232 before, 243156 after.\nThinkfree: 864498 before, 264858 after.\n\nAnother nice side effect of this change is giving the basic\nblock optimization pass generally larger scope.\n\nFor arena memusage in the boot class path (compiled on the host):\n\n          Average            Max\nBefore:    50,863         88,017,820\nAfter:     41,964          4,914,208\n\nThe huge reduction in max arena memory usage is due to the\ncollapsing of a large initialization method.  Specifically, with complete\nexception edges org.ccil.cowan.tagsoup.Scheme requires 13,802\nbasic blocks.  With exception edges collapsed, it requires 4.\n\nThis change also caused 2 latent bugs to surface.\n\n1) The dex parsing code did not expect that the target of a switch statement\ncould reside in the middle of the same basic block ended by that same switch\nstatement.\n\n2) The x86 backend introduced a 5-operand LIR instruction for indexed memops.\nHowever, there was no corresponding change to the use/def mask creation code.\nThus, the 5th operand was never included in the use/def mask.  This allowed\nthe instruction scheduling code to incorrectly move a use above a definition.\nWe didn\u0027t see this before because the affected x86 instructions were only used\nfor aget/aput, and prior to this CL those Dalvik opcodes caused a basic\nblock break because of the implied exception edge - which prevented the code\nmotion.\n\nAnd finally, also included is some minor tuning of register use weighting.\n\nChange-Id: I3f2cab7136dba2bded71e9e33b452b95e8fffc0e\n"
    },
    {
      "commit": "0b1191cfece83f6f8d4101575a06555a2d13387a",
      "tree": "37d0cc0e8e0c991dfbdf4a32f4f7473835cc9794",
      "parents": [
        "7195dd860e424057bd9a17d501269d9b50673f11"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 28 22:11:59 2013 +0000"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 30 15:34:52 2013 -0700"
      },
      "message": "Revert \"Revert \"Null check elimination improvement\"\"\n\nThis reverts commit 31aa97cfec5ee76b2f2496464e1b6f9e11d21a29.\n\n..and thereby brings back change 380165, which was reverted\nbecause it was buggy.\n\nThree problems with the original CL:\n\n  1.  The author ran the pre-submit tests, but used -j24 and\n      failed to search the output for fail messages.\n  2.  The new null check analysis pass uses an interative\n      approach to identify whether a null check is needed.  It\n      is possible that the null-check-required state may\n      oscillate, and a logic error caused it to stick in the\n      \"no check needed\" state.\n  3.  Our old nemesis Dalvik untyped constants, in which 0 values\n      can be used both as object reference and non-object references.\n      This CL conservatively treats all CONST definitions as\n      potential object definitions for the purposes of null\n      check elimination.\n\nChange-Id: I3c1744e44318276e42989502a314585e56ac57a0\n"
    },
    {
      "commit": "31aa97cfec5ee76b2f2496464e1b6f9e11d21a29",
      "tree": "d9d1d7c6ffd9ebca61d41cb012ded1f834d45e0f",
      "parents": [
        "4db179d1821a9e78819d5adc8057a72f49e2aed8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 25 23:07:29 2013 +0000"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 25 23:07:29 2013 +0000"
      },
      "message": "Revert \"Null check elimination improvement\"\n\nThis reverts commit 4db179d1821a9e78819d5adc8057a72f49e2aed8.\n\nChange-Id: I059c15c85860c6c9f235b5dabaaef2edebaf1de2\n"
    },
    {
      "commit": "4db179d1821a9e78819d5adc8057a72f49e2aed8",
      "tree": "b63692e314b38556d555580143d2bacfeac926d7",
      "parents": [
        "a8d24bf578a1022ff14f89f650074dc39b9667fe"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 23 12:16:39 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 24 14:33:44 2013 -0700"
      },
      "message": "Null check elimination improvement\n\nSee b/10862777\n\nImproves the null check elimination pass by tracking visibility\nof object definitions, rather than successful uses of object\ndereferences.  For boot class path, increases static null\ncheck elimination success rate from 98.4% to 98.6%.  Reduces\nsize of boot.oat by ~300K bytes.\n\nFixes loop nesting depth computation, which is used by register\npromotion, and tweaked the heuristics.\n\nFixes a bug in verbose listing output in which a basic block\nid is directly dereferenced, rather than first being converted\nto a pointer.\n\nChange-Id: Id01c20b533cdb12ea8fc4be576438407d0a34cec\n"
    },
    {
      "commit": "0d82948094d9a198e01aa95f64012bdedd5b6fc9",
      "tree": "c219c9dd2f1ae3b18245aafac4fb00970d5266a3",
      "parents": [
        "409fe94ad529d9334587be80b9f6a3d166805508"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 11 15:24:55 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 21 12:15:45 2013 -0700"
      },
      "message": "64-bit prep\n\nPreparation for 64-bit roll.\n  o Eliminated storing pointers in 32-bit int slots in LIR.\n  o General size reductions of common structures to reduce impact\n    of doubled pointer sizes:\n    - BasicBlock struct was 72 bytes, now is 48.\n    - MIR struct was 72 bytes, now is 64.\n    - RegLocation was 12 bytes, now is 8.\n  o Generally replaced uses of BasicBlock* pointers with 16-bit Ids.\n  o Replaced several doubly-linked lists with singly-linked to save\n    one stored pointer per node.\n  o We had quite a few uses of uintptr_t\u0027s that were a holdover from\n    the JIT (which used pointers to mapped dex \u0026 actual code cache\n    addresses rather than trace-relative offsets).  Replaced those with\n    uint32_t\u0027s.\n  o Clean up handling of embedded data for switch tables and array data.\n  o Miscellaneous cleanup.\n\nI anticipate one or two additional CLs to reduce the size of MIR and LIR\nstructs.\n\nChange-Id: I58e426d3f8e5efe64c1146b2823453da99451230\n"
    },
    {
      "commit": "9f799db0e4124d3158cde6ead854289fba10f3aa",
      "tree": "fb293aa5c4650a65bff13d3957d19cadb8f8d78c",
      "parents": [
        "f2cc08ece91855399622a70fb1cf042611ebb2f3",
        "56c717860df2d71d66fb77aa77f29dd346e559d3"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 06 23:17:42 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 06 23:17:42 2013 +0000"
      },
      "message": "Merge \"Compile-time tuning\" into dalvik-dev"
    },
    {
      "commit": "56c717860df2d71d66fb77aa77f29dd346e559d3",
      "tree": "672cc501b98791939cab65b7b47329e90b73c005",
      "parents": [
        "c7cd72c5ad65589b68e6aea185200fc2dbb0e850"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 05 17:13:19 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 06 15:55:51 2013 -0700"
      },
      "message": "Compile-time tuning\n\nSpecialized the dataflow iterators and did a few other minor tweaks.\nShowing ~5% compile-time improvement in a single-threaded environment;\nless in multi-threaded (presumably because we\u0027re blocked by something\nelse).\n\nChange-Id: I2e2ed58d881414b9fc97e04cd0623e188259afd2\n"
    },
    {
      "commit": "65ec92cf13c9d11c83711443a02e4249163d47f1",
      "tree": "81057698128ffca7069e3c78b0113129d717ad0f",
      "parents": [
        "866709c85da0c0d2c76968713e4dc4a35dce27fd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 06 10:49:58 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 06 10:49:58 2013 -0700"
      },
      "message": "Refactor CompilerDriver::ComputeInvokeInfo\n\nDon\u0027t use non-const reference arguments.\nMove ins before outs.\n\nChange-Id: I4a7b8099abe91ea60f93a56077f4989303fa4876\n"
    },
    {
      "commit": "1e54d68ce8e77dfe63340275d11a072c5184c89a",
      "tree": "08454be7d08352d228e6a6078d53226d6fb92880",
      "parents": [
        "c8c4e2a4edfdafb18047b2392a8f72ae93119bc2"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 06 14:52:10 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 06 14:52:10 2013 +0200"
      },
      "message": "Disable devirtualization detection in DEX-to-DEX compiler.\n\nThis CL allows the DEX-to-DEX compiler to disable devirtualization detection.\nThis allows to quicken invoke-virtual/range instructions that used to be\neligible for devirtualization.\n\nBug: 10632943\nChange-Id: I6c9f4d3249cf42b47f004be5825b3186fa83501e\n"
    },
    {
      "commit": "f6c4b3ba3825de1dbb3e747a68b809c6cc8eb4db",
      "tree": "c9dc76dfbd6067ae4de6650be9eb948535c77bb5",
      "parents": [
        "fb2451b516f8411756fe7b6f91b5534cf3ce8682"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 24 16:11:37 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 26 16:23:51 2013 -0700"
      },
      "message": "New arena memory allocator.\n\nBefore we were creating arenas for each method. The issue with doing this\nis that we needed to memset each memory allocation. This can be improved\nif you start out with arenas that contain all zeroed memory and recycle\nthem for each method. When you give memory back to the arena pool you do\na single memset to zero out all of the memory that you used.\n\nAlways inlined the fast path of the allocation code.\n\nRemoved the \"zero\" parameter since the new arena allocator always returns\nzeroed memory.\n\nHost dex2oat time on target oat apks (2 samples each).\nBefore:\nreal\t1m11.958s\nuser\t4m34.020s\nsys\t1m28.570s\n\nAfter:\nreal\t1m9.690s\nuser\t4m17.670s\nsys\t1m23.960s\n\nTarget device dex2oat samples (Mako, Thinkfree.apk):\nWithout new arena allocator:\n0m26.47s real     0m54.60s user     0m25.85s system\n0m25.91s real     0m54.39s user     0m26.69s system\n0m26.61s real     0m53.77s user     0m27.35s system\n0m26.33s real     0m54.90s user     0m25.30s system\n0m26.34s real     0m53.94s user     0m27.23s system\n\nWith new arena allocator:\n0m25.02s real     0m54.46s user     0m19.94s system\n0m25.17s real     0m55.06s user     0m20.72s system\n0m24.85s real     0m55.14s user     0m19.30s system\n0m24.59s real     0m54.02s user     0m20.07s system\n0m25.06s real     0m55.00s user     0m20.42s system\n\nCorrectness of Thinkfree.apk.oat verified by diffing both of the oat files.\n\nChange-Id: I5ff7b85ffe86c57d3434294ca7a621a695bf57a9\n"
    },
    {
      "commit": "38f85e4892f6504971bde994fec81fd61780ac30",
      "tree": "971ffbc77786712fd2fd561d5cc1ab8a31d74550",
      "parents": [
        "1895ea386ca78573302483f589ebabd8ce1480e7"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 14:45:22 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 14:57:03 2013 -0700"
      },
      "message": "Fix cpplint whitespace/operators issues\n\nChange-Id: I730bd87b476bfa36e93b42e816ef358006b69ba5\n"
    },
    {
      "commit": "df62950e7a32031b82360c407d46a37b94188fbb",
      "tree": "038bf95a2ce296ae3e0c30a131ac22c0986f0f52",
      "parents": [
        "0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 22:39:56 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 00:13:18 2013 -0700"
      },
      "message": "Fix cpplint whitespace/parens issues\n\nChange-Id: Ifc678d59a8bed24ffddde5a0e543620b17b0aba9\n"
    },
    {
      "commit": "2ce745c06271d5223d57dbf08117b20d5b60694a",
      "tree": "08ca327d1f1c8266fafb11422cfad6982f21e0bb",
      "parents": [
        "fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 17:44:30 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 21:46:11 2013 -0700"
      },
      "message": "Fix cpplint whitespace/braces issues\n\nChange-Id: Ide80939faf8e8690d8842dde8133902ac725ed1a\n"
    },
    {
      "commit": "7940e44f4517de5e2634a7e07d58d0fb26160513",
      "tree": "ac90242d96229a6942f6e24ab137bc1f8f2e0025",
      "parents": [
        "5cd9e3b122f276f610980cbaf0d2ad6ed4cd9088"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 13:46:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 17:49:01 2013 -0700"
      },
      "message": "Create separate Android.mk for main build targets\n\nThe runtime, compiler, dex2oat, and oatdump now are in seperate trees\nto prevent dependency creep.  They can now be individually built\nwithout rebuilding the rest of the art projects. dalvikvm and jdwpspy\nwere already this way. Builds in the art directory should behave as\nbefore, building everything including tests.\n\nChange-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81\n"
    },
    {
      "commit": "1581766afea0b31de0ed0f9f677fc3b92a29daae",
      "tree": "78793c270596134e5848dda3af66e674a7160017",
      "parents": [
        "3d76933675895667f212500a65c9c7ea2b6209fc",
        "51c2467e8771b56e25ae4f17f66522f979f57a7e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 08:50:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 08:50:57 2013 -0700"
      },
      "message": "resolved conflicts for merge of 51c2467e to dalvik-dev\n\nChange-Id: Ia7a8785d3220df6feeb999bc70f6d1917cad8d75\n"
    },
    {
      "commit": "51c2467e8771b56e25ae4f17f66522f979f57a7e",
      "tree": "16a66abbb45ea3fcc8c513c8511f34a46cd454c4",
      "parents": [
        "27c590edf6c24107b6473e84e526c432bd081f6e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 11 16:00:56 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 11 21:16:04 2013 -0700"
      },
      "message": "libart-compiler cleanup\n\n- Move compile-time code to src/compiler and libart-compiler\n  OatWriter, ImageWriter, ElfWriter, ElfFixup, ElfStripper, stub generation\n- Move ClassReference and MethodReference to remove MethodVerifier dependency on CompilerDriver\n- Move runtime_support_llvm.cc out of src/compiler and next to runtime_support.cc\n- Change dex2oat and gtests to directly depend on libart-compiler\n- Move non-common definitions from Android.common.mk to more specific makefiles\n- Add LOCAL_ADDITIONAL_DEPENDENCIES on appropriate makefiles\n\nChange-Id: I897027e69945914128f21f317a92caf9255bc600\n"
    },
    {
      "commit": "67ce9b0daabcf0b415b5e75ba672a18f83961424",
      "tree": "9d3035be7491a1e33c88803c5cf2958eb87050ba",
      "parents": [
        "534f2b6f430c7984fda9333f8e72b37962b144b4"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 11 14:31:18 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 11 14:31:18 2013 +0200"
      },
      "message": "Adds missing dataflow flag for invoke-interface.\n\nAdds missing DF_NULL_CHK_OUT0 flag in dataflow attributes of invoke-interface\nand invoke-interface-range instructions. This is used by null check elimination\npass.\n\nChange-Id: I41e6ff414b3d74a16d1e020fa8988a30b7431afa\n"
    },
    {
      "commit": "fa7809f3da2f366317ecb0e37f39c0c7e343d567",
      "tree": "078d723436d7420fc46d68c8d28d2bf6ef11a0af",
      "parents": [
        "8afe6e0d8c4151ac74afc4ebe0dab85550821243"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 13 11:15:15 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 13 11:15:15 2013 -0700"
      },
      "message": "Mark instructions that produce non-null object arguments as non-null.\n\nImprove null-check elimination by marking instructions that can\u0027t produce a\nnon-null object as non-null. Reduces the size of ThinkFree by 16kb (0.05%).\n\nChange-Id: I43148b55a4896081fe3da37a3345814b55fa9b82\n"
    },
    {
      "commit": "8d3a117b374352a1853fae9b7306afeaaa9e3b91",
      "tree": "3d715e8abed609581249034f1f62037def104ac2",
      "parents": [
        "4b3dc167917f8cf700416659b1bca220c1ccafe9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 04 01:13:28 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 04 09:16:43 2013 -0700"
      },
      "message": "Perf tweaks to compiling and oat writing.\n\nMake hot quick compiler routines inlinable.\nRemove computation/use of SSA strings.\nUse vector insert when writing to the end of a vector in the output stream, to\navoid a memset followed by a memcpy.\n\nGenerating boot.oat/art these changes improve performance by around 2.5%.\n\nChange-Id: I3d0bdb01333efe8f0eda4bdf97225e0b307f934d\n"
    },
    {
      "commit": "39ebcb800aabedd0ffa6aa4aeac8aa4194c66e61",
      "tree": "3efbbafa4cc39683a8bcbc2d76103c3d5bfbf072",
      "parents": [
        "f89eccd509475cb1949c729e796b26a2a248ae04"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 30 16:57:23 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 31 11:43:42 2013 -0700"
      },
      "message": "More profiler driven tweaks.\n\nMake more code inlinable by moving to header files.\nUse reserve on std::vectors to avoid reallocation.\n\nChange-Id: I1bf67d32dd58ff5c06dec73a247fadc3de593e91\n"
    },
    {
      "commit": "e3cd2f0e3c3d976ae9c65c8a731003a5aaf71986",
      "tree": "e6f2bd0e62c7bd72753499140a854a1c4e5a976a",
      "parents": [
        "1d9314c989114f330297d52dae3fe0cd4848b183"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 24 15:32:56 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 24 18:19:28 2013 -0700"
      },
      "message": "Enable devirtualization for abstract and sub-class methods.\n\nIf we know the type of a receiver in the verifier we record devirtualization\ndata. Currently we only use this data to avoid virtual method dispatch when\nwe know the receiver of a method isn\u0027t a sub-class. This change allows\ndevirtualization of virtual and interface methods when we know the receiver\u0027s\ntype and the method the we\u0027d find via dispatch is either known within boot or\nhas a reference from the current dex file.\n\nPass the receiver through to the method resolution trampoline as\ndevirtualization may mean the dex method index needs to be made more accurate\nfor the receiver.\n\nTidy up method devirtualization and related statistics.\n\nPush the devirtualization map lookup into a less common case to avoid\ntaking its lock.\n\nMake MethodReference a struct rather than a typedef of a pair, so the members\ncan have more meaningful names than first and second.\n\nRough statistics show that we devirtualize using this change around 2.5% of\nthe time, whilst some apps like GMS core devirtualize over 3.4% of the time.\n\nChange-Id: Ieed3471dbedfc4cc881d652631b67176bb37d394\n"
    },
    {
      "commit": "a5abf7091711eed1e9f1d0e1538fe9963ebdf31c",
      "tree": "e256df83ca632744d144854403a326d90cb683a7",
      "parents": [
        "bf47e5f28b1aa39748dce8ac5abbabca1baee093"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Apr 12 14:39:29 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon May 13 12:34:28 2013 -0700"
      },
      "message": "Compiler: replace DOM traversal computation\n\nOriginally the old trace JIT used a few recursive graph walking\nalgorithms - which was perfectly reasonable given that the graph\nsize was capped at a few dozen nodes at most.  These were replaced\nwith iterative walk order computations  - or at least I thought\nthey all were.  Missed one of them, which caused a stack overflow\non a pathologically large method compilation.\n\nRenaming of some arena_allocator items for consistency and clarity.\nMore detailed memory usage logging.  Reworked the allocator to waste\nless space when an allocation doesn\u0027t fit and a new block must be\nallocated.\n\nChange-Id: I4d84dded3c47819eefa0de90ebb821dd12eb8be8\n"
    },
    {
      "commit": "02c42237741b5573f9d790a5a0f17f408dceb543",
      "tree": "293d72039e2e1a0e56fbcb572c6d92ccedc5581a",
      "parents": [
        "cf9773a7adff883012dbd519a66e85f1f7aaaa11"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Tue Apr 30 12:09:45 2013 -0700"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Thu May 02 14:19:17 2013 -0700"
      },
      "message": "Supporting de-virtualization for precise types.\n\nSharpening invoke-virtual and invoke-interface calls to invoke-direct for cases\nwhere the type of \"this\" pointer in the invoke- params is precisely known.\n\nInstructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface\nwe come across with a precise type for \"this\" we mark the location as a candidate for sharpening,\nresolve the concrete method and save its method reference \u003cDexFile, DexMethodIndex\u003e to be sharpened\nin CompilerDriver::ComputeInvokeInfo().\n\nAdded a new entry to AOT statistics showing the percentage of sharpened calls that were based on\ntype analysis.\n\nFix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference\nhad precise types created which is not necessarily the case.\n\nFixed DCHECK in Class::FindVirtualMethodForVirtual to handle cases for Miranda methods.\n\nSharpening only takes place for cases where no soft failures happen at verification time.\n\nChange-Id: Ic027d0226d6f95260c1918014cb6313f2e0ca455\n"
    },
    {
      "commit": "302a72d6e0e99208db629053dd77dda85896f707",
      "tree": "932d35c7dc03161f81f87dd1654b0330f942668c",
      "parents": [
        "31d4b8e0058b33e2c5ce792a69e5e897583652e2"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Apr 30 09:45:06 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Apr 30 09:45:06 2013 -0700"
      },
      "message": "Revert \"Supporting de-virtualization for precise types.\"\n\nThis reverts commit 31d4b8e0058b33e2c5ce792a69e5e897583652e2.\n"
    },
    {
      "commit": "31d4b8e0058b33e2c5ce792a69e5e897583652e2",
      "tree": "8b981aa8c0dcb2e540f5ba26951302f720299f8e",
      "parents": [
        "88fc036842eb3c48acd5d3b01e75b3012c996d90"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Mon Apr 29 11:31:03 2013 -0700"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Mon Apr 29 13:06:07 2013 -0700"
      },
      "message": "Supporting de-virtualization for precise types.\n\nSharpening invoke-virtual and invoke-interface calls to invoke-direct for cases\nwhere the type of \"this\" pointer in the invoke- params is precisely known.\n\nInstructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface\nwe come across with a precise type for \"this\" we mark the location as a candidate for sharpening,\nresolve the concrete method and save its method reference \u003cDexFile, DexMethodIndex\u003e to be sharpened\nin CompilerDriver::ComputeInvokeInfo().\n\nAdded a new entry to AOT statistics showing the percentage of sharpened calls that were based on\ntype analysis.\n\nFix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference\nhad precise types created which is not necessarily the case.\n\nFixed DCHECK in Class::FindVirtualMethodForVirtual to handle cases for Miranda methods.\n\nChange-Id: I0626d5cd1bc70a685db71abec067370ebdaf6edc\n"
    },
    {
      "commit": "f4da60751631f8bc098fbd04517f305bf7f20ae3",
      "tree": "5a359b033ee308154ffbdcfea47708bacd1c9cb3",
      "parents": [
        "b0682d5f7970470130f43d35f37ae7605a8a9bb8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Apr 26 22:53:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 26 22:53:05 2013 +0000"
      },
      "message": "Revert \"Supporting de-virtualization for precise types.\"\n\nThis reverts commit b0682d5f7970470130f43d35f37ae7605a8a9bb8\n\nChange-Id: I2b0dc3e716ee5c23b89d9fa6eb0ef05c24784b3e\n"
    },
    {
      "commit": "b0682d5f7970470130f43d35f37ae7605a8a9bb8",
      "tree": "3bf3d9e1b3ed5da8e7db5c9e736e6cde7c5e30c8",
      "parents": [
        "ba1814eeac6adb44f2f78317556b3484b19e02fc"
      ],
      "author": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Fri Apr 05 19:13:07 2013 -0700"
      },
      "committer": {
        "name": "Sameer Abu Asal",
        "email": "sasal@google.com",
        "time": "Fri Apr 26 10:12:52 2013 -0700"
      },
      "message": "Supporting de-virtualization for precise types.\n\nSharpening invoke-virtual and invoke-interface calls to invoke-direct for cases\nwhere the type of \"this\" pointer in the invoke- params is precisely known.\n\nInstructions that have an invoke opcode are marked as interesting, for each invoke-virtual/interface\nwe come across with a precise type for \"this\" we mark the location as a candidate for sharpening,\nresolve the concrete method and save its method reference \u003cDexFile, DexMethodIndex\u003e to be sharpened\nin CompilerDriver::ComputeInvokeInfo().\n\nAdded a new entry to AOT statistics showing the percentage of sharpened calls that were based on\ntype analysis.\n\nFix a minor bug in type creation for GetSuperClass(). Previously super class of a precise reference\nhad precise types created which is not necessarily the case.\n\nChange-Id: Iee61858e84242dfc82be363ee221d2747a1ac86a\n"
    },
    {
      "commit": "862a76027076c341c26aa6cd4a30a7cdd6dc2143",
      "tree": "4a683c0aac1af88db8138cdcb36ecd2d006f2f7a",
      "parents": [
        "5fa60c3db4208df407113b5a69d295a9c93d53b1"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Apr 05 10:58:54 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Apr 10 14:04:37 2013 -0700"
      },
      "message": "Compiler: continuing refactoring\n\nMoving the arena memory allocation mechanism into it\u0027s own class as\na prelude to cleaning up the MIR and LIR data structures.\n\nReworked bit vector as a class using placement new w/ the arena\nallocator.\n\nReworked GrowableList as a class template using the new arena\nallocator and renamed to GrowableArray.\n\nChange-Id: I639c4c08abe068094cae2649e04f58c8addd0015\n"
    },
    {
      "commit": "1fd3346740dfb7f47be9922312b68a4227fada96",
      "tree": "6e4c16fbaaaa8bb4a9129806bd3f3c7472e1365d",
      "parents": [
        "58805e4974fcc73c3a2830608679e051f9e5f78f"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Mar 25 13:40:45 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Apr 01 14:01:06 2013 -0700"
      },
      "message": "Compiler: LIR restructuring\n\nContinuing restructuring of the compiler.  In this installment,\nall LIR reverences are moved from compiler_ir down to quick.  Further,\nall Portable data is moved to from compiler_ir down to portable.\n\nIn short, the great dumping ground of CompilationUnit has been\nsplit into three smaller dumping grounds of MIRGraph, Codegen\nand MIRConverter.  From here, subsequent CLs will repartition\nthose smaller dumping grounds into (hopefully) more coherent classes.\nAs a result, most function signatures have been altered to remove\nthe passing around of a CompilationUnit* pointer.\n\nChange-Id: I7195f7baecd81e87786a952e18bbce0b6ceeaac4\n"
    },
    {
      "commit": "0665fe0966d9591c5378a5d598c6eb6cab67e74a",
      "tree": "43749dcafcd65ef07cefdc9c56bdb8a7889e0658",
      "parents": [
        "2da15eda3ff7c4d7f5f35606cb8e5e596a1e0e74"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Mar 21 12:32:21 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Mar 21 15:04:18 2013 -0700"
      },
      "message": "Compiler: rework dataflow iterator.\n\nThis cl addresses comments from 278630 - rework DatflowIterator\nto be a parent class for the various iteration modes.\n\nChange-Id: Ic16c093597e2d754761b4fdfa47f665d8b315542\n"
    },
    {
      "commit": "71fe267165765bee6ff1b2e6c35de17910a14f80",
      "tree": "c18f54c652a3e2ff77900f5aa5af04f748e7cd43",
      "parents": [
        "e8fc5df5d4bc4f11095e8640892c43c76128fa0b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Mar 19 20:45:02 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Mar 19 20:45:02 2013 -0700"
      },
      "message": "Some common frontend tidying.\n\nChange-Id: I1fa955cf8c4be45887e63085cbc2637569b7e545\n"
    },
    {
      "commit": "311ca169f4727d46a55bdc8dfa0059719fa72b65",
      "tree": "c92882e4bb34029bcc71495045e062accea10ced",
      "parents": [
        "2af52e76dc76b41969b6147d7bd6925d0f61e932"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Feb 28 15:56:43 2013 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Mar 19 19:14:52 2013 -0700"
      },
      "message": "Compiler: Spring cleaning\n\nSignificant restructuring of the Quick compiler to break out the\ncommon frontend more cleanly.  Additional C++\u0027ification.\n\nThe goal is to move from the monolithic structure of the old\nJIT towards a more modular model in which components - in\nparticular the compiler backend - can be replaced.  This CL\nfocuses on moving MIR-related data from the CompilationUnit\nstruct into a new MIRGraph class.  The next CL will isolate all\nLIR-related data and code down into the Quick backend.\n\nThis change will happen in multiple steps, and may look uglier\nbefore it starts looking better.\n\nAmong the changes:\n\n   o Moved all mir-related fields from CompilationUnit to new\n     MirGraph class.\n\n   o Moved the register promotion stuff into the Quick backend.\n\n   o Deleted the GBC to LIR conversion code.\n\n   o Replaced with old C-style function pointer dataflow analysis\n     dispatcher with a basic block iterator class.\n\n   o Renamed some files to make the name more consistent with what\n     the code actually does.\n\n   o Added the foundation for future inlining support.\n\n   o Stripped out the remains of the old fingerprinting mechanism.\n\nChange-Id: I6c30facc642f8084b1c7b2075cf7014de387aa56\n"
    }
  ]
}
