)]}'
{
  "log": [
    {
      "commit": "616ffafa3130d0ef9cdd18c7adbf4e688026a724",
      "tree": "b6ef3e190072cf7bf680d5263f1d6070167fd42e",
      "parents": [
        "f0c3718cf42e2c45859f136e05bceb224871eae6",
        "da7a69b3fa7bb22d087567364b7eb5a75824efd8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jan 31 22:15:53 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 31 22:15:53 2014 +0000"
      },
      "message": "Merge \"Enable compiler temporaries\""
    },
    {
      "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": "39a548933c7d083647ccb1d508240198ffff5a5c",
      "tree": "fd10a2bdbb31eae70c35f16e24b8da7187157750",
      "parents": [
        "9aeeeac4ba0b136652f213d60a5a1990a333a629",
        "766e9295d2c34cd1846d81610c9045b5d5093ddd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jan 31 19:00:56 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 31 19:00:56 2014 +0000"
      },
      "message": "Merge \"Improve GenConstString, GenS{get,put} for x86\""
    },
    {
      "commit": "2730db03beee4d6687ddfb5000c33c0370fbc6eb",
      "tree": "a85706c800c67deda5c7b612c8010059aa7b365c",
      "parents": [
        "c7f832061fea59fd6abd125f26c8ca1faec695a5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jan 27 11:15:17 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 28 11:22:42 2014 +0000"
      },
      "message": "Add VerfiedMethod to DexCompilationUnit.\n\nAvoid some mutex locking and map lookups.\n\nChange-Id: I8e0486af77e38dcd065569572a6b985eb57f4f63\n"
    },
    {
      "commit": "c7f832061fea59fd6abd125f26c8ca1faec695a5",
      "tree": "183afb5dfc1f4e6fb81f14707caffa558d31dbcc",
      "parents": [
        "7ea5dafc81b2bba7cabad26130bb75dc8f709803"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 24 17:55:18 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 28 11:22:42 2014 +0000"
      },
      "message": "Refactor verification results.\n\nRename VerificationMethodsData to VerificationResults.\nCreate new class VerifiedMethod to hold all the data for\na given method.\n\nChange-Id: Ife1ac67cede20f3a2f9c7f5345f08a851cf1ed20\n"
    },
    {
      "commit": "766e9295d2c34cd1846d81610c9045b5d5093ddd",
      "tree": "e29f55b9856af97589241fe7ffa31f7b2ec00949",
      "parents": [
        "7ea5dafc81b2bba7cabad26130bb75dc8f709803"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Jan 27 07:55:47 2014 -0800"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Jan 27 17:01:20 2014 -0800"
      },
      "message": "Improve GenConstString, GenS{get,put} for x86\n\nRewrite GenConstString for x86 to skip calling ResolveString when the\nstring is already resolved.  Also try to avoid a register copy if the\nMethod* is in a promoted register.\n\nImplement the TODO for GenS{get,put} to use compare to memory for x86 by\nadding a new codegen function to compare directly to memory.  Implement\na default implementation that uses a temporary register for RISC\narchitectures.\n\nChange-Id: Ie163cca3d3d841aa10c50dc6592ec30af7a7cbc9\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "4708dcd68eebf1173aef1097dad8ab13466059aa",
      "tree": "92614e1fe36cccda1d2fd7c662c43482ec8bcc85",
      "parents": [
        "a278ac31a1beeebd093ec64026d27a02fdc28807"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Jan 22 09:05:18 2014 -0800"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Jan 24 11:49:06 2014 -0800"
      },
      "message": "Improve x86 long multiply and shifts\n\nGenerate inline code for long shifts by constants and do long\nmultiplication inline. Convert multiplication by a constant to a\nshift when we can. Fix some x86 assembler problems and add the new\ninstructions that were needed (64 bit shifts).\n\nChange-Id: I6237a31c36159096e399d40d01eb6bfa22ac2772\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "107c31e598b649a8bb8d959d6a0377937e63e624",
      "tree": "cd926ca68823da5081e87700068b7bb3776d97e4",
      "parents": [
        "c0df897d264d16a991bf092f7b9431ce5a4f1f0b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 23 20:55:29 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 23 20:55:29 2014 -0800"
      },
      "message": "64bit friendly printf modifiers in LIR dumping.\n\nAlso correct header file inclusion ordering.\n\nChange-Id: I8fb99e80cf1487e8b2278d4c1d110d14ed18c086\n"
    },
    {
      "commit": "be1ca55db3362f5b100c4c65da5342fd299520bb",
      "tree": "b9df6f5562d884698ed15f21764a704bb51e359e",
      "parents": [
        "9d8918fe97c235fdc6eb2c7f2d50a6673ab50329"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jan 15 11:46:48 2014 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jan 23 15:29:12 2014 -0800"
      },
      "message": "Use direct class pointers at allocation sites in the compiled code.\n\n- Rather than looking up a class from its type ID (and checking if\n  it\u0027s resolved/initialized, resolving/initializing if not), use\n  direct class pointers, if possible (boot-code-to-boot-class pointers\n  and app-code-to-boot-class pointers.)\n- This results in a 1-2% speedup in Ritz MemAllocTest on Nexus 4.\n- Embedding the object size (along with class pointers) caused a 1-2%\n  slowdown in MemAllocTest and isn\u0027t implemented in this change.\n- TODO: do the same for array allocations.\n- TODO: when/if an application gets its own image, implement\n  app-code-to-app-class pointers.\n- Fix a -XX:gc bug.\n  cf. https://android-review.googlesource.com/79460/\n- Add /tmp/android-data/dalvik-cache to the list of locations to\n  remove oat files in clean-oat-host.\n  cf. https://android-review.googlesource.com/79550\n- Add back a dropped UNLIKELY in FindMethodFromCode().\n  cf. https://android-review.googlesource.com/74205\n\nBug: 9986565\nChange-Id: I590b96bd21f7a7472f88e36752e675547559a5b1\n"
    },
    {
      "commit": "5115473c81ec855a5646a5f755afb26aa7f2b1e9",
      "tree": "5c2093baffdac8ecd62d08412202a7319689df89",
      "parents": [
        "a72a4b4d7d1d32913f44f07db7c5744905f81f54"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 02 09:44:23 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 02 16:44:08 2014 +0000"
      },
      "message": "Fix oatdump \"compilercallbacks\" option for runtime.\n\nThe \"compilercallbacks\" runtime option replaced \"compiler\"\nin I708ca13227c809e07917ff3879a89722017e83a9 .\n\nFix a comment in codegen_util.cc .\n\nChange-Id: I2c5ebd56dd96f0ee8e62b602bfe45357565471ff\n"
    },
    {
      "commit": "5816ed48bc339c983b40dc493e96b97821ce7966",
      "tree": "1682c6d13ae274132f4e3630f9b20ab4bdb291a3",
      "parents": [
        "2b5eaa2b49f7489bafdadc4b4463ae27e4261817"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 17:04:20 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 17 18:24:13 2013 +0000"
      },
      "message": "Detect special methods at the end of verification.\n\nThis moves special method handling to method inliner\nand prepares for eventual inlining of these methods.\n\nChange-Id: I51c51b940fb7bc714e33135cd61be69467861352\n"
    },
    {
      "commit": "2b5eaa2b49f7489bafdadc4b4463ae27e4261817",
      "tree": "ada8b60989919068d562e3fcee01aa5b7c5cfc61",
      "parents": [
        "0bf1f266869776c2dd21b3242599d74ac80855f0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 13 13:59:30 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 17 11:03:53 2013 +0000"
      },
      "message": "Move compiler code out of method verifier.\n\nWe want to detect small methods for inlining at the end of\nthe method verification. Instead of adding more compiler\ncode to the runtime, we create a callback from the runtime\ninto the compiler, so that we can keep the code there.\nAdditionally, we move the compiler-related code that was\nalready in the method verifier to the compiler since it\ndoesn\u0027t really belong to the runtime in the first place.\n\nChange-Id: I708ca13227c809e07917ff3879a89722017e83a9\n"
    },
    {
      "commit": "8171fc34bf74ed0df02385787d916bc13eb7f160",
      "tree": "9c2b15d421bbf7483dd042a4b9985517c3cc86ee",
      "parents": [
        "fa365d2fa097810f31d6cb1b1ef415636bc63af8"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 26 17:05:58 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 10 10:02:58 2013 +0000"
      },
      "message": "Don\u0027t prefix GC map by length.\n\nBug: 11767815\nChange-Id: I063917aefdf7674ee1a77736db059c9ee95ea075\n"
    },
    {
      "commit": "06606b9c4a1c00154ed15f719ad8ea994e54ee8e",
      "tree": "599e60c926c200601859e9a618079bb613e10135",
      "parents": [
        "d83d4c86c89357a74e94963994ad0c42ea7299c3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 02 15:31:08 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 05 15:44:46 2013 +0000"
      },
      "message": "Performance improvement for mapping table creation.\n\nAvoid the raw mapping tables altogether.\n\nChange-Id: I6d1c786325d369e899a75f15701edbafdd14363f\n"
    },
    {
      "commit": "1e6cb63d77090ddc6aa19c755d7066f66e9ff87e",
      "tree": "7cffe82e563757521da204c5dfbd3fff41dde7ed",
      "parents": [
        "00ce185371be9930dfd75e5acc2258a1139b558e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 28 16:27:29 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 29 10:14:39 2013 +0000"
      },
      "message": "Delta-encoding of mapping tables.\n\nBoth PC offsets and dalvik offsets are delta-encoded. Since\nPC offsets are increasing, the deltas are then compressed as\nunsigned LEB128. Dalvik offsets are not monotonic, so their\ndeltas are compressed as signed LEB128.\n\nThis reduces the size of the mapping tables by about 30%\non average, 25% from the PC offset and 5% from the dalvik\noffset delta encoding.\n\nBug: 9437697\nChange-Id: I600ab9c22dec178088d4947a811cca3bc8bd4cf4\n"
    },
    {
      "commit": "5c96e6b4dc354a7439b211b93462fbe8edea5e57",
      "tree": "b89930ae568d5219e4cb1823586a6e536bebdd9b",
      "parents": [
        "ca368cb576cf6a436a32c357fca51fbb3082d7a9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 14 15:34:17 2013 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 18 12:11:02 2013 +0000"
      },
      "message": "Rewrite intrinsics detection.\n\nIntrinsic methods should be treated as a special case of\ninline methods. They should be detected early and used to\nguide other optimizations. This CL rewrites the intrinsics\ndetection so that it can be moved to any compilation phase.\n\nChange-Id: I4424a6a869bd98b9c478953c9e3bcaf1c6de2b33\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": "3c2a6e2468e3e519ade6c3cfcaad7cd34243cdf1",
      "tree": "82dee0d10d01e3a11bae891b45214e035ec3285f",
      "parents": [
        "75fabbe71ec82836787b34e7250d992da64c6be0",
        "31aa97cfec5ee76b2f2496464e1b6f9e11d21a29"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 25 23:08:24 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Oct 25 23:08:25 2013 +0000"
      },
      "message": "Merge \"Revert \"Null check elimination improvement\"\" into dalvik-dev"
    },
    {
      "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": "dbf39a79d17f226936430b025ce1f0beeac2f441",
      "tree": "05cb2906110f1095ae07261bed2235a793bf0f09",
      "parents": [
        "bbf88131e138634c5e24c4cf5c5ca753fa742850",
        "a61f49539a59b610e557b5513695295639496750"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 25 14:43:12 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Oct 25 14:43:13 2013 +0000"
      },
      "message": "Merge \"Add timing logger to Quick compiler\" into dalvik-dev"
    },
    {
      "commit": "a61f49539a59b610e557b5513695295639496750",
      "tree": "f2a52e9e5b3db371cf0407614b51bc27397c39d3",
      "parents": [
        "1984152ac92aad244ae15184d12f9ceade686b7b"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Aug 23 14:27:06 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 25 07:42:26 2013 -0700"
      },
      "message": "Add timing logger to Quick compiler\n\nCurrent Quick compiler breakdown for compiling the boot class path:\n\nMIR2LIR:                    29.674%\nMIROpt:SSATransform:        17.656%\nMIROpt:BBOpt:               11.508%\nBuildMIRGraph:               7.815%\nAssemble:                    6.898%\nMIROpt:ConstantProp:         5.151%\nCleanup:                     4.916%\nMIROpt:NullCheckElimination: 4.085%\nRegisterAllocation:          3.972%\nGcMap:                       2.359%\nLaunchpads:                  2.147%\nPcMappingTable:              2.145%\nMIROpt:CodeLayout:           0.697%\nLiteralData:                 0.654%\nSpecialMIR2LIR:              0.323%\n\nChange-Id: I9f77e825faf79e6f6b214bb42edcc4b36f55d291\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": "b48819db07f9a0992a72173380c24249d7fc648a",
      "tree": "2b02366b8e105c025b64d9b27c76dc6c05b88f53",
      "parents": [
        "65d1b22d0b02fb0111f69013163c8170e68392f1"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Sep 14 16:15:25 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 02 00:49:08 2013 -0700"
      },
      "message": "Compile-time tuning: assembly phase\n\nNot as much compile-time gain from reworking the assembly phase as I\u0027d\nhoped, but still worthwhile.  Should see ~2% improvement thanks to\nthe assembly rework.  On the other hand, expect some huge gains for some\napplication thanks to better detection of large machine-generated init\nmethods.  Thinkfree shows a 25% improvement.\n\nThe major assembly change was to establish thread the LIR nodes that\nrequire fixup into a fixup chain.  Only those are processed during the\nfinal assembly pass(es).  This doesn\u0027t help for methods which only\nrequire a single pass to assemble, but does speed up the larger methods\nwhich required multiple assembly passes.\n\nAlso replaced the block_map_ basic block lookup table (which contained\nspace for a BasicBlock* for each dex instruction unit) with a block id\nmap - cutting its space requirements by half in a 32-bit pointer\nenvironment.\n\nChanges:\n  o Reduce size of LIR struct by 12.5% (one of the big memory users)\n  o Repurpose the use/def portion of the LIR after optimization complete.\n  o Encode instruction bits to LIR\n  o Thread LIR nodes requiring pc fixup\n  o Change follow-on assembly passes to only consider fixup LIRs\n  o Switch on pc-rel fixup kind\n  o Fast-path for small methods - single pass assembly\n  o Avoid using cb[n]z for null checks (almost always exceed displacement)\n  o Improve detection of large initialization methods.\n  o Rework def/use flag setup.\n  o Remove a sequential search from FindBlock using lookup table of 16-bit\n    block ids rather than full block pointers.\n  o Eliminate pcRelFixup and use fixup kind instead.\n  o Add check for 16-bit overflow on dex offset.\n\nChange-Id: I4c6615f83fed46f84629ad6cfe4237205a9562b4\n"
    },
    {
      "commit": "d91d6d6a80748f277fd938a412211e5af28913b1",
      "tree": "5c45f4ae53aab3f530284a97dc328b4e38ce7c94",
      "parents": [
        "9c11b56296b8cffc94b0b854ce6cff7e014b8d57"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 25 20:26:14 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 26 21:08:25 2013 -0700"
      },
      "message": "Introduce Signature type to avoid string comparisons.\n\nMethod resolution currently creates strings to then compare with strings formed\nfrom methods in other dex files. The temporary strings are purely created for\nthe sake of comparisons. This change creates a new Signature type that\nrepresents a method signature but not as a string. This type supports\ncomparisons and so can be used when searching for methods in resolution.\n\nWith this change malloc is no longer the hottest method during dex2oat (now its\nmemset) and allocations during verification have been reduced. The verifier is\ncommonly what is populating the dex cache for methods and fields not declared\nin the dex file itself.\n\nChange-Id: I5ef0542823fbcae868aaa4a2457e8da7df0e9dae\n"
    },
    {
      "commit": "8b2c0b9abc3f520495f4387ea040132ba85cae69",
      "tree": "13ea7e5c4e3d1804ec8d420d36f7ea5ab18f6ac0",
      "parents": [
        "5712d5d04640925970db9c98938ffaf806b3962c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 19 02:56:49 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 19 15:17:12 2013 -0700"
      },
      "message": "Use class def index from java.lang.Class.\n\nBug: 10244719\nDepends on:\nhttps://googleplex-android-review.git.corp.google.com/362363\nThis removes the computation of the dex file index, when necessary this is\ncomputed by searching the dex file. Its only necessary in\ndalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the\nlatter not showing up significantly in profiling with this change.\n\nChange-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c\n"
    },
    {
      "commit": "bd663de599b16229085759366c56e2ed5a1dc7ec",
      "tree": "cc596a319afb07ac7048a7a0f3d4fb0d8863b3b2",
      "parents": [
        "fffd663bd276ee5fd8fda6641689546042429981"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Sep 10 15:41:31 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 11 12:33:47 2013 -0700"
      },
      "message": "Compile-time tuning: register/bb utilities\n\nThis CL yeilds about a 4% improvement in the compilation phase\nof dex2oat (single-threaded; multi-threaded compilation is\nmore difficult to accurately measure).  The register utilities\ncould stand to be completely rewritten, but this gets most of the\neasy benefit.\n\nNext up: the assembly phase.\n\nChange-Id: Ife5a474e9b1a6d9e501e888dda6749d34eb77e96\n"
    },
    {
      "commit": "252254b130067cd7a5071865e793966871ae0246",
      "tree": "0c74a9aa87ace39abbaefb323935e3d0c543e382",
      "parents": [
        "28c2300d9a85f4e7288fb5d94280332f923b4df3"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Sep 08 16:20:53 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Sep 09 15:42:01 2013 -0700"
      },
      "message": "More Quick compile-time tuning: labels \u0026 branches\n\nThis CL represents a roughly 3.5% performance improvement for the\ncompile phase of dex2oat.  Move of the gain comes from avoiding\nthe generation of dex boundary LIR labels unless a debug listing\nis requested.  The other significant change is moving from a basic block\nending branch model of \"always generate a fall-through branch, and then\ndelete it if we can\" to a \"only generate a fall-through branch if we need\nit\" model.\n\nThe data motivating these changes follow.  Note that two area of\npotentially attractive gain remain: restructing the assembler model and\nreworking the register handling utilities.  These will be addressed\nin subsequent CLs.\n\n--- data follows\n\nThe Quick compiler\u0027s assembler has shown up on profile reports a bit\nmore than seems reasonable.  We\u0027ve tried a few quick fixes to apparently\nhot portions of the code, but without much gain.  So, I\u0027ve been looking at\nthe assembly process at a somewhat higher level.  There look to be several\npotentially good opportunities.\n\nFirst, an analysis of the makeup of the LIR graph showed a surprisingly\nhigh proportion of LIR pseudo ops.  Using the boot classpath as a basis,\nwe get:\n\n   32.8% of all LIR nodes are pseudo ops.\n   10.4% are LIR instructions which require pc-relative fixups.\n   11.8% are LIR instructions that have been nop\u0027d by the various\n         optimization passes.\n\nLooking only at the LIR pseudo ops, we get:\n kPseudoDalvikByteCodeBoundary 43.46%\n       kPseudoNormalBlockLabel 21.14%\n            kPseudoSafepointPC 20.20%\n            kPseudoThrowTarget  6.94%\n                 kPseudoTarget  3.03%\n          kPseudoSuspendTarget  1.95%\n             kPseudoMethodExit  1.26%\n            kPseudoMethodEntry  1.26%\n             kPseudoExportedPC  0.37%\n              kPseudoCaseLabel  0.30%\n                kPseudoBarrier  0.07%\n         kPseudoIntrinsicRetry  0.02%\nTotal LIR count: 10167292\n\nThe standout here is the Dalvik opcode boundary marker.  This is just a\nlabel inserted at the beginning of the codegen for each Dalvik bytecode.\nIf we\u0027re also doing a verbose listing, this is also where we hang the\npretty-print disassembly string.  However, this label was also\nbeing used as a convenient way to find the target of switch case\nstatements (and, I think at one point was used in the Mir-\u003eGBC conversion\nprocess).\n\nThis CL moves the use of kPseudoDalvikByteCodeBoundary labels to only\nverbose listing runs, and replaces the codegen uses of the label with\nthe kPseudoNormalBlockLabel attached to the basic block that contains the\nswitch case target.  Great savings here - 14.3% reduction in the number of\nLIR nodes needed.  After this CL, our LIR pseudo proportions drop to 21.6%\nof all LIR.  That\u0027s still a lot, but much better.  Possible further\nimprovements via combining normal labels with kPseudoSafepointPC labels\nwhere appropriate, and also perhaps reduce memory usage by using a\nshort-hand form for labels rather than a full LIR node.  Also, many\nof the basic block labels are no longer branch targets by the time\nwe get to assembly - cheaper to delete, or just ingore?\n\nHere\u0027s the \"after\" LIR pseudo op breakdown:\n\n       kPseudoNormalBlockLabel 37.39%\n            kPseudoSafepointPC 35.72%\n            kPseudoThrowTarget 12.28%\n                 kPseudoTarget 5.36%\n          kPseudoSuspendTarget 3.45%\n            kPseudoMethodEntry 2.24%\n             kPseudoMethodExit 2.22%\n             kPseudoExportedPC 0.65%\n              kPseudoCaseLabel 0.53%\n                kPseudoBarrier 0.12%\n         kPseudoIntrinsicRetry 0.04%\nTotal LIR count: 5748232\n\nNot done in this CL, but it will be worth experimenting with actually\ndeleting LIR nodes from the graph when they are optimized away, rather\nthan just setting the NOP bit.  Keeping them around is invaluable\nduring debugging - but when not debugging it may pay off if the cost of\nnode removal is less than the cost of traversing through dead nodes\nin subsequent passes.\n\nNext up (and partially in this CL - but mostly to be done in follow-on\nCLs) is the overall assembly process.  Inherited from the trace JIT,\nthe Quick compiler has a fairly simple-minded approach to instruction\nassembly.  First, a pass is made over the LIR list to assign offsets\nto each instruction.  Then, the assembly pass is made - which generates\nthe actual machine instruction bit patterns and pushes the instruction\ndata into the code_buffer.  However, the code generator takes the \"always\noptimistic\" approach to instruction selection and emits the shortest\ninstruction.  If, during assembly, we find that a branch or load doesn\u0027t\nreach, that short-form instruction is replaces with a longer sequence.\n\nOf course, this invalidates the previously-computed offset calculations.\nAssembly thus is an iterative process: compute offsets and then assemble\nuntil we survive an assembly pass without invalidation.  This seems\nlike a likely candidate for improvement.  First, I analyzed the\nnumber of retries required, and the reason for invalidation over the\nboot classpath load.\n\nThe results: more than half of methods don\u0027t require a retry, and\nvery few require more than 1 extra pass:\n\n5 or more: 6 of 96334\n4 or more: 22 of 96334\n3 or more: 140 of 96334\n2 or more: 1794 of 96334  -  2%\n1 or more: 40911 of 96334 - 40%\n0 retries: 55423 of 96334 - 58%\n\nThe interesting group here is the one that requires 1 retry.  Looking\nat the reason, we see three typical reasons:\n\n  1.  A cbnz/cbz doesn\u0027t reach (only 7 bits of offset)\n  2.  A 16-bit Thumb1 unconditional branch doesn\u0027t reach.\n  3.  An unconditional branch which branches to the next instruction\n      is encountered, and deleted.\n\nThe first 2 cases are the cost of the optimistic strategy - nothing\nmuch to change there.  However, the interesting case is #3 - dead\nbranch elimination.  A further analysis of the single retry group showed\nthat 42% of the methods (16305) that required a single retry did so\n*only* because of dead branch elimination.  The big question here is\nwhy so many dead branches survive to the assembly stage.  We have\na dead branch elimination pass which is supposed to catch these - perhaps\nit\u0027s not working correctly, should be moved later in the optimization\nprocess, or perhaps run multiple times.\n\nOther things to consider:\n\n  o Combine the offset generation pass with the assembly pass.  Skip\n    pc-relative fixup assembly (other than assigning offset), but push\n    LIR* for them into work list.  Following the main pass, zip through\n    the work list and assemble the pc-relative instructions (now that we\n    know the offsets).  This would significantly cut back on traversal\n    costs.\n\n  o Store the assembled bits into both the code buffer and the LIR.\n    In the event we have to retry, only the pc-relative instructions\n    would need to be assembled, and we\u0027d finish with a pass over the\n    LIR just to dumb the bits into the code buffer.\n\nChange-Id: I50029d216fa14f273f02b6f1c8b6a0dde5a7d6a6\n"
    },
    {
      "commit": "28c2300d9a85f4e7288fb5d94280332f923b4df3",
      "tree": "f4b643efa6385bcce32250e471b6a13c09338eb2",
      "parents": [
        "9f799db0e4124d3158cde6ead854289fba10f3aa"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Sep 07 09:12:27 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Sep 08 13:37:56 2013 -0700"
      },
      "message": "More compile-time tuning\n\nSmall, but measurable, improvement.\n\nChange-Id: Ie3c7180f9f9cbfb1729588e7a4b2cf6c6d291c95\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": "9b297bfc588c7d38efd12a6f38cd2710fc513ee3",
      "tree": "681f512183be6d47ec76b18c02457896b4cd15cc",
      "parents": [
        "65ec92cf13c9d11c83711443a02e4249163d47f1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 06 11:11:25 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 06 11:11:44 2013 -0700"
      },
      "message": "Refactor CompilerDriver::Compute..FieldInfo\n\nDon\u0027t use non-const reference arguments.\nMove ins before outs.\n\nChange-Id: I7b251156388d8f07513b3da62ebfd29e5fd9ff76\n"
    },
    {
      "commit": "193bad9b9cfd10642043fa2ebbfc68bd5f9ede4b",
      "tree": "0fc125adc74316df802b76889a780decd5b8236b",
      "parents": [
        "179486aee731f734207873244542993ed4bcff21"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 29 18:46:00 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 03 17:44:20 2013 -0700"
      },
      "message": "Multi threaded hashed deduplication during compilation.\n\nMoved deduplication to be in the compiler driver instead of oat\nwriter. This enables deduplication to be performed on multiple\nthreads. Also added a hash function to avoid excessive comparison\nof byte arrays.\n\nImprovements:\nBefore (alloats host):\nreal\t1m6.967s\nuser\t4m22.940s\nsys\t1m22.610s\n\nThinkfree.apk (target mako):\n0m23.74s real     0m50.95s user     0m9.50s system\n0m24.62s real     0m50.61s user     0m10.07s system\n0m24.22s real     0m51.44s user     0m10.09s system\n0m23.70s real     0m51.05s user     0m9.97s system\n0m23.50s real     0m50.74s user     0m10.63s system\n\nAfter (alloats host):\nreal\t1m5.705s\nuser\t4m44.030s\nsys\t1m29.990s\n\nThinkfree.apk (target mako):\n0m23.32s real     0m51.38s user     0m10.00s system\n0m23.49s real     0m51.20s user     0m9.80s system\n0m23.18s real     0m50.80s user     0m9.77s system\n0m23.52s real     0m51.22s user     0m10.02s system\n0m23.50s real     0m51.55s user     0m9.46s system\n\nBug: 10552630\n\nChange-Id: Ia6d06a747b86b0bfc4473b3cd68f8ce1a1c7eb22\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": "96faf5b363d922ae91cf25404dee0e87c740c7c5",
      "tree": "d397fd63cde72e897490e21b3af3c355db7a36d4",
      "parents": [
        "49bded21270e8087e11d933d7b19aee22c0d8649"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 09 22:05:32 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Aug 12 06:16:03 2013 +0000"
      },
      "message": "Uleb128 compression of vmap and mapping table.\n\nBug 9437697.\n\nChange-Id: I30bcb97d12cd8b46d3b2cdcbdd358f08fbb9947a\n(cherry picked from commit 1809a72a66d245ae598582d658b93a24ac3bf01e)"
    },
    {
      "commit": "7934ac288acfb2552bb0b06ec1f61e5820d924a4",
      "tree": "43f3acd8af7fd34d4ae7b64f6e06bb8429d74bb8",
      "parents": [
        "fb331d7ca004f39608fcfdae49d38df90c702ea9"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 10:54:15 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 11:55:10 2013 -0700"
      },
      "message": "Fix cpplint whitespace/comments issues\n\nChange-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496\n"
    },
    {
      "commit": "479f83c196d5a95e36196eac548dc6019e70a5be",
      "tree": "60028690c0fefe64f919565b8cf846f2535e991a",
      "parents": [
        "6eb5288264d68276085855bd041fa74fbca6827c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 19 10:58:21 2013 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jul 19 11:03:25 2013 -0700"
      },
      "message": "Dex compiler: re-enable method pattern matching\n\nThe dex compiler\u0027s mechanism to detect simple methods and emit\nstreamlined code was disabled during the last big restructuring\n(there was a question of how to make it useful for Portable as\nwell as Quick).  This CL does not address the Portable question,\nbut turns the optimization back on for Quick.\n\nSee b/9428200\n\nChange-Id: I9f25b41219d7a243ec64efb18278e5a874766f4d\n"
    },
    {
      "commit": "2d88862f0752a7a0e65145b088f49dabd49d4284",
      "tree": "3fac6bbd9a0ff3836f361e46579151c8a93420b6",
      "parents": [
        "751d4ed43e8118f145edf18db4d987daf7dabbae"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:00 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:52 2013 -0700"
      },
      "message": "Fixing cpplint readability/casting issues\n\nChange-Id: I6821da0e23737995a9b884a04e9b63fac640cd05\n"
    },
    {
      "commit": "02c8cc6d1312a2b55533f02f6369dc7c94672f90",
      "tree": "4e4a268e8cb82dcd95f8e29a8169b0396e20b0cc",
      "parents": [
        "6f485c62b9cfce3ab71020c646ab9f48d9d29d6d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 15:54:44 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 16:02:33 2013 -0700"
      },
      "message": "Fixing cpplint whitespace/blank_line, whitespace/end_of_line, whitespace/labels, whitespace/semicolon issues\n\nChange-Id: Ide4f8ea608338b3fed528de7582cfeb2011997b6\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": "0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c",
      "tree": "525a0f99f9381156367c988133b5d51d5dfef6f7",
      "parents": [
        "f69863b3039fc621ff4250e262d2a024d5e79ec8"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 23:40:20 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 00:12:43 2013 -0700"
      },
      "message": "Fix cpplint whitespace/blank_line issues\n\nChange-Id: Ice937e95e23dd622c17054551d4ae4cebd0ef8a2\n"
    },
    {
      "commit": "f69863b3039fc621ff4250e262d2a024d5e79ec8",
      "tree": "b6d40c4019de2155f8753f83b4750bd3a3514d7a",
      "parents": [
        "93ba893c20532990a430741e0a97212900094e8c"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 21:53:13 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 23:23:12 2013 -0700"
      },
      "message": "Fix cpplint whitespace/newline issues\n\nChange-Id: Ie2049d9f667339e41f36c4f5d09f0d10d8d2c762\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": "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": "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": "6282dc12440a2072dc06a616160027ff21bd895e",
      "tree": "1e318fea04d927f55ec50267e36d539984016ed1",
      "parents": [
        "5d10a87ea630b22180d3731018a70b77270c726e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Apr 18 15:54:02 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Apr 18 15:54:02 2013 -0700"
      },
      "message": "MIR tidying.\n\nFix memory leak in the MIR graph m_units_.\nDon\u0027t shadow the arena_ field in Backend.\n\nChange-Id: I0ffaebd088f1383205bde9fb34c5d33156bb7260\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": "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"
    },
    {
      "commit": "4f6ad8ab428038129b2d0d6c40b7fd625cca15e1",
      "tree": "d1025ed9203d0cdf7aa959d9cecd8dc1f0c0bfeb",
      "parents": [
        "aabe8adacc7bf3a8ab6f6f3dd37fc839b6fd762f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:27:28 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:29:59 2013 -0700"
      },
      "message": "Various performance improvements.\n\nPerformance had regressed due to verify object and method invocation changes.\nAvoid trampolines for static calls in same class.\nVarious inlining changes.\nMake verify object something that\u0027s only compiled-in in debug builds.\n\nChange-Id: Ia261a52232c3b10667c668f8adfadc0da3048bc5\n"
    },
    {
      "commit": "265091e581c9f643b37e7966890911f09e223269",
      "tree": "ae493ce6c3537aebc3a85f59a73500fa819a7baf",
      "parents": [
        "4c1c283a7410784e9cab309f868248690b788a9c"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jan 30 14:08:26 2013 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Mar 06 14:08:46 2013 -0800"
      },
      "message": "Remove ExtractCodeAndPrelink and switch Portable to MCLinker\n\nChange-Id: Ia2459c7da6b79e0a1c0f1148c6e28ad9cbbe27a2\n"
    },
    {
      "commit": "89756f21c107d96e6d1bbc75811bd33078c8ceee",
      "tree": "952c5df22b0eaf6c4a01b78259db04f3797c8c17",
      "parents": [
        "219b5a847ef74be5d3de4c16a29ec6413cc42af1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 04 16:40:02 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 04 16:44:57 2013 -0800"
      },
      "message": "Rename OatCompilationUnit to Dex.. move to compiler.\n\nSome other clean-up to make fields const and private.\n\nChange-Id: Icad66e2969385ab1f4125162bcbf8d5fa92d3ed5\n"
    },
    {
      "commit": "1212a022fa5f8ef9585d765b1809521812af882c",
      "tree": "67ebdc1d3274c78978b3d06630874d7641d858d1",
      "parents": [
        "8e6960569e9de6350d7da89aa02efe0e4b924d6f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 04 10:48:41 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 04 11:54:04 2013 -0800"
      },
      "message": "Move the Compiler to CompilerDriver.\n\nChange-Id: I0bb4d3c2b79b45fd8ef180688c767712b0c55978\n"
    },
    {
      "commit": "395116cae130c983498c0a2f42b89e42f75bb9d0",
      "tree": "75c356436f7a60077d0dc7e7dd32dc11b7b08dde",
      "parents": [
        "b7f49eb431ae936f71a4542fecd46784dba07874"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Feb 27 14:30:25 2013 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Feb 27 16:00:05 2013 -0800"
      },
      "message": "Compiler: rearranging the deck chairs.\n\nFirst of several steps to adopt the new source directory layout.  No\nlogic changes - just moved files around.\n\nChange-Id: I087631f8aa23973e18da4dc7706249c490bee061\n"
    },
    {
      "commit": "4ef3e45d7c6ec3c482a1a48f4df470811aa3cf0a",
      "tree": "5d91ff23708048a2b453a5917dab82be1b545f91",
      "parents": [
        "f84f99fe3a944310fdfb6f17836079ac5c48c799"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Dec 14 13:35:28 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Feb 06 12:16:33 2013 -0800"
      },
      "message": "Compiler constant handling rework\n\nIn preparation for de-optimization, reworked the constant\nhandling mechanism.  Also took advantage of knowledge of\nconstant operands (particularly for long operations).\n\nSignificant performance improvements for Mandelbrot\n(~60 seconds to ~34 seconds).  Minor improvements in other\nbenchmarks.\n\nThe new constant handling breaks two of the existing\noptimization passes: \"Skip Large Method\" and \"Load/Store\nElimization.\"\n\nI don\u0027t intend to update the large method optimization\nbecause it will be superceeded by the upcoming interpreter/\nfingerprinting mechanism.  Leaving the code in place for\nnow in order to compare compile-time improvements with\nfingerprinting/interpret.  All related code will be deleted\nwhen that is complete.\n\nThe load/store elimination pass needs some rework to handle\nuses of multiple-register loads and stores.  It will be\nupdated \u0026 restored in a future CL.\n\nChange-Id: Ia979abaf51b8ae81bbb0428031cbcea854625fac\n"
    },
    {
      "commit": "641ce0371c2f0dc95d26be02d8366124c8b66653",
      "tree": "5c132a223a739e852849d6a0d1b9ffef4305dfc3",
      "parents": [
        "6cbd384cb98c6619c73fe4f76ef40a34ac6f355d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jan 31 15:21:37 2013 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Feb 01 12:22:53 2013 -0800"
      },
      "message": "Rename compiler_llvm CompilationUnit to LlvmCompilationUnit\n\nAlso fixed stray ART_TEST_CFLAGS to LOCAL_CFLAGS\nAlso fixed relative includes\n\nTried to change CompilationUnit to reference LlvmCompilationUnit, but\nthat causes issues because of the split libart-compiler\nlibart-compiler-llvm.\n\nChange-Id: I7a490f339add6355a20c1cedae858ccf6967a6aa\n"
    },
    {
      "commit": "dc5daa0db249f8cfb8290bc8f7068cb2a0383393",
      "tree": "d8cafc924aa1c0d6a91ded76685828565400464a",
      "parents": [
        "162fd33474038f0de0388338ca007ecf400bb3df"
      ],
      "author": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Wed Jan 09 21:31:37 2013 +0800"
      },
      "committer": {
        "name": "TDYa127",
        "email": "tdy@google.com",
        "time": "Wed Jan 09 22:19:23 2013 +0800"
      },
      "message": "Fix portable path.\n\nChange-Id: Ie5d64bd851a6ad55d4eef051704916c8318fa2f9\n"
    },
    {
      "commit": "e6285f99a53a344efd6f8409ff5f43a3e80190db",
      "tree": "145aac9e61838efb617b9c53d8707ca43dd541ed",
      "parents": [
        "a169e1d8d968800380245cda450505d969ebff76"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Dec 06 15:57:46 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Dec 11 09:54:04 2012 -0800"
      },
      "message": "Compiler: Take advantage of constant propagation\n\nThe common frontend tracks constants via a constant propagation pass.\nWhen converting from MIR to GBC (for Portable) or LIR (for Quick),\nrecognize constant arguments and select more efficient codegen forms.\n\nNote: we still have to flush constants to their associated vregs to\nsupport deoptimization.  There\u0027s quite a bit of possible code size\ngain if we were to eliminate unnecessary stores or enhance the vmap\ntable to explicitly represent the ranges over which Dalvik vregs\nare constant.\n\nAlso some minor code refactoring related to array operations.  There\nare sufficient architectural differences to make it worthwhile to\nhave target-dependent aget/aput generators.  On Arm, this is mostly\nbeneficial to floating point array loads and stores.\n\nThis CL yields a ~0.8% decrease in code size over the framework,\nand a nice pop to a few of the standard point benchmarks\n(linpack: ~10%, cm: ~11%, scimark: ~13% - no significant change to\nthe others)\n\nChange-Id: I2337e1aa0622b34a34c3775f8b7dbf5e6969da3e\n"
    },
    {
      "commit": "a169e1d8d968800380245cda450505d969ebff76",
      "tree": "92b2cc6da112b027432ae4d5bc985118baebe376",
      "parents": [
        "ce4cc0d1818e872c1c7f3c3519a82259afd5c288"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Dec 05 14:26:44 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Dec 05 14:26:44 2012 -0800"
      },
      "message": "Quick compiler: refactored listing \u0026 const fix\n\nThis CL started off as a simple fix to Issue 4959751, which\nidentified a case in which compiler debugging listings could read\nuninitialized data.  The fix ended up pulling a few strings - we\nhad two distinct dex printing routines (one was focused on SSA names\nand was used by the .dot graph dumper), while the other was used with\nverbose codegen listing.\n\nEnded up combining the two routines and significantly enhancing the\nvalue of the verbose debug output.  We now always use ssa register\nnames, and also show the constant values of ssa names which are known\nto be const following constant propagation.\n\nAlong the way, deleted a bit of useless code that remapped all\nregisters in a phi set to have the same name, and also got rid of\nsome duplicate listing helper LIR pseudo ops.\n\nSomee examples of the new listing:\n\n-------- dalvik offset: 0x2 @ const/4 v0_1#0x1, #1\n\nthe format of the vreg is:\n   v\u003corignal Dalvik vnum\u003e_\u003cssa instance\u003e[#hex value of immediate]\n\nIn this example, we don\u0027t add any new info (the listing already had #1),\nbut we also show this form in uses:\n\ninvoke-virtual v0_2, v1_3#0x40\n\nAlso improved is the listing output of potentially throwing instructions\nwhich are broken into two parts: the check portion and the work portion.\nBoth halves now show the full disassembly.  For example:\n\n-------- dalvik offset: 0x13 @ Check1: invoke-virtual v0_2, v1_3#0x40\n....code here\n....code here\n-------- dalvik offset: 0x13 @ Check2: invoke-virtual v0_2, v1_3#0x40\n\nDalvik instructions which are optimized away prior to code generation\nare displayed in sqare brackets.  For example:\n\n-------- dalvik offset: 0x16 @ [move-result-object v0_3]--optimized away\n\nFinally, Phi nodes show which incoming block an operand came through.\nIn the following example:\n\n-------- dalvik offset: 0x5 @ Phi v1_2 \u003d (v1_1#0x0:4, v1_2:12, v1_3#0x1:14)\n\nSreg v1_2 is a merge of a constant 0x0 from incoming block 4, a non-const\nvalue from block 12 and a const 0x1 from block 14.\n\nChange-Id: Ib6c19c19ab8a48509d43d8b0e5ed3e8e7ce9fc82\n"
    },
    {
      "commit": "a3a82b219531effb53aef13f48e50db9bf0f9fb5",
      "tree": "841056cc525f4b8547f914ab39bc17e2cea47c39",
      "parents": [
        "9c85bc0b6577ee00e4e2d3ee9a7d0fd72d7a4966"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 27 16:09:55 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 27 16:12:37 2012 -0800"
      },
      "message": "Quick compiler: minor cleanup\n\nRemove dead software floating point support.\nMove a common function from target specific to target independent.\n\nChange-Id: Iaf793857f7e0faae02c672b9f1d45a0658143a51\n"
    },
    {
      "commit": "02031b185b4653e6c72e21f7a51238b903f6d638",
      "tree": "0fae8dbc0a15d4ed379768bdc7adf1910b1d46af",
      "parents": [
        "90ad9639047a8acbd563247f8869f825cf80e576"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Nov 23 09:41:35 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Nov 25 13:22:45 2012 -0800"
      },
      "message": "Quick compiler: Single .so for all targets\n\nWith this CL, all targets can be built into a single .so (but\nwe\u0027re not yet doing so - the compiler driver needs to be reworked).\n\nA new Codgen class is introduced (see compiler/codegen/codegen.h),\nalong with target-specific sub-classes ArmCodegen, MipsCodegens and\nX86Codegen (see compiler/codegen/*/codegen_[Arm|Mips|X86].h).\n\nAdditional minor code, comment and format refactoring.  Some source\nfiles combined, temporary header files deleted and a few file\nrenames to better identify their function.\n\nNext up is combining the Quick and Portable .so files.\n\nNote: building all targets into libdvm-compiler.so increases its\nsize by 140K bytes.  I\u0027m inclined to not bother introducing conditional\ncompilation to limit code to the specific target - the added build and\ntesting complexity doesn\u0027t doesn\u0027t seem worth such a modest size savings.\n\nChange-Id: Id9c5b4502ad6b77cdb31f71d3126f51a4f2e9dfe\n"
    },
    {
      "commit": "28c9a83398a6e48eefb9b79a390920629bbb8519",
      "tree": "9d12fec60f41a3f185243d0195f9ed31a945005e",
      "parents": [
        "dd20a8d64a8cd120361b44078074bd242913da0a"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 21 15:39:13 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 21 15:39:13 2012 -0800"
      },
      "message": "Quick Compiler: pointer/boolean cleanup\n\nMore minor code cleanup - follow the Art convention of not treating\npointers as booleans in \"for\" loop tests.\n\nChange-Id: I2fcd06efe6a51d1195c0900f7fa110fc01110001\n"
    },
    {
      "commit": "fa57c47f1b72916371a9c2d5c1389219bce655b4",
      "tree": "3ca3bc1cb3c91545f6c3514af296213348c09a99",
      "parents": [
        "aad94383fc41e8f8770f0b2144f766a2ffa772e7"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 21 12:06:18 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 21 12:35:29 2012 -0800"
      },
      "message": "Quick Compiler: Shoot the Camel\n\nAnother step towards moving the Quick Compiler from the old\nDalvik coding style to Art\u0027s coding style.  In this CL, Camel-case\nlocals, struct variables and arguments are converted to lower-case\nwith underscore names.  Most of the name changes were formulistic,\nbut I also took this opportunity to change the old \"printMe\" into\nthe more traditional \"verbose\", and shorten cUnit to cu.\n\nNo logic changes.\n\nChange-Id: I64b69b28a8357d5cc0abc1dc975954c91abd9b45\n"
    },
    {
      "commit": "aad94383fc41e8f8770f0b2144f766a2ffa772e7",
      "tree": "a887ff6101126e3d3d3045d09ea502561524ce1a",
      "parents": [
        "0c1e45fc411b05e026abf6a2e343927bbd1aa4ca"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 21 07:40:50 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 21 07:40:50 2012 -0800"
      },
      "message": "Quick Compiler: static, extern and inline cleanup\n\nMore declarations cleanup.  Some dead code removal. No logic changes.\n\nChange-Id: Ife3d0426082f4eeae7c0010ceb92d7dbdc823c71\n"
    },
    {
      "commit": "52a77fc135f0e0df57ee24641c3f5ae415ff7bd6",
      "tree": "ddbe40349dce79bb89a6f2d68ddb4caf903b15e9",
      "parents": [
        "024c463536180ce1e464bbb9853ab427dfac35f5"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 20 19:50:46 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 20 21:38:31 2012 -0800"
      },
      "message": "Quick Compiler function renaming\n\nMove the Quick compiler\u0027s function naming to Art coding conventions. Will\nbe done is pieces: names first, then arguments and locals.  Also removed\nsome dead code and marked statics for the top level source files\n\nNo logic changes aside from eliminating a few useless exported \"oat\"\nroutines.\n\nChange-Id: Iadaddc560942a0fc1199ba5b1c261cd6ac5cfd9a\n"
    },
    {
      "commit": "1bc37c60da71c923ea9a2e99d31ba1b3d76d79a8",
      "tree": "6af0698d02487d1561832841ca01dea6a4d5a963",
      "parents": [
        "78f1dc74c54c63bce57d434e756199205c3abf7f"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 20 13:35:41 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 20 17:50:36 2012 -0800"
      },
      "message": "Continuing Quick compiler refactoring\n\nWith this CL, we no longer include any .cc files - all source\nfiles compile stand-alone.   We still build a separate .so for\neach target, but all code in the target-independent \"codegen\"\ndirectory is now truly independent and doesn\u0027t rely on any\ntarget-specific macros to compile.\n\nHeader file inclusion is still a bit of a mess, but that will be\naddressed in a subsequent CL.\n\nNext up: create a codegen class to hold code generator routines\noverrideable by target.\n\nChange-Id: I3a93118d11afeab11f310950a6a73381a99e26e1\n"
    },
    {
      "commit": "cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8",
      "tree": "438c25a083cd1487b40ca8a05cef8d96339b83a9",
      "parents": [
        "6aa852b927a12ba16f5c05ee7d044ac1372feb7f"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Nov 17 14:11:25 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Nov 19 15:50:13 2012 -0800"
      },
      "message": "C++\u0027ification of Quick compiler\u0027s casts\n\n o Eliminate old useless LIR casts.\n o Replace remaining C-style casts with new C++ versions.\n o Unified instruction encoding enum\n o Expand usage of the auto-generated ostream helpers for enum LOG messages.\n o Replaced all usages of intptr_t with uintptr_t.\n o Fixed bug in removeRedundantBranches, and moved to common code\n\nChange-Id: I53211c0de1be913f958c8fde915296ac08345b7e\n"
    },
    {
      "commit": "eaf09bc65f9a10d12befcdb239156938c9bceef2",
      "tree": "e3b85c241b24aa058a413363e4f9c94f4c76d4d6",
      "parents": [
        "efc6369224b036a1fb77849f7ae65b3492c832c0"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Nov 15 14:51:41 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Nov 16 16:48:09 2012 -0800"
      },
      "message": "Quick compiler: more refactoring\n\nFocus on header file cleanup here.  Note: target_list.h\nis transitional, and upcoming CLs will do additional header\nfile reorganization.\n\nChange-Id: If86e1a8c1c43305762fe37b157a9d3c17d911ea7\n"
    },
    {
      "commit": "efc6369224b036a1fb77849f7ae65b3492c832c0",
      "tree": "e61d88a5b3b787d782b2fa02b90947ba9a115458",
      "parents": [
        "a3c6849b160cd5d2b2ca6e6fa9d9df834def85ee"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 14 16:31:52 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Nov 15 09:47:38 2012 -0800"
      },
      "message": "Quick compiler source reorganizatio - part 1\n\nA step towards cleanup of the quick compiler source.  In this\nCL we rename all files to Art standards, combine some of the\nold target-specific files that may have made sense in the\nJIT, but no longer do.  Also removed some codegen/\u003ctarget\u003e/\nsubdirectories, combined and deleted some existing files.\n\nStill quite a bit of work to do in cleaning up header files,\ngetting some better consistency in what codegen functions\ngo where.  That will happen in later CLs.\n\nNo logic changes in this CL - just renaming and moving stuff around\n\nChange-Id: Ic172cd3b76d4c670f8e4d5fdd4a3e967db3f4c1e\n"
    },
    {
      "commit": "f0504cdc5b6400edd4b39eea64ac280465042d5b",
      "tree": "09aea792db81ef23e4b5264acc76b677382e3e84",
      "parents": [
        "ec13743da80a80c1817cf6660c28917fc28846bc"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 13 16:31:10 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 14 12:23:53 2012 -0800"
      },
      "message": "Quick backend: rename target-specific #defines\n\nAnother step towards a single compiler.  The #include build mechanism\nrelies on macros with the same name to take on different values for\nour various targets.  This CL prepends a target-specific string\n(and exposes some needed by common code as functions rather than #defines).\n\nMacros and #defines still available for use from target-dependent code,\nbut functions added for target independent use.  For example,\nrRET0 for Arm becomes rARM_RET0 in target-dependent code, and\ntargetRegister(kRet0) in target-independent code.\n\nNo logic changes, other than adding functions to return previously #defined\nvalues.  As of this CL, the primary target includes, xxxLIR.h, have no\nmacro collisions.\n\nChange-Id: I5e11df844815b7d129b525a209dd7c46bd9a4a09\n"
    },
    {
      "commit": "ec13743da80a80c1817cf6660c28917fc28846bc",
      "tree": "f551225a325636dc56e0a3c01c55a59316e9e829",
      "parents": [
        "f42b6f912dd390808bbd5c025d773ebb02a06ed7"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 13 12:13:16 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Nov 13 13:13:40 2012 -0800"
      },
      "message": "Revert \"Revert \"Refactor codegen resource masks\"\"\n\nThis reverts commit 4b39c9f1b77ff32cf5760e6bf77c189678e2c9a6.\n\nThe problem with the original commit was failure to widen a\ncouple of local variables to hold the newly widenened to 64-bits\nEncodingMap flag field - thus we lost some high-order resource\nattributes and broke instruction scheduling for x86.\n\nChange-Id: I04d7caf79e2cc802c39369ca04666629218ccaea\n"
    },
    {
      "commit": "4b39c9f1b77ff32cf5760e6bf77c189678e2c9a6",
      "tree": "95cf9de07529d58d847898087f8c5fd6c1e1a4fd",
      "parents": [
        "07131ca93c301e5cbd6a8702d6af777e1662fe65"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Nov 08 13:32:05 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 08 13:32:05 2012 -0800"
      },
      "message": "Revert \"Refactor codegen resource masks\"\n\nThis reverts commit 07131ca93c301e5cbd6a8702d6af777e1662fe65\n\nThere\u0027s a problem with the x86 build - reverting until I track it down.\n\nChange-Id: I938ed30617ee943c9dba2d52d034e6d198b32e4b\n"
    },
    {
      "commit": "07131ca93c301e5cbd6a8702d6af777e1662fe65",
      "tree": "ae60544b0065f8fc935bc254cc5893c3a3f89350",
      "parents": [
        "ebf6aa8185d59eeaa428b51a7e32ccc2b9ab1daf"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 07 16:13:14 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Nov 08 05:44:02 2012 -0800"
      },
      "message": "Refactor codegen resource masks\n\nAnother step towards a single compiler: unified the bulk of the\ntarget-specific instruction resource use/def maps.  This will\nallow more shared code usage, and eliminates target-specific\ndefines used by otherwise common code.\n\nChange-Id: I4132cb4d31647517a654ffdf6c87843b84af132b\n"
    },
    {
      "commit": "b046e16d8b8da318d6055f9308950131f1255e08",
      "tree": "d4472622967d02fcc87bb422bddea9a9140c75f9",
      "parents": [
        "6e30145f1ed992be8d4e5a9973410c19f3de59f9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 30 15:48:42 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Nov 01 12:05:35 2012 -0700"
      },
      "message": "Remove all TARGET_[ARM|X86|MIPS] #ifdefs\n\nTwo steps forward, one step back towards elimination of the\n\"#include\" build model for target-specific compilers.  This CL\ndoes some restructuring to eliminate all of the TARGET_xxx #ifdefs\nand convert them to run-time tests.\n\nConsiderable work is still required to fully eliminate the multiple\nbuilds.  In particular, much of the \"common\" codegen code relies on\nmacros defined by the target-specific [Arm|X86|Mips]Lir.h include file.\n\nNext step is more restructuring to better isolate target-independent\ncode generation code.\n\nChange-Id: If6efbde65c48031a48423344d8dc3e2ff2c4ad9d\n"
    },
    {
      "commit": "137e88f798857321f4007631fdf052d2830ec2c4",
      "tree": "7ed6a166328adbc5109fbb5b07a1cdc4e3bbb739",
      "parents": [
        "7469ebf3888b8037421cb6834f37f946646265ec"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 08 17:46:47 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 09 14:16:35 2012 -0700"
      },
      "message": "Fast path interface dispatch.\n\nInterface dispatch when the method we\u0027re dispatching against is known\ncurrently goes slow path. This change makes the load of the interface\nmethod either a load of a constant or from the resolve methods table. It\nalso makes the null check on the \"this\" pointer inline.\n\nChange-Id: I69571a062d3d693bee2dec6e46a456e0f74411cd\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": "000d724207b4ff32fcbc9744da76d2f594675eed",
      "tree": "ec54095a35ef54c1a0393c932e0e104a2fc2b1f1",
      "parents": [
        "a5e1e3d153990845d80cb8d013157210f11a473c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 21 16:07:36 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 21 16:37:50 2012 -0700"
      },
      "message": "Allow more vregs in native GC map.\n\nAllow upto 65536 (2**13 * 8) vregs in a reference bitmap as this occurs\nin CTS tests. Achieve this by squeezing the numbers of bits used to say\nhow large in bytes the native PC offset is down to 3 from 8.\n\nChange-Id: Ib0f1df7a492b771e01b0bd79d6648d46b60b5f78\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": "0c7abda482f53db3d153c073d1c7a145f84e0626",
      "tree": "837b89c75f0047cbcd16c9121739069a36b4f22a",
      "parents": [
        "ba0b9c55adce3f533845ab1b25c552589e5b4118"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 19 13:33:42 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 20 15:26:35 2012 -0700"
      },
      "message": "NativePcOffsetToReferenceMap\n\nRather than translate a native PC to a Dex PC and then to the reference\nbitmap, just go straight from the native PC to the reference bitmap.\nEncode the native PC offsets using a hash rather than linearly\nsearching.\n\nChange-Id: Iee1073d93c941c0a31f639e5f23cea9e9f747bee\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": "08f753d5859936f8d3524e9e4faa6cee353873ea",
      "tree": "5679a9ad8be6827e2a10de282cd28e3d000917de",
      "parents": [
        "b0b2be7688109cff548d2ddc8f02eecbad49ecd2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 24 14:35:25 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 28 11:34:56 2012 -0700"
      },
      "message": "Avoid compile time rewriting of dex code by verifier.\n\nCompile time rewriting of dex code leads to dead code that is causing\nissues with the LLVM compiler. Make instantiation and incompatible class\nchange errors be detected in slow path field and invoke logic so its\nsafe for the compile time verification just to softly fail the effected\nclasses.\n\nThis change places incompatible class change logic into the class\nlinkers ResolveMethod and consequently changes a number of APIs.\n\nChange-Id: Ifb25f09accea348d15180f6ff041e38dfe0d536e\n"
    },
    {
      "commit": "00f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abac",
      "tree": "6a2172ece15c4699e6c2a67ce76f019db0a9a21d",
      "parents": [
        "634ea28f78c4a138e6a1de54eae8696095422415"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 19 15:28:27 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 14 10:45:52 2012 -0700"
      },
      "message": "Global lock levels.\n\nIntroduce the notion of the mutators/GC being a shared-exclusive (aka\nreader-writer) lock. Introduce globally ordered locks, analysable by\nannotalysis, statically at compile time. Add locking attributes to\nmethods.\n\nMore subtly, remove the heap_lock_ and split between various locks that\nare held for smaller periods (where work doesn\u0027t get blocked). Remove\nbuggy Dalvik style thread transitions. Make GC use CMS in all cases when\nconcurrent is enabled. Fix bug where suspend counts rather than debug\nsuspend counts were sent to JDWP. Move the PathClassLoader to\nWellKnownClasses. In debugger refactor calls to send request and\npossibly suspend. Break apart different VmWait thread states. Move\nidentity hash code to a shared method.\n\nChange-Id: Icdbfc3ce3fcccd14341860ac7305d8e97b51f5c6\n"
    },
    {
      "commit": "854029c13351fd3a8f7794eb6c2c73af0fde8ac8",
      "tree": "3f2968be0023fa1d22303e74a989a1961ea402c9",
      "parents": [
        "22fc28eb95191a1957025b219452c09c7fbb6bd0"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Mon Jul 23 17:31:30 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Tue Jul 24 16:33:07 2012 -0700"
      },
      "message": "Fixes to x86 register promotion and load hoisting.\n\nFixed a check to ensure that the mvzxb source register can be byte\naccessed, not the destination reg.\n\nDisabled branch fusion for x86 since code generation for that is\nunimplemented.\n\nChanged regId mask for x86 to allow proper masking of double registers.\n\nAlso added more output to the disassembler.\n\nChange-Id: Idc0a949755ec9ae7b6d5dba38caa5ac01fcc5713\n"
    },
    {
      "commit": "e296248a124ed8287b38a9225463696c18d84cd6",
      "tree": "ffa3305cfb89082b39982d5d617f408c13cf3e66",
      "parents": [
        "837210218c82a4f8e69304e58f8d018dbeb313b8"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Jun 28 11:29:57 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Jun 28 11:39:22 2012 -0700"
      },
      "message": "Fixes for x86 compiler optimizations.\n\nx86 works with all but a few optimizations turned on, and the broken\nones are still disabled for now. This change includes:\n\n- Flagging of opcodes to incidate register use and def. Also, made\n  flagging more complete for loads/stores and set/use ccodes.\n\n- Fixes to load store elimination, though it still doesn\u0027t work yet.\n\n- Prevent double values that are loaded or stored from losing their\n  FP_DOUBLE flag. Later optimizations use this sizing.\n\n- Renumbering of DOUBLE registers so they alias with FP regs when\n  masked.\n\n- Add support in the disassembler to recognize shifts.\n\nChange-Id: I758cdce418409fdd84206ce295005d5c9ab635f8\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": "a114add0300b95eeaae7465493f39144e07324e8",
      "tree": "19b119195c00bd4688bb085eadbe142851f75e0e",
      "parents": [
        "1ecce9487a1b3aac6b656f5704cf86a961ab0481"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Thu May 03 15:00:40 2012 -0700"
      },
      "committer": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Thu May 03 18:57:47 2012 -0700"
      },
      "message": "[Compiler] use Art indentation standard\n\nFirst of several CLs to bring code closer to alignment with Art and LLVM\nstandards.  Move to 2-space indenting.  Sticking with 80-col line\nlength (which LLVM apparently also wants).  LLVM also prefers camel\ncase names, so keeping Dalvik convention there as well (for now).\n\nChange-Id: I351ab234e640678d97747377cccdd6df0a770f4a\n"
    },
    {
      "commit": "a0e180632411f7fe0edf454e571c42209ee7b540",
      "tree": "97dc85e76c5449ec1a901226c44e0f68fec89870",
      "parents": [
        "e5eb1914de86129d78e965fb9f2e1bfb2aa68640"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 13 15:59:59 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 14 11:44:21 2012 -0700"
      },
      "message": "Add a SafeMap equivalent to std::map but without the error-prone operator[].\n\nChange-Id: Iae5ba2091c55a34dbd1005cf3d25fce2a8d5c1f9\n"
    },
    {
      "commit": "7caad77632ae121c9f64c488e3f8f710e2c4813d",
      "tree": "6b12ff6e0c27529f5434c5655b3306a1f79bd379",
      "parents": [
        "4855cd516d97c9728fa58312acdf6c4b8b81397a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Mar 30 01:07:54 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Apr 04 09:56:48 2012 -0700"
      },
      "message": "Implement various missing parts of the X86 compiler\n\nChange-Id: I76f08580600befe268328f8cf7102c6146460c5e\n"
    },
    {
      "commit": "b25c3f6a86dc634ce44fb2849385b49465caa84d",
      "tree": "f359c72d821d913f78b977d8dde0fc7023afb511",
      "parents": [
        "fc9e6fabed89d948fa8c0e9d673e430076712c60"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 26 16:35:06 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 26 17:11:59 2012 -0700"
      },
      "message": "Fix cpplint\u0027s whitespace complaints.\n\nChange-Id: I11fd2db2badf7bd98e7866ca2155d8ef1e112408\n"
    },
    {
      "commit": "fc9e6fabed89d948fa8c0e9d673e430076712c60",
      "tree": "12e01ab3a937729d9482ab7fded1f1e0ab73dbd7",
      "parents": [
        "67d920071fe4a0aa8b8bc339e93b18276238c320"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Mar 23 15:14:29 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Mar 26 16:06:01 2012 -0700"
      },
      "message": "Compiler intrinsics\n\nAdd intrinsic support.  Some of these appear to be of\nlimited value, so we may end up removing a few.  In general,\nthe instrinsics provide small, but measurable, gains.\n\nOnly Arm is currently supported, but most of these should\nwork for our other targets as well.\n\nThis is an interim solution.  My plan is to the intrinsic\nrecognition action up into the basic block building phase once\nwe start doing inlining.\n\nChange-Id: Ia2913f2cdecaa4e80469caf69dbf8e2f61d4506a\n"
    },
    {
      "commit": "b41b33b5e5f08083e35f84818b4f44d26feb4a8b",
      "tree": "a888c3c40bd6070acc459700ed5c79055c6984f4",
      "parents": [
        "49ac9bfa63aea6d331e4c9aa5011953777bf98ad"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Mar 20 14:22:54 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Mar 20 14:24:39 2012 -0700"
      },
      "message": "Add 3rd argument register to X86.\n\nImplement more instructions.\n\nChange-Id: I3af7bbaf18eedc6537f1cfc2d57c4f6106fb5164\n"
    },
    {
      "commit": "bdf6c3d6728f563a143862f1909cb0e6717a8b23",
      "tree": "b01ccf0fef8880e4e273d858134090d919ee2fb9",
      "parents": [
        "0637e27af8e54f39634024dc77e8b094f21782f9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 20 13:43:53 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 20 13:43:53 2012 -0700"
      },
      "message": "Trivial cleanup of typos and fixed-length buffers.\n\nChange-Id: I4ea3bb51320160c5ebda8b2a8ba3ca81452915b5\n"
    },
    {
      "commit": "f582258f0e296223a091fd64231a203ad71e9649",
      "tree": "23049122f075220421803a1745cf634337360a40",
      "parents": [
        "a7c12688da57ea052e127776ad3043ca5079488d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Mar 19 22:34:31 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Mar 19 22:59:13 2012 -0700"
      },
      "message": "oat file patching\n\nChange-Id: Idbbdf19f3a77498d79d043fd33ca12ce39cafbb7\n"
    },
    {
      "commit": "b3ab25b58945f1bd22da1be2eb49dc3eb121011e",
      "tree": "e17de76e6be5e2b1bbeea8c66cecc782bc7fb417",
      "parents": [
        "19daac61b9e73c0c805538e77f6e75ef273caa0f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 19 01:12:01 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 19 08:39:59 2012 -0700"
      },
      "message": "Enable compiler_test on host.\n\nChange-Id: I67a745ba78567af6c967cc44cd9c9640ef5ba398\n"
    },
    {
      "commit": "9c044ce5f76e9bfa17c4c1979e9f8c99ae100695",
      "tree": "6eefdf59583cd75f1e77814b85bbf1222addd395",
      "parents": [
        "3fa13791c51985d9956d01bc465de6d36c3390d3"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Mar 18 13:24:07 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Mar 18 18:17:16 2012 -0700"
      },
      "message": "Support for promoting Method* and compiler temps\n\nThis CL completes the support for allowing compiler-generated\ndata to be treated as a Dalvik register and become subject to\nthe normal register promotion and live temp tracking machinery.\n\nAlso:\n   o Removes some vestigal and useless Method* loads from\n     range argument setup.\n   o Changes the Method* pseudo vReg number from -1 to -2 to\n     avoid a conflict with the 0xffff marker in the register map.\n   o Removes some experimental code for CSE at the basic block\n     level.\n\nChange-Id: I112a8bbe20f95a8d789f63908c84e5fa167c74ac\n"
    },
    {
      "commit": "3fa13791c51985d9956d01bc465de6d36c3390d3",
      "tree": "b7c5e7a8e3462edd64e141e9de9f3e170333748d",
      "parents": [
        "10fa929276fc069f882783174fda7af8194d41cf"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Mar 18 15:53:45 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Mar 18 15:55:17 2012 -0700"
      },
      "message": "Patch support for the boot image.\n\nRequires oat and image writer support.\n\nChange-Id: Ic87dd481a4f86d15faa1e830ea1dd0b3d664c220\n"
    },
    {
      "commit": "239c4e72b5a69754e1d6879be5ba1f85150655c1",
      "tree": "45404157d7a684a739d218dc5a9ee3c0a6cdab19",
      "parents": [
        "8ed14528fb70a9ba7cc5e471317d08dc629cbc23"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Mar 16 08:42:29 2012 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Mar 17 16:52:32 2012 -0700"
      },
      "message": "Loop detection, improved reg allocation\n\nDetect loops and loop nesting depth, and use the latter to\nweight register uses (which are then used to determine which\nregisters to promote).\n\nAlso:\n\n   o Fixed typo that prevented squashing of useless fp reg copies\n\n   o Rescheduled array access checks to hide latency of limit load.\n\n   o Add basic-block optimization pass to remove duplicate range\n     checks.\n\n   o Fixed bug that prevented recognition of redundant null\n     checks following iput-wide and aput-wide.\n\nChange-Id: Icfbae39e89b1d14b8703ad6bbb0b29c0635fed1e\n"
    }
  ],
  "next": "b5d09b2f87202bc132ac3991d4b6d71f4f6d9264"
}
