Peter,

Thanks a lot for the patch.

Richard, how do you think of the patch?

(The major concern for me is:
        
        With the current patch proposed by Peter, we will generate the call to 
.DEFERRED_INIT for a variable with OPAQUE_TYPE during gimplification phase,
         However, if this variable is in register, then the call to 
.DEFERRED_INIT will NOT be expanded during RTL expansion phase.  This 
unexpanded call to .DEFERRED_INIT might cause some potential IR issue later?

         If the above is a real issue, should we skip initialization for all 
OPAQUE_TYPE variables even when they are in memory and can be initialized with 
memset?
            then we should update “is_var_need_auto_init” in gimplify.c 
instead.   However, the issue with this approach is, we might miss the 
opportunity to initialize an OPAQUE_TYPE variable if it will be in memory?
).

Thanks.

Qing


> On Nov 29, 2021, at 3:56 PM, Peter Bergner <berg...@linux.ibm.com> wrote:
> 
> Sorry for dropping the ball on testing the patch from the bugzilla!
> 
> The following patch fixes the ICE reported in the bugzilla on the pre-existing
> gcc testsuite test case, bootstraps and shows no testsuite regressions
> on powerpc64le-linux.  Ok for trunk?
> 
> Peter
> 
> 
> For -ftrivial-auto-var-init=*, skip initializing the register variable if it
> is an opaque type, because CONST0_RTX(mode) is not defined for opaque modes.
> 
> gcc/
>       PR middle-end/103127
>       * internal-fn.c (expand_DEFERRED_INIT): Skip if VAR_TYPE is opaque.
> 
> diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
> index 0cba95411a6..7cc0e9d5293 100644
> --- a/gcc/internal-fn.c
> +++ b/gcc/internal-fn.c
> @@ -3070,6 +3070,10 @@ expand_DEFERRED_INIT (internal_fn, gcall *stmt)
>     }
>   else
>     {
> +      /* Skip variables of opaque types that are in a register.  */
> +      if (OPAQUE_TYPE_P (var_type))
> +     return;
> +
>       /* If this variable is in a register use expand_assignment.
>        For boolean scalars force zero-init.  */
>       tree init;

Reply via email to