)]}'
{
  "log": [
    {
      "commit": "5de3494e4297c0d480409da3fecee39173f1d4e1",
      "tree": "269cd3447925d0b474d47fb056da4730f288ee12",
      "parents": [
        "6edfde4ae89f3a16d22ca82c928a5dd420e9fce9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Mar 01 14:51:57 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Mar 01 16:43:54 2012 -0800"
      },
      "message": "Another step towards a Mips target\n\nUpdating the MIPS target to use the now common codegen routines.\nStill much to do, but the general structure is sufficient to allow\nwork to begin on the other target.\n\nChange-Id: I0d288fdfb59c8e76fad73185fdd56b345e87b604\n"
    },
    {
      "commit": "31a4a6f5717f645da6b97ccc1e420ae1e1c71ce0",
      "tree": "de07c7175bcda6c2e3f11329d72d142319354f3f",
      "parents": [
        "32c9a2decebe7b736e1f05b53b5822affea5e81d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Feb 28 15:36:15 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Feb 29 18:52:47 2012 -0800"
      },
      "message": "More target-independence\n\nContinuing to move target-specific code from the Arm\ncode generator into the independent realm.  This will be\ndone in multiple small steps.\n\nIn this CL, the focus is on unifying the LIR data structure and\nvarious enums that don\u0027t really need to be target specific. Also\ncreates two new shared source files: GenCommon.cc (to hold\ntop-level code generation functions) and GenInvoke.cc (which\nis likely to be shared only by the Arm and Mips targets).\n\nAlso added is a makefile hack to build for Mips (which we\u0027ll\neventually remove when the compiler support multiple targets\nvia the command line) and various minor cleanups.\n\nOverall, this CL moves more than 3,000 lines of code from\ntarget dependent to target independent.\n\nChange-Id: I431ca4ae728100ed7d0e9d83a966a3f789f731b1\n"
    },
    {
      "commit": "4dd96f56909ec35c83a3d468b0e47769988c1a1d",
      "tree": "99fde7aab07e550864860825b7732a37fce81d81",
      "parents": [
        "45619fcc01fb6db1ac9481a91608eb46f90829e4"
      ],
      "author": {
        "name": "Logan Chien",
        "email": "loganchien@google.com",
        "time": "Wed Feb 29 01:26:58 2012 +0800"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Wed Feb 29 11:53:18 2012 -0800"
      },
      "message": "Extract method-related information from CompilationUnit.\n\nExtract method-related information, such as class_loader,\nclass_linker, dex_file, dex_cache, code_item, method_idx,\nand access_flags from art::CompilationUnit, so that we\ncan use them in 2 different code generators.\n\nChange-Id: I20631cc73b6f01e9646a983156f3fcb066d732db\n"
    },
    {
      "commit": "a15e67d5ee5aa9615596cee2be42c2b2caf128c6",
      "tree": "cd126ce1e809688011385d521abf19c9c302d1b1",
      "parents": [
        "9b5ee8837b4864b6ac114e9fead17bdeb04c6d55"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 28 13:51:55 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 28 15:21:27 2012 -0800"
      },
      "message": "Remove pad word from arrays\n\nThis change removes the 4 byte pad from all arrays except longs and\ndoubles. It saves 76kb from the boot image, and will also reduce the\nsize of arrays in the heap (and thereby reduce garbage collection).\n\nChange-Id: I3ff277d5bf14c57c0f7552215818e588ec6cc275\n"
    },
    {
      "commit": "1984651929744dd603fd082e23eacd877b9bc177",
      "tree": "ffa10973a88f0f2743f3fbfaf5e7e4235d5f262d",
      "parents": [
        "f3c01c530ab3a645bd5a980522df4d396dcbf228"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 24 11:42:47 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 27 16:08:56 2012 -0800"
      },
      "message": "Invoke static/direct dispatch change.\n\nThere was a subtle race in static/direct dispatch via the code and methods\ntable. This patch removes the table in preparation of architectures like\nx86 which will more aggressively sink loads.\n\nRemoves unused fields, code.. Brings back resolved methods table\nshort-cut and associated fast paths to use this (such as in Proxy). Adds\na resolution method that is used as the trampoline for static and direct\nmethods.\n\nAdd source file and line number to Throwable::Dump.\n\nMethodHelper knowledge of runtime methods.\n\nChange-Id: Ieae1b74c24072e6327a5bb2cad466f04e3c46c4d\n"
    },
    {
      "commit": "f3c01c530ab3a645bd5a980522df4d396dcbf228",
      "tree": "272d4c2d401b06697c4eb050aa54eedc44aebd8d",
      "parents": [
        "ed0b0570b0c026d1fab923947a39a4faa774cd3c",
        "de6e4cf1b63acd7032a52826d9df21ff649d7128"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 27 15:30:26 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 27 15:30:26 2012 -0800"
      },
      "message": "Merge \"Add dex2oat -g to control whether the compiled code has debugger support.\" into dalvik-dev"
    },
    {
      "commit": "de6e4cf1b63acd7032a52826d9df21ff649d7128",
      "tree": "00a44b884b33591e3a33512123484145bfee6ff0",
      "parents": [
        "408e41920549371079eecd6a6ba2b7ce0fa7e328"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 27 14:46:06 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 27 14:46:06 2012 -0800"
      },
      "message": "Add dex2oat -g to control whether the compiled code has debugger support.\n\nChange-Id: I69c83f707d874fee0464929769b1f1f28e9d97ee\n"
    },
    {
      "commit": "513c64a22fc80764d6dbb9af1aba02547e1ba1ae",
      "tree": "0c7d8db6f68962e311f533dca984dfe4118046d0",
      "parents": [
        "d1f1bf03e30320e5730790678f470ac8a610b6b6"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Feb 26 15:16:23 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 27 14:18:10 2012 -0800"
      },
      "message": "Fix load/storeBaseDispWide bug with large offests.\n\nIncludes new JIT regression test.\n\nChange-Id: I39ef4fc40e7408036a47966a6186a80ca5d7d83e\n"
    },
    {
      "commit": "e3acd07f28d5625062b599c2817cb5f7a53f54a9",
      "tree": "d38696b0235dab5d8ef791cdb9fb311a6705e03b",
      "parents": [
        "55b796c6f1fdc36494463a3deeb1e248800695e9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Feb 25 17:03:10 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Feb 26 20:44:46 2012 -0800"
      },
      "message": "Multi-target support\n\nThis CL represents a step towards splitting out the target dependent\nand target independent portions of the compiler, and also adds in the\nbeginning of a MIPS compiler based on the MIPS AOSP Jit submission.\n\nMore polish is clearly needed, but the split is here probably pretty\nclose.  The MIPS code will not compile at this point (and there is no\nmakefile target at present), but it\u0027s pretty close.\n\nThere should be no changes in functionality of the Arm compiler in this\nCL - just moved stuff around.\n\nChange-Id: Ia66b2847e22644a1ec63e66bf5f2fee722f963d4\n"
    },
    {
      "commit": "80c4d575cb217f30460e8df210185f6282ec2727",
      "tree": "55afb84cb8e69bc7fed063c95f40e59bf064818a",
      "parents": [
        "6b00e189defc8a6b1acbd736c65d46bbfaaa2cd6"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Feb 24 13:35:44 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Feb 24 13:35:44 2012 -0800"
      },
      "message": "[Compiler] Exit-path bug fix\n\nSurprised that we haven\u0027t run into this before.  The exit code for\na method involves stripping the frame.  For frame sizes \u003c 1024 this\ncan be accomplished with an add sp,#imm.  For larger frames we need\nto materialize the frame size in a temp register and then do a\nregister to register add.\n\nThe exit path code was failing to ensure that r0/r1 were not used\nas temps in the large frame case - otherwise the return value could\nbe clobbered.\n\nChange-Id: If2618e9522fb10597f0f8c8e8afffd20d73b5d37\n"
    },
    {
      "commit": "8cd6ddaeb78cc904e13bac88753654a04b2e15b8",
      "tree": "005ebbe14563bb3ec5bfc9837bf3fd4284427cec",
      "parents": [
        "a656a0f6fbcf2ba3f15cae54a773b9c636dd32c1"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Feb 22 10:15:34 2012 -0800"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Feb 23 15:55:20 2012 -0800"
      },
      "message": "Numerous fixes to compiler and verifier for cts vm-tests.\n\nClassNotFoundExceptions in ResolveType are converted to\nNoClassDefFoundErrors.\n\nCompiler checks for puts into final fields.\n\nMethod resolution searches direct methods if an appropriate virtual\nmethod can\u0027t be found.\n\nInvocations of \u003cclinit\u003e are rejected by the verifier.\n\nInvoke-super and invoke-virtual can\u0027t be used on private methods.\n\nUsing invoke-interface on non-interface methods and not using\ninvoke-interface on interface methods leads do an error.\n\nChange-Id: Ia589f1ffccf91b62812ee34c8c5fae1aaf3798c6\n"
    },
    {
      "commit": "c8b306f5221658c7e4b5516be8917dc8c9288e7e",
      "tree": "d8d3499030152361129f002e99d2b4a10d36660d",
      "parents": [
        "6c6f12d0ed64e0f4bcbb7139eca8fe564302f385"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 17 21:34:44 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 17 23:52:39 2012 -0800"
      },
      "message": "Run time illegal access checks on static and direct methods\n\nFixes test 075.\n\nChange-Id: I28b20451dcae8000dc0e2cb9068dfa5166659d43\n"
    },
    {
      "commit": "996cc586ce76235ee3efa1eff86de51dabcc5d53",
      "tree": "b47d503da60ac10e52e9c09a6cb762aa6f959203",
      "parents": [
        "16f93671923979733cb46fc6f053c8f65754d5eb"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 14 22:23:29 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Feb 14 22:37:35 2012 -0800"
      },
      "message": "Add compiler stats, fix super call slow path\n\nAdd statistics of when the compiler framework has allowed AOT\ncompilation to be optimistic.\nFix bug that was forcing many calls to be unnecessarily slow path.\n\nChange-Id: I8f0f6ab4738b11161855cf0dc424babed774c998\n"
    },
    {
      "commit": "f3773f0913f8b76eee2088bfd999aaca6a50e750",
      "tree": "d9c2f8ce0736a6260d96586cbb3fcdb75430d4b2",
      "parents": [
        "a32a6fd4a781262dff4fec102da053d16b7ef6c0"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 13 16:45:29 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 13 16:56:22 2012 -0800"
      },
      "message": "Move finalizer registration into managed code\n\nAlso move Object.getClass into managed code.\n\nChange-Id: If32674ac496116aaa82c461d8e6196e27fa7b591\n"
    },
    {
      "commit": "a32a6fd4a781262dff4fec102da053d16b7ef6c0",
      "tree": "5c2a35aec522902cfdf508a74898ee091c91f7ab",
      "parents": [
        "d08547a802e6dbb71fde3ed3dac9aa0b03a5b17b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 06 20:18:44 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 13 15:41:26 2012 -0800"
      },
      "message": "Runtime access checks on virtual method calls\n\nAt verification time we may not know that an illegal access or method\nnot found exception should be raised and so we defer the decision to\nruntime. When the decision is deferred we perform an appropriate slow\npath method invocation that can check for access violations.\n\nThis change also attempts to reduce code duplication, improve the\ndiagnostic information in exceptions, clean up field slow paths slightly\nand to move the slow path calls lower in the Thread class so that they\ndon\u0027t effect the offsets of data items when calls are added or removed.\n\nChange-Id: I8376b83dcd7e302cbbddf44c1a55a25687b9dcdb\n"
    },
    {
      "commit": "07ce1d7fcc65001bd9fad31bd171c9c198a57bdf",
      "tree": "c618267d1ce834add1ab5a634d28602005d57b64",
      "parents": [
        "44b412bb795fa6999129b2bc16f5eec1ea97e8f8"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Feb 10 17:22:02 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Feb 10 17:22:02 2012 -0800"
      },
      "message": "Dataflow fix\n\nThe live-in computation failed to account for Dalvik opcodes with\nvariable number of arguments.  This in turn led to missing Phi\nnodes and the type inference pass missing uses of Dalvik variables\nas float - knowledge of which is required by the register promotion\nmechanism.\n\nChange-Id: I4a2d60b77ad5274b09c4ed7546c207a3a54b3ad9\n"
    },
    {
      "commit": "44b412bb795fa6999129b2bc16f5eec1ea97e8f8",
      "tree": "bf2a45463f46c506130f319b1a176b49db4d5252",
      "parents": [
        "959f8ed11ef9493a89b90a1f9a82a811dbc7ae0e"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Feb 04 08:50:53 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Feb 07 18:19:52 2012 -0800"
      },
      "message": "Codegen support for debugger\n\nAdd the ability to generate code with support for debugging.\nThis involves generating a callout to an equivalent of the\nold \"updateDebugger()\" before each Dalvik opcode, method\nentry and method exit.\n\nThe added code is fairly compact - 8 bytes per Dalvik opcode,\nplus 4 additional bytes per safe point.\n\nI dislike the idea of always making this call, so I\u0027m reusing\nthe dedicated register rSUSPEND to hold the address of the callout.\nrSUSPEND is normally used to reduce the frequency of full suspend\nchecks, but when debugging this isn\u0027t necessary - allowing\nus to resuse this register to hold the address of the callout.\nIf it is non-null we make the callout, otherwise we continue.  I refresh\nthis register from a slot in the Thread structure on method entry\nand also following the return of taken suspend checks.  In this way,\nthe debugger has the ability to control updates on a per-thread basis,\nand the performance penalty is greatly reduced for threads that don\u0027t\nhave any pending debugger requests.  Once the debugger attaches,\nit would suspend all threads, walk through the thread list, set\nthread-\u003epUpdateDebuggerFromCode to art_update_debugger and then\nturn everything loose.\n\nOne thing I\u0027m not doing, though, is debugger updates before and after\ncalls to native methods.  This is something that will have to be done\nby the stubs, because I don\u0027t know which invokes are native.  Oh, and\nthere will also need to be an artUpdateDebugger call on the exception\npath.\n\nI\u0027m passing the DalvikPC to the stub, and am using special\ncodes (-1 and -2) to denote method entry and exit.  The stub\nrecovers the current Method* and Thread* and passes them on to\nartUpdateDebugger().\n\nWhen we\u0027re compiling in this special mode, all optimizations which\nmight result in code motion or suppressed load/store of a Dalvik\nregister are turned off.  No register promotion is done, so everything\nwill be in its home location.\n\nChange-Id: Iaf66f4d0d094a1699269d0a1ad1ed33e7613aef8\n"
    },
    {
      "commit": "1bddec3a6521f16df37499754000a3b1787a52e9",
      "tree": "f605d0f642f2a62012d0f5a1bd0351afbaa8fa5a",
      "parents": [
        "223f20fa939c386c695977263780dea2195093db"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Feb 04 12:27:34 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Feb 05 03:02:00 2012 -0800"
      },
      "message": "Add access check slow paths to field accesses\n\nThis check makes the verifier, compiler and runtime agree with who\nshould perform access checks and fixes compliance for these\ninstructions.\n\nIntroduce new \"fast\" sget/sput that just get the static storage base\nfrom a method\u0027s declaring class when the static field is within the same\nclass. Saves a load and branch in the common case.\n\nFold gen routines for wide and not wide together.\n\nFix bug where sub-classes could appear intialized in the image but their\nparents were only verified.\n\nExtra debug output for test case 075.\n\nChange-Id: I934da3624ed8fa8e026b2c95d936d04b1af022ef\n"
    },
    {
      "commit": "d4135901d12fd6073603aa6fd96e587dada70cb4",
      "tree": "e527dcea253d9c17d2cbf2a4db1fef7bbd76c813",
      "parents": [
        "5523ee070b005576c6f889415205d49ea77cf243"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 03 18:05:08 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 03 18:32:33 2012 -0800"
      },
      "message": "Check instantiability at runtime when inconclusive at compile time\n\nChange-Id: I40e4a3da05936fee77e074d5dc4d0fec1a1c5526\n"
    },
    {
      "commit": "ba938cbb8d73a0dcf151dfaec4662496da6afdbf",
      "tree": "09ad41fc5851a22e8c11935edc83c7ece546f856",
      "parents": [
        "763d5fb2f83d9c93b5b764533005865a3d1034e1"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Feb 03 14:47:55 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Feb 03 15:02:55 2012 -0800"
      },
      "message": "Make the compiler threadsafe\n\nThe compiler inherited a simple memory management scheme that\ninvolved malloc\u0027ng a clump of memory, allocating out of that\nclump for each unit of compilation, and then resetting after\nthe compilation was complete.  Simple \u0026 fast, but built with the\nexpectation of a single compiler worker thread.\n\nThis change moves the memory allocation arena into the\nCompilationUnit structure, and makes it private for each method\ncompilation.  Unlike the old scheme, allocated memory is returned\nto the system following completion (whereas before it was reused\nfor the next compilation).\n\nAs of this CL, each compilation is completely independent.\n\nThe changes involved were mostly mechanical to pass around the\ncUnit pointer to anything which might need to allocate, but the\naccretion of crud has moved me much closer to the point that\nall of this stuff gets ripped out and replaced.\n\nChange-Id: I19dda0a7fb5aa228f6baee7ae5293fdd174c8337\n"
    },
    {
      "commit": "f16600bd3676f098567f723602f02dd013af178c",
      "tree": "184cc070ee6ee515e36096d19f1db8eb9dba399f",
      "parents": [
        "054f6c19573100b29ce4139822bb496ba3d8e4d0"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Feb 02 18:19:29 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Feb 02 18:19:29 2012 -0800"
      },
      "message": "Minor compiler tuning.\n\nAssembling is an iterative process because we don\u0027t know final\ncode offsets until the end (and they can change during assembly).\nAvoid some unnecessary work on assembly passes that must be\nredone.  Small, but measurable, improvement.\n\nChange-Id: I42b48e4be6d9364bc0dfc290c4e711d264e4ab52\n"
    },
    {
      "commit": "5abfa3ea35781464df8fae60aaf03f48a295e965",
      "tree": "3db19d0ecfc1031f86d77964de636ec45d4ba690",
      "parents": [
        "6c7d244058b74cdd61533968dd6cddd7003d2671"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jan 31 17:01:43 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Feb 02 15:56:41 2012 -0800"
      },
      "message": "Compiler tuning\n\nSignificant reduction in memory usage by the compiler.\n    o Estimated sizes of growable lists to avoid waste\n    o Changed basic block predecessor structure from a growable bitmap\n      to a growable list.\n    o Conditionalized code which produced disassembly strings.\n    o Avoided generating some dataflow-related structures when compiling\n      in dataflow-disabled mode.\n    o Added memory usage statistics\n    o Eliminated floating point usage as a barrier to disabling expensive\n      dataflow analysis for very large init routines.\n    o Because iterating through sparse bit maps is much less of a concern now,\n      removed earlier hack that remembered runs of leading and trailing\n      zeroes.\n\nAlso, some general tuning.\n    o Minor tweaks to register utilties\n    o Speed up the assembly loop\n    o Rewrite of the bit vector iterator\n\nOur previous worst-case method originally consumed 360 megabytes, but through\nearlier changes was whittled down to 113 megabytes.  Now it consumes 12 (which\nso far appears to close to the highest compiler heap usage of anything\nI\u0027ve seen).\n\nPost-wipe cold boot time is now less than 7 minutes.\n\nInstallation time for our application test cases also shows a large\ngain - typically 25% to 40% speedup.\n\nSingle-threaded host compilation of core.jar down to \u003c3.0s, boot.oat builds\nin 17.2s.  Next up: multi-threaded compilation.\n\nChange-Id: I493d0d584c4145a6deccdd9bff344473023deb46\n"
    },
    {
      "commit": "0eb7d7e2a0c2767b5fd86bd52436c618fd4c3120",
      "tree": "a446a35a4dfc5d258bb2817b92319b2f8ea84b20",
      "parents": [
        "09cc2d39b3073ab0c613a9f660983e781693d958"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 31 21:12:32 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 31 21:14:59 2012 -0800"
      },
      "message": "Implement array allocation with access checks.\n\nChange-Id: I0b2c0274087f3f7ed5b0b71c441e5d7e5a25f819\n"
    },
    {
      "commit": "85d8c1ef43adec4f57c5ce372ef7816d13c98420",
      "tree": "049faf14d49353d39cfceb67183b4a0124318c2a",
      "parents": [
        "748382f38dfe7a0d9a426a4b72fcfc399ba1a5da"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jan 27 15:52:35 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Jan 27 15:52:35 2012 -0800"
      },
      "message": "Minor compiler tuning\n\nLarge switch statements were getting bogged down in a linear search.\nAdded a map for fast lookup (which may also be useful for debug\nsupport).\n\nChange-Id: I00e5956ea7e98ff2c870fb2d3e299e8d4c88f598\n"
    },
    {
      "commit": "99ba9640caf4c995b81295bd724dafa338a53c5b",
      "tree": "6f57257bc4205328aff0b7fb8d16f8945dea722c",
      "parents": [
        "20e1ebb6d7b9959971baf0903beb0c7f7169e716"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 25 14:23:14 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 25 16:56:37 2012 -0800"
      },
      "message": "More compilation performance tuning\n\nA man walks into a doctor\u0027s office and says:\n   \"Hey Doc, it hurts when I do this\"\nDoc says:\n   \"Then don\u0027t do that\"\n...\n\nAlthough the last round of tuning the dataflow analsis code\nresulted in a large speedup, we are still faced with a\nsignificant number of (primarily initializer) methods which\nblow up into a large number of basic blocks.  We spend\nmuch time and memory uselessly analyzing these (both because\nthey aren\u0027t run enough to matter, and even if they were, there\nisn\u0027t much optimization we can do).\n\nThis CL attempts to recognize such methods, and skips the\nmost expensive analysis.  The worst-case application that\nwe\u0027ve been looking at gets a 35% boost in compilation speed,\nbut perhaps more significantly, the compiler\u0027s peak heap\nusage drops from 370M to 162M.  (Note: even 162M is much too\nhigh - I\u0027ll be looking at further reducing worst-case memory\nusage next).\n\nChange-Id: I93cd15c846043cf46860afa562957921fc2de464\n"
    },
    {
      "commit": "5b53710b4abcf8f35c91a963a475b72cb34757e6",
      "tree": "9f10f49fd09798a8f07ebffb4ee357c135e56f9f",
      "parents": [
        "cf044318c5638df0c400b731e94fab948ebd5ccb"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jan 17 17:33:47 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Jan 24 06:00:32 2012 -0800"
      },
      "message": "Dataflow analysis rework\n\nRework key portions of the dataflow analysis code to avoid the\nmassive slowdowns we\u0027re seeing with methods containing more than\n20,000 basic blocks.\n\nAdd a somewhat hacky lookup cache in front of findBlock.  Later\nwe\u0027ll want to rework the \"GrowableList\" mechanism to incorporate\nthis properly.\n\nAdd memory to the bit vector utilities to speed up the iterators\nfor large sparse vectors. (Similarly, in the future we\u0027ll want\nto include a rewrite of the home-grown bit-vector manipluation\nutilites to be better with large ones).\n\nWith this CL, compilation speed on the degenerate cases is \u003e 10x\nfaster.  Compilation of typically-sized methods will see a smallish\nimprovement.\n\nChange-Id: I7f086c1229dd4fe62f0a5fc361234bf204ebc2b1\n"
    },
    {
      "commit": "11d1b0c31ddd710d26068da8e0e4621002205b4b",
      "tree": "8d9c9c0dd5741214466775b86069032d609fd91c",
      "parents": [
        "bbdb1437f55948e5395b4dcb306e25605539a444"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 23 16:57:47 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 23 17:26:10 2012 -0800"
      },
      "message": "Reduce namespace pollution.\n\nThis leaves us with just the mspace stuff and three libdex functions to clean\nup. We deliberately expose the JII API, and I don\u0027t think there\u0027s anything we\ncan really do about the art_..._from_code stuff (and at least that starts with\n\"art_\").\n\nChange-Id: I77e58e8330cd2afeb496642302dfe3311e68091a\n"
    },
    {
      "commit": "9ab05deb8c6fea15721870ee6420afa6587f52a6",
      "tree": "79d0c58e32ca1555a3999164f6e507706b8b8c29",
      "parents": [
        "754128802c6f85c256f845721d684bd00febddc9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 18 15:43:48 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 18 15:43:48 2012 -0800"
      },
      "message": "Fix for issue 5884080: Loop formation regression\n\nThis CL is the art version of\n  https://android-git.corp.google.com/g/#/c/159057/1\nThe basic problem had been partially fixed in the existing art code,\nbut this CL is a more comprehensive fix.\n\nChange-Id: I59336ed4265a3535d6da7d51c9243430c68536bd\n"
    },
    {
      "commit": "e7d856b911222aa000ca2be0f8f63f5b292141c3",
      "tree": "9628ef94e879c7ae026dd37ec05e1ab3251d830a",
      "parents": [
        "a51dc5b0a57fdf0574c069a15e065ccc96958f02"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jan 11 18:10:55 2012 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jan 17 17:42:34 2012 -0800"
      },
      "message": "Add GC map to oat file\n\nChange-Id: Ied0462c711a09e2542f231c3b2fa31239958bd28\n"
    },
    {
      "commit": "c44c822849e283a668364850517801f21f0709b0",
      "tree": "acd02d46a318ed128cdfa36ec04b94e9ca7ff297",
      "parents": [
        "6368967dc8a06835891b2e8925a45ee1af4e880e"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sat Jan 14 10:22:14 2012 -0800"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sun Jan 15 11:52:31 2012 -0800"
      },
      "message": "Fix another Mac build error.\n\nCurrently, Mac build failed with this message:\n\"art/src/compiler/codegen/arm/ArchUtility.cc:459: warning: format \u0027%d\u0027\nexpects type \u0027int\u0027, but argument 5 has type \u0027size_t\u0027\"\n\nChange-Id: I9bbbd2e9bc36ee99cbd3448cbf2e6b548cefeaed\n"
    },
    {
      "commit": "13ac45a8313dada6cf1d85b11198810831c88add",
      "tree": "2486a90fbffce59cf1ddcd832875f1f5f7b08064",
      "parents": [
        "63efec135fa63c00dd7360afb319bee875c5d5e7"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 12 12:30:16 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 12 12:32:44 2012 -0800"
      },
      "message": "Fix invokeSuper range check (cts blocker)\n\nThe generated range check for the slow/slow path of invoke super\nhad the operands backwards, with predictable results.  With this fix,\ncts testing can proceed.\n\nA new slow-path testing mode will be added in an upcoming CL to exercise\nthis path.\n\nChange-Id: I36bba5bc5484fc7aaa0aca5ad394c10ea5efd0b1\n"
    },
    {
      "commit": "48d7222d2f543752ffb17db05e0b9e891061135c",
      "tree": "cf0295a04e1d32dce700620900bdc15a09d9913a",
      "parents": [
        "34c77ad4fc67de52463544b78a35b86d15b496e4"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 11 15:19:51 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 11 15:33:27 2012 -0800"
      },
      "message": "Add unimplemented artResolveMethodFromCode\n\nChange-Id: I1ba804c56413477451abff82939e27579494e1f9\n"
    },
    {
      "commit": "34c77ad4fc67de52463544b78a35b86d15b496e4",
      "tree": "583a249e4c6d49473b4ecc6b9ac70273f5b0deac",
      "parents": [
        "ef94857c7a33c467c55ac45a6aeb064eb4b8b7c7"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 11 13:01:32 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 11 14:01:54 2012 -0800"
      },
      "message": "Add stress-test mode for  ResolveMethodFromCode\n\nTo force call to artResolveMethodFromCode prior to each virtual or\nsuper invoke, add (1 \u003c\u003c kDebugExerciseResolveMethod) bit to the\ncompiler\u0027s debug flags.\n\nChange-Id: If14e4bcc8073c8ac7a7a8d0d92bc49444528f77e\n"
    },
    {
      "commit": "95f0879b74dfa4df6e69ff6d028539ef8a016c9e",
      "tree": "b554e4575a22aae3d9f09e6a9a92249d3137b788",
      "parents": [
        "761bfa80704937024fdbe58c2b6fd4599760efaf"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 11 10:51:30 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jan 11 10:51:30 2012 -0800"
      },
      "message": "Fix launch code for artThrowNoSuchMethodFromCode\n\nWas passing the size of the vtable, rather than the method-idx.\n\nChange-Id: I48932e50fc1b4dc5b78ddedc0d0f2c4851a73519\n"
    },
    {
      "commit": "2e3d1b262af0839380e1d60e86d8b281943ef944",
      "tree": "f703c068e2a037d12dac592e1ebc6f1849ce4fbf",
      "parents": [
        "d170fc48b0895ee98ec0d6e3cf1987c8260af95d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jan 09 18:01:56 2012 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jan 09 21:20:50 2012 -0800"
      },
      "message": "Changes to compile with gcc 4.6\n\nChange-Id: I55908b3b98b49373ce948fd1f12e0a5cd56ae4f7\n"
    },
    {
      "commit": "769fde14cf82840e458f3ca0b1accdaedc60e837",
      "tree": "c62b2743c48c6d5c7c16bd7b68a8c824f790cc1d",
      "parents": [
        "eaa200d9b8a28f1a23b6ded7875d2b8fca555254"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 05 17:35:23 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 05 19:08:13 2012 -0800"
      },
      "message": "Reg promotion fix; full optimization by default\n\nAs anticipated, the register promotion problem was related to type\ninference.  The Dalvik bytecode definition doesn\u0027t explicitly carry\ntype information on some opcodes.  The problem this time was that\ninvoke results are stored in a magic untyped return location, which is\nlater accesses via (also untyped) OP_MOVE_RESULT.\n\nMost of the time, the existing type inference mechanism was able to\nfigure out the result register type, but there was a pattern in which\nit could be missed.  Fixed (the last type inference bug, I hope).\n\nThis CL also re-enables full optimization by default (which will also\nresult in a quite significant reduction in code size).\n\nChange-Id: I4c13455df7eba5c932e2cc7907b00c8b3b2f85b8\n"
    },
    {
      "commit": "8e5944b4472b03644fa79c79043fb28e12ec367b",
      "tree": "063afba62fb13fff0d4c6ac871aac7d589710449",
      "parents": [
        "c74a6971fb9a65dbee337d51e7981a37be208a00"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 05 13:44:44 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 05 13:44:44 2012 -0800"
      },
      "message": "Fix build.\n\nChange-Id: Ie35419076974b5991e567335a68119cf7a158a8e\n"
    },
    {
      "commit": "955724179c6c739524f610023287f56b24dc31de",
      "tree": "64f751693e72173ae0d044d8c54989b01f1195af",
      "parents": [
        "b87f73ea7524f6eb9da6da1af931a3d3fbb833ff"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 18:14:20 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 18:14:20 2011 -0800"
      },
      "message": "Don\u0027t default-construct std::strings and then assign them.\n\nChange-Id: I8c994d1e6a8d2ebe52eaa4f0132e0deb2ecfa5f3\n"
    },
    {
      "commit": "4dd9b4d95eec9db5338fb9bf132f9bb8facf6cf4",
      "tree": "f9dc6f6e6a55acea3a08f1f568ae6900c1dd7dd1",
      "parents": [
        "20a409c99a649a01cb7c65bd1089988445d8cdfd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 12 18:29:24 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 08:23:08 2011 -0800"
      },
      "message": "Clean up verbose logging.\n\nChange-Id: I6b01980e7145c4f8d25a5b50f620903f61a1b427\n"
    },
    {
      "commit": "6d4d9fcb4f01e287ee29e81cd1c941ee5d11d379",
      "tree": "4c715bef86a3c5a47f9cea43c4a092cf4766ed4b",
      "parents": [
        "86b0010c79ef95b5333cd540b7d3af34a9f1a643"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 30 16:24:48 2011 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Dec 06 14:02:09 2011 -0800"
      },
      "message": "Reduce meta-data object sizes, introduce meta-data helper classes.\n\nChange-Id: Id14ad218f1c74c659701352fdf1a45bf6444daa3\n"
    },
    {
      "commit": "e941e2c44a610bd6451177593a711251b96ca7d2",
      "tree": "a4f9e5de729562426fe051d47c24f2e2c7f9f9f8",
      "parents": [
        "aed4be94da51b4fbb54c728151f0daf11535f6ab"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Dec 05 12:38:17 2011 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Dec 05 12:47:29 2011 -0800"
      },
      "message": "Fix basic block construction\n\nThere was a bug in the CFG building mechanism that tiggered when\na backwards branch re-entered the current basic block at a point\nother than the head.  In that case, we\u0027d split the original basic block\nin two.  However, the head of the old block then became the head\nof the first of a new two block pair - and we really needed to continue\nprocessing with the second of the pair.\n\nChange-Id: Ieb9fdd5176d86cd0959bb9e91db9ca06075d4f21\n"
    },
    {
      "commit": "c1f143de3d0370a17a4561eb83bf10a5d7908aa3",
      "tree": "a4839595b944473d3bd2c06e83dcb276a460de2f",
      "parents": [
        "c5b734a27a64c81590015dd12a7901c396818a99"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 01 17:31:10 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 01 17:31:10 2011 -0800"
      },
      "message": "Remove some lint.\n\nChange-Id: Ieecd7c10e62bce27e2db38f96d5df9782ef0cff6\n"
    },
    {
      "commit": "4965b661a6edc7f263b6fef1439b03ca8c95da49",
      "tree": "8a9feb389cf37293929a329634efac2629be63a5",
      "parents": [
        "2f6bd951af6ef1e2baedd38fa02908121c5f3d9d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Nov 28 16:06:57 2011 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Nov 28 16:06:57 2011 -0800"
      },
      "message": "Compiler fix for issue #5649968\n\nSee http://b/issue?id\u003d5649968 for details.\n\nAdd definition of lr to resource masks for vldrs and vldrd to\nprevent bad scheduling operation.\n\nChange-Id: Ib108dd1a280d699fd929754ce7ee2dd62a04991e\n"
    },
    {
      "commit": "a3760aad59f41bb0b1d46733165a2d7219ecca73",
      "tree": "28c031bac11cc172f04b8943e189bf1d065acd9c",
      "parents": [
        "169c9a7f46776b235d0a37d5e0ff27682deffe06"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 14 14:32:37 2011 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 14 15:40:11 2011 -0800"
      },
      "message": "Refactor the use of Method by the oat compiler.\n\nChange-Id: Ib0ee18ed06846f82567f746edc7a5049dc6215df\n"
    },
    {
      "commit": "0571d357843c53e042f370f5f2c2e9aa3fe803a9",
      "tree": "197e5b1c0b1bf0ee8cc0e1960470d0a8d203b4af",
      "parents": [
        "33dc7717cd16592bcc825350bea6305be9eb2ea1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Nov 03 19:51:38 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Nov 13 11:57:18 2011 -0800"
      },
      "message": "Refactor the use of Method by the compiler.\n\nRemove the dependence on the Method object in dex2oat, allowing lazier\nresolution.\nIntroduce new find and iterators in DexFile to simplify common\noperations and avoid misuse of class data items.\n\nChange-Id: I39fb8252190f543d89d8b233076355cec310fe08\n"
    },
    {
      "commit": "a50638ba8b983616da3cf1aa941038bea56159e5",
      "tree": "db7d9f0080d264ab3735bc7495da9dd9df929f9e",
      "parents": [
        "5d76c435082332ef79a22962386fa92a0870e378"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 02 15:15:06 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Nov 02 15:15:06 2011 -0700"
      },
      "message": "Register allocation fixes.\n\nThis fixes the calculator button problem, but let\u0027s leave optimization\noff until we\u0027ve passed more tests.\n\nChange-Id: I79b71687a1651e83f16037dead768c43f55d65da\n"
    },
    {
      "commit": "5d76c435082332ef79a22962386fa92a0870e378",
      "tree": "db8fdd7bfba3617494157b483e9df979f76dfdcc",
      "parents": [
        "4b6fe5a568ca2bc5e8fa110bf7af692cab220a15"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 21:42:49 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 02 01:25:57 2011 -0700"
      },
      "message": "Mark non-image spaces and use write barrier for image spaces.\n\nDon\u0027t mark string and class roots that are in the image, alloc space\nreferences will be caught by the write barrier.\n\nChange-Id: Idcf9e4ede3b83556d4f8a01276273726dc6eea46\n"
    },
    {
      "commit": "43c71a1a99785e1b25374aadb29817d43efba78f",
      "tree": "736b98afc41ab68d31c66ebd7d65e97081a26205",
      "parents": [
        "5f7ee534dd3be2d734f92dd8b76cde2ace864971",
        "6a9967818deb13e31846cce083227e32517edf38"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 17:32:48 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 31 17:32:48 2011 -0700"
      },
      "message": "Merge \"Ensure r0/ref isn\u0027t clobbered by call.\" into dalvik-dev"
    },
    {
      "commit": "6a9967818deb13e31846cce083227e32517edf38",
      "tree": "2fda2d77ab6a4e0169c9fff07d2236fa338c7300",
      "parents": [
        "b093c6b27f8ea9bbe2d49c03ebe345203a121199"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 17:06:39 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 17:06:39 2011 -0700"
      },
      "message": "Ensure r0/ref isn\u0027t clobbered by call.\n\nChange-Id: Ic45dac1feb0b45cccfd72589ecee9ea74ee6d869\n"
    },
    {
      "commit": "6cefabd1147810c36bd3b629bec7480ca782b94d",
      "tree": "6a2b7e60974b657e3884dd2cc856fc26d8ff37d0",
      "parents": [
        "b7990c7227a3bdb2670e1e180b3e2b5d83861715",
        "b093c6b27f8ea9bbe2d49c03ebe345203a121199"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 16:34:43 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 31 16:34:43 2011 -0700"
      },
      "message": "Merge \"Support for access check in checkcast and instanceof.\" into dalvik-dev"
    },
    {
      "commit": "b093c6b27f8ea9bbe2d49c03ebe345203a121199",
      "tree": "34e49f46eb30a2aee8590dbf11365c8b5824c16b",
      "parents": [
        "95e4ef7cebf2e33b6e73a3957089f958e41771f5"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 16:19:55 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 16:19:55 2011 -0700"
      },
      "message": "Support for access check in checkcast and instanceof.\n\nChange-Id: Ie15216618b35cace7d351be2b0a1c466ed6db489\n"
    },
    {
      "commit": "b7990c7227a3bdb2670e1e180b3e2b5d83861715",
      "tree": "c57181a9817671de8d574b5995ccf8706f57d092",
      "parents": [
        "23d5bc99a97e22323adc4b1a4237e5c45bdf7096"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 31 15:29:33 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 31 15:29:33 2011 -0700"
      },
      "message": "Disable by register optimizations by default\n\nThis change makes the calculator look right again.  Will track\ndown the problem in local tree.\n\nChange-Id: Id6603af7d0924ec0620631e5c0178750fafb6dd3\n"
    },
    {
      "commit": "23d5bc99a97e22323adc4b1a4237e5c45bdf7096",
      "tree": "3ef13b9dce0057bdf385e941575f7b376aa73cd0",
      "parents": [
        "95e4ef7cebf2e33b6e73a3957089f958e41771f5"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 31 12:41:02 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 31 12:41:02 2011 -0700"
      },
      "message": "Compiler crash workaround\n\nThe compiler was dying during its type inference pass.  I believe\nthis is related to losing type information during the verifier\u0027s\ninstruction rewriting, but will investiate further to make sure.\nWorkaround is to just disable register promotion when this situation\nis detected.\n\nChange-Id: I1c963d67f7d61a1c1666d4ef8d593d8685ac60e0\n"
    },
    {
      "commit": "bd4413541ba7bcd837032fee8f02ab05d252c75c",
      "tree": "5a0838872f1175eee5bae9d56a0e33969aa91a6a",
      "parents": [
        "90f2b3096ae603d81767f83eda073a1b8901cb24"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 10:49:47 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 10:49:47 2011 -0700"
      },
      "message": "Clear exception if we failed to resolve method.\n\nChange-Id: I8766b228139cd5344db0eb830c4dc5fa64b80705\n"
    },
    {
      "commit": "28ad40dc3ec2f09b0ffd4f6d6787bf1b532ccd5d",
      "tree": "f5628e47948a0d255112a3a7a01b67db41c8d424",
      "parents": [
        "e0918556e7551de638870dcad3f2023f94f85a50"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 27 15:19:26 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 28 23:14:15 2011 -0700"
      },
      "message": "Support for unresolved types in new-instance during verification.\n\nAlso, ensure that classes that don\u0027t load are erroneous, warn early\nabout exceptions left on a thread by the verifier/compiler, factor out\nslowpath checks for the compiler and fix the slowpath selector for\nconst-class.\n\nThis change causes more dex cache misses at runtime (more slowpath\nexecution). It also requires a \"mm clean-oat\".\n\nChange-Id: I014b49ebdd7d8f7dd2e39cc0958fc0b708d58c4c\n"
    },
    {
      "commit": "cc4540ece917ef4b5c81ee684e3294e47e49ff5b",
      "tree": "a43560b6c3f70708cad676476e7aca395c10e337",
      "parents": [
        "baba887a4f5d2a454ab3f8f36a26346f8fdd0670"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 27 13:06:03 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 27 13:10:05 2011 -0700"
      },
      "message": "Add slow path for OP_NEW_INSTANCE\n\nIf the type is unresolved at verification time, we can\u0027t be sure\nit\u0027s a valid new.  The compiler will now check for type resolution\nat compile time.  If unresolved, we\u0027ll call out to the slow path,\nwhere the access check will take place.\n\nThis CL only contains the compiler portion of this change.  For\nnow, the slow path code just calls out to the normal routine.\n\nChange-Id: Ia568a164389baedaa695a44f6845a0fdfe585b56\n"
    },
    {
      "commit": "510c605443e8b0f28ba7c434142b9f1498664606",
      "tree": "8d39d304cfa299c351995bce6e78b2ed75b610a6",
      "parents": [
        "9fdfc1808f2a3845ee7e890a4e5d22a10f2ee93d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 27 10:47:20 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 27 11:02:31 2011 -0700"
      },
      "message": "Workaround for cfg building failure\n\nCurrently the compiler expects well-formed control flow graphs -\nno dead code (though infinate loops are allowed).  This is the\ncase for all dx output (but might not be for custom tools).\nHowever, when the verifier replaces an instruction with\nOP_THROW_VERIFICATION_ERROR, it can create dead code from a\npreviously well-formed graph.  This CL works around that\nproblem by not treating OP_THROW_VERIFICATION_ERROR as a\ndirect branch.\n\nA future CL will alter the CFG builder to be resiliant in the face\nof dead code.\n\nAlso, removes a spurious DCHECK, and adds a few where they are\nneeded.\n\nChange-Id: I68554a2a8b88e857faeff3300f2ebbf2d0323693\n"
    },
    {
      "commit": "0dd7ddaa36a2cf37490dc166ebc21818364130a7",
      "tree": "e381ae0cc965d2135ad99f07826333ccd03dfe90",
      "parents": [
        "ed6d78ed93c9b5b1988af6ca502a7e2eee0f2aaf"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Oct 25 15:47:53 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Oct 25 20:28:07 2011 -0700"
      },
      "message": "Several fixes for proper creation and use of vmap tables\n\nChange-Id: I7696115af4263df18ede0777ae14de7a3a7ada3b\n"
    },
    {
      "commit": "8febc5828219a933d2b702f002030ac11e48480b",
      "tree": "22fb15eda62a5a5a4c40bf9e2e52c4c2911a33f9",
      "parents": [
        "6b4ef025af12b158d117fc80fc79acf620f411a0"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 25 12:39:20 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 25 12:39:20 2011 -0700"
      },
      "message": "Fixes for GoogleEarth \u0026 Streek.apk failed DCHECKS\n\nA old version of dx had an unfortunate bug that caused it to\nreuse incoming argument storage of static methods, possibly with\ndifferent types and sizes.  The compiler needs precise type\nand size knowledge, and was asserting that this case could not\nhappen.  It can.  Fixed for legacy support.\n\nChange-Id: I889983bb7f26a37ca64d4bae63d686c8ec0cfc62\n"
    },
    {
      "commit": "d81871cbbaa34c649e488f94f61a981db33123e5",
      "tree": "a3adf3b7469fee507a4d4c4491942fbd48b4483d",
      "parents": [
        "262bf46ddc91e5b4fbd367127ff21a1877d939f2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 03 13:57:23 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 24 11:56:15 2011 -0700"
      },
      "message": "Verifier clean up.\n\nThis is the first part in trying to move to a more rigorous mode of\nasserting the validity of garbage collection maps.\nIn the bring over of the verifier from Dalvik a large class had been\ncreated where all of the Dalvik/Dex functions were static methods of\nthat class. This rewrite introduces 3 key classes, Verifier that\norchestrates the verification of a method, RegisterLine which describes\nthe types associated with registers for a particular PC and RegType\nwhich describes the current type of a register within a line. The\nfunctionality is brought over from Dalvik but cleaned up to not do\nthings like goto. Failing within the verifier is also cleaned up. By\nvirtue of having stateful objects the interfaces between different\naspects of the verifier are greatly simplified.\nTo save space, RegTypes are cached upto a maximum possible 2^16, and\ngiven an Id. As the number of RegTypes is typically small this means\nthat we have a full OO implementation but at a lower space cost than the\ncurrent convention that uses botched together enum values requiring\n32bits of storage in a RegisterLine rather than 16bits (ie half the\nspace requirement per register in a register line). To make use of\nthis space more rigorous monitor verification is brought back, and\nultimately I think we can work around bug 3215458 with richer RegTypes\nthat are aware of literal objects.\nThe code removes short cuts that had been added to Dalvik\u0027s verifier and\nappear illegitimate, it also fixes a large number of bugs in the\ndescription of the verifier.\nWhere possible the spaghetti of code is replaced with straight line\nif-then-elsif.. code that clearly follows the ordering semantics of the\nspecification. The code is also aiming toward having a more type\nrigorous description of the verification process, and when this isn\u0027t\npossible following the description convention of the specification.\n\nChange-Id: Id25b742018a2ad5ea95687973cca610d7e19513c\n"
    },
    {
      "commit": "3181345d4492017c26b1774be8f0554ad3f04dbf",
      "tree": "6d94935fa4cedf4468c0dc78a299a60d0e7395f3",
      "parents": [
        "63f86de9b9444072922872ff08f3653f2920238d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 16 14:33:08 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 16 14:33:08 2011 -0700"
      },
      "message": "Fix off-by-one error in OP_FILLED_NEW_ARRAY_RANGE\n\nNow 003-omnibus-opcode makes it to the UnresTest section, where\nit dies with a segfault doing something verifier-related.\n\nChange-Id: I8c2c746e16d951f297ecc61402907d70c68d09c1\n"
    },
    {
      "commit": "3b6baaa203fa63f1522b2172a1645f90412afdae",
      "tree": "7de428a7d53f2b2b9c2274d49181befd5786b8fa",
      "parents": [
        "7abe9c933402f01d638086b2715b09b64b8595e0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 14 19:13:56 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Oct 16 11:01:28 2011 -0700"
      },
      "message": "Bring our native stack usage down.\n\nI\u0027d have preferred to have a 512-byte limit, but there are some monsters\nin the verifier; 2000-line functions and the like. I\u0027m also not policing\ntests (except for one silly one). They can use all the stack they like.\n\nThis fixes the IntMath test (the stack overflow test was failing because\nwe were using more than 4KiB to throw!).\n\nChange-Id: I7e53e2fde2b39fde1910f8ee5b1712e8a66069c7\n"
    },
    {
      "commit": "67bc236a207852d652f6ddeab0a90efc1bd111bb",
      "tree": "eea13fcb90ad8ce5b2b3819fb8caf0281583cd61",
      "parents": [
        "95caa791e560da97363c0c0d22bfda4a7e7377c3"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 11 18:08:40 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 14 10:54:03 2011 -0700"
      },
      "message": "Register promotion fix\n\nRestructured the type inference mechanism, added lots of DCHECKS,\nbumped the default memory allocation size to reflect AOT\ncompilation and tweaked the bit vector manipulation routines\nto be better at handling large sparse vectors (something the old\ntrace JIT didn\u0027t encounter enough to care).\n\nWith this CL, optimization is back on by default.  Should also see\na significant boost in compilation speed (~2x better for boot.oat).\n\nChange-Id: Ifd134ef337be173a1be756bb9198b24c5b4936b3\n"
    },
    {
      "commit": "928bf02d2172afdc7162101aa9fa70b0d02243c3",
      "tree": "1015194cd625ac231e356b15a7b302f08811c9b6",
      "parents": [
        "582a7d16bb0db323d8bd730beb61578aa3765f43"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Oct 11 02:48:14 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Oct 11 02:48:14 2011 -0700"
      },
      "message": "Ensure getConstString uses slow path for non-image compilation\n\nChange-Id: If7f0eeb277e1ddc9028c90d4b8fab1621f1ea77e\n"
    },
    {
      "commit": "b4aa2428dfcbe3ec63d3b77a49d16d117a4e5bfe",
      "tree": "6e57e3904cad76f6301b0f74bdee89928753b9b2",
      "parents": [
        "bcbaaf3df56178263dbc110dcb0d1cf6c9d167c3"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 10 12:54:42 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 10 12:54:42 2011 -0700"
      },
      "message": "Temporarily disable optimization\n\nThere\u0027s a bug in the register allocation mechanism (type inference\nagain, grrr.).  It mostly shows up with a compile-time check failure,\nbut can be silent.  Until I get it sorted out, best to disable\noptimization in ToT.\n\nChange-Id: Ife8d770f78f26f64559d762f012bb07c93a7ad04\n"
    },
    {
      "commit": "fe2e17f424584ad6969c6fcf7cf6364c69355d53",
      "tree": "ad4b5837bcc7f2d346adbe5b8aff46833d0aa1a8",
      "parents": [
        "bf7dca57e51e85a647c63cec984048ca03c5f071"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 10 09:35:02 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Oct 10 09:35:02 2011 -0700"
      },
      "message": "Simplify compiler\u0027s suspend check mechanism.\n\nMove to a single mechanism for suspend checks.  Previously backwards\nbranches only checked the suspend count when an internal counter\nreached zero, while returns always checked.  Now all checks use\nthe counter.\n\nChange-Id: Ibca2881e102babbd134bb9b41d798e9e4a3b522c\n"
    },
    {
      "commit": "e70708051e06119c04be33ca49fb16bef8162059",
      "tree": "f1ebe2ed4af44c28216642f7b32d6c20d6100d91",
      "parents": [
        "c10717a0b86d5719556ac3286fcb47aa2f2416fc"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 09 17:56:06 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 09 18:19:46 2011 -0700"
      },
      "message": "Compiler/assembler fix\n\nThere are three Thumb encodings for push and pop, and one of\nthem (Thumb2/t2) requires at least two registers in the push/pop\nlist.  This CL adds the single-register encoding (which is really\njust another name for a standard base-modifying load/store).\n\nChange-Id: I963c472a0d5f288654417dbd85758d6b5cc61388\n"
    },
    {
      "commit": "bb7d7730e553438d86ae45003e15ed8bf99d88d6",
      "tree": "f79e5741df85e72350000593ea79dd9879e7d992",
      "parents": [
        "6384f644e8120a15bddb9a72976eac1c158aba16"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 07 18:24:50 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 07 18:24:50 2011 -0700"
      },
      "message": "Turn on optimization by default\n\nChange-Id: I13bcac29c8ac8ed738f803ca5d78d92d15d6372e\n"
    },
    {
      "commit": "f5a7a476e7ea63e094ff0f011dccc170607e6f6b",
      "tree": "4f07e57d5e3d2a82eeefcb7c6409f36b383b1d96",
      "parents": [
        "c2858561314513cc7bce2da7e13664aefef5a2ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 07 14:31:02 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 07 15:08:48 2011 -0700"
      },
      "message": "Enhance CHECK_EQ and friends to allow extra detail to be appended (like CHECK).\n\nChange-Id: Iaa980892ab31621c8bcca9ea7c6c4ee743333f45\n"
    },
    {
      "commit": "6825326abfef92d4e1bf6afddef1a319aa18d08c",
      "tree": "1706bf3e0bbdb9f7a704140f70011c1b362fa294",
      "parents": [
        "a43cb5e8fb29989dbb986b9b91a68cda150aa3c8"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 07 14:02:25 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Oct 07 14:16:01 2011 -0700"
      },
      "message": "Reg utility fix\n\nLong ago in a galaxy far away, there was a trace compiler that\nhandled short code fragments with a small, sparse and variable\nset of temp registers.  In that situation, doing linear reg\nlookups wasn\u0027t terrible.  In the new world that has a fixed and\npacked set of registers, a linear search is unnecessary, foolish\nand wasteful.  [P.S. perf showed that roughly 25% of all\ncompilation time was spent doing register manipulation!]\n\nChange-Id: I6f23d9f70367fb4139cc28a27fd9fdf8beffa270\n"
    },
    {
      "commit": "3320cf46afd082398aa401b246e6f301cebdf64d",
      "tree": "99ef2b240ad81fa7cafa0bca51ca2364120fa762",
      "parents": [
        "4f0d07c783afef89703dce32c94440fc8621a29b"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Oct 04 14:58:28 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Oct 07 11:59:20 2011 -0700"
      },
      "message": "Move rest of code related blobs from Method to oat\n\nChange-Id: I55041b564ab65317c8b1f863005f20ba650a0322\n"
    },
    {
      "commit": "4f0d07c783afef89703dce32c94440fc8621a29b",
      "tree": "f6f4b68d5afc6551c61d3e86153878d9891ea13a",
      "parents": [
        "3ddac99d4dc6a036fac59d8f0bdc664ef619fb04"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 06 23:38:47 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 07 11:40:56 2011 -0700"
      },
      "message": "Spill possibly reference holding registers for runtime calls.\n\nLive references may be in registers when we crawl a stack for GC during\na runtime call. Whilst an exception won\u0027t occur we need to save the\ncallee save registers into the frame so the stack crawl can find their\nvalues. Create variants of the callee save method to save just the\nregisters that are necessary.\n\nChange-Id: I6fa479bffcbc333fe846f9bd3ef2e626e0209ed9\n"
    },
    {
      "commit": "949f56ec8b17ac928693dc9636b5c3305f93978c",
      "tree": "c1d7c519f2596ca12fdf25e5d904f1948305e122",
      "parents": [
        "f57c47c29cd3388d1d78008a71c4e18f2217b70c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 06 11:05:45 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 06 11:05:45 2011 -0700"
      },
      "message": "Nullcheck elimination fix\n\nTwo problems: looking at \"uses\" rather than \"defs\" to discover new\nresult that is known non-null, and search needed to extend into fallthrough\nbasic block.\n\nChange-Id: I11b4f5e4ce86552437ca9638c7b2728d1d7abc26\n"
    },
    {
      "commit": "e3de7495be03c16d6862359d618a2dcb3f3abf9b",
      "tree": "99b17ed768142a3746a5eea9a352d84db217a54b",
      "parents": [
        "99f272349671e14ceada1cc795ce4c66a38ddd3e"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 13:37:17 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 13:37:17 2011 -0700"
      },
      "message": "Compiler - switch default for null invoke test\n\nA while back we added a debugging option to test for a\nnull code address on invokes, and display a debug message\nif one was encountered.  Time to turn it off by default\n(it can still be enabled via compilerDebugFlags).\n\nChange-Id: Id73596aa1f288a2d0b3ce53894b48385de712988\n"
    },
    {
      "commit": "99f272349671e14ceada1cc795ce4c66a38ddd3e",
      "tree": "ebd4a5c4c1ac47d837174daaf4684ae7b26c7b60",
      "parents": [
        "3ddc0d1108a00e14b60c60edcdeff3b81f9e35f9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 12:56:36 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 13:11:35 2011 -0700"
      },
      "message": "Special-case Object.\u003cinit\u003e invoke\n\nIdentify direct invokes to Object.\u003cinit\u003e and handle them similar\nto the old-word OP_INVOKE_OBJECT_INIT_xxx.  Also, added missing\nnull check for range-style invoke-direct and invoke-interface.\n\nChange-Id: I5789db4e85609b780063c4788fa40d627a6988c4\n"
    },
    {
      "commit": "3ddc0d1108a00e14b60c60edcdeff3b81f9e35f9",
      "tree": "daae3f0f439fc95e29a611d366f82309316943f4",
      "parents": [
        "ce30293d222c864fa281da98bc896dd1c98a9a16"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 10:36:21 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 10:36:21 2011 -0700"
      },
      "message": "Fix Vmap table size\n\nConsistently use 16 bits to store Dalvik vreg number.\n\nChange-Id: I6d21c0ed7011e5defaa45571951ff7608d0ce80e\n"
    },
    {
      "commit": "ce30293d222c864fa281da98bc896dd1c98a9a16",
      "tree": "b56c3a7f8be3349aa50c78675e6959e51344938d",
      "parents": [
        "20cde9033d51103f31e21436e88f80e1170c78ad"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 04 14:32:18 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 09:22:57 2011 -0700"
      },
      "message": "Compiler cleanup\n\n  o Added slow path for string resolution\n  o Removed dead throw internal and runtime error\n  o Restructured debug and optimization disable flags for make it easier\n    for command-line option support.\n  o Removed/converted #if 1/0 blocks\n\nChange-Id: I65fc561a55437b3f74d0dfff5af87f938008d70e\n"
    },
    {
      "commit": "b408de744566a5c5a80be1ba7f5c88407e816945",
      "tree": "fa282edb7134f16de6e3ff81181e6d9724039ab3",
      "parents": [
        "4377a7e93b47386de1e0c2e472a6e3e99d235331"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 04 14:35:05 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 04 14:51:27 2011 -0700"
      },
      "message": "Implement the \"unreasonable array allocation\" OutOfMemoryError.\n\nThis doesn\u0027t fix test 061 because we still need AllocWithGrowth, but at least\nit gets us far enough to need that.\n\nChange-Id: Ia7b4a1f91a31e25d439f36b17280ce21c9ed8933\n"
    },
    {
      "commit": "e24fa61603a60ade3797e4a0c8b3fccb346cb048",
      "tree": "9ec5ed942eb9ece6d4d261ffd21956c94f9968fe",
      "parents": [
        "06cbeb990e94f9c4576601e27145fe132e34a686"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Sep 29 00:53:55 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Oct 03 10:28:05 2011 -0700"
      },
      "message": "Separate oat from image\n\nChange-Id: If2abdb99826ead14e3465d90ba2acffd89709389\n"
    },
    {
      "commit": "e983d0062addbf374938df04d626243e08b79412",
      "tree": "2596e00f8f4079fbf3725ce79704043cc0a518e1",
      "parents": [
        "ed1c1e335acc9f61c7e25a78204f159ee3d13350"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 02 14:48:56 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 02 14:48:56 2011 -0700"
      },
      "message": "Revert optimization settings\n\nMy last CL mistakently enabled some optimization for ToT.  They\u0027re\nnot quite ready yet - turning off.\n\nChange-Id: I11c7beb6e272edd7620a132bc06328255c5962a5\n"
    },
    {
      "commit": "bbaf894dded77603bd457758ba2b4636122fb8b7",
      "tree": "ac8d0450f23dd6cde9647febef8de514c5a4b8ae",
      "parents": [
        "fc22c89072e310767f8e39776195a219df851ea0"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 02 13:08:29 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Oct 02 13:21:01 2011 -0700"
      },
      "message": "Optimization fixes\n\nTwo primary fixes.  First, the save/restore mechanism for FP callee saves\nwas broken if there were any holes in the save mask (the Arm ld/store\nmultiple instructions for floating point use a start + count mechanism,\nrather than the bit-mask mechanism used for core registers).\n\nThe second fix corrects a problem introduced by the recent enhancements\nto loading floating point literals.  The load-\u003ecopy optimization mechanism\nfor literal loads used the value of the loaded literal to identify\nredundant loads.  However, it used only the first 32 bits of the\nliteral - which worked fine previously because 64-bit literal loads\nwere treated as a pair of 32-bit loads.  The fix was to use the\nlabel of the literal rather than the value in the aliasInfo - which\nworks for all sizes.\n\nChange-Id: Ic4779adf73b2c7d80059a988b0ecdef39921a81f\n"
    },
    {
      "commit": "58f9274efe66535255a70327022b8f586d334843",
      "tree": "6899c83fbf029ca90b2beaef1f92ed7b8b9d72ea",
      "parents": [
        "e4390576de48a47a7f2dd99534169d83aaaa71ae"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Oct 01 11:22:17 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Oct 01 11:26:37 2011 -0700"
      },
      "message": "Various bugfixes\n\ndivide by zero check for longs, off-by-one error on fill-array-data,\nregister management hygene, mvn encoding, iget/iput \u003c\u003d 32bits are\ndone as 32-bit (code was using type size for ld/st).\n\nChange-Id: Ia09323e7d92f4ad21890af4c10f2f8c8f05f3b0e\n"
    },
    {
      "commit": "81bc509784e1bf20f9d92ce01ab9702123e2ef92",
      "tree": "727f94397f0b09714a7ecc38c093267067054364",
      "parents": [
        "14134a10e9bbaff0faf314dc00c1a1aeef8ef86b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 30 17:25:59 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 30 17:33:16 2011 -0700"
      },
      "message": "Silence a misleading compiler warning.\n\nNow we use this code for wide volatiles, it can\u0027t always complain about\nthe field being unresolved.\n\nChange-Id: Ieb0663d654f8af99890d4925cd8897f5c95c6001\n"
    },
    {
      "commit": "991e3ac0daf35d23f7c5e602d113c12ff3971544",
      "tree": "2bf5a081893dc38805dbdc107ce0b8031f0ea179",
      "parents": [
        "2d831014d88e38c0c499ce8597dcdb17b9d4c4b9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 29 15:44:22 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 30 09:19:51 2011 -0700"
      },
      "message": "Clean up instanceof codegen in compiler.\n\nChange-Id: I0179a0746bc5aaef02129169b6a6b1bbbe30dc7e\n"
    },
    {
      "commit": "12246b82eb9cdc621662a30b3c854d1abd307ec8",
      "tree": "974ca2e66c6df38c149693fb0d700f7365d4f29a",
      "parents": [
        "6181f79576e4269937b45e4fce8d0d004107e5b9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 29 14:15:05 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 29 14:15:05 2011 -0700"
      },
      "message": "Add memory barriers (Issue 3338450)\n\nAdd missing barriers required for volatile access on Arm.  Also,\nflipped long volatile field accesses to the slow path.  The\nprevious codegen was not only missing barriers, but was not\nusing 64-bit atomics.\n\nChange-Id: I4aa2be2bf81971e5ae664c762ceaf2ea58ce231b\n"
    },
    {
      "commit": "6181f79576e4269937b45e4fce8d0d004107e5b9",
      "tree": "1e5970dd4074c9852b10ecfc6bc4f18b89d40dd7",
      "parents": [
        "557e027f86d86f801e1b48055f8116f2d83d3d5c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 29 11:14:04 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Sep 29 13:38:10 2011 -0700"
      },
      "message": "Register usage cleanup\n\nI plan to enable some of the old-world basic block optimizations.\nThose care about temp register status, so we needed a bit of\ncleanup on the temp tracking.\n\nChange-Id: I317bce1b91a73ec9589c20ed5bfe00d53994991a\n"
    },
    {
      "commit": "5d40f182181488eb39ccd19ffd306bb1fb9740c9",
      "tree": "f76c0593d7be5975543411a3d85134e846774ba5",
      "parents": [
        "1ff230d113d25fbcd2986773799ac1ef504a6af0"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Sep 26 22:29:18 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Sep 27 01:24:39 2011 -0700"
      },
      "message": "Fixes for \"null instanceof\" and class initialization\n\nFirst issue was that the codegen seemed to expect r0 to contain 0 for\na false result in the null object case. This is a quick fix to make\nthat true. Given that the code is doing the work of a null check and\npulling out the object\u0027s class, the code should probably just pass the\nclass to the helper function, making this a case of IsAssignableFrom,\nnot instanceof.\n\nSecond issues were related to missing EnsureInitialized calls in two\ndifferent code paths, one coming from reflection, one coming from\nmanaged code. New Class::AllocObject assert should help keep us out of\ntrouble in the future in this area, although perhaps Heap::AllocObject\nshould have a check as well.\n\nChange-Id: Ib7975b6457481c1ac85135d38f42c6061e6443a0\n"
    },
    {
      "commit": "b29e4d1423028fab47db3be6e41e4b2a067bf100",
      "tree": "c965f68c3c57750a837baf4f70fd9dc876adb082",
      "parents": [
        "395520eaa47eca25b92e86188accf3095d60af49"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Sep 26 15:05:48 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Sep 26 15:05:48 2011 -0700"
      },
      "message": "Misc codegen fixes related to register promotion\n\nThe post-promotion world no longer guarantees that wide result\npairs don\u0027t overlap with source operands.  Also had to narrow\na load-elimination optimization to apply only when using\ntemp registers for Dalvik virtual registers.\n\nChange-Id: I2afbbec865d5a14d46e539cce4d8b3d0e4e8880b\n"
    },
    {
      "commit": "c0ecd655083e559159d1ad22a6213d16527e0e2b",
      "tree": "d5aae61fd7a08d6453e7c2eed6b50a9bd06742f8",
      "parents": [
        "9407c60800c95902fba0b3c3265520d47c1e7052"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sun Sep 25 18:11:54 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Sep 26 07:33:28 2011 -0700"
      },
      "message": "Various optimization fixes\n\nMultiple problems surfaced when register promotion was enabled.  This\nCL takes care of a few, but more remain.  The main problems dealt with\nhere are related to not having data types handy on invokes.  Solved by\nintepreting the shorty of the target and updating the operand names\nappropriately.\n\nThe other problem was a little nastier.  The codgen infrastructure wasn\u0027t\nexpecting wide results to overlap source operands (for example:\n\n    add-long (v0,v1) \u003d (v1,v2) + (v3,v4)\n\nIn the old world, the result pair would start with a fresh name\nand temps.  In the new world, though, the register promotion mechanism\nretains the mappings.  Not a difficult problem to solve, but I\u0027ll\nneed to very carefully examine the existing long op generators to\nmake sure they can handle overlaps.\n\nChange-Id: I019607620f7a78cadc9e7c57f247806d0a68243d\n"
    },
    {
      "commit": "ed3e930109e3f01804ca32cee4afe4f2d4b3f4d8",
      "tree": "41c3ffd3fdade2244b4cd3824c98419edecbca86",
      "parents": [
        "8060925c45cc2607ab92390d7366c6c0cfdfe4bb"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 23 17:34:19 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 23 18:34:31 2011 -0700"
      },
      "message": "assert to DCHECK conversion\n\nAlso replaced static function defs with a STATIC macro to make normally\nhidden functions visible to DCHECK\u0027s traceback listing).  Additionally,\nadded some portions of the new type \u0026 size inference mechanism (but not\ntaking advantage of them yet).\n\nChange-Id: Ib42a08777f28ab879d0df37617e1b77e3f09ba52\n"
    },
    {
      "commit": "8060925c45cc2607ab92390d7366c6c0cfdfe4bb",
      "tree": "42a50d2de4cc7622b19d6cd7a20b3d99d60a00a2",
      "parents": [
        "bc2f3e3e41d02eb2896dc16390c5c4023a7b5649"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 23 17:24:51 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 23 18:08:21 2011 -0700"
      },
      "message": "Implement Class.getDeclared(Constructors|Fields|Methods).\n\nThis required making sure that a Method* that represents a constructor\nhas java.lang.reflect.Constructor as its class.\n\nChange-Id: I25908845a2b8d686d5404ac584693db0edd5853c\n"
    },
    {
      "commit": "31cc62d259b86844b505c3bfe15b44e372f705b8",
      "tree": "3b596e14a2e7fc39027a1016e5b7c77887714330",
      "parents": [
        "3311f2763c4103f7c378af417a2863f7e2c224f3",
        "b886da8e3c26443ab4d2aa63268bd673c354c3d2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 23 16:48:26 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 23 16:48:26 2011 -0700"
      },
      "message": "Merge \"Support for exceptions from array allocation.\" into dalvik-dev"
    },
    {
      "commit": "b886da8e3c26443ab4d2aa63268bd673c354c3d2",
      "tree": "26f01b0d92a79dea97fe80ccc580a7cbcd0178ac",
      "parents": [
        "e51a511ccee3f3c0120807321bcc160fcaa664be"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 23 16:27:54 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 23 16:27:54 2011 -0700"
      },
      "message": "Support for exceptions from array allocation.\n\nAdds support for exceptions during array allocation and checked array\nallocation (used by filled-new-array). Adds more unit tests.\n\nChange-Id: I3438b257a1cf19538d8b72529097a74347ac3b99\n"
    },
    {
      "commit": "042946dda087c5f3d3aed48349baa33127cf2faf",
      "tree": "bb025ac206db674667c50dea7e084e52140ff8f7",
      "parents": [
        "c41e5b5ae1befe2c602d55de1dbc04d1914f4a6c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 23 15:49:27 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 23 15:49:27 2011 -0700"
      },
      "message": "Fix dalvik vm reg to callee save mappings\n\nNeglected to include fp regs promoted as a double.\n\nChange-Id: I7ca6ad5e755c5d2e20c1c903cf41491d605f258e\n"
    },
    {
      "commit": "c41e5b5ae1befe2c602d55de1dbc04d1914f4a6c",
      "tree": "fa122d75b64193d7c2dee7a1be871a5ae8511493",
      "parents": [
        "f4afb7aec4e51c2e682cf3af4d6511add74d2f38"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 23 12:46:19 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Sep 23 13:53:25 2011 -0700"
      },
      "message": "Add tables to map between callee saves and vregs\n\nAlso added function to return sp-relative offset for Dalvik\nvirtual registers using Method*\n\n[Note: must be matched with corresponding libcore change to\nreflect new field in Method]\n\nChange-Id: Id739908c6232ce60763d8199bc05111e960da46e\n"
    },
    {
      "commit": "932746a4f22951abcba7b7c4c94c27b1bf164272",
      "tree": "4a841e3990467b22c36c74cca1e7a952754e49e6",
      "parents": [
        "a0841a83323a82e3bed3d0b5f2e6ec3795f496be"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 18:57:50 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 20:05:44 2011 -0700"
      },
      "message": "Stack overflow error and unit test.\n\nChange-Id: Ie7198569207b1b87c50d986df002c551ad5d7d3a\n"
    },
    {
      "commit": "ff1ed4770bf7ff024a807b9f909b1a26abb78341",
      "tree": "40cda83cda306f4ade883141d3e0a40fb0790100",
      "parents": [
        "49de87b5c118cc536f2bd68c4fd46fce3d3abcfc"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 20 13:46:24 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 11:08:56 2011 -0700"
      },
      "message": "Class cast, fill array and interface exception support.\n\nThis change uses the deliver exception mechanism to implement support\nfor a number of runtime exceptions. It also tidies up code in the\ncompiler and allocates a singular callee save method in the image.\n\nAlso adds a fix for JNI internal test where we weren\u0027t passing\nThread::Current() and that this value is now being used in generated code.\n\nChange-Id: I57eefd9afe40e92fa3a7e737f1a2ed7e1094b5c1\n"
    },
    {
      "commit": "aad7201a2453091b6a22984985fba0a328757b59",
      "tree": "f3facf847f4c6a6232a0d868596c7ab1414e5e6e",
      "parents": [
        "c1f45048b90a85018c6b063c31bc088dc3dd993d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 21:52:09 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 21:52:09 2011 -0700"
      },
      "message": "Move null checks to bvector utility callers\n\nIt\u0027s generally ok to encounter basic blocks with no interesting\ndataflow info, but better to skip in the callers of the utilities\nthan in the utilities themselves (to make it explicit).\n\nChange-Id: I27b2c774381d4315d51436527ddf0378e5c05d32\n"
    },
    {
      "commit": "c1f45048b90a85018c6b063c31bc088dc3dd993d",
      "tree": "fe2a976af407f8a77828306e9000837009150480",
      "parents": [
        "ae7cbf45460b472dbd159ab565d55b2880703abb"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 16:03:19 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 20:03:23 2011 -0700"
      },
      "message": "Suspend check reworking (ready for rewiew)\n\nI hate burning a register, but the cost of suspend checks was just too high\nin our current environment.  There are things that can be done in future\nreleases to avoid the register burn, but for now it\u0027s worthwhile.\n\nThe general strategy is to reserve r4 as a suspend check counter.\nRather than poll the thread suspendPending counter, we instead simply\ndecrement the counter register.  When it rolls to zero, we check.  For\nnow I\u0027m just using the counter scheme on backwards branches - we always\npoll on returns (which is already heavyweight enough that the extra cost\nisn\u0027t especially noticable).\n\nI\u0027ve also added an optimization hint to the MIR in case we have enough\ntime to test and enable the existing loop analysis code that omits the\nsuspend check on smallish counted loops.\n\nChange-Id: I82d8bad5882a4cf2ccff590942e2d1520d58969d\n"
    },
    {
      "commit": "010cffc1b8d64a4afc1943729642477a16e9c3fb",
      "tree": "58a953afdf3b41372b367bc9a7a6de1b908ad2d4",
      "parents": [
        "c6766ed17d27417bfce62c31b342b3faa47ada5d"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 18:28:43 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 18:28:43 2011 -0700"
      },
      "message": "Restore Method* following invoke with \u003e 20 args\n\nIn the case of a huge number of arguments, the invoke setup code\nwill call memcpy(), which trashes the caller saves.  Need to restore\nMethod*, which had already been loaded into arg0/r0.\n\nChange-Id: I3a9b74132fb407263afef2a103ccac071ea6a653\n"
    }
  ],
  "next": "27ec961a1da540ba7f16c07a682585ab167317ad"
}
