This patch uses scalar_mode for code that operates only on MODE_INT
and MODE_FLOAT.

2017-07-13  Richard Sandiford  <richard.sandif...@linaro.org>
            Alan Hayward  <alan.hayw...@arm.com>
            David Sherwood  <david.sherw...@arm.com>

gcc/
        * omp-expand.c (expand_omp_atomic): Use is_int_mode, is_float_mode
        and scalar_mode.
        * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): Likewise.

Index: gcc/omp-expand.c
===================================================================
--- gcc/omp-expand.c    2017-06-30 12:50:38.243662675 +0100
+++ gcc/omp-expand.c    2017-07-13 09:18:55.598479800 +0100
@@ -6724,17 +6724,18 @@ expand_omp_atomic (struct omp_region *re
       if (exact_log2 (align) >= index)
        {
          /* Atomic load.  */
+         scalar_mode smode;
          if (loaded_val == stored_val
-             && (GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT
-                 || GET_MODE_CLASS (TYPE_MODE (type)) == MODE_FLOAT)
-             && GET_MODE_BITSIZE (TYPE_MODE (type)) <= BITS_PER_WORD
+             && (is_int_mode (TYPE_MODE (type), &smode)
+                 || is_float_mode (TYPE_MODE (type), &smode))
+             && GET_MODE_BITSIZE (smode) <= BITS_PER_WORD
              && expand_omp_atomic_load (load_bb, addr, loaded_val, index))
            return;
 
          /* Atomic store.  */
-         if ((GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT
-              || GET_MODE_CLASS (TYPE_MODE (type)) == MODE_FLOAT)
-             && GET_MODE_BITSIZE (TYPE_MODE (type)) <= BITS_PER_WORD
+         if ((is_int_mode (TYPE_MODE (type), &smode)
+              || is_float_mode (TYPE_MODE (type), &smode))
+             && GET_MODE_BITSIZE (smode) <= BITS_PER_WORD
              && store_bb == single_succ (load_bb)
              && first_stmt (store_bb) == store
              && expand_omp_atomic_store (load_bb, addr, loaded_val,
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c       2017-07-13 09:18:54.003596374 +0100
+++ gcc/tree-vect-stmts.c       2017-07-13 09:18:55.599479728 +0100
@@ -8936,18 +8936,16 @@ free_stmt_vec_info (gimple *stmt)
 get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
 {
   tree orig_scalar_type = scalar_type;
-  machine_mode inner_mode = TYPE_MODE (scalar_type);
+  scalar_mode inner_mode;
   machine_mode simd_mode;
-  unsigned int nbytes = GET_MODE_SIZE (inner_mode);
   int nunits;
   tree vectype;
 
-  if (nbytes == 0)
+  if (!is_int_mode (TYPE_MODE (scalar_type), &inner_mode)
+      && !is_float_mode (TYPE_MODE (scalar_type), &inner_mode))
     return NULL_TREE;
 
-  if (GET_MODE_CLASS (inner_mode) != MODE_INT
-      && GET_MODE_CLASS (inner_mode) != MODE_FLOAT)
-    return NULL_TREE;
+  unsigned int nbytes = GET_MODE_SIZE (inner_mode);
 
   /* For vector types of elements whose mode precision doesn't
      match their types precision we use a element type of mode

Reply via email to