diff mbox series

[PATCHv4] Optab: add isnormal_optab for __builtin_isnormal

Message ID 759552ae-4e22-4c63-85b9-1941869e2161@linux.ibm.com
State New
Headers show
Series [PATCHv4] Optab: add isnormal_optab for __builtin_isnormal | expand

Commit Message

HAO CHEN GUI May 28, 2024, 6:36 a.m. UTC
Hi,
  This patch adds an optab for __builtin_isnormal. The normal check can be
implemented on rs6000 by a single instruction. It needs an optab to be
expanded to the certain sequence of instructions.

  The subsequent patches will implement the expand on rs6000.

  Compared to previous version, the main change is to specify acceptable
input and output modes for the optab.
https://gcc.gnu.org/pipermail/gcc-patches/2024-May/652814.html

  Bootstrapped and tested on x86 and powerpc64-linux BE and LE with no
regressions. Is this OK for trunk?

Thanks
Gui Haochen

ChangeLog
optab: Add isnormal_optab for isnormal builtin

gcc/
	* builtins.cc (interclass_mathfn_icode): Set optab to isnormal_optab
	for isnormal builtin.
	* optabs.def (isnormal_optab): New.
	* doc/md.texi (isnormal): Document.


patch.diff

Comments

Richard Biener May 28, 2024, 7:03 a.m. UTC | #1
On Tue, May 28, 2024 at 8:37 AM HAO CHEN GUI <guihaoc@linux.ibm.com> wrote:
>
> Hi,
>   This patch adds an optab for __builtin_isnormal. The normal check can be
> implemented on rs6000 by a single instruction. It needs an optab to be
> expanded to the certain sequence of instructions.
>
>   The subsequent patches will implement the expand on rs6000.
>
>   Compared to previous version, the main change is to specify acceptable
> input and output modes for the optab.
> https://gcc.gnu.org/pipermail/gcc-patches/2024-May/652814.html
>
>   Bootstrapped and tested on x86 and powerpc64-linux BE and LE with no
> regressions. Is this OK for trunk?

OK

> Thanks
> Gui Haochen
>
> ChangeLog
> optab: Add isnormal_optab for isnormal builtin
>
> gcc/
>         * builtins.cc (interclass_mathfn_icode): Set optab to isnormal_optab
>         for isnormal builtin.
>         * optabs.def (isnormal_optab): New.
>         * doc/md.texi (isnormal): Document.
>
>
> patch.diff
> diff --git a/gcc/builtins.cc b/gcc/builtins.cc
> index b8432f84020..ccd57fce522 100644
> --- a/gcc/builtins.cc
> +++ b/gcc/builtins.cc
> @@ -2462,6 +2462,7 @@ interclass_mathfn_icode (tree arg, tree fndecl)
>      case BUILT_IN_ISFINITE:
>        builtin_optab = isfinite_optab; break;
>      case BUILT_IN_ISNORMAL:
> +      builtin_optab = isnormal_optab; break;
>      CASE_FLT_FN (BUILT_IN_FINITE):
>      case BUILT_IN_FINITED32:
>      case BUILT_IN_FINITED64:
> diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
> index 7be0c75baf9..491cd09c620 100644
> --- a/gcc/doc/md.texi
> +++ b/gcc/doc/md.texi
> @@ -8563,6 +8563,12 @@ Set operand 0 to nonzero if operand 1 is a finite floating point
>  number and to 0 otherwise.  Input mode should be a scalar floating
>  point mode and output mode should be @code{SImode}.
>
> +@cindex @code{isnormal@var{m}2} instruction pattern
> +@item @samp{isnormal@var{m}2}
> +Set operand 0 to nonzero if operand 1 is a normal floating point
> +number and to 0 otherwise.  Input mode should be a scalar floating
> +point mode and return mode should be @code{SImode}.
> +
>  @end table
>
>  @end ifset
> diff --git a/gcc/optabs.def b/gcc/optabs.def
> index dcd77315c2a..3c401fc0b4c 100644
> --- a/gcc/optabs.def
> +++ b/gcc/optabs.def
> @@ -353,6 +353,7 @@ OPTAB_D (hypot_optab, "hypot$a3")
>  OPTAB_D (ilogb_optab, "ilogb$a2")
>  OPTAB_D (isinf_optab, "isinf$a2")
>  OPTAB_D (isfinite_optab, "isfinite$a2")
> +OPTAB_D (isnormal_optab, "isnormal$a2")
>  OPTAB_D (issignaling_optab, "issignaling$a2")
>  OPTAB_D (ldexp_optab, "ldexp$a3")
>  OPTAB_D (log10_optab, "log10$a2")
diff mbox series

Patch

diff --git a/gcc/builtins.cc b/gcc/builtins.cc
index b8432f84020..ccd57fce522 100644
--- a/gcc/builtins.cc
+++ b/gcc/builtins.cc
@@ -2462,6 +2462,7 @@  interclass_mathfn_icode (tree arg, tree fndecl)
     case BUILT_IN_ISFINITE:
       builtin_optab = isfinite_optab; break;
     case BUILT_IN_ISNORMAL:
+      builtin_optab = isnormal_optab; break;
     CASE_FLT_FN (BUILT_IN_FINITE):
     case BUILT_IN_FINITED32:
     case BUILT_IN_FINITED64:
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 7be0c75baf9..491cd09c620 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -8563,6 +8563,12 @@  Set operand 0 to nonzero if operand 1 is a finite floating point
 number and to 0 otherwise.  Input mode should be a scalar floating
 point mode and output mode should be @code{SImode}.

+@cindex @code{isnormal@var{m}2} instruction pattern
+@item @samp{isnormal@var{m}2}
+Set operand 0 to nonzero if operand 1 is a normal floating point
+number and to 0 otherwise.  Input mode should be a scalar floating
+point mode and return mode should be @code{SImode}.
+
 @end table

 @end ifset
diff --git a/gcc/optabs.def b/gcc/optabs.def
index dcd77315c2a..3c401fc0b4c 100644
--- a/gcc/optabs.def
+++ b/gcc/optabs.def
@@ -353,6 +353,7 @@  OPTAB_D (hypot_optab, "hypot$a3")
 OPTAB_D (ilogb_optab, "ilogb$a2")
 OPTAB_D (isinf_optab, "isinf$a2")
 OPTAB_D (isfinite_optab, "isfinite$a2")
+OPTAB_D (isnormal_optab, "isnormal$a2")
 OPTAB_D (issignaling_optab, "issignaling$a2")
 OPTAB_D (ldexp_optab, "ldexp$a3")
 OPTAB_D (log10_optab, "log10$a2")