)]}'
{
  "log": [
    {
      "commit": "639cc8c7bbb7d8c341173bcf24604ccb4328acb8",
      "tree": "ae8181b94ddd145edaff141a2b351478161f1559",
      "parents": [
        "3941c882ea7b54772dec36a9a1b33e0b8a7474f7"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue Oct 18 13:03:31 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Thu Oct 20 14:14:17 2016 -0700"
      },
      "message": "Improve recognition of select-based period induction.\n\nRationale:\nSimilar to the previous CL, this helps to eliminate more dead induction.\nNow, CaffeineLogic, when compiled with dx (rather than jack) improves\nby a 1.5 speedup (9000us -\u003e 6000us).\n\nNote:\nWe need to run the simplifier before induction analysis to trigger\nthe select simplification first. Although a bit of a compile-time hit,\nit seems a good idea to run a simplifier here again anyway.\n\nTest: test-art-host\nChange-Id: I93b91ca40a4d64385c64393028e8d213f0c904a8\n"
    },
    {
      "commit": "55418e12a530893d25e18d0beb94bde1a4552bd9",
      "tree": "f30d57d7be129848f382da2168b70f8115efca92",
      "parents": [
        "ae3016324f906ab2d777572d467c3e465bca6542"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 23 16:51:42 2016 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Sep 23 17:07:14 2016 +0200"
      },
      "message": "Add DCE check to test 458-checker-instruct-simplification\n\nFollow-up to 9837caff9cbfb61e3dabc6fbecb398d4d659c017 by checking\nthat dead code is actually removed.\n\nTest: make -j32 test-art-host\nChange-Id: Ic7848be893c6fe5e65f5bcdd525597072bf67857\n"
    },
    {
      "commit": "9837caff9cbfb61e3dabc6fbecb398d4d659c017",
      "tree": "b8101227d3987cebbc1c9d13f5d5f23a037a9f9a",
      "parents": [
        "80eb0bc2757274816a014a2997848d288c9ee553"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Aug 01 11:09:50 2016 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Sep 21 13:45:08 2016 +0200"
      },
      "message": "Update art tests\n\nJack generates different code compared to the previous release so\nsome tests need to be updated. For instance, Jack transform \u0027!cond\u0027\ninto \u0027cond xor 1\u0027.\n\nThe test 463-checker-boolean-simplifier still tests the if/else\npattern using smali.\n\n(cherry picked from commit e4d28c502486afe58a0e156b8fefb621a622cec2)\n\nBug: 29493697\nTest: lunch aosp_bullhead-userdebug \u0026\u0026 make -j32\nTest: make -j32 test-art-host \u0026\u0026 make -j32 test-art-target\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost\nChange-Id: Ief8ac3e9a4bcaa35c99e57161961d630333d3b3c\n"
    },
    {
      "commit": "ca57c409b947bdd4642374ae8d7366e14b2a836e",
      "tree": "44f85e41cd4dfe1aa57018f14bc762a234758105",
      "parents": [
        "7d26164308e9eab5c596a19b841e4ab1c27828a8"
      ],
      "author": {
        "name": "Wojciech Staszkiewicz",
        "email": "staszkiewicz@google.com",
        "time": "Mon Sep 19 10:06:09 2016 -0700"
      },
      "committer": {
        "name": "Wojciech Staszkiewicz",
        "email": "staszkiewicz@google.com",
        "time": "Mon Sep 19 15:33:15 2016 -0700"
      },
      "message": "Shorten long test names\n\nLong Android.run-test.mk targets cause testing framework to\nmisbehave. Issues occur in no-prebuild mode when --output-path\nparameter generated by the make system is too long. When this\nhappens oat generation fails silently in oat_file_assistant.cc\nduring creation of empty vdex and oat files.\n\nCreation fails because file names, which are as long as absolute path\nto source dex file, are longer than 255 characters Linux file name\nlimit.\n\nBecause oat generation fails silently affected tests pass even though\nthey were effectively ran in interpreter mode, instead of intended\ndefault mode.\n\nThis CL shortens test names to be at most 35 characters. This helps\nmake the tests more reliable.\n\nTest: m test-art-run-test\nBug: 31597671\nChange-Id: Ic68408ae0c98ffca0c64ca4f5535f4e683a296f0\n"
    },
    {
      "commit": "5319d3cca5a9b8e9e3f59421818272b966575172",
      "tree": "a90bd83b7e69bbff0be601088bb1c764125d8cf6",
      "parents": [
        "9cff32df754c428ef69ddb61e7600abfd4c75266"
      ],
      "author": {
        "name": "Wojciech Staszkiewicz",
        "email": "staszkiewicz@google.com",
        "time": "Mon Aug 01 17:48:59 2016 -0700"
      },
      "committer": {
        "name": "Wojciech Staszkiewicz",
        "email": "staszkiewicz@google.com",
        "time": "Mon Aug 08 11:24:26 2016 -0700"
      },
      "message": "Implement running user defined list of passes\n\nThis change introduces new dex2oat switch --run-passes\u003d. This switch\naccepts path to a text file with names of passes to run.\nCompiler will run optimization passes specified in the file rather\nthen the default ones.\n\nThere is no verification implemented on the compiler side. It is user\u0027s\nresponsibility to provide a list of passes that leads to successful\ngeneration of correct code. Care should be taken to prepare a list\nthat satisfies all dependencies between optimizations.\n\nWe only take control of the optional optimizations. Codegen (builder),\nand all passes required for register allocation will run unaffected\nby this mechanism.\n\nChange-Id: Ic3694e53515fefcc5ce6f28d9371776b5afcbb4f\n"
    },
    {
      "commit": "166aaee6aa39c20c87113b3fcf0dcd81e0a934cb",
      "tree": "70ab523f146d164ece8a0e94dbc499783005e3dc",
      "parents": [
        "115c1de1f812d380449ef89cfe50cc4fb4289275"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 18 08:27:23 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 22 20:37:07 2016 -0700"
      },
      "message": "ART: Fix type parameter in tests\n\nMove Class to Class\u003c?\u003e, Constructor to Constructor\u003c?\u003e, and in\ngeneral clean up reflection.\n\nTest: m test-art-host-run-test\nChange-Id: I3a4223ee8d14d032015edf34bf27135757f7138c\n"
    },
    {
      "commit": "dac9b19b822e6cc6f1d7f40e27780515d1fddf22",
      "tree": "de163a82ef5f13394c4b467897e558571ed284b9",
      "parents": [
        "173f435e56acfd0501fc460747572a4796dcffe0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 15 10:46:17 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 18 11:22:51 2016 +0100"
      },
      "message": "Add a new control flow simplifier.\n\nRun it in the dead code elimination phase, as it relates to\ncreating dead branches.\n\nFrom 0.04 to 0.07% less code size framework/gms/docs/fb (70K saved on fb)\n3%-5% runtime performance improvements on Richards/DeltaBlue/Ritz.\nCompile-time is mixed, so in the noise (from 2% slower to 1% faster).\n\ntest:611-checker-simplify-if\n\nChange-Id: Ife8b7882d57b5481f5ca9dc163beba655d7e78bf\n"
    },
    {
      "commit": "d3278bd288aaecd525f931a54f5f2a392f627fd3",
      "tree": "20a795e7de9ace6fa695e123fcf7beaf4e9ccbb9",
      "parents": [
        "d8f5f56f2dd90e2bcb6d41cb48403320b9eb04b9"
      ],
      "author": {
        "name": "Maxim Kazantsev",
        "email": "maxim.kazantsev@intel.com",
        "time": "Tue Jul 12 15:55:33 2016 +0600"
      },
      "committer": {
        "name": "Maxim Kazantsev",
        "email": "maxim.kazantsev@intel.com",
        "time": "Tue Jul 12 11:14:02 2016 +0000"
      },
      "message": "Two more patterns for instruction simplifier\n\nThis patch allows the instruction simplifier to cover\ntwo more cases:\n\n  x \u003d a + b      and      x \u003d a - b\n  y \u003d x - b               y \u003d x + b\n\nIn both cases y can be replaced with a, if the types\nof arguments are integral.\n\nChange-Id: I4735737f471e31057f1df76ddace5d4d1c79cde6\nTest: New tests in 458-checker-instruction-simplification.\nSigned-off-by: Max Kazantsev \u003cmaxim.kazantsev@intel.com\u003e\n"
    },
    {
      "commit": "e14dc86d4e84d52426510d0fafbac3d7e04f960c",
      "tree": "7ec03801e3dd8d4a6f428239308f1f7700c815fc",
      "parents": [
        "1fdb340de4e608a88e8683c857cad5d0da2c16de"
      ],
      "author": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri May 13 17:56:15 2016 +0100"
      },
      "committer": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri Jul 01 17:45:30 2016 +0100"
      },
      "message": "Simplification for associative and commutative operations on constants\n\nThe purpose of this change is to enable the instruction simplifier\nto recognize patterns such as\n\nOP y, x, const1\nOP z, y, const2\n\nwhere OP is both an associative and a commutative operation on integral\ntypes, and replace them with\n\nOP z, x, const3\n\nSince subtraction on integral types is equivalent to addition with a\nnegated operand, it receives a similar treatment, even though it is\nnot commutative.\n\nChange-Id: I278cac39bd39bc843d250a976931cb000876ea88\n"
    },
    {
      "commit": "50518449afe8fa7eb741f42c904fb4baf6c34da2",
      "tree": "e88f92b642b79e136a1c8c20680e9430ed4c1cfb",
      "parents": [
        "105683791e6b3f017a1a5673df22bf2185e19b54"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Mon Jun 27 11:39:19 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Tue Jun 28 09:32:41 2016 +0100"
      },
      "message": "Optimize away useless masking operations on shift amounts.\n\nChange-Id: I90d69757cc45312eda3d57cc2d32bfb4e47963f5"
    },
    {
      "commit": "a975dcc51f9aab5e06b1d4f32a145dc95e540347",
      "tree": "12aa83b8dd18c8876b2b213bea0934bb4f2326af",
      "parents": [
        "1e28d1e145a898e34dbb43bb655d905653e9c1e9"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Mon Jun 27 11:13:34 2016 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@linaro.org",
        "time": "Mon Jun 27 10:47:43 2016 +0000"
      },
      "message": "Fixes and cleaning for test/458-checker-instruction-simplification.\n\n- Use the `doThrow` trick to defeat inlining.\n- Fix the order of `expected` and `found` arguments for a few tests.\n\nChange-Id: Id8e5041993d72f61e75b4586b49180006cda4b5c"
    },
    {
      "commit": "164306e779de522efba7df637618a8eeed9e37ac",
      "tree": "6ceddd6879870272d6bef39026c36212ce6854df",
      "parents": [
        "5681b6638b0001c62d02795b0853e2e82787edf1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 14:57:32 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 15 15:25:39 2016 +0000"
      },
      "message": "Optimizing: Improve shift simplification, x \u003e\u003e\u003e 64.\n\nSimplify shifts by a multiple of bit size, not just 0.\nARM codegen does not expect to see such shifts and it\nis guarding against them with a DCHECK().\n\nBug: 27638111\nChange-Id: I3ae8383d7edefa0facd375ce511e7a226d5468a1\n"
    },
    {
      "commit": "625090fe9bf47d8d735c9a66cbf491de3a3e3765",
      "tree": "9bf994303cf2491ec9c676d558f3bce97b46cdb7",
      "parents": [
        "70bc6de7e27dd7d82a2bac6685e0f3096df07b83"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 14 18:00:05 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 14 19:01:16 2016 +0000"
      },
      "message": "Optimizing: Fix TypeConversion(And(x, const)) simplification.\n\nAvoid introducing implicit conversions when simplifying the\nexpression TypeConversion(And(x, const)). Previously, when\nwe dropped the And, we could end up with a TypeConversion to\nthe same type which should be eliminated on subsequent pass\nof the block\u0027s instructions; however, a subsequent dependent\nTypeConversion in the same block would be processed earlier\nand we would unexpectedly see its input as the conversion to\nthe same type, failing a DCHECK().\n\nBug: 27626509\nChange-Id: I5874a9ceafbf635cf3391beea807ede8468ab5c3\n"
    },
    {
      "commit": "bdd7935c2adc3ad190ee87958e714a36f33cedae",
      "tree": "64563d52d699d63c22574dbc97e6d5410df94ac3",
      "parents": [
        "2af7213a4e0d395fe22dcdce6ec10a3bd131023d"
      ],
      "author": {
        "name": "Anton Shamin",
        "email": "anton.shamin@intel.com",
        "time": "Mon Feb 15 12:48:36 2016 +0600"
      },
      "committer": {
        "name": "Anton Shamin",
        "email": "anton.shamin@intel.com",
        "time": "Fri Mar 11 18:28:55 2016 +0600"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Change condition to opposite if lhs is constant\"\"\"\"\n\nThis reverts commit d4aee949b3dd976295201b5310f13aa2df40afa1.\n\nChange-Id: I505b8c9863c310a3a708f580b00d425b750c9541\n"
    },
    {
      "commit": "f02c3cf66c2c24533f6da43970e7b766b2ca9938",
      "tree": "28dc729ed7e19f671b959531776682029ea197a8",
      "parents": [
        "8d468e351e42e8424f93746d9ee183f8cff01ec2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 29 09:14:51 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Mar 02 11:26:02 2016 +0000"
      },
      "message": "ART: Switch Checker run-tests to Jack\n\nBug: 25635944\nChange-Id: Ic6774028025b51f54589e9625003e8f69cf39dea\n"
    },
    {
      "commit": "afd33d77f2df61467dae38cfd59b8e8e6a490058",
      "tree": "af3013724538e6bd3dab47863ae3d6633aba64e0",
      "parents": [
        "e8e3d9253fefffd843b42b1da76b37ef65bc100c",
        "8428bd376e660df2ffceee72f797d1cfc6c66433"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 15 18:39:47 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 15 18:39:47 2016 +0000"
      },
      "message": "Merge \"Optimizing: Remove unnecessary And before TypeConversion.\""
    },
    {
      "commit": "b01e0e2e931b9670690a9eeffdbee73db588715d",
      "tree": "cde0cb9e1d26fe11c730ed8580f507a58cf8006a",
      "parents": [
        "9b8beaa5d04afcab0e3ddb6306ed610c0d11da8d",
        "badd826664896d4a9628a5a89b78016894aa414b"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 15 16:12:32 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 15 16:12:32 2016 +0000"
      },
      "message": "Merge \"ART: Run SsaBuilder from HGraphBuilder\""
    },
    {
      "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": "badd826664896d4a9628a5a89b78016894aa414b",
      "tree": "a30e8b3e62126ae1e1df1152ac643cfc5f2b074a",
      "parents": [
        "47a2a45a6673ddf3322115ff5058763f82a9368f"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Feb 02 16:28:56 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 15 10:21:07 2016 +0000"
      },
      "message": "ART: Run SsaBuilder from HGraphBuilder\n\nFirst step towards merging the two passes, which will later result in\nHGraphBuilder directly producing SSA form. This CL mostly just updates\ntests broken by not being able to inspect the pre-SSA form.\n\nUsing HLocals outside the HGraphBuilder is now deprecated.\n\nBug: 27150508\nChange-Id: I00fb6050580f409dcc5aa5b5aa3a536d6e8d759e\n"
    },
    {
      "commit": "2f10a5fb8c236a6786928f0323bd312c3ee9a4cc",
      "tree": "0dc51717b1f5d9b2c20898c5283467d4feb220e2",
      "parents": [
        "a20748aceb63396c5e09366968bbc71308f745df"
      ],
      "author": {
        "name": "Mark P Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Mon Jan 25 14:47:50 2016 +0000"
      },
      "committer": {
        "name": "Mark Mendell",
        "email": "mark.p.mendell@intel.com",
        "time": "Thu Feb 04 12:59:22 2016 -0500"
      },
      "message": "Revert \"Revert \"X86: Use the constant area for more operations.\"\"\n\nThis reverts commit cf8d1bb97e193e02b430d707d3b669565fababb4.\n\nHandle the case of an intrinsic where CurrentMethod is still an input.\nThis will be the case when there are unresolved classes in the\nhierarchy.\n\nAdd a test case to confirm that we don\u0027t crash when handling Math.abs,\nwhich wants to add a pointer to the constant area for the bitmask to be\nused to remove the sign bit.\n\nEnhance 565-checker-condition-liveness to check for the case of deeply\nnested EmitAtUseSite chains.\n\nChange-Id: I022e8b96a32f5bf464331d0c318c56b9d0ac3c9a\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": "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": "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": "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": "57e863c3739c310380e19252ad5746ff08d219c7",
      "tree": "51c7edec090879968ab08951e9b667ddd413a72e",
      "parents": [
        "a9656fad4e14ab2cc73f8c739322f875d02be2b2"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 11 10:27:13 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Jan 11 10:27:13 2016 +0000"
      },
      "message": "ART: Do not build Checker tests with `dx --no-optimize`\n\nChange-Id: Ice9298b92cde5486db40ccdef43cca6d36179d2c\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": "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": "6a92a033c33e383541d77607fbe8cd982875d13d",
      "tree": "11ede9dc975d1c79751ce2012a4956325df24481",
      "parents": [
        "b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bb"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Jul 23 12:15:01 2015 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 27 16:18:05 2015 +0100"
      },
      "message": "Cosmetic changes in ART run-tests.\n\nPerform a copyright headers clean up mostly.\n\nChange-Id: I26c855b2f54d0887676d9b9b8281b14b7978ab29\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": "b2bdfce7f805b00668a2521b1c939a0aafb2be49",
      "tree": "0c8aba9022fe62a176254b8459b414e9703f890f",
      "parents": [
        "d4de42f6fd0f00c5b3ca01fed6a26d11e617c3b9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 15:46:47 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 18 15:53:02 2015 +0100"
      },
      "message": "Run a simplification pass before code generation.\n\nThe code generators assume things that only the instruction\nsimplier ensures. So it has to be run last in case previous\noptimiziations broke those assumptions.\n\nbug:21865464\n\nChange-Id: I1f84016017bf691c2a34982e202a505b269f609a\n"
    },
    {
      "commit": "454a481d116ec4e6dc36fab23a073017b1436d7f",
      "tree": "9c603f9e2015a405ed1932f397df4f42930c23e2",
      "parents": [
        "bebf6bdf833ea9e090171303200bd8adc9321762"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 09 10:37:32 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 10 16:13:34 2015 +0100"
      },
      "message": "Revert \"Revert \"Support for inlining virtual and interface calls.\"\"\n\nIt now works thanks to:\n- https://android-review.googlesource.com/#/c/154016/ where\n  the invoke type is changed.\n- The new FindMethodIndexIn method in this change, that\n  locates the right method index relative to the caller\u0027s\n  dex file.\n\nThis reverts commit 6e4758615308bb525b6350c30468e33a2e1f2274.\n\nChange-Id: Iddba11664a9241e210fec211cd2aed9f4b90d118\n"
    },
    {
      "commit": "6e4758615308bb525b6350c30468e33a2e1f2274",
      "tree": "0a9fbb0f1f90dfe273d94659f077cc1e6b84966c",
      "parents": [
        "1d5006c34d75758752bf3499892e3d5beb11d5dc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 08 15:52:23 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 08 15:54:14 2015 +0000"
      },
      "message": "Revert \"Support for inlining virtual and interface calls.\"\n\nFails for some apps.\n\nbug: 21674542\n\nThis reverts commit 1d5006c34d75758752bf3499892e3d5beb11d5dc.\n\nChange-Id: Ia74b5e54d59f8ffe9992591324a12f71efb67af4\n"
    },
    {
      "commit": "1d5006c34d75758752bf3499892e3d5beb11d5dc",
      "tree": "3540993b4bb05138e0a029c016384fd05b6ace57",
      "parents": [
        "6a0d5e7fe6dc0c9d3dd941ab991203f2d5d1c354"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 03 15:04:32 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 04 14:45:18 2015 +0100"
      },
      "message": "Support for inlining virtual and interface calls.\n\nAlso had to change the pass order to get reference type propagation\nbefore the inliner.\n\nChange-Id: I4bf3bbb2d17c7d9cab632cfdd96adad8368bdfea\n"
    },
    {
      "commit": "a06d66a4ee60926127b9498b7ff0b3e37a24fccf",
      "tree": "87ec5d72211d5c3446e1d80ee71eda77faffd6b3",
      "parents": [
        "b4e2fbbed28c3bcdb8fd0fee5a201ba78e1edf28"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 28 11:14:54 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu May 28 11:57:49 2015 +0100"
      },
      "message": "ART: Distinguish Checker lines from comments\n\nIn order to prevent tests passing due to lines with hard-to-spot\nformatting errors begin ignored, e.g. by forgetting the colon after\n\"//CHECK\", Checker will now require its assertions to start with \"///\"\nor \"##\", respectivelly for Java and Smali. Such lines will never be\nignored and will fail the test unless successfully parsed.\n\nChange-Id: I0da9a8f13eb96d950af8c85df17d1899a853a299\n"
    },
    {
      "commit": "c57397b2b87c7e6f28f4eee3c996d091e7dc0b01",
      "tree": "51ef8e6126cb41174f6103700c5f5442a38bbfe5",
      "parents": [
        "06675720cc274eb9d91a4ecd3fb1eef94a2d88f0"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri May 15 16:01:59 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri May 15 16:50:23 2015 +0100"
      },
      "message": "ART: Print C1vis lists as [v1,...,vN]\n\nChecker interprets whitespace as a don\u0027t-care placeholder, making it\neasier to write assertions which test only parts of the output (e.g.\n\"//CHECK: Add liveness:44\" does not test the inputs or any other\nattributes apart from \"liveness\").\n\nHowever, since the GraphVisualizer prints lists with elements\nseparated by spaces (\"[ v1 ... vN ]\"), this allows for false positives\ncaused by an occurrence elsewhere in the output. For example, the\nassertion: \"//CHECK: [ x y ]\" will match \"[ x y ]\" but also\n\"[ x a y b ]\" or even \"[ x ] abc [ y ]\".\n\nSwitching to comma-separated lists works around this issue.\n\nThis patch updates all test files, fixes one false positive that this\nchange revealed (test 442, line 337) and two occurrences of a wrong\nmatch (test 462, lines 121, 149).\n\nBug: 21189305\nChange-Id: I3b22503be3d92529dac0b13f66bccbcfabea6721\n"
    },
    {
      "commit": "c2c48ffdd623b4e58b34115d1521b0988a42b217",
      "tree": "56a7aea7fa187c388592e3d6df60be9c8edbfd0e",
      "parents": [
        "1cad536d675846ac9c110b5b3a412dfc55ace3ed"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri May 15 14:24:31 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri May 15 14:50:51 2015 +0100"
      },
      "message": "ART: Change Checker syntax for variables\n\nThis patch changes the syntax for defining and referencing variables\nfrom square brackets \u0027[[VAR]]\u0027 to angle brackets \u0027\u003c\u003cVAR\u003e\u003e\u0027. This is\ndone in order to avoid clashes when matching against lists enclosed\nin square brackets.\n\nChange-Id: Ib9560b07bdc7bd641fd1eb6143c0063e0783f1eb\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": "769c9e539da8ca80aa914cd12276aa5bd79148ee",
      "tree": "9aadf98a3fcbf7909f76c53fa2ee036ebda00304",
      "parents": [
        "0fbfe6f92a2481daf914043262b5854e65d8c3cc"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 13:54:09 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Apr 27 17:00:58 2015 +0100"
      },
      "message": "ART: Simplify Ifs with BooleanNot condition\n\nIf statements with negated condition can be simplified by removing the\nnegation and swapping the true and false branches.\n\nChange-Id: I197afbc79fb7344d73b7b85d3611e7ca2519717f\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": "7bf9bc7854f5c8ccc2cb2ef4be4f728c5fbd3236",
      "tree": "f4a4caeb5c0682b15e68b4f47020ea0239987cb9",
      "parents": [
        "f16d7b3824b2777b95fb509c1d2a95bef89f65a4",
        "b2a58477e14e1b15cb9848d16015a49a854ee32c"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 24 15:53:25 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 24 15:53:25 2015 +0000"
      },
      "message": "Merge \"Minor improvements to 458-checker-instruction-simplification.\""
    },
    {
      "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": "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": "b2a58477e14e1b15cb9848d16015a49a854ee32c",
      "tree": "4d99998bb80bbe373a3b5627edad24e0be35ddbe",
      "parents": [
        "2e0f89b1b61685f7c322a4c6ec3e3b4839e76d64"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Fri Apr 17 14:35:18 2015 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Mon Apr 20 14:46:22 2015 +0100"
      },
      "message": "Minor improvements to 458-checker-instruction-simplification.\n\nThis follows earlier comments from Roland:\nhttps://android-review.googlesource.com/#/c/140446\n  /2/test/458-checker-instruction-simplification/src/Main.java@337\n  /2/test/458-checker-instruction-simplification/src/Main.java@465\n\nChange-Id: I255ab74b8885dd8e86bb2c11bba4075fa0eaa183\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": "744176959a259f36fe7ca7d101aee1cf39d707d5",
      "tree": "2f3aa65a881020beeb6f4b3313b3366733bbf3f5",
      "parents": [
        "e8888c83786d1f2bddbffd1dd6f37b95b7d2425d"
      ],
      "author": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Thu Apr 09 15:21:41 2015 +0100"
      },
      "committer": {
        "name": "Alexandre Rames",
        "email": "alexandre.rames@arm.com",
        "time": "Fri Apr 10 10:53:19 2015 +0100"
      },
      "message": "Fix checker tests in 458-checker-instruction-simplification.\n\nChange-Id: I9931e1692117360b8396c0dd8d171c822f0aba3b\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"
    }
  ]
}
