On Thu, Nov 21, 2024, 2:02 PM H.J. Lu <hjl.to...@gmail.com> wrote:

> Promote integer arguments smaller than int if TARGET_PROMOTE_PROTOTYPES
> returns true.
>
>         PR middle-end/14907
>         * calls.c (initialize_argument_information): Promote small integer
>         arguments if TARGET_PROMOTE_PROTOTYPES returns true.
>
> Signed-off-by: H.J. Lu <hjl.to...@gmail.com>
> ---
>  gcc/calls.cc | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/gcc/calls.cc b/gcc/calls.cc
> index 01c4ef51545..60eb74e5945 100644
> --- a/gcc/calls.cc
> +++ b/gcc/calls.cc
> @@ -1375,6 +1375,11 @@ initialize_argument_information (int num_actuals
> ATTRIBUTE_UNUSED,
>        }
>    }
>
> +  bool promote_p
> +    = targetm.calls.promote_prototypes (fndecl
> +                                       ? TREE_TYPE (fndecl)
> +                                       : fntype);
> +
>    /* I counts args in order (to be) pushed; ARGPOS counts in order
> written.  */
>    for (argpos = 0; argpos < num_actuals; i--, argpos++)
>      {
> @@ -1384,6 +1389,10 @@ initialize_argument_information (int num_actuals
> ATTRIBUTE_UNUSED,
>        /* Replace erroneous argument with constant zero.  */
>        if (type == error_mark_node || !COMPLETE_TYPE_P (type))
>         args[i].tree_value = integer_zero_node, type = integer_type_node;
> +      else if (promote_p
> +              && INTEGRAL_TYPE_P (type)
> +              && TYPE_PRECISION (type) < TYPE_PRECISION
> (integer_type_node))
> +       type = integer_type_node;
>
>        /* If TYPE is a transparent union or record, pass things the way
>          we would pass the first field of the union or record.  We have
>

PING.

-- 
> 2.47.0
>
>
>

Reply via email to