public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Segher Boessenkool <segher@kernel.crashing.org>
To: Bill Schmidt <wschmidt@linux.ibm.com>
Cc: gcc-patches@gcc.gnu.org, dje.gcc@gmail.com
Subject: Re: [PATCH 4/8] rs6000: Consolidate target built-ins code
Date: Mon, 31 Jan 2022 15:32:49 -0600	[thread overview]
Message-ID: <20220131213249.GO614@gate.crashing.org> (raw)
In-Reply-To: <9f4473f861d11ccc3bd11c05f37db041f849d8d6.1643390744.git.wschmidt@linux.ibm.com>

Hi!

On Fri, Jan 28, 2022 at 11:50:22AM -0600, Bill Schmidt wrote:
> Continuing with the refactoring effort, this patch moves as much of the
> target-specific built-in support code into a new file, rs6000-builtin.cc.
> However, we can't easily move the overloading support code out of
> rs6000-c.cc, because the build machinery understands that as a special file
> to be included with the C and C++ front ends.

And the other C-like frontends.

> This patch is just a straightforward move, with one exception.  I found
> that the builtin_mode_to_type[] array is no longer used, so I also removed
> all code having to do with it.

Oh nice, your rewrite removed the need for that array.  Great :-)

> The code in rs6000-builtin.cc is organized in related sections:
>  - General support functions
>  - Initialization support
>  - GIMPLE folding support
>  - Expansion support
> 
> Overloading support remains in rs6000-c.cc.

So, what is needed to move that as well?  Is moving that in the plan?

> 	* config/rs6000/rs6000-builtin.cc: New file, containing code moved
> 	from other files.

(You're breaking lines early again.)

> -	extra_objs="${extra_objs} rs6000-builtins.o"
> +	extra_objs="${extra_objs} rs6000-builtins.o rs6000-builtin.o"

It's pretty unfortunate that these files are named alike.  The source
files exist in different places of course, so the danger of confusion
is minimal usually.

> +/* Support targetm.vectorize.builtin_mask_for_load.  */
> +tree altivec_builtin_mask_for_load;

"Support"?  What does that mean?  Please describe what this tree is.

> +/* **** General support functions. **** */

This isn't a sentence so should not have a full stop.  (And otherwise
it should be followed by two spaces!)

> +bool
> +rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode)
> +{
> +  switch (rs6000_builtin_info[(size_t) fncode].enable)
> +    {
> +    case ENB_ALWAYS:
> +      return true;
> +    case ENB_P5:
> +      return TARGET_POPCNTB;
> +    case ENB_P6:
> +      return TARGET_CMPB;
> +    case ENB_P6_64:
> +      return TARGET_CMPB && TARGET_POWERPC64;
> +    case ENB_P7:
> +      return TARGET_POPCNTD;
> +    case ENB_P7_64:
> +      return TARGET_POPCNTD && TARGET_POWERPC64;
> +    case ENB_P8:
> +      return TARGET_DIRECT_MOVE;
> +    case ENB_P8V:
> +      return TARGET_P8_VECTOR;
> +    case ENB_P9:
> +      return TARGET_MODULO;
> +    case ENB_P9_64:
> +      return TARGET_MODULO && TARGET_POWERPC64;
> +    case ENB_P9V:
> +      return TARGET_P9_VECTOR;
> +    case ENB_P10:
> +      return TARGET_POWER10;
> +    case ENB_P10_64:
> +      return TARGET_POWER10 && TARGET_POWERPC64;
> +    case ENB_ALTIVEC:
> +      return TARGET_ALTIVEC;
> +    case ENB_VSX:
> +      return TARGET_VSX;
> +    case ENB_CELL:
> +      return TARGET_ALTIVEC && rs6000_cpu == PROCESSOR_CELL;
> +    case ENB_IEEE128_HW:
> +      return TARGET_FLOAT128_HW;
> +    case ENB_DFP:
> +      return TARGET_DFP;
> +    case ENB_CRYPTO:
> +      return TARGET_CRYPTO;
> +    case ENB_HTM:
> +      return TARGET_HTM;
> +    case ENB_MMA:
> +      return TARGET_MMA;
> +    default:
> +      gcc_unreachable ();
> +    }
> +  gcc_unreachable ();
> +}

If you rewrite this without switch it is shorter and clearer, and you do
not need to duplicate the gcc_unreachable (which the broken warning
forces you to).

> +  if (fcode >= RS6000_OVLD_MAX)
> +    return error_mark_node;

This shows that that isn't really the max, it is the number of elts in
the array, instead (maximum is inclusive).  Maybe fis that some day :-)

