This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [24/67] Replace a != BLKmode check with is_a <scalar_int_mode>


On Fri, Dec 9, 2016 at 2:08 PM, Richard Sandiford
<richard.sandiford@arm.com> wrote:
> This patch replaces a check against BLKmode with a check
> of is_a <scalar_int_mode>, in a case where scalar integer
> modes were the only useful alternatives left.

So why's BLKmode no longer sth valid to check against?  The check is only there
to guard GET_MODE_ALIGNMENT / SLOW_UNALIGNED_ACCESS.

Richard.

> gcc/
> 2016-11-24  Richard Sandiford  <richard.sandiford@arm.com>
>             Alan Hayward  <alan.hayward@arm.com>
>             David Sherwood  <david.sherwood@arm.com>
>
>         * gimple-fold.c (gimple_fold_builtin_memory_op): Use
>         is_a <scalar_int_mode> instead of != BLKmode.
>
> diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
> index d00625b..c6b5411 100644
> --- a/gcc/gimple-fold.c
> +++ b/gcc/gimple-fold.c
> @@ -713,31 +713,29 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
>           unsigned ilen = tree_to_uhwi (len);
>           if (pow2p_hwi (ilen))
>             {
> +             scalar_int_mode mode;
>               tree type = lang_hooks.types.type_for_size (ilen * 8, 1);
>               if (type
> -                 && TYPE_MODE (type) != BLKmode
> -                 && (GET_MODE_SIZE (TYPE_MODE (type)) * BITS_PER_UNIT
> -                     == ilen * 8)
> +                 && is_a <scalar_int_mode> (TYPE_MODE (type), &mode)
> +                 && GET_MODE_SIZE (mode) * BITS_PER_UNIT == ilen * 8
>                   /* If the destination pointer is not aligned we must be able
>                      to emit an unaligned store.  */
> -                 && (dest_align >= GET_MODE_ALIGNMENT (TYPE_MODE (type))
> -                     || !SLOW_UNALIGNED_ACCESS (TYPE_MODE (type), dest_align)
> -                     || (optab_handler (movmisalign_optab, TYPE_MODE (type))
> +                 && (dest_align >= GET_MODE_ALIGNMENT (mode)
> +                     || !SLOW_UNALIGNED_ACCESS (mode, dest_align)
> +                     || (optab_handler (movmisalign_optab, mode)
>                           != CODE_FOR_nothing)))
>                 {
>                   tree srctype = type;
>                   tree desttype = type;
> -                 if (src_align < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
> +                 if (src_align < GET_MODE_ALIGNMENT (mode))
>                     srctype = build_aligned_type (type, src_align);
>                   tree srcmem = fold_build2 (MEM_REF, srctype, src, off0);
>                   tree tem = fold_const_aggregate_ref (srcmem);
>                   if (tem)
>                     srcmem = tem;
> -                 else if (src_align < GET_MODE_ALIGNMENT (TYPE_MODE (type))
> -                          && SLOW_UNALIGNED_ACCESS (TYPE_MODE (type),
> -                                                    src_align)
> -                          && (optab_handler (movmisalign_optab,
> -                                             TYPE_MODE (type))
> +                 else if (src_align < GET_MODE_ALIGNMENT (mode)
> +                          && SLOW_UNALIGNED_ACCESS (mode, src_align)
> +                          && (optab_handler (movmisalign_optab, mode)
>                                == CODE_FOR_nothing))
>                     srcmem = NULL_TREE;
>                   if (srcmem)
> @@ -753,7 +751,7 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
>                           gimple_set_vuse (new_stmt, gimple_vuse (stmt));
>                           gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
>                         }
> -                     if (dest_align < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
> +                     if (dest_align < GET_MODE_ALIGNMENT (mode))
>                         desttype = build_aligned_type (type, dest_align);
>                       new_stmt
>                         = gimple_build_assign (fold_build2 (MEM_REF, desttype,
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]