)]}'
{
  "commit": "8bce5e413a15abb756a1f6d0bc2f6741b6463b3e",
  "tree": "c7689d32c1681290f01ef577f11e5875e717217d",
  "parents": [
    "471022256e4705314aedf21c53bc351ece88ff43"
  ],
  "author": {
    "name": "Matt Turner",
    "email": "mattst88@gmail.com",
    "time": "Mon Sep 21 07:26:08 2026 -0600"
  },
  "committer": {
    "name": "Jeff Law",
    "email": "jeffrey.law@oss.qualcomm.com",
    "time": "Mon Sep 21 07:26:08 2026 -0600"
  },
  "message": "[PATCH 1/5] alpha: implement the FP classification optabs\n\nGCC expands __builtin_isnan, __builtin_isinf, __builtin_isfinite and\n__builtin_isnormal into FP comparisons on alpha, and by default those\ncomparisons carry no software-completion suffix:\n\n  isnan_d:\n\tcmptun $f16,$f16,$f10\n\tfbne $f10,$L11\n\nA subnormal operand raises a denormal-operand exception there, and the\noutcome depends on the FPCR denormal-operand-disable bit: the operand is\nflushed to zero, which makes a subnormal indistinguishable from a zero,\nor the trap is delivered with no completion information, which is fatal:\n\n  $ cat cls.c\n  #include \u003cmath.h\u003e\n  int main (void)\n  {\n    volatile double sub \u003d 0x1p-1050;\n    return fpclassify (sub);\n  }\n  $ ./cls\n  Floating point exception (core dumped)\n\n-mieee is the documented way to get subnormal support, so this is a\nmatter of quality of implementation rather than conformance, but the\nclassification built-ins exist to detect exactly these values and should\nnot kill the process when given one.  Classify by inspecting the encoding\nin an integer register instead, as the AArch64 isinf, isfinite and isnan\nexpanders do for PR66462.  Defining these patterns also stops\nfold_builtin_interclass_mathfn from rewriting the built-ins into\ncomparisons in the first place.\n\nWith -mieee the comparisons are completed by the kernel and are cheaper,\nso keep the generic expansions there, except with -fsignaling-nans: a\ncomparison raises an invalid-operation exception for a signaling NaN,\nwhich is the PR66462 case that AArch64 and LoongArch handle the same way.\n\ngcc/ChangeLog:\n\n\tPR middle-end/66462\n\t* config/alpha/alpha-protos.h (enum alpha_fp_class): New.\n\t(alpha_expand_fp_classify): Declare.\n\t* config/alpha/alpha.cc (alpha_expand_fp_classify): New function.\n\t* config/alpha/alpha.md (isfinite\u003cmode\u003e2, isinf\u003cmode\u003e2)\n\t(isnan\u003cmode\u003e2, isnormal\u003cmode\u003e2): New expanders.\n\ngcc/testsuite/ChangeLog:\n\n\tPR middle-end/66462\n\t* gcc.target/alpha/fp-classify-1.c: New test.\n\t* gcc.target/alpha/fp-classify-2.c: New test.\n\t* gcc.target/alpha/fp-classify-3.c: New test.\n\t* gcc.target/alpha/fp-classify-4.c: New test.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c64121d1f3f93209bf499302062fee3b5226c5bf",
      "old_mode": 33188,
      "old_path": "gcc/config/alpha/alpha-protos.h",
      "new_id": "66a1b5a6a6b0c393f69e047afe52dace760f17cb",
      "new_mode": 33188,
      "new_path": "gcc/config/alpha/alpha-protos.h"
    },
    {
      "type": "modify",
      "old_id": "15b4a074f21c0d29290c7f69ae21cd16b472cfbe",
      "old_mode": 33188,
      "old_path": "gcc/config/alpha/alpha.cc",
      "new_id": "3165a1e8d4a069e7ac6162d721d8e7ea46f9400f",
      "new_mode": 33188,
      "new_path": "gcc/config/alpha/alpha.cc"
    },
    {
      "type": "modify",
      "old_id": "880654b36a287912767900f842bb0fafad1929c6",
      "old_mode": 33188,
      "old_path": "gcc/config/alpha/alpha.md",
      "new_id": "269e2afe470729fc37b414726cbbc075046e18bf",
      "new_mode": 33188,
      "new_path": "gcc/config/alpha/alpha.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b1bac48cf7638fe8e5079b9d0942618d9e1b1505",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/alpha/fp-classify-1.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9bcf2401234de3a09874f1a8fd63113b0675be01",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/alpha/fp-classify-2.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "47272887359f8b115064bd397bd704d1e7d87560",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/alpha/fp-classify-3.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e32ea1d486d0c27e14913042c3967c0a0d47d7c0",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/alpha/fp-classify-4.c"
    }
  ]
}
