[24/77] Replace a != BLKmode check with is_a <scalar_int_mode>
authorRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 30 Aug 2017 11:11:23 +0000 (11:11 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 30 Aug 2017 11:11:23 +0000 (11:11 +0000)
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.

gcc/
2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
    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.

From-SVN: r251476

gcc/gimple-fold.c

index bf39f283ad93c2cd836a1fc4b82c5c171d2f0979..5886b3db91c9e59a38f3c588137bc537cc1e5d76 100644 (file)
@@ -748,31 +748,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)
@@ -788,7 +786,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,