From 3bd8f4816fe24ef00641cde33dd13155b83db6e1 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 30 Aug 2017 11:19:54 +0000 Subject: [PATCH] [68/77] Use scalar_mode for is_int_mode/is_float_mode pairs This patch uses scalar_mode for code that operates only on MODE_INT and MODE_FLOAT. 2017-08-30 Richard Sandiford Alan Hayward David Sherwood 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. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r251519 --- gcc/ChangeLog | 8 ++++++++ gcc/omp-expand.c | 13 +++++++------ gcc/tree-vect-stmts.c | 10 ++++------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 88ed52e72d7..14f379cd55c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-08-30 Richard Sandiford + Alan Hayward + David Sherwood + + * 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. + 2017-08-30 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index ac83ba168d2..7e27ae0aa1a 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -6739,17 +6739,18 @@ expand_omp_atomic (struct omp_region *region) 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, diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index e17918a44b1..b8bf5d2b8b0 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -9046,18 +9046,16 @@ static tree 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 -- 2.30.2