)]}'
{
  "log": [
    {
      "commit": "4df2bbdfe6602ce5f141b7b44028b95faa0bd8ef",
      "tree": "9c23dad1023ccd1bf710825e6115892291232dae",
      "parents": [
        "1aae273f8827bcbfff6b00c5babd77a111852272"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 11 14:46:06 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 11 15:33:23 2012 -0700"
      },
      "message": "Enable multi-threaded Quick compilation\n\nReuse thread-local copies of llvm context data for Quick compiler\n(while continuing to regenerate fresh ones per method for Portable).\nThis is a transitional CL - the upcoming compiler driver change\nis expected to pass pass a thread context structure to each compiler\nworker thread rather than use the pthread_key mechanism.\n\nChange-Id: I277920a5c2705748c3a9f37ceace53c903747ec2\n"
    },
    {
      "commit": "951c0a150dfd0c369b72c0dd022e5f5dc9816994",
      "tree": "1d8c6433ebae5ecedd766157d429d19686826505",
      "parents": [
        "eb569a9f67d5e4d3bf1919553f0050e3d729dcc3"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 03 16:31:39 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 04 05:41:38 2012 -0700"
      },
      "message": "Quick: fix tranmission of block info\n\nWhen operating on the Quick path, we use named basic blocks\nto transmit the original Dalvik offset and block type.  However,\nnot all blocks are named.  Code changed to handle that case.\n\nChange-Id: Ibeafc18ac83e2d8d6dcf70d0f2dcfebeafc84b8f\n"
    },
    {
      "commit": "6459e7cb35ca83ffc2f266dddeb83673bc07ecd4",
      "tree": "59e96c590c48158c3b5474ba2f1a2e09b1ec5721",
      "parents": [
        "3e96a16c27c986275f60afe682d0b2a3064f45c9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 02 14:42:41 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 02 14:47:03 2012 -0700"
      },
      "message": "Enable bitcode verification for debug builds\n\nTurn bitcode function verification on for debug Quick and\nPortable builds.  Also in this CL, some sanity checking for\nthe dex2pc table and a temporary workaround for excessive filename\nlengths for bitcode file dumps.\n\nChange-Id: I430ed28824b078c03be7826cb13876cdcb8a0fec\n"
    },
    {
      "commit": "a5b3024aed77a8204d5fb48ba7f763fb8c60fa76",
      "tree": "d9b046896b73519302c8b54a97a3abfa8ecfdf4c",
      "parents": [
        "a75a01313e801c53145df00bad1842d9f643c0a1"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 28 07:19:44 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 28 15:41:57 2012 -0700"
      },
      "message": "Split dex_pc\u003c-\u003enative_pc mapping table\n\nFirst of 2 related CLs - this one moves to a split table, a future\nCL will compress the table to save image space.\n\nThe current MappingTable mixes two flavors of entries: dex-\u003epc and\npc(return address)-\u003edex.  The problem is that we can have two\nentries with the same native pc address but two different dex pcs.\nThe reason is that when we go from native pc to dex, the native\npc is actually the return address from the previous call, whereas\nwhen we go from dex to native pc, the mapping refers to the first\nnative instruction of the sequence.\n\nPreviously, the first entry in the mapping table was the number\nof subsequent entries.  That will remain the same, but now\nthe second entry will be a count of the number of entries in\nthe pc-\u003edex section of the table.  The difference between the\ntwo counts gives us the number of entries in the following dex-\u003epc\nsection.\n\nChange-Id: Ibadb96cb50bf1f93e079dff3832130b9f9782723\n"
    },
    {
      "commit": "474b6da273c7ce6df50a4e51eb9929a77e1611c3",
      "tree": "b67074e7e4c16e01384c2f7d416f4e4ad3b3bd61",
      "parents": [
        "de1ef40bd5f344dbb0bdb68f555f45868f502ae6"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 25 00:20:38 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 25 17:01:42 2012 -0700"
      },
      "message": "Move thread flags and state into 32bits.\n\nWe need to ensure that transitions to Runnable are atomic wrt to a\nthread modifying the suspend count. Currently this is achieved by\nholding the thread_suspend_count_lock_. This change creates a set of bit\nflags that summarize that the suspend_count_ is raised and also others\nflags that signify the managed code should go into a slow path.\n\nThe effect of this change are two-fold:\n1) transitions from suspended to runnable can CAS the thread state\nrather than holding the suspend_count_lock_. This will make JNI\ntransitions cheaper.\n2) the exception/suspend/interpreter poll needed for shadow frames can\nbe rolled into a single compare of the bit fields against 0.\n\nChange-Id: I589f84e3dca396c3db448bf32d814565acf3d11f\n"
    },
    {
      "commit": "f5f5a12a74c6cc465d2757b4d77843fb1cbdac8f",
      "tree": "64a027273a8448aaa8a5bfa1d43a5f20714580ac",
      "parents": [
        "4c33bba40e43870e02a9e90611ddde901981b143"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 21 13:57:36 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 21 14:03:05 2012 -0700"
      },
      "message": "Quick compiler: bug fix \u0026 cleanup\n\nFixed a bug in bitcode generation that was helpfully masked by\ngcc\u0027s -O2 optmization (code motion). Also removed quite a few fields\nand identifiers left over from the JIT, along with a couple of files\nthat were meaningful for the JIT, but are no longer used.\n\nChange-Id: I7702b66d646c68aafb9669368c97e128ad045dc9\n"
    },
    {
      "commit": "6ec5e23195479f2dc4c1d84a2594fd67553ce826",
      "tree": "0992b76df7b10d39792089095a520ffa2bf74638",
      "parents": [
        "46c6bb2f52cef82660b9be7576b49f83845df93a"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 20 15:50:03 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 20 15:55:26 2012 -0700"
      },
      "message": "Quick compiler: fix array undershoot\n\nNormal Dalvik vRegs range from 0..n.  However, we use negative\nvReg positions to denote special values such as Method* and other\nthings we might wish to promote.  Failed to take this into account\nfor some shadow frame bitcode conversion stuff.\n\nYet another datapoint supporting the upcoming C++ification.\n\nChange-Id: I3a1714ac1a80763c048dda3ae95125fc6082202b\n"
    },
    {
      "commit": "b259652a72293b4bd3c346bb0e40fb8a7f878fa2",
      "tree": "c8736e46ebb8830c2d7ab2405d881fa4f21a6c24",
      "parents": [
        "55e5e6c5702e3f1f68bd83ae741af769740d9a74"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Fri Sep 14 16:36:11 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:51:25 2012 -0700"
      },
      "message": "Overall clean up of gbc_expander and intrinsics.\n\nChange-Id: I4afbafbaa3f2ecb82a55e609b3f276225c06f117\n"
    },
    {
      "commit": "55e5e6c5702e3f1f68bd83ae741af769740d9a74",
      "tree": "5f08ced0306436fdfdae2977d643aa5f1f3e09f6",
      "parents": [
        "920be7cac2aa06f9d5c8b2db87db116b1cad3159"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Tue Sep 11 15:14:42 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:51:25 2012 -0700"
      },
      "message": "Fix quick fly2iceland after rebase.\n\nChange-Id: I844f005782b3ecdcb52dc2484d44f4ae34e1c670\n"
    },
    {
      "commit": "347166aeff128c86f921ec214a2789ca89b84e70",
      "tree": "0f078a03eba903cf0ff304a96e82071bbb622223",
      "parents": [
        "3fdb33a39732e7fea55dd40f9d006455ad0072dd"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Thu Aug 23 12:23:44 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:51:25 2012 -0700"
      },
      "message": "Fix run-test 030.\n\nChange-Id: I87a819162d9705136c1dcad6424058ffbf033922\n"
    },
    {
      "commit": "569daf19499049ca1ff790bc8b8970596d2f967b",
      "tree": "a9d49559d67c8af5bde8cfb9b0c43e506397f232",
      "parents": [
        "bb33f2fa8e462937574a8cd1b744b86c2f762571"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Fri Aug 10 23:22:33 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:51:24 2012 -0700"
      },
      "message": "Always push shadowframe for stack trace lookup.\n\nChange-Id: I1a7249505aa6300fe47331e30772dde64cbe4df3\n"
    },
    {
      "commit": "890ea89879ba555a08433146058d516575646c59",
      "tree": "b595aa1633451cb16bb8bf7576e110222e4f04b9",
      "parents": [
        "aa55887fd30484a77e7775dfbcddbee883ce6380"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Wed Aug 22 10:49:42 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:51:24 2012 -0700"
      },
      "message": "Add suspend by ourselves to improve performance.\n\nSet shadow frame entry after invoke.\nSome reference is not in the shadow frame because of invoke/move-result\nfusing.\n\nChange-Id: I157eaad5be85a4a7f0d4ce89a960d52863df29ad\n"
    },
    {
      "commit": "4ec8ccdaeee1c4af1a70e1ac0dd482e83df72f38",
      "tree": "53c7d13112489aad08c9ff2d4e8d5becce0c5039",
      "parents": [
        "f71bf5ad4e1872e4dfc71de65641ed518e2b38da"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Sat Aug 11 07:04:57 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:51:14 2012 -0700"
      },
      "message": "Implement Div/Rem/fptosi.\n\nChange-Id: I90be4c1139a9f11ad2378a293e5c243e57843bd9\n"
    },
    {
      "commit": "f71bf5ad4e1872e4dfc71de65641ed518e2b38da",
      "tree": "8ea7bd1e5213addd86dce62e08624633a288f21d",
      "parents": [
        "5a26d44dc8e6fe59a3619ee5951a54bc53d7c9f1"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Sun Jul 29 20:09:52 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:20:58 2012 -0700"
      },
      "message": "Implement remaining intrinsics.\n\nChange-Id: I75e769ae51acfdb94734a9d91fada9b49dcf2e88\n"
    },
    {
      "commit": "554e6078db25b192c5f9a2e69671d05c43338283",
      "tree": "994d1afeeb5469cf6a7eb02851a6e9dbbc9e1b6c",
      "parents": [
        "75e4b60d28355d4c33d50093d9d2603ffdea82dc"
      ],
      "author": {
        "name": "Logan Chien",
        "email": "loganchien@google.com",
        "time": "Mon Jul 23 20:00:01 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:15:17 2012 -0700"
      },
      "message": "Code cleanup: Rewrite strange-looking if-else statement.\n\nChange-Id: I8ff3d8f07c6d92e1169302e56c3e767c6fe6a7c7\n"
    },
    {
      "commit": "21d28f510eb590f52810c83f1f3f37fe5f4adf46",
      "tree": "f937b4d39aab322541b9b83cc5dd59d8e3f2fddd",
      "parents": [
        "0967a25d1482d8f7b4a26c5926263e7ffa63189f"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Tue Jun 12 05:55:00 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Sep 15 04:15:17 2012 -0700"
      },
      "message": "GBC Expander. Removed lir.\n\nChange-Id: If8d13e36f1e6d82c2a7f7bfec62b8fb41fd8cdaa\n"
    },
    {
      "commit": "0967a25d1482d8f7b4a26c5926263e7ffa63189f",
      "tree": "2509d3e60465288ef7146e2203d7ae9a4c8bc3c3",
      "parents": [
        "8320f3867c02bae9bef6cdab267820cb7b412781"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 14 10:43:54 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 14 20:42:55 2012 -0700"
      },
      "message": "Quick compiler code layout\n\nMinor tweaks to the code layout for the Quick compiler.  Repair\ndamage caused by bitcode conversion \u0026 additionally add a new\noptimization pass to move unlikely targets to the end of the code\n(flipping branch conditons if necessary).  For now, this will only\nbe applied to target blocks which do an explicit throw and are\ndominated by a block terminated by a conditional branch.  Later,\nwe might want to generalize this capability to enable profile\nguidance.\n\nAlso, tweaked the basic block combine pass to include blocks\nterminated by array access operations whose null check and\nrange checks have been eliminated.\n\nWith this CL, the run-time performance difference between\nart-buzbee and art-Quick is in the noise.\n\nChange-Id: Iaf9921220eb6cb33c2418c76e7a6b7b31472dace\n"
    },
    {
      "commit": "8320f3867c02bae9bef6cdab267820cb7b412781",
      "tree": "7e2211068ccbd17da7e9c83d24b10fdd9db28c39",
      "parents": [
        "c7b83a0d8ac73bdfff751619ae2a34948e3534b7"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Sep 11 16:29:42 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 13 10:49:20 2012 -0700"
      },
      "message": "Prune useless entries from dex to pc map\n\nStep one of the change.  Limit entries in the table to native\ncode safepoint locations (which generally are the return PC\naddresses of any call that might trigger a stack walk and the\nstart addresses of all catch blocks).\n\nPreviously, the mapping_table described ranges.  No longer.  Any\nnative PC located within compiled Dex code that is found in a\nstack walk should have an exact match in the table.\n\nIn future CLs we\u0027ll add data compression (probably uLeb128) and\nmay add inflation on first use to a faster access map (instead of\nthe current linear search).\n\nNote that this CL introduces somewhat of a regression in the\ncapabilities of oat-dump.  Because the mapping table no longer\nassociates each native intruction with its Dex counter-part, the\nnative code disassembly no longer includes interspersed Dex\ndisassembly.\n\nNote also that as of this CL, the compiler is adopting the 100-char\nline length limit used in the rest of Art.  The 80-char limit\nshould still be used in any code that we expect to upstream to\nllvm.\n\nChange-Id: I1beca4d57c41e8161bf746bc62abbce08d5bcb4d\n"
    },
    {
      "commit": "d1643e41ef242ae656f667bf3c8b0324635cefd3",
      "tree": "6a14d7abb876c850129117304ea33afd619a0eb3",
      "parents": [
        "22f454c7d349c439c774c5d79b32514b190fd531"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 05 14:06:51 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Sep 09 13:57:33 2012 -0700"
      },
      "message": "Basic block combine pass\n\nCombine basic blocks terminated by instruction that we have since\nproven not to throw.  This change is intended to relieve some of the\ncomputational load for llvm by reducing the number of basic blocks\nit has to contend with.\n\nAlso:\n  Add stats to show how successful check elimination is.\n  Restore mechanism to disable some expensive optimization passes when\n  compiling large methods.\n\nChange-Id: I7fae22160988cbefb90ea9fb1cc26d7364e8d229\n"
    },
    {
      "commit": "692be80cb2278ae585a776a163bc4b3ef60cae88",
      "tree": "7ddadb6753024b2b6b864a192e56c4a4047354ee",
      "parents": [
        "9a4f003f9a6da8e4c6ee279bd2a13aac37648183"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Aug 29 15:52:59 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Aug 31 14:46:26 2012 -0700"
      },
      "message": "Quick compiler: reuse llvm context \u0026 ir builder\n\nWith this CL, we avoid setting up an llvm context, module and intrinsic\ndefinitions for each method, and considerably speed up compilation time.\nThis does not represent a final form - we\u0027ll be reworking the compiler driver\nto support Quick \u0026 Portable via the command line, and this code will likely\nchange at that time.\n\nChange-Id: I19e298a011141c3bc35c4f28175b2b20653fd5e4\n"
    },
    {
      "commit": "9a4f003f9a6da8e4c6ee279bd2a13aac37648183",
      "tree": "ce78afe7c842c8ff99d52c0a09bfe758d67d037f",
      "parents": [
        "cfb21d92796087963c092b69110a2e7ff7a03a55"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Aug 30 16:17:40 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Fri Aug 31 10:49:06 2012 -0700"
      },
      "message": "Remove the THROW_VERIFICATION_ERROR op and supporting code.\n\nChange-Id: Idc40a2c379048c7e3d74f50b2bd765a507a417ce\n"
    },
    {
      "commit": "ca7a5e484ac02927247cc77ad40f291bf6613ed5",
      "tree": "5dd6f55984fe8eb0dd2cf80bd3b2aff5f514afa2",
      "parents": [
        "b18e77abdb06a443744fbb6589e0932fa89f6073"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Aug 20 11:12:18 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Aug 23 15:22:25 2012 -0700"
      },
      "message": "Quick compiler: restore optimizations\n\nThis CL re-enables optizations on the Quick compile path.\nNotes:\n\n  o Although all optimization are enabled, several are now useless\n    because of llvm and bitcode constraints:\n      - Large method de-optimization (i.e. - skipping expensive dataflow\n        analysis) can\u0027t be done because we have to do the analysis to\n        produce a CFG that makes the bitcode verifier happy.\n      - Small method pattern matching isn\u0027t applicable w/ bitcode (though\n        I can probably do something similar in the Quick backend, but\n        looking for bitcode instead of dex patterns).\n      - Branch fusing doesn\u0027t translate to bitcode.\n      - Bitcode generation has de-optimized code layout.  We\u0027ll try to\n        repair the damage in a subsequent CL.\n\n  o There is an ugly workaround related to the way we\u0027re loading and\n    unloading the compiler .so containing llvm. [See comment in compiler.cc]\n\n  o We\u0027re still running single-threaded - need to add the magic to allow\n    multi-threaded use of llvm.\n\n  o With the CL, the phone boots, all target tests pass and all cts VM\n    tests pass (except those being dealt with via a verifier change).\n\n  o Compile time is pretty bad - when flashing it\u0027s best to follow\n    with an adb sync to avoid on-device compilation of system apps.\n\nChange-Id: I1c98f9e64aefbcbd24b957c71544c28450eb2023\n"
    },
    {
      "commit": "c9f40dd0a3dba696fc694d51fb82b61dcff19066",
      "tree": "c4c44c15500e53b78e9988983301823c11d18c76",
      "parents": [
        "3d71d80626fdc0fe1f61c84bb52e9f7d96c95060"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Aug 15 11:35:25 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Aug 15 13:21:36 2012 -0700"
      },
      "message": "Restore \"CFG rework for explicit exception edges\"\n\nRestores, with fix, I9fa359c912e25ca6a75e2f69d0975126d0687c33\n\nHere\u0027s the original commit message:\n\nPreviously, basic blocks were terminated by any Dalvik opcode\nwhich might throw, and the exception edges were represented\nas a list of successor basic blocks.  This resulted in a\nSSA renaming bug: any Dalvik register definition caused by\na throwing instruction (such as IGET) would incorrectly be considered\nto be visible across the exception edges.  For the Art compiler (and JIT)\nthis was a benign bug.  But for llvm, it means an invalid CFG.\n\nThe other problem this CL is addressing is the llvm bitcode requirement\nthat all exception edges be explicit.  Because we can\u0027t use\nthe llvm bitcode \"invoke\" (it doesn\u0027t match our exception handling),\nall exception edges must be represented as explicit branches in the\nbitcode (further contributing to the llvm bitcode bloat).\n\nWe split all potentially throwing instructions into two parts: a\ncheck prologue followed by the body.  If there are any catch blocks\nassociated with the potentially throwing instruction, we make a call\nto the intrinisc dex_lang_catch_targets().  Though it should never\nexpand into actual code, this intrinsic returns a switch key that\nfeeds into an immediately-following switch statement.  That switch\nstatement will include edges to all necessary catch blocks, with the\ndefault target referencing the block conaining the \"work\" portion of\nthe pair.\n\nIncluded in this CL are also fixes for .dot file generation\n(previously there was an issue with non-unique block names), and an\nenhancement to include the block number on Phi incoming arcs.\n\nAlso reworked dissasembly to use StringPrintf.\n\nNote: the insertion of new basic blocks following computation of\ndepth-first-search order badly degrades code layout.  DFS order\ncomputation can be expensive, so I\u0027ll be looking for a workaround\nin a future CL to avoid a full dfs order regeneration.\n\nWith this CL, the device boots, all target tests pass, all methods\nare converted to Greenland Bitcode and all well-formed converted methods\npass llvm\u0027s function validation pass without error or warning.\n\nWe still have some cts failures related to the verifier\u0027s\ninstruction rewriting to THROW_VERIFICATION_ERROR.  In those cases\nwe can have a malformed graph - but we still must be able to convert\nit to legal llvm bitcode.  If executed, it will throw.\n\nWe\u0027ll detect that situation and bitcast these mismatches away in a\nsubsequent CL.\n\n[Update: since this original CL, we\u0027ve determined that the\nTHROW_VERIFICATION_ERROR problem is best solved by changes in the\nverifier to avoid the problem of malformed code.  Structural\nverification failures will be treated as hard.]\n\nThis reverts commit 937b73eea7a473395f3572e0db1fdc9c6a094db5\n\nChange-Id: I8ba7fe080d8720c14bf74a342403077c150e4a71\n"
    },
    {
      "commit": "626aaa987b171c0addab75d7d300a91c24f9a5cc",
      "tree": "020411da9658eae76036851f49c74515f8c6f481",
      "parents": [
        "dcf8d7283bd51714f3faa55b631ae4103dc98b51",
        "63ebbb68631caaf1de0588ece186af4018c33cfd"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Aug 03 14:44:06 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 03 14:44:06 2012 -0700"
      },
      "message": "am 63ebbb68: Quick compiler: fix NOT_LONG codegen\n\n* commit \u002763ebbb68631caaf1de0588ece186af4018c33cfd\u0027:\n  Quick compiler: fix NOT_LONG codegen\n"
    },
    {
      "commit": "63ebbb68631caaf1de0588ece186af4018c33cfd",
      "tree": "5898dceb78e4753e2d2bb411204b5f3c7f47173d",
      "parents": [
        "8b503db0432981c6b0b2271723f9bcf9448a554a"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Aug 03 14:05:41 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Aug 03 14:05:41 2012 -0700"
      },
      "message": "Quick compiler: fix NOT_LONG codegen\n\nThe llvm ir-builder converts Not operands into xor w/ -1.  Detect\nand restore original operation on the GBC to LIR path.\n\nChange-Id: I219bcdc6b2e3ee8bb6cfea4c0b159deb10207359\n"
    },
    {
      "commit": "937b73eea7a473395f3572e0db1fdc9c6a094db5",
      "tree": "73c6d5d2f44ac27b6750b5377b272dfd19618b02",
      "parents": [
        "034f76b91225bea769d6185d7dad5e243af4ffa0"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Aug 01 16:09:16 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Aug 01 16:09:16 2012 -0700"
      },
      "message": "Revert \"CFG rework for explicit exception edges\"\n\nThis reverts commit 8b503db0432981c6b0b2271723f9bcf9448a554a.\n\nChange-Id: I21d5255d827c63de6a229ef419f372fbcf4d16ed\n"
    },
    {
      "commit": "f2ba9cbe81b0762a7c8c659cdb86ba79b2dbbc40",
      "tree": "3a7944e695c65fb25ebdcd27bc640b84e6f4fd38",
      "parents": [
        "573b42936ba7fbf296452875cdcadedc619418ef",
        "8b503db0432981c6b0b2271723f9bcf9448a554a"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Aug 01 10:01:59 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 01 10:01:59 2012 -0700"
      },
      "message": "am 8b503db0: CFG rework for explicit exception edges\n\n* commit \u00278b503db0432981c6b0b2271723f9bcf9448a554a\u0027:\n  CFG rework for explicit exception edges\n"
    },
    {
      "commit": "8b503db0432981c6b0b2271723f9bcf9448a554a",
      "tree": "fb729e6813484499ad983a08ddff844d6b576846",
      "parents": [
        "9a2487f94efeb88016a695af823bf26799ef0f06"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 20 15:36:47 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Aug 01 09:52:02 2012 -0700"
      },
      "message": "CFG rework for explicit exception edges\n\nPreviously, basic blocks were terminated by any Dalvik opcode\nwhich might throw, and the exception edges were represented\nas a list of successor basic blocks.  This resulted in a\nSSA renaming bug: any Dalvik register definition caused by\na throwing instruction (such as IGET) would incorrectly be considered\nto be visible across the exception edges.  For the Art compiler (and JIT)\nthis was a benign bug.  But for llvm, it means an invalid CFG.\n\nThe other problem this CL is addressing is the llvm bitcode requirement\nthat all exception edges be explicit.  Because we can\u0027t use\nthe llvm bitcode \"invoke\" (it doesn\u0027t match our exception handling),\nall exception edges must be represented as explicit branches in the\nbitcode (further contributing to the llvm bitcode bloat).\n\nWe split all potentially throwing instructions into two parts: a\ncheck prologue followed by the body.  If there are any catch blocks\nassociated with the potentially throwing instruction, we make a call\nto the intrinisc dex_lang_catch_targets().  Though it should never\nexpand into actual code, this intrinsic returns a switch key that\nfeeds into an immediately-following switch statement.  That switch\nstatement will include edges to all necessary catch blocks, with the\ndefault target referencing the block conaining the \"work\" portion of\nthe pair.\n\nIncluded in this CL are also fixes for .dot file generation\n(previously there was an issue with non-unique block names), and an\nenhancement to include the block number on Phi incoming arcs.\n\nAlso reworked dissasembly to use StringPrintf.\n\nNote: the insertion of new basic blocks following computation of\ndepth-first-search order badly degrades code layout.  DFS order\ncomputation can be expensive, so I\u0027ll be looking for a workaround\nin a future CL to avoid a full dfs order regeneration.\n\nWith this CL, the device boots, all target tests pass, all methods\nare converted to Greenland Bitcode and all well-formed converted methods\npass llvm\u0027s function validation pass without error or warning.\n\nWe still have some cts failures related to the verifier\u0027s\ninstruction rewriting to THROW_VERIFICATION_ERROR.  In those cases\nwe can have a malformed graph - but we still must be able to convert\nit to legal llvm bitcode.  If executed, it will throw.\n\nWe\u0027ll detect that situation and bitcast these mismatches away in a\nsubsequent CL.\n\nChange-Id: I9fa359c912e25ca6a75e2f69d0975126d0687c33\n"
    },
    {
      "commit": "8772f7d8b066887340e39bcb99a0009dd168b4d2",
      "tree": "10c43fd229bd9d74ee624ee219c874454253544c",
      "parents": [
        "f1ea6b072b8b473eabf91d1d582fb5966ffea4ba",
        "9a2487f94efeb88016a695af823bf26799ef0f06"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 27 06:46:50 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jul 27 06:46:50 2012 -0700"
      },
      "message": "am 9a2487f9: Quick compiler - NOT_LONG and verification fixes\n\n* commit \u00279a2487f94efeb88016a695af823bf26799ef0f06\u0027:\n  Quick compiler - NOT_LONG and verification fixes\n"
    },
    {
      "commit": "9a2487f94efeb88016a695af823bf26799ef0f06",
      "tree": "19525acc9c56763a35a12afc2e900fa346c3444d",
      "parents": [
        "854029c13351fd3a8f7794eb6c2c73af0fde8ac8"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 26 14:01:13 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 26 14:01:13 2012 -0700"
      },
      "message": "Quick compiler - NOT_LONG and verification fixes\n\nWe continue to have issues when the verifier rewrites Dalvik\nbyte codes.  This is a workaround to fix the GBC -\u003e LIR\nconversion, but I suspect I\u0027m going to have to add a dead code\nelimination pass to get things working properly for llvm.  The\nbasic problem is that if the re-written instruction defined a\nDalvik virtual register, then we lose the definition.  The\nMIR to GBC converter doesn\u0027t handle uses without definitions\nvery well.\n\nChange-Id: Ia235c299b686ce080755f9bb4c05c719c16c0d77\n"
    },
    {
      "commit": "462ef2008ccb79197f8210f0580bcdc61ffc3898",
      "tree": "035dc964b5d4df9a6b8572497337a7a1df923627",
      "parents": [
        "0104594fb6aa2f03b45fdd37e05a75f60eadf826"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 19 09:27:50 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 19 09:27:50 2012 -0700"
      },
      "message": "Quick compiler - delete unreferenced local\n\nChange-Id: Ic021e36c5d3a509eb5981555be504a99019b69a8\n"
    },
    {
      "commit": "85eee02c456cd54f9e4110e90ebed6b55906e1bf",
      "tree": "07a8b4f12618eeec2d0f41dd484b7c1a0d7d01fa",
      "parents": [
        "ea905deb5e2b84ad7acbccfd03bbbf2e759bbf45"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jul 16 22:12:38 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jul 17 15:42:22 2012 -0700"
      },
      "message": "Quick compiler: various bug fixes\n\no Use appropriate size immediate for placeholder Values.\no Turn unexpected MOVE_RESULT into a warning for x86 (still need to\n  implement this)\no Use the correct iput value to determine value type.\no I\u0027ve identified a bug with SSA renaming that shows up in three methods\n  while doing a full build.  Disable bitcode conversion for them until\n  the fix is in place.\n\nChange-Id: I2762c913d83ef53b8b68dcde51fbe8463f209591\n"
    },
    {
      "commit": "2a83e8f06031948741ae3dda3633433ddd669693",
      "tree": "8f189b330f9593746b6e4ab379bbf09b75e30020",
      "parents": [
        "7c7679cd76e76b44c75a3e32a8727148d3ab9ada"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 13 16:42:30 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jul 16 14:20:36 2012 -0700"
      },
      "message": "Quick compiler, fix wide bug\n\nIn Dalvik, 64-bit data items are represented as a pair of 32-bit\nregisters.  The Art compiler maintained this notation, while llvm\nexpects properly typed data.  During the conversion to bitcode, we\nmust drop the high word of pairs, while correctly typing the low.\n\nThis CL fixes several bugs related to this.  \"Placeholder\" llvm\nValues are created only for the low word of pairs, and we now skip\nPhi node generation for high words.  Doing this required a bit\nof tightening up of the size \u0026 type inference code (which previously\nwas able to get away with ignoring high words).\n\nAlso, I\u0027ve moved shift operations into intrinics because Dalvik\nand llvm have different ideas about what a shift means.\n\nBitcode generation is only supported for the Arm target at the\nmoment.  With this CL, all target tests pass and the phone boots.\nSome caveats:\n\n  o Performance data is not yet meaningful, either compile or\n    run times.\n  o When configured for Quick, we run single-threaded.\n  o In a small percentage of methods, we generate invalid llvm\n    bitcode (missing exception edges).  As-checked-in, llvm\n    function generation is turned off to avoid missing edge\n    complaints (to enable testing of the Quick backend).\n\nChange-Id: I66932ffb44d299fcaf0a112e0d1c217c49341ccf\n"
    },
    {
      "commit": "4be777b5efccbffddd6227d30ab1f658403e18cf",
      "tree": "a901c7f58cbe1cb1034a91acfdc78f4fddcaf463",
      "parents": [
        "ca314c6a1be1b4cc11f4d284da90af7dc8a4ce25"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 12 14:38:18 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 12 21:20:33 2012 -0700"
      },
      "message": "Quick compiler: fix for missing defs\n\nWhen the verifier replaces a Dex instruction, it may cause us\nto lose a definition, making the SSA graph invalid.  This CL\ndeals with this situation by introducing dummy definitions.\n\nWith this CL, run-tests 042 and 075 pass.  The only remaining\nrun-test failures are related to missing exception edges in the CFG.\nThe old compiler could infer some of them, while llvm requires all\nto be explicit.\n\nChange-Id: I471fa515d8717aa102713a05b0e4115bf656b78e\n"
    },
    {
      "commit": "d5018897273f3b889f025a79ef28199ad2a640bf",
      "tree": "63477c7788be3ddaeea49a06b97bdc1293f65334",
      "parents": [
        "f1f863695b28f630abb772f50170fefaddc2fb91"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 11 14:23:40 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 11 14:23:40 2012 -0700"
      },
      "message": "Quick compiler - run-test bug fixes\n\nMiscellaneous bug fixes, largely dealing with making llvm happy\nwith consistent types.  This CL causes the quick compiler to\nadditionally pass run-tests 004, 036, 044, 64, 068, 072, 074, 085.\nStill failing: 042, 053, 075.\n\nChange-Id: Ic3c9aa981e641ac68179d42d03b4c9b84cac9b85\n"
    },
    {
      "commit": "f1f863695b28f630abb772f50170fefaddc2fb91",
      "tree": "9a5bdda08897530e998484a2a400ac34ff7962f4",
      "parents": [
        "dcfdd2b03af29dcaf234d062a79acb919f130435"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jul 10 15:18:31 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jul 10 19:19:27 2012 -0700"
      },
      "message": "Quick compiler - fix run-test 019\n\nTwo problems:\n  1.  Was treating an array object store as a regular array store\n  2.  Codegen bug that (somewhat disturbingly) existed in the\n      non-quick code.  I\u0027m a little surprised that it hadn\u0027t\n      shown up before now, but it would tend to be masked if\n      the array base register in question was promoted.\n\nChange-Id: I62bcb866174538ceedcc1309edcf22261237840a\n"
    },
    {
      "commit": "a1da8a553681d1f7aec305610c8848c26373e0f0",
      "tree": "0e4f86f208c67a2a761d052a49a94b3bc9c659fa",
      "parents": [
        "44a25bbc4626119d24d2cb7378212b6fd0093c19"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jul 09 14:00:21 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jul 09 14:00:21 2012 -0700"
      },
      "message": "Quick compiler: complete switch support\n\nWith this CL, all Dex opcodes are handled.  We pass 79 run-tests,\nand fail 12.  Temporarily going single-threaded for the Quick\ncompiler (llvm\u0027s ir-builder dies otherwise - will figure out what I\nneed to do for multi-threaded operation in a later CL).\n\nChange-Id: I389e94d9a831096d4e7493460729933fb45e649e\n"
    },
    {
      "commit": "f58c12c79cf11e6d6e3dd7db8f676d1edaf5d68b",
      "tree": "c18cf8229a9ba7e36b92934a6fb35aaf0e2259b6",
      "parents": [
        "4f4dfc7ce0d309448d6fc47737c1f3c0a9eda7e5"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jul 03 15:06:29 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jul 03 15:27:27 2012 -0700"
      },
      "message": "Quick compiler - packed switch support\n\nAdd support for PACKED_SWITCH.  Uses the stock llvm switch operator\nplus additional metadata for the Quick path that the portable path\nmay freely ignore.\n\nChange-Id: I3f7cbf9d441d4cc53bf188beeb94d4178fef3e07\n"
    },
    {
      "commit": "4f4dfc7ce0d309448d6fc47737c1f3c0a9eda7e5",
      "tree": "c5f92133bd4d3672483b045f7b192599b19f5bf9",
      "parents": [
        "fbfc9a480fb5b31b0ca52449b0ce5a45c8cd377d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jul 02 14:54:44 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jul 02 15:47:26 2012 -0700"
      },
      "message": "Quick compiler - various bug fixes\n\nContinuing clean-up of the MIR-\u003eLLVMIR-\u003eLIR path.  With this CL,\nall of run-test 003 passes except for tests which need switch\nsupport (unimplemented) and one of the Throw tests (I\u0027m apparently not\nfully describing all of the exception-related edges in the CFG).\n\nChange-Id: I2075357bc7c5419c873bb62d44c34fdb73424e29\n"
    },
    {
      "commit": "76592633b491e294d78db2c4dbc44ca679004b71",
      "tree": "e836e4fb045e400b09326bd3228e7e6f8f416a6e",
      "parents": [
        "101305f7ca3da8c665e3c5f7cdf9e1f22f009567"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jun 29 15:18:35 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jun 29 15:18:35 2012 -0700"
      },
      "message": "Quick compiler: conversions, bug fixes\n\nAdded support for the remaining conversions, misc. bugs fixed.  Still\nleft is switch support, rework of type handling and lots of bug\nfixes.\n\nChange-Id: Ib370a4176555d628f222e35776e0b3f0be8de0c4\n"
    },
    {
      "commit": "101305f7ca3da8c665e3c5f7cdf9e1f22f009567",
      "tree": "7a71558261ec9fb6833e7cea4f7a9952b06cbe1f",
      "parents": [
        "026b14660723c2b25a4f3ef6394f43a4fe64ba92"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jun 28 18:00:56 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jun 29 09:50:46 2012 -0700"
      },
      "message": "Continued fleshout out of Quick compiler\n\nConversion support for IGET/IPUT, more array stuff, some conversions\nand miscellaneous bug fixes.  Note that I\u0027m adding what I hope are\nintend to be temporary intrinsics to speed development.\n\nWith this CL, most of run-test 027 passes.\n\nChange-Id: Ib74233fba0aab3194c383be6f7330921c04a3a62\n"
    },
    {
      "commit": "8fa0fda8e1b6aa0a759990b3d32b78bb08065e0f",
      "tree": "4e87b99f5afdc564ee27eb3902e48d52c8795720",
      "parents": [
        "6613de3585d726a246b5ee2597ddaef8b3c3a621"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jun 27 15:44:52 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jun 27 15:44:52 2012 -0700"
      },
      "message": "Quick compiler: support for arrays, misc.\n\nContinuing to flesh out support in the Quick compiler.  Mostly\narray-related.  Also, added runtest 028-array-write to the set of\npassing tests.\n\nChange-Id: I3c8eaf4bb14e9327e4f5fc48de73c85a5d3efb54\n"
    },
    {
      "commit": "32412961b1c912faba30cdecd3560ab05e463807",
      "tree": "8d7656dfd7394865442d0374dc7f3fcd5cd4972f",
      "parents": [
        "4f1181fe061d3529f72e1237e7662bf9bc73c6e2"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jun 26 16:27:56 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jun 26 19:15:57 2012 -0700"
      },
      "message": "Quick compiler exception support\n\nHandle MOVE_RESULT, THROW and THROW_VERIFICATION_ERROR.  Enable\nruntests 007 and 014 to pass.  Minor munging of the tests to make\nthem easier to selectively compile with the Quick compiler.\n\nChange-Id: I756def54d81771b144e8ebc213cd90077e23758b\n"
    },
    {
      "commit": "4f1181fe061d3529f72e1237e7662bf9bc73c6e2",
      "tree": "ea4044920632370d170a8b1c37ec4729ceb859f4",
      "parents": [
        "147440427984816b6ed5235a9b1fb2cbf99496d0"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jun 22 13:52:12 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jun 26 11:27:36 2012 -0700"
      },
      "message": "Quick compiler: support for 006, 012, 013, 017\n\nContinued fleshing out of the Quick compiler.  With this CL,\nwe\u0027re passing run-tests 006, 012, 013 and 017.  Note minor\nchanges to the tests to allow for easy identification of methods\nwe want to run through the Quick path.  Also, set up by default\nnow to dump bitcode file to /sdcard/Bitcode/\n\nChange-Id: I77ec73a87a21064273567802ddb44c4fdf71f9fd\n"
    },
    {
      "commit": "4f2935ef077529cc41aa0b590262fa91acbf6558",
      "tree": "55e846dfa27b5eb92e68ae0b10f6819fb11e1900",
      "parents": [
        "008fa5114f356861f74f086f0b0c50fe42ef2891"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Fri Jun 22 06:25:03 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Fri Jun 22 09:45:27 2012 -0700"
      },
      "message": "Fix missed suspend check.\n\nChange-Id: Id926b6290f2ace12a1e2d36f59303591a896763b\n"
    },
    {
      "commit": "748474146da0c6484fa3dca0a700f612d47550c3",
      "tree": "58837d0fa82d4099eb4b82b2fd3d2bbf4294e4aa",
      "parents": [
        "92e3134cd84c134f167175288671a1e6838c908f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 20 18:10:21 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 21 09:14:27 2012 -0700"
      },
      "message": "Fix a bunch of lint.\n\nThere are still about 1800 lint warnings, so don\u0027t get too excited...\n\nChange-Id: I2394bd6e750b94060231378b3a7a88b87f70c757\n"
    },
    {
      "commit": "ad8f15e0b13383b2eaa2486b230debeae7a55661",
      "tree": "0939aa6dee5f24dc4ae21dd2c06db0265d4682ca",
      "parents": [
        "83c26f9c7ee42b0037d2679f6f37dd28a3f13af7"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jun 18 14:49:45 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jun 20 15:12:44 2012 -0700"
      },
      "message": "Milestone: close Quick side channel communication\n\nThis CL elminates side-channel communication between the Quick\nCompiler\u0027s Dex-\u003eMIR-\u003eLLVM-IR and LLVM-IR-\u003eLIR lowering stages by clearing\nkey data structures between the two stages.\n\nThe purpose if to flush out any hidden information transfer, and thus\nensure that the GreenlandIR representation of the program is sufficient.\n\nNote that as of this change, we\u0027ve lost all register promotion info\nso the Quick compiler will generate non-promoted code.  A near-future\nCL will restore that info from the MethodInfo intrinsic.\n\nChange-Id: I797845f1fc029bc03aac3ec20f8cd81f917817ca\n"
    },
    {
      "commit": "6969d50c820bd63043940b0e0f0ddc6e6ac763b0",
      "tree": "e6e02ddea49c4ad6706931a62172bce9a921d8d0",
      "parents": [
        "e5f01223ae03b89767dc7881d75dca061121ee36"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jun 15 16:40:31 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Jun 16 14:56:03 2012 -0700"
      },
      "message": "Invoke support for Quick Compiler\n\nFleshed out invoke and const-string support.  Fixed a bug in Phi node\ninsertion.\n\nWith this CL, the \"Recursive Fibonacci\" and \"HelloWorld\" milestones are\nmet.\n\nAdded are a set of \"HL\" (for High-Level) invoke intrinsics.  Until we\ncomplete the merging of the Quick \u0026 Iceland runtime models the invoke\ncode sequences are slightly different.  Thus, the Greenland IR needs\nto represent invokes at a somewhat higher level than Iceland.  The\ntest for fast/slow path needs to happen during the lowering of the\nHLInvokeXXX intrinsics in both the Quick and Portable paths.\n\nThis will generally be the case in the short term - push fast/slow\npath determination below the Greenland IR level.  As unification\nproceeds, we\u0027ll pull as much as makes sense into the common front end.\n\nChange-Id: I0a18edf1be18583c0afdc3f7e10a3e4691968e77\n"
    },
    {
      "commit": "15bf9804820b73765899e4b3e0d8a1fa15e0dbd3",
      "tree": "bcc0a0e3c0037e86041d769c1bde4b9cb9330048",
      "parents": [
        "a168c83a1d247094e9efb1244b0f73a5f1e1ed97"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jun 12 17:49:27 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jun 13 10:44:04 2012 -0700"
      },
      "message": "More Quick compiler restructuring\n\nYet another round of compiler restructuring to remove references to\nMIR and BasicBlock structures in the lower levels of code generation.\nEliminating these will make it easer to share code with the\nLLVM-IR -\u003e LIR lowering pass.\n\nThis time I\u0027m focusing on the Invokes and special-cased inlined\nintrinsics.  Note that this CL includes a somewhat subtle difference\nin handling MOVE_RETURNs following an INVOKE.  Previously, we fused\nINVOKEs and MOVE_RETURNs for inlined intrinsics.  To simplify the\nworld, we\u0027re now fusing all INVOKE/MOVE_RETURN pairs (though it shouldn\u0027t\nimpact the codegen non-inlined invokes.\n\nChanges in latest patch set: Two of the old intrinsic generators\ndid not fuse the following MOVE_RESULT, so the results were dropped\non the floor.  Also, allowed match of MOVE_RESULT_OBJECT (which\npreviously had not been matched because no inline intrisic used it\nas a return value).\n\nChange-Id: I93fec0cd557398ad7b04bdcc0393f27d3644913d\n"
    },
    {
      "commit": "b03f487219e446b0480aabd534fac139513502a4",
      "tree": "701f18e7dd88648f9006be87dea072adbfdcc945",
      "parents": [
        "622a6988351d77da0008142f4ce1ea447d838556"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jun 11 15:22:11 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jun 11 15:28:13 2012 -0700"
      },
      "message": "Shadow frame support for MIR-\u003eLLVM-IR conversion\n\nAdded basic shadow stack support.  Minimally tested.\n[Removed some stray debugging LOGs]\n\nChange-Id: Ia27f8383548a5ca8a6fe0aa6543310575c2523ac\n"
    },
    {
      "commit": "2cfc639fc803bf67e3d2a961f2b637220c86d5f7",
      "tree": "dfb184dc35b3a534fcd54a420378f29f30011f3a",
      "parents": [
        "a9719eb4167b544438268d46692389761652fc5d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon May 07 14:51:40 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jun 07 16:29:03 2012 -0700"
      },
      "message": "Foundation for Quick LLVM compiler\n\nReady for review - probably better get this cleaned up and\nchecked in even though much work remains.\n\nBasic conversion from MIR to GreenlandIR and from GreenlandIR\nback to LIR.  Support sufficient to run Fibonacci test.\n\nNote some structural changes in MIR to support this work:\n    o  retaining incoming label for phi nodes\n    o  constant propagation\n    o  include object reference detection in type inference pass\n\nChange-Id: I8ba63c73e76d071aa40cae0f744e598b96f68699\n"
    }
  ]
}
