)]}'
{
  "commit": "bbf1dfa9da862caadf97ebf9a21b877b1553dbf4",
  "tree": "cf788ad3bb47c2712bc82e0db41f3de13996efb3",
  "parents": [
    "4f1c60804531475ad86206f3cc298da6ce001d83"
  ],
  "author": {
    "name": "Kyrylo Tkachov",
    "email": "ktkachov@nvidia.com",
    "time": "Wed Jul 29 21:27:05 2026 +0200"
  },
  "committer": {
    "name": "Kyrylo Tkachov",
    "email": "ktkachov@nvidia.com",
    "time": "Fri Aug 14 11:29:49 2026 +0200"
  },
  "message": "match.pd: combine a pair of vector comparisons against zero\n\nA lane of A | B is zero exactly when the corresponding lanes of A and of B\nare both zero, so\n\n  (A \u003d\u003d 0) \u0026 (B \u003d\u003d 0)  -\u003e  (A | B) \u003d\u003d 0\n\nand the De Morgan dual for inequality.  The existing scalar rule already\nimplements this identity.  Extend it to vector integers and use a view\nconversion when the operands differ only in element signedness.  Extend the\nrelated all-ones rule in the same way.\n\n  typedef int v4si __attribute__((vector_size (16)));\n  v4si f (v4si a, v4si b) { return (a \u003d\u003d 0) \u0026 (b \u003d\u003d 0); }\n\naarch64 -O3 before:\n\n\tcmeq\tv0.4s, v0.4s, #0\n\tcmeq\tv1.4s, v1.4s, #0\n\tand\tv0.16b, v0.16b, v1.16b\n\nafter:\n\n\torr\tv0.16b, v0.16b, v1.16b\n\tcmeq\tv0.4s, v0.4s, #0\n\nAdd vector_nop_conversion_p for the element-wise property shared by these\nrules and the existing nop_convert matcher.\n\nBootstrapped and tested on aarch64-none-linux-gnu.\n\ngcc/ChangeLog:\n\n\t* match.pd (nop_convert): Use vector_nop_conversion_p.\n\t((A \u003d\u003d 0) \u0026 (B \u003d\u003d 0), (A !\u003d 0) | (B !\u003d 0)): Extend the\n\texisting simplifications to vector operands.\n\t((A \u003d\u003d -1) \u0026 (B \u003d\u003d -1), (A !\u003d -1) | (B !\u003d -1)): Likewise.\n\t* tree.cc (vector_nop_conversion_p): New function.\n\t* tree.h (vector_nop_conversion_p): Declare.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.dg/tree-ssa/vec-mask-zero-1.c: New test.\n\nSigned-off-by: Kyrylo Tkachov \u003cktkachov@nvidia.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4ddddc43bd7279dd3c911ca1b8d74f3e34c3ec59",
      "old_mode": 33188,
      "old_path": "gcc/match.pd",
      "new_id": "7fa15845e7a54aa6558ea956de6bbed5521bb11f",
      "new_mode": 33188,
      "new_path": "gcc/match.pd"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1b31f7274887cc02427a32e03f79664ea61def8a",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/tree-ssa/vec-mask-zero-1.c"
    },
    {
      "type": "modify",
      "old_id": "94cd6fcfb04a4dd032ba7cd32c691df08220a89e",
      "old_mode": 33188,
      "old_path": "gcc/tree.cc",
      "new_id": "19069eb59607f6c17f7cab41406d3075d8956596",
      "new_mode": 33188,
      "new_path": "gcc/tree.cc"
    },
    {
      "type": "modify",
      "old_id": "61a0639bbff1ef9d70c4afb08a85678049c111d1",
      "old_mode": 33188,
      "old_path": "gcc/tree.h",
      "new_id": "e079082a81afcc18ccd7168228371abd827992b3",
      "new_mode": 33188,
      "new_path": "gcc/tree.h"
    }
  ]
}
