)]}'
{
  "log": [
    {
      "commit": "8428bd376e660df2ffceee72f797d1cfc6c66433",
      "tree": "5dc6d17eb70179b4b823d5f6034021ec6574c60b",
      "parents": [
        "b52bbde2870e5ab5d126612961dcb3da8e5236ee"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 12 16:53:57 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 15 15:09:27 2016 +0000"
      },
      "message": "Optimizing: Remove unnecessary And before TypeConversion.\n\nFor example `(byte) (x \u0026 0xff)` doesn\u0027t need the `\u0026 0xff`.\n\nBug: 23965701\nChange-Id: I5fc8419491aff2cdc7074451e74e873b5f582d41\n"
    },
    {
      "commit": "b52bbde2870e5ab5d126612961dcb3da8e5236ee",
      "tree": "3a58d251d8667e7c8447199a799fecba9bd5f918",
      "parents": [
        "1b0755299928221a1dcc5db383bf8fc378d29b60"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 12 12:06:05 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 15 15:06:44 2016 +0000"
      },
      "message": "Optimizing: Simplify consecutive type conversions.\n\nMerge two consecutive type conversions to one if the result\nof such merged conversion is guaranteed to be the same and\nremove all implicit conversions, not just conversions to the\nsame type. Improve codegens to handle conversions from long\nto integral types smaller than int.\n\nThis will make it easier to simplify `(byte) (x \u0026 0xffL)` to\n`(byte) x` where the conversion from long to byte is done by\ntwo dex instructions, long-to-int and in int-to-byte.\n\nBug: 23965701\nChange-Id: I833f193556671136ad2cd3f5b31cdfbc2d99c19d\n"
    },
    {
      "commit": "a19616e3363276e7f2c471eb2839fb16f1d43f27",
      "tree": "ad3e7fd0f53229e95fb0443586fc30eedabe6967",
      "parents": [
        "9fba3f67a0792ad5eeb495e489d11a87211c318f"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Feb 01 18:57:58 2016 -0800"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Feb 05 09:26:21 2016 -0800"
      },
      "message": "Implemented compare/signum intrinsics as HCompare\n(with all code generation for all)\n\nRationale:\nAt HIR level, many more optimizations are possible, while ultimately\ngenerated code can take advantage of full semantics.\n\nChange-Id: I6e2ee0311784e5e336847346f7f3c4faef4fd17e\n"
    },
    {
      "commit": "9f98025ba5541641cfa9abb7b9cf30332d91fad1",
      "tree": "5f49ea003ee2989f788605bf68b13c2e55db00e8",
      "parents": [
        "f1ea14af52b64adb45ba57ce8c525511c208d0e2"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Feb 05 14:00:28 2016 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Feb 05 14:00:28 2016 +0000"
      },
      "message": "Extend De Morgan factorisation to `HBooleanNot`.\n\nChange-Id: I81aa92277fa136d675e7ef01be8e4acdbd3d3b7c\n"
    },
    {
      "commit": "ca0e3a0c9f1fd5902dc40043b061d2f9b79ec098",
      "tree": "e410c21a6f94536a1cc9666f6f017d135a29ca82",
      "parents": [
        "b72923dd4d6e1636163047c960395ed9879e31fc"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Feb 03 10:54:07 2016 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Wed Feb 03 10:54:07 2016 +0000"
      },
      "message": "Revert \"Revert \"Optimizing: double-negated bitwise operations simplifications\"\"\n\nThis reverts commit 737c0a99dfbba306ec1f50e2adf66b5d97805af6 with fixes.\n\nIn the original patch, the new instruction could be inserted before\none of its inputs. A regression test is also added.\n\nChange-Id: Ie49a17ac90ff048355d9cc944b468cd1b1914424\n"
    },
    {
      "commit": "74eb1b264691c4eb399d0858015a7fc13c476ac6",
      "tree": "0b6fc4f3003d50bf6c388601013cdfc606e53859",
      "parents": [
        "75fd2a8ab9b4aff59308034da26eb4986d10fa9e"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 14 11:44:01 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 28 15:50:27 2016 +0000"
      },
      "message": "ART: Implement HSelect\n\nThis patch adds a new HIR instruction to Optimizing. HSelect returns\none of two inputs based on the outcome of a condition.\n\nThis is only initial implementation which:\n - defines the new instruction,\n - repurposes BooleanSimplifier to emit it,\n - extends InstructionSimplifier to statically resolve it,\n - updates existing code and tests accordingly.\n\nCode generators currently emit fallback if/then/else code and will be\nupdated in follow-up CLs to use platform-specific conditional moves\nwhen possible.\n\nChange-Id: Ib61b17146487ebe6b55350c2b589f0b971dcaaee\n"
    },
    {
      "commit": "737c0a99dfbba306ec1f50e2adf66b5d97805af6",
      "tree": "155e5e1f0a88f5d5c713f3a248741389bdc8c5b0",
      "parents": [
        "96798493170521691d709be50dd2102ead47b083"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 25 10:17:57 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 25 10:17:57 2016 +0000"
      },
      "message": "Revert \"Optimizing: double-negated bitwise operations simplifications\"\n\nFails compiling the Wallet.apk with:\n\ndex2oatd F 40736 41007 art/compiler/optimizing/optimizing_compiler.cc:194] Error after instruction_simplifier: art::SSAChecker: Instruction Add:59 in block 4 does not dominate use Or:153 in block 4.\n\nThis reverts commit 96798493170521691d709be50dd2102ead47b083.\n\nChange-Id: Ia4b02e62e6133aa104f5db12ba82d5561b6fc090\n"
    },
    {
      "commit": "96798493170521691d709be50dd2102ead47b083",
      "tree": "34d03d55e9a2eeaa3f06bc7198c192156aa676b4",
      "parents": [
        "7d9f95f29d07c455c3ab76d89b7952755a3e0a28"
      ],
      "author": {
        "name": "Kevin Brodsky",
        "email": "kevin.brodsky@linaro.org",
        "time": "Fri Jan 15 09:49:20 2016 +0000"
      },
      "committer": {
        "name": "Kevin Brodsky",
        "email": "kevin.brodsky@linaro.org",
        "time": "Fri Jan 22 14:43:37 2016 +0000"
      },
      "message": "Optimizing: double-negated bitwise operations simplifications\n\nGeneric instruction simplifications applying to bitwise operations when\nboth inputs are Not\u0027s. And and Or are handled by De Morgan\u0027s laws,\nremoving one instruction:\n~a \u0026 ~b -\u003e ~(a | b)\n~a | ~b -\u003e ~(a \u0026 b)\nXor is handled by this trivial relation, removing two instructions:\n~a ^ ~b \u003d a ^ b\n\nThe simplifications only happen when neither Not is used by other\ninstructions.\n\nChange-Id: I5d5187af2f625c475c3e49466af6bc3e87595f8f\n"
    },
    {
      "commit": "d30de5b7667843889e38370ec3b8f523e5a128d0",
      "tree": "6aa3ee28f89a3ec812339b19c003c0d404624aa6",
      "parents": [
        "34513835220e9473662ed1780291c680a5716fd0",
        "d4aee949b3dd976295201b5310f13aa2df40afa1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 12:36:39 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 22 12:36:39 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Revert \"Change condition to opposite if lhs is constant\"\"\"\""
    },
    {
      "commit": "d4aee949b3dd976295201b5310f13aa2df40afa1",
      "tree": "8ffb80498cd8fdff66a4ab272723cf4d4e69e57b",
      "parents": [
        "884e54c8a45e49b58cb1127c8ed890f79f382601"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 12:35:26 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 12:35:26 2016 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Change condition to opposite if lhs is constant\"\"\"\n\nFails two checker tests:\n\n458-checker-instruction-simplification\n537-checker-jump-over-jump\n\nThis reverts commit 884e54c8a45e49b58cb1127c8ed890f79f382601.\n\nChange-Id: I22553e4e77662736b8b453d911a2f4e601f3a27e\n"
    },
    {
      "commit": "45ec0967f1ac09d223e94267c0004dc08670792e",
      "tree": "bba7deec82b9f7808eff253e2c1177818f9dd918",
      "parents": [
        "c54ec90cc3c7570be2a5a64717cd10c817e246c7",
        "884e54c8a45e49b58cb1127c8ed890f79f382601"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 10:44:39 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 22 10:44:39 2016 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Change condition to opposite if lhs is constant\"\"\""
    },
    {
      "commit": "884e54c8a45e49b58cb1127c8ed890f79f382601",
      "tree": "0be051a729b2f2674c3148d8734e5520713ad546",
      "parents": [
        "a05cacc11fa075246c38497c01b949745fadc54b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 08:59:04 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 22 08:59:04 2016 +0000"
      },
      "message": "Revert \"Revert \"Change condition to opposite if lhs is constant\"\"\n\nThis reverts commit a05cacc11fa075246c38497c01b949745fadc54b.\n\nChange-Id: Ifdc261fd4dfb2c538017fe1d69af723aafd4afef\n"
    },
    {
      "commit": "6de1938e562b0d06e462512dd806166e754035ea",
      "tree": "f9df086a73860c20768d17ff7bc5be4139567941",
      "parents": [
        "f5b84ee14a3bc578f799a39dca1ae512b49356ea"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Jan 08 17:37:10 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 14 16:22:13 2016 +0000"
      },
      "message": "ART: Remove incorrect HFakeString optimization\n\nSimplification of HFakeString assumes that it cannot be used until\nString.\u003cinit\u003e is called which is not true and causes different\nbehaviour between the compiler and the interpreter. This patch\nremoves the optimization together with the HFakeString instruction.\n\nInstead, HNewInstance is generated and an empty String allocated\nuntil it is replaced with the result of the StringFactory call. This\nis consistent with the behaviour of the interpreter but is too\nconservative. A follow-up CL will attempt to optimize out the initial\nallocation when possible.\n\nBug: 26457745\nBug: 26486014\n\nChange-Id: I7139e37ed00a880715bfc234896a930fde670c44\n"
    },
    {
      "commit": "a05cacc11fa075246c38497c01b949745fadc54b",
      "tree": "8ffb80498cd8fdff66a4ab272723cf4d4e69e57b",
      "parents": [
        "f9f196c55f3b25c3b09350cd8ed5d7ead31f1757"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 12 14:00:24 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 12 14:00:24 2016 +0000"
      },
      "message": "Revert \"Change condition to opposite if lhs is constant\"\n\nBreaks arm64\n\nThis reverts commit f9f196c55f3b25c3b09350cd8ed5d7ead31f1757.\n\nChange-Id: Ie1027a218154b8ded6c1c8f0007720f5be68780d\n"
    },
    {
      "commit": "f9f196c55f3b25c3b09350cd8ed5d7ead31f1757",
      "tree": "0be051a729b2f2674c3148d8734e5520713ad546",
      "parents": [
        "c3ba07ef76549129705af28173070b88a1c39531"
      ],
      "author": {
        "name": "Anton Shamin",
        "email": "anton.shamin@intel.com",
        "time": "Tue Sep 08 17:33:16 2015 +0600"
      },
      "committer": {
        "name": "Anton Shamin",
        "email": "anton.shamin@intel.com",
        "time": "Tue Jan 12 13:07:06 2016 +0000"
      },
      "message": "Change condition to opposite if lhs is constant\n\nSwap operands if lhs is constant. Handeled unsigned comparison\nin insruction simplifier. Fixed NaN comparison: no matter what\nbias is set result of Equal and NotEqual operations should not\ndepend on it. Added checker tests.\n\nChange-Id: I5a9ac25fb10f2705127a52534867cee43368ed1b\nSigned-off-by: Anton Shamin \u003canton.shamin@intel.com\u003e\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "92d9060c0cdff7c726549a9d9494e5655404bed7",
      "tree": "22c1274193e7f1a3bd9872a2455c758394587dee",
      "parents": [
        "376a6f3dbae7b71a6fc2c339ec416d3407277308"
      ],
      "author": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Fri Dec 18 18:16:36 2015 -0800"
      },
      "committer": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Mon Jan 04 20:53:44 2016 -0800"
      },
      "message": "MIPS: Implement HRor\n\nThis also fixes differentiation between the SRL and ROTR\ninstructions in the disassembler.\n\nChange-Id: Ie19697f8d6ea8fa4e338adde3e3cf8e4a0383eae\n"
    },
    {
      "commit": "299a93993fb8f3efbf0465cf674d80c3bcfdc66c",
      "tree": "1ba8d1cd2a34091317af08cbbe5cfa3fa52e549f",
      "parents": [
        "fae1db92d8433d0f75258c190bcf2c940731f036"
      ],
      "author": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Tue Dec 08 16:08:02 2015 -0800"
      },
      "committer": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Thu Dec 17 14:14:26 2015 -0800"
      },
      "message": "MIPS64: Fuse long and FP compare \u0026 condition in Optimizing.\n\nBug: 25559148\n\nChange-Id: I2d14ac75460a76848c71c08cffff6d7a18f5f580\n"
    },
    {
      "commit": "cd7b0ee296b0462961c63e51d99c9c323e2690df",
      "tree": "57a9071635389e58a8912d98b99d7e114c1efcc6",
      "parents": [
        "0bbc1727c446ee5f4cc3c28e68127164ef379594"
      ],
      "author": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Thu Dec 03 16:46:38 2015 -0800"
      },
      "committer": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Tue Dec 15 14:29:48 2015 -0800"
      },
      "message": "MIPS32: Fuse long and FP compare \u0026 condition in Optimizing.\n\nThis also does a minor clean-up in the assembler and\nits test.\n\nBug: 25559148\nChange-Id: I9bad3c500b592a09013b56745f70752eb284a842\n"
    },
    {
      "commit": "351dddf4025f07477161209e374741f089d97cb4",
      "tree": "d35406fe1e975369acf8f103d0ad5e0cf2313431",
      "parents": [
        "58dcb021c3bd45718d0103844f4e6d55754e6501"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 11 16:34:46 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 11 16:54:42 2015 +0000"
      },
      "message": "Optimizing: Clean up after HRor.\n\nChange-Id: I96bd7fa2e8bdccb87a3380d063dad0dd57fed9d7\n"
    },
    {
      "commit": "40a04bf64e5837fa48aceaffe970c9984c94084a",
      "tree": "27aeff3b9492b396050155734d81aba3c57ffbb7",
      "parents": [
        "763fd2d3d131898cad6295a19ae9a30e22ce5f2a"
      ],
      "author": {
        "name": "Scott Wakeling",
        "email": "scott.wakeling@linaro.org",
        "time": "Fri Dec 11 09:50:36 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 11 16:13:44 2015 +0000"
      },
      "message": "Replace rotate patterns and invokes with HRor IR.\n\nReplace constant and register version bitfield rotate patterns, and\nrotateRight/Left intrinsic invokes, with new HRor IR.\n\nWhere k is constant and r is a register, with the UShr and Shl on\neither side of a |, +, or ^, the following patterns are replaced:\n\n  x \u003e\u003e\u003e #k OP x \u003c\u003c #(reg_size - k)\n  x \u003e\u003e\u003e #k OP x \u003c\u003c #-k\n\n  x \u003e\u003e\u003e r OP x \u003c\u003c (#reg_size - r)\n  x \u003e\u003e\u003e (#reg_size - r) OP x \u003c\u003c r\n\n  x \u003e\u003e\u003e r OP x \u003c\u003c -r\n  x \u003e\u003e\u003e -r OP x \u003c\u003c r\n\nImplemented for ARM/ARM64 \u0026 X86/X86_64.\n\nTests changed to not be inlined to prevent optimization from folding\nthem out. Additional tests added for constant rotate amounts.\n\nChange-Id: I5847d104c0a0348e5792be6c5072ce5090ca2c34\n"
    },
    {
      "commit": "f180af0fc0d0bd981dd6356848df2ba237e1a227",
      "tree": "bea248023c5823bbb28a1864655e3afce9226400",
      "parents": [
        "97cd5bb34ca97e7e87a030b2e1acec004fd26275",
        "f9d741e32c6f1629ce70eefc68d3363fa1cfd696"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 23 11:20:35 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 23 11:20:35 2015 +0000"
      },
      "message": "Merge \"Optimizing/ARM: Improve long shifts by 1.\""
    },
    {
      "commit": "f652917de5634b30c974c81d35a72871915b352a",
      "tree": "c50bcaf37c246df633d42a166334c9b6332e5394",
      "parents": [
        "60c4c6ad2b892bb00a6016a147b1cc089ba6bcb5"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue Nov 17 11:16:56 2015 -0500"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 20 16:48:04 2015 +0000"
      },
      "message": "Simplify boolean condition compared to 0\n\nCaffeineMarkRR Logic has some boolean flipping which can be helped by\nsome simplification.\n\nSimplify non-FP (A COND_OP B) !\u003d 0 to A OPPOSITE_COND_OP B.\nThis is better than the original code, which would use a HBooleanNot\nafter the condition.\n\nAlso simplify non-FP (A COND_OP B) \u003d\u003d 1 to A OPPOSITE_COND_OP B.\n\nMove GetOppositeCondition to nodes.h/nodes.cc to share with Boolean\nSimplification, renaming it to InsertOppositeCondition, as it inserts\nthe new HInstruction (unless it is a constant).\n\nChange-Id: I34ded7758836e375de0d6fdba9239d2d451928d0\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "f9d741e32c6f1629ce70eefc68d3363fa1cfd696",
      "tree": "409005e5b1d01d2830c20421f8466125e110d6af",
      "parents": [
        "beb709a2607a00b5df33f0235f22ccdd876cee22"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 20 15:08:11 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 20 16:18:39 2015 +0000"
      },
      "message": "Optimizing/ARM: Improve long shifts by 1.\n\nImplement long\n    Shl(x,1) as LSLS+ADC,\n    Shr(x,1) as ASR+RRX and\n    UShr(x,1) as LSR+RRX.\n\nRemove the simplification substituting Shl(x,1) with\nADD(x,x) as it interferes with some other optimizations\ninstead of helping them. And since it didn\u0027t help 64-bit\narchitectures anyway, codegen is the correct place for it.\nThis is now implemented for ARM and x86, so only mips32 can\nbe improved.\n\nChange-Id: Idd14f23292198b2260189e1497ca5411b21743b3\n"
    },
    {
      "commit": "38db785600757a832423e076b3cf0af3bee942d8",
      "tree": "420b802e0e8e8e02e6bea03808ef8f7aa7850719",
      "parents": [
        "53ced034cd81f35ea9b37ca977cf6634ddaa7cf9"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Nov 20 15:02:45 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Fri Nov 20 15:02:45 2015 +0000"
      },
      "message": "Opt compiler: More strength reduction for multiplications.\n\nWe transform code looking like\n\n   MUL dst, src, (2^n + 1)\n\ninto\n\n   SHL tmp, src, n\n   ADD dst, src, tmp\n\nand code looking like\n\n   MUL dst, src, (2^n - 1)\n\ninto\n\n   SHL tmp, src, n\n   SUB dst, tmp, src\n\nChange-Id: Ia620ab68758caa70a01530b88cd65dd0444376d7\n"
    },
    {
      "commit": "f652cecb984c104d44a0223c3c98400ef8ed8ce2",
      "tree": "ec0cc193eccdd11a79f42f957a856d2ba57699e1",
      "parents": [
        "b8b44983f861cfeeca66c624dd0f2a3fa71b4992"
      ],
      "author": {
        "name": "Goran Jakovljevic",
        "email": "Goran.Jakovljevic@imgtec.com",
        "time": "Tue Aug 25 16:11:42 2015 +0200"
      },
      "committer": {
        "name": "Goran Jakovljevic",
        "email": "Goran.Jakovljevic@imgtec.com",
        "time": "Thu Oct 22 18:51:13 2015 +0200"
      },
      "message": "MIPS: Initial version of optimizing compiler for MIPS32\n\nChange-Id: I370388e8d5de52c7001552b513877ef5833aa621\n"
    },
    {
      "commit": "bb245d199a5240b4c520263fd2c8c10dba79eadc",
      "tree": "e16b37485e3e0e34c24e35a71cc8e6986d1e2e70",
      "parents": [
        "d5a69fc429f57bf528aa061618d3ae94ee8deb24"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Oct 19 11:05:03 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Oct 19 11:12:11 2015 -0700"
      },
      "message": "Generalize codegen and simplification of deopt.\n\nRationale: the de-opt instruction is very similar to an if,\n           so the existing assumption that it always has a\n           conditional \"under the hood\" is very unsafe, since\n           optimizations may have replaced conditionals with\n           actual values; this CL generalizes handling of deopt.\n\nChange-Id: I1c6cb71fdad2af869fa4714b38417dceed676459\n"
    },
    {
      "commit": "d5a69fc429f57bf528aa061618d3ae94ee8deb24",
      "tree": "1a00f22b320afe53c7c02320e78f1a0e538ee5d0",
      "parents": [
        "bdbce4e321b16a14425659fabaa5648f52853d51",
        "e9f37600e98ba21308ad4f70d9d68cf6c057bdbe"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 15 16:18:05 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 15 16:18:05 2015 +0000"
      },
      "message": "Merge \"Added support for unsigned comparisons\""
    },
    {
      "commit": "e9f37600e98ba21308ad4f70d9d68cf6c057bdbe",
      "tree": "ad7953f41a35eeee68a31b4b567a08c650647bba",
      "parents": [
        "793e6fbdefb092d1dab50bca5618aed110c7e037"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Fri Oct 09 11:15:55 2015 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Wed Oct 14 13:38:22 2015 -0700"
      },
      "message": "Added support for unsigned comparisons\n\nRationale: even though not directly supported in input graph,\n           having the ability to express unsigned comparisons\n           in HIR is useful for all sorts of optimizations.\n\nChange-Id: I4543c96a8c1895c3d33aaf85685afbf80fe27d72\n"
    },
    {
      "commit": "439ffb8d4fa25b4ac7518a3bd5cbc3f3769ead48",
      "tree": "1c4957e89dcd48ac197d06c43e5ee0d9a77d5b5e",
      "parents": [
        "5021883b95d2637f9cc6b4f2c5cf305730e864df",
        "ee3cf0731d0ef0787bc2947c8e3ca432b513956b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 12 12:47:06 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 12 12:47:06 2015 +0000"
      },
      "message": "Merge \"Intrinsify System.arraycopy.\""
    },
    {
      "commit": "ee3cf0731d0ef0787bc2947c8e3ca432b513956b",
      "tree": "4146f2c830bdbacdad941e06a0f5979350fe05ad",
      "parents": [
        "5928931541e07b4c98e677cfca3088106b2b9e64"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 06 11:45:02 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 12 12:16:40 2015 +0100"
      },
      "message": "Intrinsify System.arraycopy.\n\nCurrently on x64, will do the other architectures in\ndifferent changes.\n\nChange-Id: I15fbbadb450dd21787809759a8b14b21b1e42624\n"
    },
    {
      "commit": "e53fb5582f8f6ece5d0ce3b9c0d5b1cdb654b254",
      "tree": "c2a31c6b7e3a67255ebcb23cb75ed94278222c46",
      "parents": [
        "09b1d6f749437bdd47f61e7c4f924f6d16b59536"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Oct 07 17:51:52 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Oct 07 19:13:12 2015 +0100"
      },
      "message": "Don\u0027t remove type checks if we need to perform an access check.\n\nChange-Id: I9b9e07c7524e96ece8dc089c8379631c2f9e3320\n"
    },
    {
      "commit": "d6ace609ef3c5d37ea4d980a2aaa3a9c31943d3b",
      "tree": "05e1eca15d908e03233cbf819ba04a26f1497721",
      "parents": [
        "ce18a7f16166dd525dfcf6afaca567d7e82dba0a",
        "a83a54d7f2322060f08480f8aabac5eb07268912"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 07 09:51:07 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 07 09:51:07 2015 +0000"
      },
      "message": "Merge \"Add support for intrinsic optimizations.\""
    },
    {
      "commit": "a83a54d7f2322060f08480f8aabac5eb07268912",
      "tree": "67b7ecc4d35e7f5cb59f81c3d021fd6e1c10545f",
      "parents": [
        "cc245eab2148547f9df37ddc5f767656dc033b81"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 02 17:30:26 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 07 10:50:24 2015 +0100"
      },
      "message": "Add support for intrinsic optimizations.\n\nChange-Id: Ib5a4224022f9360e60c09a19ac8642270a7f3b64\n"
    },
    {
      "commit": "98893e146b0ff0e1fd1d7c29252f1d1e75a163f2",
      "tree": "a14bb10d039fcee10a7e0cacb494bb60d08b2039",
      "parents": [
        "7b5c395e9a50f988ca2275a429df17b6abbcc475"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Oct 02 21:05:03 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Oct 06 13:42:55 2015 +0100"
      },
      "message": "Add support for unresolved classes in optimizing.\n\nChange-Id: I0e299a81e560eb9cb0737ec46125dffc99333b54\n"
    },
    {
      "commit": "e0395dd58454e27fc47c0ca273913929fb658e6c",
      "tree": "a43acfddd08fe55858b752860b05a3e0a035777f",
      "parents": [
        "6387821209a03c5d873cf9dc6fd11434918bbdf4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Sep 25 11:04:45 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 30 18:32:01 2015 +0100"
      },
      "message": "Optimize ArraySet for x86/x64/arm/arm64.\n\nChange-Id: I5bc8c6adf7f82f3b211f0c21067f5bb54dd0c040\n"
    },
    {
      "commit": "f6860a5f12a8fe974b8f25e67a19a71bf0378d62",
      "tree": "040cb5be85ad86a6e1e87be7bedb3de70eb0f6d0",
      "parents": [
        "a2d8b187e7b6631692fa1243e86ef16c428fa9da",
        "452c1b60120aee0883c3339b363f820b8d69c299"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 29 16:33:44 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 29 16:33:44 2015 +0000"
      },
      "message": "Merge \"Optimizing: Simplify UShr+And, Shr+And.\""
    },
    {
      "commit": "452c1b60120aee0883c3339b363f820b8d69c299",
      "tree": "78d0c7134064446dadd86407d353769b939d64f0",
      "parents": [
        "ec7e44f7afe0ff48d4d1ae54a12d375e0392d24c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 25 14:44:17 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 29 13:40:06 2015 +0100"
      },
      "message": "Optimizing: Simplify UShr+And, Shr+And.\n\nEliminate And from UShr+And if the And-mask contains all the\nbits that can be non-zero after UShr. Transform Shr+And to\nUShr if the And-mask precisely clears the shifted-in sign\nbits.\n\nThis prepares for detecting the Rotate pattern, i.e.\n  (x \u003c\u003c N) | (x \u003e\u003e\u003e (SIZE - N))\nin code that unnecessarily masks the UShr, for example\n  (x \u003c\u003c 1) | ((x \u003e\u003e\u003e 31) \u0026 1) ,\nor uses Shr, for example\n  (x \u003c\u003c 8) | ((x \u003e\u003e 24) \u0026 0xff) .\n\nChange-Id: I684c4b752547d9b1057d0d4c4d44550bb1a3ffb4\n"
    },
    {
      "commit": "6e7455e90411c77088af5fcbf828219842bd2182",
      "tree": "739174a530e18aebcc9ebedba906c1de4e541234",
      "parents": [
        "85e5207ef094f99081539333bd868ce721c6fd73"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 28 16:25:37 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 29 10:01:07 2015 +0100"
      },
      "message": "Use dominance information for null optimization in write barrier.\n\nChange-Id: I8b57dafcd321c9afa1bbfc6a0674cbea15cbf10c\n"
    },
    {
      "commit": "aae9e66a727756bc965121a60ffcef89ed370e6c",
      "tree": "871d86b73428f998e1099135118c515e3f623fb4",
      "parents": [
        "772cc4a2d4f978888d1b1e5a78c1c16a108260ed"
      ],
      "author": {
        "name": "Serdjuk, Nikolay Y",
        "email": "nikolay.y.serdjuk@intel.com",
        "time": "Fri Aug 21 13:26:34 2015 +0600"
      },
      "committer": {
        "name": "Serdjuk, Nikolay Y",
        "email": "nikolay.y.serdjuk@intel.com",
        "time": "Thu Aug 27 10:05:38 2015 +0600"
      },
      "message": "ART: Fix the simplifier for NEGATE add/sub\n\nInstruction simplifier for negate add/sub should not proceed\nwith floats because that might cause the incorrect behavior\nwith signed zero.\n\nChange-Id: I4970694a2b265a3577cde34fee9cd3a437358c0f\n"
    },
    {
      "commit": "efa8468c78fdd808043dfb664b56541f3f2dd0e8",
      "tree": "eeec64ba00456b737b43eaf3d9e61f04fafdfa95",
      "parents": [
        "6a6bd17f68c02139630796a615bd38b929c02e7a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 12 18:28:14 2015 -0700"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 12 18:32:54 2015 -0700"
      },
      "message": "Small optimization improvements.\n\n- Tune CanBeNull for HBoundType.\n- Remove LoadClass when we know the class is loaded.\n- Tune CanBeNull for StringInit.\n\nChange-Id: I564ed33a506d65e991a514342bdfd1610bed0cf5\n"
    },
    {
      "commit": "115b53f609e74672fa93eea1845bb17340d5112a",
      "tree": "a791ed8bcd97c5a97c329e4dc708604e1defed4b",
      "parents": [
        "1339409345cc8b46d64570430ca3197408fda159"
      ],
      "author": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Wed Aug 05 17:03:30 2015 +0600"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Aug 06 18:22:02 2015 +0100"
      },
      "message": "ART: Fix the simplifier for add/sub\n\nInstruction simplifier for add/sub should not proceed with floats\nbecause that might cause the incorrect behavior with signed zero.\n\nChange-Id: If0c9bf3931bcbf96b0814f8605a86997aea37145\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "2e76830f0b3f23825677436c0633714402715099",
      "tree": "71bd6bd7d327ff3ef8a46af2a7514c5434adb5fd",
      "parents": [
        "a5ae3c3f468ffe3a317b498d7fde1f8e9325346a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 14:41:11 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 29 17:08:28 2015 +0100"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Use the object class as top in reference type propagation\"\"\"\"\n\nThis reverts commit b734808d0c93af98ec4e3539fdb0a8c0787263b0.\n\nChange-Id: Ifd925f166761bcb9be2268ff0fc9fa3a72f00c6f\n"
    },
    {
      "commit": "b734808d0c93af98ec4e3539fdb0a8c0787263b0",
      "tree": "a9a0a67143d5af9c375dbb9db9d874b61586f7e1",
      "parents": [
        "80caa1478cf3df4eac1214d8a63a4da6f4fe622b"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 11:52:02 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 28 11:52:02 2015 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Use the object class as top in reference type propagation\"\"\"\n\nThis reverts commit 80caa1478cf3df4eac1214d8a63a4da6f4fe622b.\n\nChange-Id: I63b51ca418b19b2bfb5ede3f8444f8fbeb8a339d\n"
    },
    {
      "commit": "80caa1478cf3df4eac1214d8a63a4da6f4fe622b",
      "tree": "131652877e34099711e7d9fc4f1d840b99d1b5d3",
      "parents": [
        "00e3b38be4b280d6d7a7e843cd336ffbd2ba4365"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 16 16:51:30 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jul 27 19:51:48 2015 +0100"
      },
      "message": "Revert \"Revert \"Use the object class as top in reference type propagation\"\"\n\nThis reverts commit 7733bd644ac71f86d4b30a319624b23343882e53.\n\nChange-Id: I7d393a808c01c084c18d632a54e0554b4b455f2c\n"
    },
    {
      "commit": "7733bd644ac71f86d4b30a319624b23343882e53",
      "tree": "7f897d8b0545e43da6b6059718685a8e396b3b70",
      "parents": [
        "3fabec7a25d151b26ba7de13615bbead0dd615a6"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:14:50 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 22 17:14:50 2015 +0000"
      },
      "message": "Revert \"Use the object class as top in reference type propagation\"\n\nThis reverts commit 3fabec7a25d151b26ba7de13615bbead0dd615a6.\n\nChange-Id: Id8614f6b6e3e0e4c9caeb9f771e4c145d9fec64f\n"
    },
    {
      "commit": "3fabec7a25d151b26ba7de13615bbead0dd615a6",
      "tree": "a73af9489665d5b033e961d1aafe7e0935c8af85",
      "parents": [
        "b0d5fc0ac139da4aaa1440263416b9bde05630b0"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 16 16:51:30 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 21 14:33:42 2015 +0100"
      },
      "message": "Use the object class as top in reference type propagation\n\nThis properly types all instructions, making it safe to query the type\nat any time.\n\nThis also moves a few functions from class.h to class-inl.h to please\ngcc linker when compiling for target.\n\nChange-Id: I6b7ce965c10834c994b95529ab65a548515b4406\n"
    },
    {
      "commit": "d1665b7a689086ec5b33a69a05313c46ea1a95e4",
      "tree": "1d46845e8c5734683077357bf18743d5eec466e2",
      "parents": [
        "c6f3439b67962584cfb764133e192c3317f0e1fc",
        "7f63c52c8e94ed1340b7a1d04b046ff12819d2bc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 14 09:25:42 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 14 09:25:43 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Fuse long and FP compare \u0026 condition on ARM64 in Optimizing.\"\"\""
    },
    {
      "commit": "7f63c52c8e94ed1340b7a1d04b046ff12819d2bc",
      "tree": "c3a68ff7d6b3fc9b38c6554f689efcf8eaba8fdf",
      "parents": [
        "bed50d2430e02a3d6b94972e8ab4873d7b3b8be0"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 13 15:54:55 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 13 16:57:09 2015 +0100"
      },
      "message": "Revert \"Revert \"Fuse long and FP compare \u0026 condition on ARM64 in Optimizing.\"\"\n\nThis reverts commit bed50d2430e02a3d6b94972e8ab4873d7b3b8be0.\n\nBug: 21120453\nChange-Id: I5e4aab2703966d9324ebde25bd8b83056fdb10ed\n"
    },
    {
      "commit": "f185fb365e9faf58428762bace96d7729ea5bdbc",
      "tree": "79a2bbbab8cb36523056539d374d5d79e7e5ee4a",
      "parents": [
        "5e094de24827292d8a13be2adbdcca54ae7d5ff0",
        "2e7cd752452d02499a2f5fbd604c5427aa372f00"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 13 11:55:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 13 11:55:20 2015 +0000"
      },
      "message": "Merge \"[optimizing] Don\u0027t rely on the verifier for String.\u003cinit\u003e.\""
    },
    {
      "commit": "2e7cd752452d02499a2f5fbd604c5427aa372f00",
      "tree": "505527250317827f56378f4b786534793ccfbb61",
      "parents": [
        "f16b820fc18ff86e765a14176f05417305d689a0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 10 11:38:52 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 10 18:21:13 2015 +0100"
      },
      "message": "[optimizing] Don\u0027t rely on the verifier for String.\u003cinit\u003e.\n\nContinue work on cutting the dependency on the verifier.\n\nChange-Id: I0f95b1eb2e10fd8f6bf54817f1202bdf6dfdb0fe\n"
    },
    {
      "commit": "bed50d2430e02a3d6b94972e8ab4873d7b3b8be0",
      "tree": "09939739f6ae87e05e91d370007e978b5e72ca8e",
      "parents": [
        "5cfe61f27ed9203498169355bb95db756486d292"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 10 17:18:11 2015 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 10 17:18:11 2015 +0000"
      },
      "message": "Revert \"Fuse long and FP compare \u0026 condition on ARM64 in Optimizing.\"\n\nThis reverts commit 5cfe61f27ed9203498169355bb95db756486d292.\n\nChange-Id: I9879e76e7f8315cace05700e3b571a6a4749bf1a\n"
    },
    {
      "commit": "5cfe61f27ed9203498169355bb95db756486d292",
      "tree": "3229adf7de7c7b834bbac837ff74973f0437b4ad",
      "parents": [
        "4fa13f65ece3b68fe3d8722d679ebab8656bbf99"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 10 10:38:11 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Jul 10 10:38:11 2015 +0100"
      },
      "message": "Fuse long and FP compare \u0026 condition on ARM64 in Optimizing.\n\nBug: 21120453\nChange-Id: I701e808600fb5ba9ff4d0f5e19e4ce22b1d34b29\n"
    },
    {
      "commit": "4fa13f65ece3b68fe3d8722d679ebab8656bbf99",
      "tree": "09939739f6ae87e05e91d370007e978b5e72ca8e",
      "parents": [
        "c470193cfc522fc818eb2eaab896aef9caf0c75a"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 06 18:11:54 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Jul 08 15:45:22 2015 +0100"
      },
      "message": "Fuse long and FP compare \u0026 condition on ARM in Optimizing.\n\nAlso:\n- Stylistic changes in corresponding parts on the x86 and\n  x86-64 code generators.\n- Update and improve the documentation of\n  art::arm::Condition.\n\nBug: 21120453\nChange-Id: If144772046e7d21362c3c2086246cb7d011d49ce\n"
    },
    {
      "commit": "c470193cfc522fc818eb2eaab896aef9caf0c75a",
      "tree": "9887d434f8d9e33c41b98ca406e7c060c68c9016",
      "parents": [
        "c87c8939ea1bcfbddb954478d527cf1138f4f343"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Fri Apr 10 13:18:51 2015 -0400"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 07 16:49:53 2015 +0100"
      },
      "message": "Fuse long and FP compare \u0026 condition on x86/x86-64 in Optimizing.\n\nThis is a preliminary implementation of fusing long/float/double\ncompares with conditions to avoid materializing the result from the\ncompare and condition.\n\nThe information from a HCompare is transferred to the HCondition if it\nis legal.  There must be only a single use of the HCompare, the HCompare\nand HCondition must be in the same block, the HCondition must not need\nmaterialization.\n\nAdded GetOppositeCondition() to HCondition to return the flipped\ncondition.\n\nBug: 21120453\nChange-Id: I1f1db206e6dc336270cd71070ed3232dedc754d6\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "9fdb31e12023d94c710a766a54d8a57c91a196f9",
      "tree": "22be0afa06ceca65cb4d1ed457c0ea720845e9a4",
      "parents": [
        "3b0667c1d68ba88c71b031757b757dca659afd69"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 01 12:56:46 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 01 13:54:32 2015 +0100"
      },
      "message": "Do not do a type check when setting null to an array.\n\nChange-Id: I7387d45aea697d4a3de273335647220a815a992b\n"
    },
    {
      "commit": "1e9ec053008fca7eb713815716c69375c37b399c",
      "tree": "dc7306ce1153648bfc34c67b9475f7fbfbbd18f6",
      "parents": [
        "e85647ed00d07169193cc07ffa09e3b70ce38f59"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jun 22 10:26:45 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jun 22 11:07:57 2015 +0100"
      },
      "message": "ART: Simplify (Not)Equal bool vs. int to true/false\n\nOptimizations on the HGraph may produce comparisons of bool and ints.\nInstruction simplifier will simplify these only for 0/1 int constants.\nSince the range of bool is known, comparison against all other int\nconstants can always be determined statically.\n\nChange-Id: I502651b7a08edf71ee0b2589069f00def6aacf66\n"
    },
    {
      "commit": "3c4ab80c102ff1bfc0e74d4abddbf5454bf4008d",
      "tree": "88065b979f93f748b72aeb9efc9dea2c5ddcd5d4",
      "parents": [
        "be59b85251f085359d40bb89b1aa7e037c8ac0ef"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 11:42:07 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 11:59:27 2015 +0100"
      },
      "message": "Do not expect 0 or 1 only when comparing a boolean.\n\nbug:21866529\nChange-Id: I81ffba609a357010bd86073eb979024fc668ed20\n"
    },
    {
      "commit": "7cb499b1af1575c854860b0d6a103c4a2a59a569",
      "tree": "53de01908990954cdf0f46168cb437d5c12ebf2e",
      "parents": [
        "4b9a93e7774d6650f6f3b637d018109d6fe97546"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 17 11:35:11 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 17 11:35:11 2015 +0100"
      },
      "message": "Fix bug in optimizing around instanceof.\n\nWe were too aggressive when removing instanceof. We should\nnot remove it when there is one of the two static types that\nis an interface.\n\nChange-Id: I1fd80915b99b094f7b4393e7adb2b160201b30d5\n"
    },
    {
      "commit": "222862ceaeed48528020412ef4f7b1cdaecf8789",
      "tree": "e5890d54817d80319580044d01f8bc3c65c43729",
      "parents": [
        "864a2d955aa85ab989c86d7f1eeacbe0b11f8b0f"
      ],
      "author": {
        "name": "Guillaume Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Tue Jun 09 18:33:02 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 10 13:09:32 2015 +0100"
      },
      "message": "Add optimizations for instanceof/checkcast.\n\nThe optimizations try to statically determine the outcome of the\ntype tests, replacing/removing the instructions when possible.\n\nThis required to fix the is_exact flag for ReferenceTypePropagation.\n\nChange-Id: I6cea29b6c351d118b62060e8420333085e9383fb\n"
    },
    {
      "commit": "bc84222168dcc4057e594ecdf8e76559fd07b706",
      "tree": "6052556cd2cd57069ff5cd49199adca9f0a630b6",
      "parents": [
        "cc8bda030d7a18715d2c63bbb2528b61472bf3d5",
        "8909bafa5d64e12eb53f3d37b984f53e7a632224"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue May 19 17:37:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 19 17:37:29 2015 +0000"
      },
      "message": "Merge \"Mark CheckCast\u0027s and InstanceOf\u0027s input as !CanBeNull if used before in a NullCheck\""
    },
    {
      "commit": "07276db28d654594e0e86e9e467cad393f752e6e",
      "tree": "6450e07d64045f0c0949b3423501316b672641c7",
      "parents": [
        "17f1bc531ea2f8c1a6fac3def13dee1b901949dd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 18 14:22:09 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 18 19:15:52 2015 +0100"
      },
      "message": "Don\u0027t do a null test in MarkGCCard if the value cannot be null.\n\nChange-Id: I45687f6d3505178e2fc3689eac9cb6ab1b2c1e29\n"
    },
    {
      "commit": "8909bafa5d64e12eb53f3d37b984f53e7a632224",
      "tree": "6bac613ed796914ec4937a64d40d44b1888d4878",
      "parents": [
        "06675720cc274eb9d91a4ecd3fb1eef94a2d88f0"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Thu Apr 23 21:35:11 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Mon May 18 17:58:21 2015 +0100"
      },
      "message": "Mark CheckCast\u0027s and InstanceOf\u0027s input as !CanBeNull if used before in a NullCheck\n\nChange-Id: Ied0412a01922b40a3f5d89bed49707498582abc1\n"
    },
    {
      "commit": "ba56d060116d6e145be348fa575314654c6b0572",
      "tree": "4ef90809f6628435a60320b8fa0fd939849e2d29",
      "parents": [
        "6727a48193db2a0cf01af971cccffe1a6518c247"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Tue May 05 21:34:03 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon May 11 08:44:54 2015 -0400"
      },
      "message": "[optimizing] Improve 32 bit long shift by 1.\n\nAlso change FOO \u003c\u003c 1 to FOO+FOO in the instruction simplifier.  This is\nan architecture independent simplification, which helps \u0027long \u003c\u003c 1\u0027 for\n32 bit architectures.\n\nGenerate an add/adc for long \u003c\u003c 1 in x86, in case something is generated\nafter the simplifier.\n\nAdd test cases for the simplification.\n\nChange-Id: I0d512331ef13cc4ccf10c80f11c370a10ed02294\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "0d22184ec9e5b1e958c031ac92c7f053de3a13a2",
      "tree": "4055eda9986916dc86b39d023082a57e60c804f4",
      "parents": [
        "97c96f5aab22f75dd54089bdc194588a4b5a2e8d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 08:53:46 2015 +0000"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Apr 27 20:06:50 2015 -0400"
      },
      "message": "Revert \"Revert \"[optimizing] Replace FP divide by power of 2\"\"\n\nThis reverts commit 067cae2c86627d2edcf01b918ee601774bc76aeb.\n\nChange-Id: Iaaa8772500ea7d3dce6ae0829dc0dc3bbc9c14ca\n"
    },
    {
      "commit": "adf15974e0a0a2b0e6dc311ff5701b87ca15964a",
      "tree": "65cc0394a15ea82df9ccb680b1ec6b3be72a1a87",
      "parents": [
        "5ff903a589af282f516bbcf6844ff2656ce76b02",
        "067cae2c86627d2edcf01b918ee601774bc76aeb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 16:43:18 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Apr 26 16:43:19 2015 +0000"
      },
      "message": "Merge \"Revert \"[optimizing] Replace FP divide by power of 2\"\""
    },
    {
      "commit": "067cae2c86627d2edcf01b918ee601774bc76aeb",
      "tree": "170607d1194943f4eff92e70170da36e06b68a9c",
      "parents": [
        "b0bd8915cb257cdaf46ba663c450a6543bca75af"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 16:43:00 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 16:43:00 2015 +0000"
      },
      "message": "Revert \"[optimizing] Replace FP divide by power of 2\"\n\nFails compiling docs.\n\nThis reverts commit b0bd8915cb257cdaf46ba663c450a6543bca75af.\n\nChange-Id: I47d32525c83a73118e2163eb58c68bbb7a28bb38\n"
    },
    {
      "commit": "5ff903a589af282f516bbcf6844ff2656ce76b02",
      "tree": "853e7f348c7299f32021a7f0f60ca95ef4f04b24",
      "parents": [
        "2c31b5ac1d45f2f96932c8ff0d299abb2dbde862",
        "b0bd8915cb257cdaf46ba663c450a6543bca75af"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Apr 26 15:05:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Apr 26 15:05:29 2015 +0000"
      },
      "message": "Merge \"[optimizing] Replace FP divide by power of 2\""
    },
    {
      "commit": "322b389a74177c9d938f1f73d53110623dfc61b6",
      "tree": "b2437d4cdce399ce462d587d9c9c47a8fceb8953",
      "parents": [
        "272bf7e60add5f741fb9a2589eaa71945257afcc",
        "af88835231c2508509eb19aa2d21b92879351962"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 23 17:19:34 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 23 17:19:34 2015 +0000"
      },
      "message": "Merge \"Remove unnecessary null checks in CheckCast and InstanceOf\""
    },
    {
      "commit": "af88835231c2508509eb19aa2d21b92879351962",
      "tree": "4ef1c8fb3c5b78175767999a888b0c2cb1ea6485",
      "parents": [
        "da93333d568f3c5bd8eeb58341d10a332e1d42bf"
      ],
      "author": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Mon Apr 20 14:41:30 2015 +0100"
      },
      "committer": {
        "name": "Guillaume \"Vermeille\" Sanchez",
        "email": "guillaumesa@google.com",
        "time": "Thu Apr 23 17:53:17 2015 +0100"
      },
      "message": "Remove unnecessary null checks in CheckCast and InstanceOf\n\nChange-Id: I6fd81cabd8673be360f369e6318df0de8b18b634\n"
    },
    {
      "commit": "538491967d1514a263e99d78379d743fcc896eef",
      "tree": "f07290c03789f7b1d7851bc94ebe77b8060eb9a0",
      "parents": [
        "9d4d13f38398e880e610323242fe73d609bac40d"
      ],
      "author": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Mon Apr 20 14:22:27 2015 +0600"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 23 12:53:47 2015 +0100"
      },
      "message": "Mul simplification should expect zero operand\n\nIt is possible that zero constant can appear due to\nsimplification of other instructions, so we cannot expect\nzero handling from constant optimizations.\n\nChange-Id: I084126fd0c106ac2683c4f10a451960d9807f4f6\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "943136fd031f4fe18f6e8a956c72171d7cf78da0",
      "tree": "4f437e4fb89642e14bcad0e2fbdd4da39db4b3c2",
      "parents": [
        "862aaefdd63d8058b54a7d956a0229eec9dcbde6"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 22 15:19:51 2015 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 22 15:24:38 2015 +0100"
      },
      "message": "Remove warning when we do too many simplifications\n\nThis happens pretty often and pollutes the logs.\n\nChange-Id: I074783d3cf3519a5186d2dd81c821d97071302e7\n"
    },
    {
      "commit": "223f2f5b2a20ca8246da1523494900a2424d5956",
      "tree": "8217f5fdeb41dea987ae4a9b0607f34e6254939e",
      "parents": [
        "b4314b3aa80f0e6d3a55da7865e80658a150f1e8",
        "339dfc209ad93482269eea1386e79973abc313cf"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Apr 21 15:26:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 21 15:26:13 2015 +0000"
      },
      "message": "Merge \"Incorrect transformation of (sub,neg) to (sub) for fp\""
    },
    {
      "commit": "b0bd8915cb257cdaf46ba663c450a6543bca75af",
      "tree": "0af66cce65abb2958d03579bd7fb660ffdda929b",
      "parents": [
        "b9791aa606834160b085dec7c5b32ccbeaf9a186"
      ],
      "author": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Wed Apr 15 19:57:22 2015 -0400"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Apr 20 14:26:10 2015 -0400"
      },
      "message": "[optimizing] Replace FP divide by power of 2\n\nReplace a floating point division by a power of two by a multiplication\nof the reciprocal.  This is guarenteed to have the exact same result as\nit is exactly representable.\n\nAdd routines to allow generation of float and double constants after the\nSSA Builder.  I was unsure if float and double caches should be\nimplemented.  Under the assumption that there is probably not a lot of\nrepetition of FP values.  Please let me know.\n\nChange-Id: I3a6c3847b49b4e747a7e7e8843ca32bb174b1584\nSigned-off-by: Mark Mendell \u003cmark.p.mendell@intel.com\u003e\n"
    },
    {
      "commit": "339dfc209ad93482269eea1386e79973abc313cf",
      "tree": "cd0173a02590ead4fe7064a9b8f6ebf12a341ec5",
      "parents": [
        "f5091eee4abe73c64959e53bda684bd689569643"
      ],
      "author": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Mon Apr 20 12:29:32 2015 +0600"
      },
      "committer": {
        "name": "Serguei Katkov",
        "email": "serguei.i.katkov@intel.com",
        "time": "Mon Apr 20 23:47:16 2015 +0600"
      },
      "message": "Incorrect transformation of (sub,neg) to (sub) for fp\n\nA pair (sub,neg) should not be transformed to (sub) for\nfloating point operations, otherwise we can lose the sign of\nzero for instructions like this:\n  - (A - B) !\u003d B - A if B \u003d\u003d A\n\nChange-Id: I4d612612d4dc0a067fac5721ad206f74168bcd36\nSigned-off-by: Serguei Katkov \u003cserguei.i.katkov@intel.com\u003e\n"
    },
    {
      "commit": "0d13fee6f4330cc9cb100c43135490a34c11d7a5",
      "tree": "e96f089c1e384772bebdd8d8701c95d73569f29c",
      "parents": [
        "27eac12a66a73eb38b5ccb45b62350cf341299d0"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Apr 17 14:52:19 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 20 18:11:39 2015 +0100"
      },
      "message": "ART: Simplify more bool operations\n\nNow that we have the HBooleanNot instruction, the instruction\nsimplifier can optimize out more conditions comparing a boolean\nagainst a constant, as well as sequences of Boolean negations.\n\nChange-Id: I7f634f6428a3984dd97b27b3d6362491346f1ff6\n"
    },
    {
      "commit": "188d4316a880ae24aed315aa52dc503c4fcb1ec7",
      "tree": "a480bdc4a80f63d46abcde2ef7a36e1ad072d624",
      "parents": [
        "27ef3177fb164b5e1a3b8a6fd43d25f3074e586d"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Thu Apr 09 18:30:21 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 10 16:19:55 2015 +0000"
      },
      "message": "Opt compiler: Instruction simplification for HAdd, HNeg, HNot, HSub.\n\nUnder assumptions for the \u0027cost\u0027 of each IR (eg. neither HAdd nor HSub\nare faster than the other), transformations are only applied if they\n(locally) cannot degrade the quality of the graph. The code could be\nextended to look at uses of the IRs and detect more opportunities for\noptimisations.  The optimisations in this patch do not look at other\nuses for their inputs.\n\nChange-Id: Ib60dab007af30f43421ef5bb55db2ec32fb8fc0c\n"
    },
    {
      "commit": "8d5b8b295930aaa43255c4f0b74ece3ee8b43a47",
      "tree": "c26fc49bbc74615e7f0b9657aaf3757a8282d7a9",
      "parents": [
        "c8924c6ea9e83ba3832dd5551df38ab06f4aaca9"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Mar 24 10:51:52 2015 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Mar 26 14:10:03 2015 +0000"
      },
      "message": "ART: Force constants into the entry block\n\nOptimizations such as GVN and BCE make the assumption that all\nconstants are located in the entry block of the CFG, but not all\npasses adhere to this rule.\n\nThis patch makes constructors of constants private and only accessible\nto friend classes - HGraph for int/long constants and SsaBuilder for\nfloat/double - which ensure that they are placed correctly and not\nduplicated.\n\nNote that the ArenaAllocatorAdapter was modified to not increment\nthe ArenaAllocator\u0027s internal reference counter in order to allow\nfor use of ArenaSafeMap inside an arena-allocated objects. Because\ntheir destructor is not called, the counter does not get decremented.\n\nChange-Id: I36a4fa29ae34fb905cdefd482ccbf386cff14166\n"
    },
    {
      "commit": "b2fd7bca70b580921eebf7c45769c39d2dfd8a5a",
      "tree": "c5dae29519df73f889ba14495eb79d545cd7d6e5",
      "parents": [
        "356286f989941ac495417195e4129aaceaf36a83"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Wed Mar 11 16:48:16 2015 +0000"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Wed Mar 11 16:48:16 2015 +0000"
      },
      "message": "Opt compiler: Basic simplification for arithmetic operations.\n\nThe optimisations in this patch do not look further than the\ninputs of each operation.\n\nChange-Id: Iddd0ab6b360b9e7bb042db22086d51a31be85530\n"
    },
    {
      "commit": "acf735c13998ad2a175f5a17e7bfce220073279d",
      "tree": "94969f2387f0e6dad8c7e5712aa8187c9de2be56",
      "parents": [
        "39109a06015c91188232e59fa9e60e0915d24cd7"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Feb 12 15:25:22 2015 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Feb 19 17:07:52 2015 +0000"
      },
      "message": "Reference type propagation\n\n- propagate reference types between instructions\n- remove checked casts when possible\n- add StackHandleScopeCollection to manage an arbitrary number of stack\nhandles (see comments)\n\nChange-Id: I31200067c5e7375a5ea8e2f873c4374ebdb5ee60\n"
    },
    {
      "commit": "0304e182adee81be32c744fd3c0d28add29974ff",
      "tree": "1fb1a8730d94222e79e8525b5f887c6816d6833d",
      "parents": [
        "2a3611feeb12bd73ccdbb4692f9ca3705f925d56"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Jan 30 16:41:29 2015 -0800"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Feb 09 10:53:16 2015 -0800"
      },
      "message": "Improve bce so that more bounds checks can be eliminated.\n\nFor pattern like \"int[] array \u003d new int[size+1]\", we record this range\nfor size:\n[-1, array.length-1]\nThis can eliminate more bounds checks.\n\nAlso simplify overflow/underflow handling and make it more solid.\n\nEnhance instruction simplifier such that if array is a result of\nNewArray with a constant size, replace array.length with that constant.\n\nPlan to move all bce gtests to checker in another change.\n\nChange-Id: Ibe7cc7940b68fb6465dc3e0ff3ebdb0fd6487aa9\n"
    },
    {
      "commit": "10e244f9e7f6d96a95c910a2bedef5bd3810c637",
      "tree": "bc2b90ce716129115c05f79e21c58fe13b01fd20",
      "parents": [
        "ab7f56d9b9838811cb01773e45999e2cda4aa03a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Jan 26 18:54:32 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 29 12:01:26 2015 +0000"
      },
      "message": "optimizing: NullCheck elimination\n\nHow it works:\n- run a type analysis to propagate null information on instructions\n- during the last instruction simplifier remove null checks for which\nthe input is known to be not null\n\nThe current type analysis is actually a nullability analysis but it will\nbe reused in follow up CLs to propagate type information: so it keeps\nthe more convenient name.\n\nChange-Id: I54bb1d32ab24604b4d677d1ecdaf8d60a5ff5ce9\n"
    },
    {
      "commit": "fa93b504b324784dd9a96e28e6e8f3f1b1ac456a",
      "tree": "8a3e691268657db75a69c8d644e5a963abee66d6",
      "parents": [
        "1147eeed2ffc82ac9b1405f9fb0a6cbc8560c42b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 21 15:44:16 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 21 17:03:29 2015 +0000"
      },
      "message": "Do not use HNot for creating !bool.\n\nHNot folds to ~, not !.\n\nChange-Id: I681f968449a2ade7110b2f316146ad16ba5da74c\n"
    },
    {
      "commit": "01fcc9ee556f98d0163cc9b524e989760826926f",
      "tree": "db932611fcfb1390c761ae589a99dee5e956c271",
      "parents": [
        "dff1069220465f93dc2e3636a0acd7522a5ba639"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 01 14:16:20 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Dec 01 14:38:56 2014 +0000"
      },
      "message": "Remove type conversion nodes converting to the same type.\n\nWhen optimizing, we ensure these conversions do not reach the\ncode generators. When not optimizing, we cannot get such situations.\n\nChange-Id: I717247c957667675dc261183019c88efa3a38452\n"
    },
    {
      "commit": "5e6916cea259897baaca019c5c7a5d05746306ed",
      "tree": "0b4c73776c68e9ccbf4b49dbff5cdc9b3d7150f9",
      "parents": [
        "bf75c5cf32a47eecadcc5e4a324237c1f1d09cde"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 18 16:53:35 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 19 14:33:12 2014 +0000"
      },
      "message": "Use HOptimization abstraction for running optimizations.\n\nMove existing optimizations to it.\n\nChange-Id: I3b43f9997faf4ed8875162e3a3abdf99375478dd\n"
    },
    {
      "commit": "af07bc121121d7bd7e8329c55dfe24782207b561",
      "tree": "51e93225aa77c3949a63104f8d48e4b6f6fb2b5b",
      "parents": [
        "d0d805bad888857fe974142cbf3292b9747daae3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 12 18:08:09 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 14 13:45:02 2014 +0000"
      },
      "message": "Minor object store optimizations.\n\n- Avoid emitting write barrier when the value is null.\n- Do not do a typecheck on an arraystore when storing something that\n  was loaded from the same array.\n\nChange-Id: I902492928692e4553b5af0fc99cce3c2186c442a\n"
    },
    {
      "commit": "1cc5f251df558b0e22cea5000626365eb644c727",
      "tree": "5e65a32366261646edce02283a185928adba79b5",
      "parents": [
        "b08f4dcf90215ed49e0b796ab3e609bd605be8ba"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Oct 22 18:06:21 2014 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Oct 23 10:12:06 2014 +0100"
      },
      "message": "Implement int bit-wise not operation in the optimizing compiler.\n\n- Add support for the not-int (integer one\u0027s complement\n  negate) instruction in the optimizing compiler.\n- Extend the HNot control-flow graph node type and make it\n  inherit from HUnaryOperation.\n- Generate ARM, x86 and x86-64 code for integer HNeg nodes.\n- Exercise these additions in the codegen_test gtest, as there\n  is not direct way to assess the support of not-int from a\n  Java source.  Indeed, compiling a Java expression such as\n  `~a\u0027 using javac and then dx generates an xor-int/lit8 Dex\n  instruction instead of the expected not-int Dex instruction.\n  This is probably because the Java bytecode has an `ixor\u0027\n  instruction, but there\u0027s not instruction directly\n  corresponding to a bit-wise not operation.\n\nChange-Id: I223aed75c4dac5785e04d99da0d22e8d699aee2b\n"
    },
    {
      "commit": "01ef345767ea609417fc511e42007705c9667546",
      "tree": "8a3cf1b5a576caf212ef31db966b97b6d23aaf98",
      "parents": [
        "a9f2904263581f606a5704f2bb74efcecf7e9f97"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 01 11:32:17 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 07 21:25:27 2014 +0100"
      },
      "message": "Add trivial register hints to the register allocator.\n\n- Add hints for phis, same as first input, and expected registers.\n- Make the if instruction accept non-condition instructions.\n\nChange-Id: I34fa68393f0d0c19c68128f017b7a05be556fbe5\n"
    },
    {
      "commit": "3c04974a90b0e03f4b509010bff49f0b2a3da57f",
      "tree": "52649104e3e80272c3774793350f4d9f260ae732",
      "parents": [
        "c0d36abb12cdbb9469039c1dc153a586bd984015"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 24 18:10:46 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 25 12:23:40 2014 +0100"
      },
      "message": "Optimize suspend checks in optimizing compiler.\n\n- Remove the ones added during graph build (they were added\n  for the baseline code generator).\n- Emit them at loop back edges after phi moves, so that the test\n  can directly jump to the loop header.\n- Fix x86 and x86_64 suspend check by using cmpw instead of cmpl.\n\nChange-Id: I6fad5795a55705d86c9e1cb85bf5d63dadfafa2a\n"
    }
  ]
}