> +/* Implement targetm.vectorize.builtin_md_vectorized_function.  */
> +
> +tree
> +rs6000_builtin_md_vectorized_function (tree fndecl, tree type_out,
> +				       tree type_in)
> +{
> +  machine_mode in_mode, out_mode;
> +  int in_n, out_n;
> +
> +  if (TARGET_DEBUG_BUILTIN)
> +    fprintf (stderr,
> +	     "rs6000_builtin_md_vectorized_function (%s, %s, %s)\n",
> +	     IDENTIFIER_POINTER (DECL_NAME (fndecl)),
> +	     GET_MODE_NAME (TYPE_MODE (type_out)),
> +	     GET_MODE_NAME (TYPE_MODE (type_in)));
> +
> +  /* TODO: Should this be gcc_assert?  */
> +  if (TREE_CODE (type_out) != VECTOR_TYPE
> +      || TREE_CODE (type_in) != VECTOR_TYPE)
> +    return NULL_TREE;

Yes, as target.def says.

> +  enum rs6000_gen_builtins fn
> +    = (enum rs6000_gen_builtins) DECL_MD_FUNCTION_CODE (fndecl);

You could write
       = (decltype (fn)) DECL_MD_FUNCTION_CODE (fndecl);
btw.

> +    default:
> +      break;

Another wart :-(

The -Wswitch* warnings this works around should not be part of -Wall
imo, not even of -Wextra :-(

> +static
> +const char *rs6000_type_string (tree type_node)
> +{
> +  if (type_node == void_type_node)
> +    return "void";
> +  else if (type_node == long_integer_type_node)
> +    return "long";

You do not need the "else" btw.  Getting rid of that will make the code
easier to read.

> +void
> +rs6000_init_builtins (void)
> +{
> +  tree tdecl;
> +  tree t;

Don't declare things long before they are used please.

...

Bah, I am commenting on existing code...  Please do not mix code
movement and other things in the same patch.  In the (very few!) cases
where you need things to stay together for bisectability, you can still
submit it as multiple patches (and you have that, that is how you write
it in the first place!), just comment that you need to check in a few
patches together.

Is it a big hassle to do that now, for this patch?


Segher

  reply	other threads:[~2022-01-31 21:33 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-28 17:50 [PATCH 0/8] rs6000: Built-in function cleanups and bug fixes Bill Schmidt
2022-01-28 17:50 ` [PATCH 1/8] rs6000: More factoring of overload processing Bill Schmidt
2022-01-28 19:11   ` Segher Boessenkool
2022-01-28 21:19     ` Bill Schmidt
2022-01-28 23:09       ` Segher Boessenkool
2022-02-01 14:49     ` [PATCH v2 " Bill Schmidt
2022-02-01 21:48       ` Segher Boessenkool
2022-02-02 18:46         ` Bill Schmidt
2022-02-03 14:44         ` [PATCH v3 " Bill Schmidt
2022-02-04  1:24           ` Segher Boessenkool
2022-01-28 17:50 ` [PATCH 2/8] rs6000: Don't #ifdef "short" built-in names Bill Schmidt
2022-01-28 20:32   ` Segher Boessenkool
2022-01-28 21:21     ` Bill Schmidt
2022-01-28 17:50 ` [PATCH 3/8] rs6000: Convert <x> built-in constraints to <x,y> form Bill Schmidt
2022-01-28 23:24   ` [PATCH 3/8] rs6000: Convert <x> built-in constraints to <x, y> form Segher Boessenkool
2022-01-31 17:21     ` [PATCH 3/8] rs6000: Convert <x> built-in constraints to <x,y> form Bill Schmidt
2022-01-31 17:28       ` [PATCH 3/8] rs6000: Convert <x> built-in constraints to <x, y> form Segher Boessenkool
2022-01-31 17:31         ` [PATCH 3/8] rs6000: Convert <x> built-in constraints to <x,y> form Bill Schmidt
2022-02-01 14:53         ` [PATCH v2 3/8] rs6000: Unify error messages for built-in constant restrictions Bill Schmidt
2022-02-01 22:16           ` Segher Boessenkool
2022-01-28 17:50 ` [PATCH 4/8] rs6000: Consolidate target built-ins code Bill Schmidt
2022-01-31 21:32   ` Segher Boessenkool [this message]
2022-01-31 22:01     ` Bill Schmidt
2022-01-31 22:33       ` Segher Boessenkool
2022-01-28 17:50 ` [PATCH 5/8] rs6000: Fix LE code gen for vec_cnt[lt]z_lsbb [PR95082] Bill Schmidt
2022-02-01 23:01   ` Segher Boessenkool
2022-01-28 17:50 ` [PATCH 6/8] rs6000: Remove -m[no-]fold-gimple flag [PR103686] Bill Schmidt
2022-02-02 23:21   ` Segher Boessenkool
2022-01-28 17:50 ` [PATCH 7/8] rs6000: vec_neg built-ins wrongly require POWER8 Bill Schmidt
2022-02-07 15:48   ` Bill Schmidt
2022-03-30 18:04   ` Segher Boessenkool
2022-01-28 17:50 ` [PATCH 8/8] rs6000: Fix some missing built-in attributes [PR104004] Bill Schmidt
2022-03-15 13:18   ` rs6000 patch ping: " Jakub Jelinek
2022-03-30 12:28     ` rs6000 patch ping^2: " Jakub Jelinek
2022-03-30 23:07     ` rs6000 patch ping: " Segher Boessenkool
2022-03-31 22:17       ` Segher Boessenkool
2022-03-30 17:41   ` will schmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220131213249.GO614@gate.crashing.org \
    --to=segher@kernel.crashing.org \
    --cc=dje.gcc@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=wschmidt@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).