On Wed, 17 Jan 2024, Jakub Jelinek wrote:

> Hi!
> 
> Seems pass_ipa_strub::execute contains a copy of the expand_thunk
> code I've changed for _BitInt in r14-6805 PR112941 - larger _BitInts
> are aggregate_value_p even when they are is_gimple_reg_type.
> 
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
> ok for trunk?

OK.

> 2024-01-17  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR middle-end/113406
>       * ipa-strub.cc (pass_ipa_strub::execute): Check aggregate_value_p
>       regardless of whether is_gimple_reg_type (restype) or not.
> 
>       * gcc.dg/bitint-70.c: New test.
> 
> --- gcc/ipa-strub.cc.jj       2024-01-03 11:51:28.374775006 +0100
> +++ gcc/ipa-strub.cc  2024-01-16 10:51:03.987463928 +0100
> @@ -3174,21 +3174,16 @@ pass_ipa_strub::execute (function *)
>                                      resdecl,
>                                      build_int_cst (TREE_TYPE (resdecl), 0));
>                 }
> -             else if (!is_gimple_reg_type (restype))
> +             else if (aggregate_value_p (resdecl, TREE_TYPE (thunk_fndecl)))
>                 {
> -                 if (aggregate_value_p (resdecl, TREE_TYPE (thunk_fndecl)))
> -                   {
> -                     restmp = resdecl;
> +                 restmp = resdecl;
>  
> -                     if (VAR_P (restmp))
> -                       {
> -                         add_local_decl (cfun, restmp);
> -                         BLOCK_VARS (DECL_INITIAL (current_function_decl))
> -                           = restmp;
> -                       }
> +                 if (VAR_P (restmp))
> +                   {
> +                     add_local_decl (cfun, restmp);
> +                     BLOCK_VARS (DECL_INITIAL (current_function_decl))
> +                       = restmp;
>                     }
> -                 else
> -                   restmp = create_tmp_var (restype, "retval");
>                 }
>               else
>                 restmp = create_tmp_reg (restype, "retval");
> --- gcc/testsuite/gcc.dg/bitint-70.c.jj       2024-01-16 11:01:48.300524130 
> +0100
> +++ gcc/testsuite/gcc.dg/bitint-70.c  2024-01-16 11:01:19.456924333 +0100
> @@ -0,0 +1,14 @@
> +/* PR middle-end/113406 */
> +/* { dg-do compile { target bitint } } */
> +/* { dg-options "-std=c23 -fstrub=internal" } */
> +/* { dg-require-effective-target strub } */
> +
> +#if __BITINT_MAXWIDTH__ >= 146
> +_BitInt(146)
> +#else
> +_BitInt(16)
> +#endif
> +foo (void)
> +{
> +  return 0;
> +}
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to