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

--- Comment #7 from qinzhao at gcc dot gnu.org ---
(In reply to Jakub Jelinek from comment #2)
> __builtin_clear_padding when folded emits a series of memory stores rather
> than BIT_INSERT_EXPR etc., so that wouldn't work.
> But, IMNSHO, -ftrivial-auto-var-init* shouldn't be adding
> __builtin_clear_padding calls at all for objects of types that can't have
> any padding.
> Currently one can do e.g. what my
> r12-3455-g8122fbff770bcff183a9c3c72e8092c0ca32150b does for OpenMP atomics,
> +         bool clear_padding = false;                                       
> 
> +         if (BITS_PER_UNIT == 8 && CHAR_BIT == 8)                          
> 
> +           {                                                               
> 
> +             HOST_WIDE_INT sz = int_size_in_bytes (cmptype), i;            
> 
> +             gcc_assert (sz > 0);                                          
> 
> +             unsigned char *buf = XALLOCAVEC (unsigned char, sz);          
> 
> +             memset (buf, ~0, sz);                                         
> 
> +             clear_type_padding_in_mask (cmptype, buf);                    
> 
> +             for (i = 0; i < sz; i++)                                      
> 
> +               if (buf[i] != (unsigned char) ~0)                           
> 
> +                 {                                                         
> 
> +                   clear_padding = true;                                   
> 
> +                   break;                                                  
> 
> +                 }                                                         
> 
> +           }                                                               
> 
> so that when nothing needs to be padded (the usual case for non-struct/union
> types unless they have extended long double), the builtin isn't added at all.
> I doubt we support vectors of long double, so it is mainly whether returning
> of long double or _Complex long double works fine.

I agree that the above additional check  is necessary.

one question here is, can I use the routine "bool
clear_padding_type_may_have_padding_p (tree type)" in gimple-fold.c instead of
the above new function for this purpose?

Reply via email to