[PATCH 1/2] Use is_empty_type instead of zero-sized type.
Richard Biener
richard.guenther@gmail.com
Tue Jun 1 08:55:02 GMT 2021
On Mon, May 31, 2021 at 7:29 PM apinski--- via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> From: Andrew Pinski <apinski@marvell.com>
>
> Instead of only removing assignments of zero-sized types,
> assignments of all empty types should be removed during gimplification.
> This moves to use is_empty_type which will be used in other places too.
>
> OK? Bootstrapped and tested on aarch64-linux-gnu with no regressions.
OK.
Thanks,
Richard.
> Thanks,
> Andrew Pinski
>
> gcc/ChangeLog:
>
> * gimplify.c (zero_sized_field_decl): Delete
> (zero_sized_type): Delete
> (gimplify_init_ctor_eval): Use is_empty_type instead
> of zero_sized_field_decl.
> (gimplify_modify_expr): Use is_empty_type instead of
> zero_sized_type.
> ---
> gcc/gimplify.c | 34 +++++++---------------------------
> 1 file changed, 7 insertions(+), 27 deletions(-)
>
> diff --git a/gcc/gimplify.c b/gcc/gimplify.c
> index 3ca29cedad8..39f5b973d18 100644
> --- a/gcc/gimplify.c
> +++ b/gcc/gimplify.c
> @@ -4644,28 +4644,6 @@ gimplify_init_ctor_eval_range (tree object, tree lower, tree upper,
> gimplify_seq_add_stmt (pre_p, gimple_build_label (loop_exit_label));
> }
>
> -/* Return true if FDECL is accessing a field that is zero sized. */
> -
> -static bool
> -zero_sized_field_decl (const_tree fdecl)
> -{
> - if (TREE_CODE (fdecl) == FIELD_DECL && DECL_SIZE (fdecl)
> - && integer_zerop (DECL_SIZE (fdecl)))
> - return true;
> - return false;
> -}
> -
> -/* Return true if TYPE is zero sized. */
> -
> -static bool
> -zero_sized_type (const_tree type)
> -{
> - if (AGGREGATE_TYPE_P (type) && TYPE_SIZE (type)
> - && integer_zerop (TYPE_SIZE (type)))
> - return true;
> - return false;
> -}
> -
> /* A subroutine of gimplify_init_constructor. Generate individual
> MODIFY_EXPRs for a CONSTRUCTOR. OBJECT is the LHS against which the
> assignments should happen. ELTS is the CONSTRUCTOR_ELTS of the
> @@ -4699,11 +4677,13 @@ gimplify_init_ctor_eval (tree object, vec<constructor_elt, va_gc> *elts,
> gcc_assert (purpose);
>
> /* Skip zero-sized fields, unless value has side-effects. This can
> - happen with calls to functions returning a zero-sized type, which
> + happen with calls to functions returning a empty type, which
> we shouldn't discard. As a number of downstream passes don't
> - expect sets of zero-sized fields, we rely on the gimplification of
> + expect sets of empty type fields, we rely on the gimplification of
> the MODIFY_EXPR we make below to drop the assignment statement. */
> - if (! TREE_SIDE_EFFECTS (value) && zero_sized_field_decl (purpose))
> + if (!TREE_SIDE_EFFECTS (value)
> + && TREE_CODE (purpose) == FIELD_DECL
> + && is_empty_type (TREE_TYPE (purpose)))
> continue;
>
> /* If we have a RANGE_EXPR, we have to build a loop to assign the
> @@ -5781,11 +5761,11 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
> if (ret != GS_UNHANDLED)
> return ret;
>
> - /* For zero sized types only gimplify the left hand side and right hand
> + /* For empty types only gimplify the left hand side and right hand
> side as statements and throw away the assignment. Do this after
> gimplify_modify_expr_rhs so we handle TARGET_EXPRs of addressable
> types properly. */
> - if (zero_sized_type (TREE_TYPE (*from_p))
> + if (is_empty_type (TREE_TYPE (*from_p))
> && !want_value
> /* Don't do this for calls that return addressable types, expand_call
> relies on those having a lhs. */
> --
> 2.17.1
>
More information about the Gcc-patches
mailing list