https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94703

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rgue...@gcc.gnu.org>:

https://gcc.gnu.org/g:eb72dc663e9070b281be83a80f6f838a3a878822

commit r11-165-geb72dc663e9070b281be83a80f6f838a3a878822
Author: Richard Biener <rguent...@suse.de>
Date:   Wed Apr 22 10:40:51 2020 +0200

    extend DECL_GIMPLE_REG_P to all types

    This extends DECL_GIMPLE_REG_P to all types so we can clear
    TREE_ADDRESSABLE even for integers with partial defs, not just
    complex and vector variables.  To make that transition easier
    the patch inverts DECL_GIMPLE_REG_P to DECL_NOT_GIMPLE_REG_P
    since that makes the default the current state for all other
    types besides complex and vectors.

    For the testcase in PR94703 we're able to expand the partial
    def'ed local integer to a register then, producing a single
    movl rather than going through the stack.

    On i?86 this execute FAILs gcc.dg/torture/pr71522.c because
    we now expand a round-trip through a long double automatic var
    to a register fld/fst which normalizes the value.  For that
    during RTL expansion we're looking for problematic punnings
    of decls and avoid pseudos for those - I chose integer or
    BLKmode accesses on decls with modes where precision doesn't
    match bitsize which covers the XFmode case.

    2020-05-07  Richard Biener  <rguent...@suse.de>

            PR middle-end/94703
            * tree-core.h (tree_decl_common::gimple_reg_flag): Rename ...
            (tree_decl_common::not_gimple_reg_flag): ... to this.
            * tree.h (DECL_GIMPLE_REG_P): Rename ...
            (DECL_NOT_GIMPLE_REG_P): ... to this.
            * gimple-expr.c (copy_var_decl): Copy DECL_NOT_GIMPLE_REG_P.
            (create_tmp_reg): Simplify.
            (create_tmp_reg_fn): Likewise.
            (is_gimple_reg): Check DECL_NOT_GIMPLE_REG_P for all regs.
            * gimplify.c (create_tmp_from_val): Simplify.
            (gimplify_bind_expr): Likewise.
            (gimplify_compound_literal_expr): Likewise.
            (gimplify_function_tree): Likewise.
            (prepare_gimple_addressable): Set DECL_NOT_GIMPLE_REG_P.
            * asan.c (create_odr_indicator): Do not clear DECL_GIMPLE_REG_P.
            (asan_add_global): Copy it.
            * cgraphunit.c (cgraph_node::expand_thunk): Force args
            to be GIMPLE regs.
            * function.c (gimplify_parameters): Copy
            DECL_NOT_GIMPLE_REG_P.
            * ipa-param-manipulation.c
            (ipa_param_body_adjustments::common_initialization): Simplify.
            (ipa_param_body_adjustments::reset_debug_stmts): Copy
            DECL_NOT_GIMPLE_REG_P.
            * omp-low.c (lower_omp_for_scan): Do not set DECL_GIMPLE_REG_P.
            * sanopt.c (sanitize_rewrite_addressable_params): Likewise.
            * tree-cfg.c (make_blocks_1): Simplify.
            (verify_address): Do not verify DECL_GIMPLE_REG_P setting.
            * tree-eh.c (lower_eh_constructs_2): Simplify.
            * tree-inline.c (declare_return_variable): Adjust and
            generalize.
            (copy_decl_to_var): Copy DECL_NOT_GIMPLE_REG_P.
            (copy_result_decl_to_var): Likewise.
            * tree-into-ssa.c (pass_build_ssa::execute): Adjust comment.
            * tree-nested.c (create_tmp_var_for): Simplify.
            * tree-parloops.c (separate_decls_in_region_name): Copy
            DECL_NOT_GIMPLE_REG_P.
            * tree-sra.c (create_access_replacement): Adjust and
            generalize partial def support.
            * tree-ssa-forwprop.c (pass_forwprop::execute): Set
            DECL_NOT_GIMPLE_REG_P on decls we introduce partial defs on.
            * tree-ssa.c (maybe_optimize_var): Handle clearing of
            TREE_ADDRESSABLE and setting/clearing DECL_NOT_GIMPLE_REG_P
            independently.
            * lto-streamer-out.c (hash_tree): Hash DECL_NOT_GIMPLE_REG_P.
            * tree-streamer-out.c (pack_ts_decl_common_value_fields): Stream
            DECL_NOT_GIMPLE_REG_P.
            * tree-streamer-in.c (unpack_ts_decl_common_value_fields):
Likewise.
            * cfgexpand.c (avoid_type_punning_on_regs): New.
            (discover_nonconstant_array_refs): Call
            avoid_type_punning_on_regs to avoid unsupported mode punning.

            lto/
            * lto-common.c (compare_tree_sccs_1): Compare
            DECL_NOT_GIMPLE_REG_P.

            c/
            * gimple-parser.c (c_parser_parse_ssa_name): Do not set
            DECL_GIMPLE_REG_P.

            cp/
            * optimize.c (update_cloned_parm): Copy DECL_NOT_GIMPLE_REG_P.

            * gcc.dg/tree-ssa/pr94703.c: New testcase.

Reply via email to