From: "Kewen.Lin" <linkw@linux.ibm.com>
To: will schmidt <will_schmidt@vnet.ibm.com>
Cc: Segher Boessenkool <segher@kernel.crashing.org>,
David Edelsohn <dje.gcc@gmail.com>,
GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, rs6000] Additional cleanup of rs6000_builtin_mask
Date: Thu, 14 Jul 2022 11:28:22 +0800 [thread overview]
Message-ID: <260e72ce-0bd9-da43-3920-260c827f174f@linux.ibm.com> (raw)
In-Reply-To: <a718a60734e574f34f79f15326e1eac0f53387bb.camel@vnet.ibm.com>
Hi Will,
Thanks for the cleanup! Some comments are inlined.
on 2022/7/14 05:39, will schmidt wrote:
> [PATCH, rs6000] Additional cleanup of rs6000_builtin_mask
>
> Hi,
> Post the rs6000 builtins rewrite, some of the leftover builtin
> code is redundant and can be removed.
> This replaces the remaining usage of bu_mask in
> rs6000_target_modify_macros() with checks against the rs6000_cpu directly.
> Thusly the bu_mask variable can be removed. After that variable
> is eliminated there are no other uses of rs6000_builtin_mask_calculate(),
> so that function can also be safely removed.
>
The TargetVariable rs6000_builtin_mask in rs6000.opt is useless, it seems
it can be removed together?
> I have tested this on current systems (P8,P9,P10) without regressions.
>
> OK for trunk?
>
>
> Thanks,
> -Will
>
> gcc/
> * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Remove
> bu_mask references. (rs6000_define_or_undefine_macro): Replace
> bu_mask reference with a rs6000_cpu value check.
> (rs6000_cpu_cpp_builtins): Remove rs6000_builtin_mask_calculate()
> parameter from call to rs6000_target_modify_macros.
> * config/rs6000/rs6000-protos.h (rs6000_target_modify_macros,
> rs6000_target_modify_macros_ptr): Remove parameter from extern
> for the prototype.
> * config/rs6000/rs6000.cc (rs6000_target_modify_macros_ptr): Remove
> parameter from prototype, update calls to this function.
> (rs6000_print_builtin_options): Remove prototype, call and function.
> (rs6000_builtin_mask_calculate): Remove function.
> (rs6000_debug_reg_global): Remove call to rs6000_print_builtin_options.
> (rs6000_option_override_internal): Remove rs6000_builtin_mask var
> and builtin_mask debug output.
> (rs6000_pragma_target_parse): Update calls to
> rs6000_target_modify_ptr.
>
>
> diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
> index 0d13645040ff..4d051b906582 100644
> --- a/gcc/config/rs6000/rs6000-c.cc
> +++ b/gcc/config/rs6000/rs6000-c.cc
> @@ -333,24 +333,20 @@ rs6000_define_or_undefine_macro (bool define_p, const char *name)
> else
> cpp_undef (parse_in, name);
> }
>
> /* Define or undefine macros based on the current target. If the user does
> - #pragma GCC target, we need to adjust the macros dynamically. Note, some of
> - the options needed for builtins have been moved to separate variables, so
> - have both the target flags and the builtin flags as arguments. */
> + #pragma GCC target, we need to adjust the macros dynamically. */
>
> void
> -rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
> - HOST_WIDE_INT bu_mask)
> +rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags)
> {
> if (TARGET_DEBUG_BUILTIN || TARGET_DEBUG_TARGET)
> fprintf (stderr,
> - "rs6000_target_modify_macros (%s, " HOST_WIDE_INT_PRINT_HEX
> - ", " HOST_WIDE_INT_PRINT_HEX ")\n",
> + "rs6000_target_modify_macros (%s, " HOST_WIDE_INT_PRINT_HEX ")\n",
> (define_p) ? "define" : "undef",
> - flags, bu_mask);
> + flags);
>
> /* Each of the flags mentioned below controls whether certain
> preprocessor macros will be automatically defined when
> preprocessing source files for compilation by this compiler.
> While most of these flags can be enabled or disabled
> @@ -593,14 +589,12 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
> /* OPTION_MASK_FLOAT128_HARDWARE can be turned on if -mcpu=power9 is used or
> via the target attribute/pragma. */
> if ((flags & OPTION_MASK_FLOAT128_HW) != 0)
> rs6000_define_or_undefine_macro (define_p, "__FLOAT128_HARDWARE__");
>
> - /* options from the builtin masks. */
> - /* Note that OPTION_MASK_FPRND is enabled only if
> - (rs6000_cpu == PROCESSOR_CELL) (e.g. -mcpu=cell). */
> - if ((bu_mask & OPTION_MASK_FPRND) != 0)
> + /* Tell the user if we are targeting CELL. */
> + if (rs6000_cpu == PROCESSOR_CELL)
> rs6000_define_or_undefine_macro (define_p, "__PPU__");
>
> /* Tell the user if we support the MMA instructions. */
> if ((flags & OPTION_MASK_MMA) != 0)
> rs6000_define_or_undefine_macro (define_p, "__MMA__");
> @@ -614,12 +608,11 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
>
> void
> rs6000_cpu_cpp_builtins (cpp_reader *pfile)
> {
> /* Define all of the common macros. */
> - rs6000_target_modify_macros (true, rs6000_isa_flags,
> - rs6000_builtin_mask_calculate ());
> + rs6000_target_modify_macros (true, rs6000_isa_flags);
>
> if (TARGET_FRE)
> builtin_define ("__RECIP__");
> if (TARGET_FRES)
> builtin_define ("__RECIPF__");
> diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
> index 3ea010236090..b3c16e7448d8 100644
> --- a/gcc/config/rs6000/rs6000-protos.h
> +++ b/gcc/config/rs6000/rs6000-protos.h
> @@ -318,13 +318,12 @@ extern void rs6000_pragma_longcall (struct cpp_reader *);
> extern void rs6000_cpu_cpp_builtins (struct cpp_reader *);
> #ifdef TREE_CODE
> extern bool rs6000_pragma_target_parse (tree, tree);
> #endif
> extern void rs6000_activate_target_options (tree new_tree);
> -extern void rs6000_target_modify_macros (bool, HOST_WIDE_INT, HOST_WIDE_INT);
> -extern void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT,
> - HOST_WIDE_INT);
> +extern void rs6000_target_modify_macros (bool, HOST_WIDE_INT);
> +extern void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT);
>
> /* Declare functions in rs6000-d.cc */
> extern void rs6000_d_target_versions (void);
> extern void rs6000_d_register_target_info (void);
>
> diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
> index 3ff16b8ae04d..5fda18d82795 100644
> --- a/gcc/config/rs6000/rs6000.cc
> +++ b/gcc/config/rs6000/rs6000.cc
> @@ -276,11 +276,11 @@ const char *tcb_verification_symbol = "__parse_hwcap_and_convert_at_platform";
> bool cpu_builtin_p = false;
>
> /* Pointer to function (in rs6000-c.cc) that can define or undefine target
> macros that have changed. Languages that don't support the preprocessor
> don't link in rs6000-c.cc, so we can't call it directly. */
> -void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT, HOST_WIDE_INT);
> +void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT);
>
> /* Simplfy register classes into simpler classifications. We assume
> GPR_REG_TYPE - FPR_REG_TYPE are ordered so that we can use a simple range
> check for standard register classes (gpr/floating/altivec/vsx) and
> floating/vector classes (float/altivec/vsx). */
> @@ -1169,12 +1169,10 @@ enum reg_class (*rs6000_preferred_reload_class_ptr) (rtx, enum reg_class)
>
> const int INSN_NOT_AVAILABLE = -1;
>
> static void rs6000_print_isa_options (FILE *, int, const char *,
> HOST_WIDE_INT);
> -static void rs6000_print_builtin_options (FILE *, int, const char *,
> - HOST_WIDE_INT);
> static HOST_WIDE_INT rs6000_disable_incompatible_switches (void);
>
> static enum rs6000_reg_type register_to_reg_type (rtx, bool *);
> static bool rs6000_secondary_reload_move (enum rs6000_reg_type,
> enum rs6000_reg_type,
> @@ -2405,13 +2403,10 @@ rs6000_debug_reg_global (void)
> rs6000_isa_flags);
>
> rs6000_print_isa_options (stderr, 0, "rs6000_isa_flags_explicit",
> rs6000_isa_flags_explicit);
>
> - rs6000_print_builtin_options (stderr, 0, "rs6000_builtin_mask",
> - rs6000_builtin_mask);
> -
> rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT);
>
> fprintf (stderr, DEBUG_FMT_S, "--with-cpu default",
> OPTION_TARGET_CPU_DEFAULT ? OPTION_TARGET_CPU_DEFAULT : "<none>");
>
> @@ -3370,45 +3365,10 @@ darwin_rs6000_override_options (void)
>
> #ifndef RS6000_DEFAULT_LONG_DOUBLE_SIZE
> #define RS6000_DEFAULT_LONG_DOUBLE_SIZE 64
> #endif
>
> -/* Return the builtin mask of the various options used that could affect which
> - builtins were used. In the past we used target_flags, but we've run out of
> - bits, and some options are no longer in target_flags. */
> -
> -HOST_WIDE_INT
> -rs6000_builtin_mask_calculate (void)
> -{
> - return (((TARGET_ALTIVEC) ? OPTION_MASK_ALTIVEC : 0)
> - | ((TARGET_CMPB) ? OPTION_MASK_CMPB : 0)
> - | ((TARGET_VSX) ? OPTION_MASK_VSX : 0)
> - | ((TARGET_FRE) ? OPTION_MASK_POPCNTB : 0)
> - | ((TARGET_FRES) ? OPTION_MASK_PPC_GFXOPT : 0)
> - | ((TARGET_FRSQRTE) ? OPTION_MASK_PPC_GFXOPT : 0)
> - | ((TARGET_FRSQRTES) ? OPTION_MASK_POPCNTB : 0)
> - | ((TARGET_POPCNTD) ? OPTION_MASK_POPCNTD : 0)
> - | ((rs6000_cpu == PROCESSOR_CELL) ? OPTION_MASK_FPRND : 0)
> - | ((TARGET_P8_VECTOR) ? OPTION_MASK_P8_VECTOR : 0)
> - | ((TARGET_P9_VECTOR) ? OPTION_MASK_P9_VECTOR : 0)
> - | ((TARGET_P9_MISC) ? OPTION_MASK_P9_MISC : 0)
> - | ((TARGET_MODULO) ? OPTION_MASK_MODULO : 0)
> - | ((TARGET_64BIT) ? MASK_64BIT : 0)
> - | ((TARGET_POWERPC64) ? MASK_POWERPC64 : 0)
> - | ((TARGET_CRYPTO) ? OPTION_MASK_CRYPTO : 0)
> - | ((TARGET_HTM) ? OPTION_MASK_HTM : 0)
> - | ((TARGET_DFP) ? OPTION_MASK_DFP : 0)
> - | ((TARGET_HARD_FLOAT) ? OPTION_MASK_SOFT_FLOAT : 0)
> - | ((TARGET_LONG_DOUBLE_128
> - && TARGET_HARD_FLOAT
> - && !TARGET_IEEEQUAD) ? OPTION_MASK_MULTIPLE : 0)
> - | ((TARGET_FLOAT128_TYPE) ? OPTION_MASK_FLOAT128_KEYWORD : 0)
> - | ((TARGET_FLOAT128_HW) ? OPTION_MASK_FLOAT128_HW : 0)
> - | ((TARGET_MMA) ? OPTION_MASK_MMA : 0)
> - | ((TARGET_POWER10) ? OPTION_MASK_POWER10 : 0));
> -}
> -
> /* Implement TARGET_MD_ASM_ADJUST. All asm statements are considered
> to clobber the XER[CA] bit because clobbering that bit without telling
> the compiler worked just fine with versions of GCC before GCC 5, and
> breaking a lot of older code in ways that are hard to track down is
> not such a great idea. */
> @@ -3616,15 +3576,10 @@ glibc_supports_ieee_128bit (void)
> compilation efforts. This has the effect of also turning on the
> associated TARGET_XXX values since these are macros which are
> generally defined to test the corresponding bit of the
> rs6000_isa_flags variable.
>
> - The variable rs6000_builtin_mask is set to represent the target
> - options for the most current compilation efforts, consistent with
> - the current contents of rs6000_isa_flags. This variable controls
> - expansion of built-in functions.
> -
> Various other global variables and fields of global structures
> (over 50 in all) are initialized to reflect the desired options
> for the most current compilation efforts. */
>
> static bool
> @@ -4888,18 +4843,10 @@ rs6000_option_override_internal (bool global_init_p)
> else
> rs6000_recip_control |= mask;
> }
> }
>
> - /* Set the builtin mask of the various options used that could affect which
> - builtins were used. In the past we used target_flags, but we've run out
> - of bits, and some options are no longer in target_flags. */
> - rs6000_builtin_mask = rs6000_builtin_mask_calculate ();
> - if (TARGET_DEBUG_BUILTIN || TARGET_DEBUG_TARGET)
> - rs6000_print_builtin_options (stderr, 0, "builtin mask",
> - rs6000_builtin_mask);
> -
I wonder if it's a good idea to still dump some information for built-in
functions debugging even with new bif framework, it can be handled in a
separated patch if yes. The new bif framework adopts stanzas for bif
guarding, if we want to do similar things, we can refer to the code
like:
if (!(e == ENB_ALWAYS
|| (e == ENB_P5 && TARGET_POPCNTB)
|| (e == ENB_P6 && TARGET_CMPB)
|| (e == ENB_P6_64 && TARGET_CMPB && TARGET_POWERPC64)
|| (e == ENB_ALTIVEC && TARGET_ALTIVEC)
|| (e == ENB_CELL && TARGET_ALTIVEC && rs6000_cpu == PROCESSOR_CELL)
|| (e == ENB_VSX && TARGET_VSX)
|| (e == ENB_P7 && TARGET_POPCNTD)
|| (e == ENB_P7_64 && TARGET_POPCNTD && TARGET_POWERPC64)
|| (e == ENB_P8 && TARGET_DIRECT_MOVE)
|| (e == ENB_P8V && TARGET_P8_VECTOR)
|| (e == ENB_P9 && TARGET_MODULO)
|| (e == ENB_P9_64 && TARGET_MODULO && TARGET_POWERPC64)
|| (e == ENB_P9V && TARGET_P9_VECTOR)
|| (e == ENB_IEEE128_HW && TARGET_FLOAT128_HW)
|| (e == ENB_DFP && TARGET_DFP)
|| (e == ENB_CRYPTO && TARGET_CRYPTO)
|| (e == ENB_HTM && TARGET_HTM)
|| (e == ENB_P10 && TARGET_POWER10)
|| (e == ENB_P10_64 && TARGET_POWER10 && TARGET_POWERPC64)
|| (e == ENB_MMA && TARGET_MMA)))
{
rs6000_invalid_builtin (fcode);
return expand_call (exp, target, ignore);
}
TARGET_POPCNTB means all bifs with ENB_P5 are available
TARGET_CMPB means all bifs with ENB_P6 are available
...
, dump information like "current enabled stanzas: ENB_xx, ENB_xxx, ..."
(even without ENB_ prefix).
> /* Initialize all of the registers. */
> rs6000_init_hard_regno_mode_ok (global_init_p);
>
> /* Save the initial options in case the user does function specific options */
> if (global_init_p)
> @@ -24495,17 +24442,15 @@ rs6000_pragma_target_parse (tree args, tree pop_target)
>
> if ((diff_flags != 0) || (diff_bumask != 0))
> {
> /* Delete old macros. */
> rs6000_target_modify_macros_ptr (false,
> - prev_flags & diff_flags,
> - prev_bumask & diff_bumask);
> + prev_flags & diff_flags);
>
> /* Define new macros. */
> rs6000_target_modify_macros_ptr (true,
> - cur_flags & diff_flags,
> - cur_bumask & diff_bumask);
> + cur_flags & diff_flags);
> }
> }
>
> return true;
> }
> @@ -24732,19 +24677,10 @@ rs6000_print_isa_options (FILE *file, int indent, const char *string,
> rs6000_print_options_internal (file, indent, string, flags, "-m",
> &rs6000_opt_masks[0],
> ARRAY_SIZE (rs6000_opt_masks));
> }
>
> -static void
> -rs6000_print_builtin_options (FILE *file, int indent, const char *string,
> - HOST_WIDE_INT flags)
> -{
> - rs6000_print_options_internal (file, indent, string, flags, "",
> - &rs6000_builtin_mask_names[0],
> - ARRAY_SIZE (rs6000_builtin_mask_names));
> -}
rs6000_builtin_mask_names becomes useless too, can be removed too?
BR,
Kewen
next prev parent reply other threads:[~2022-07-14 3:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-13 21:39 will schmidt
2022-07-14 3:28 ` Kewen.Lin [this message]
2022-07-15 21:22 ` will schmidt
2022-07-19 20:15 ` [PATCH, rs6000, v2] " will schmidt
2022-07-20 1:23 ` Kewen.Lin
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=260e72ce-0bd9-da43-3920-260c827f174f@linux.ibm.com \
--to=linkw@linux.ibm.com \
--cc=dje.gcc@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=segher@kernel.crashing.org \
--cc=will_schmidt@vnet.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).