From db618884e6406712515e6b83d00f573395848e59 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Mon, 16 Dec 2013 16:28:56 -0500 Subject: [PATCH] Introduce gimple_omp_atomic_store This corresponds to: [PATCH 35/89] Introduce gimple_omp_atomic_store https://gcc.gnu.org/ml/gcc-patches/2014-04/msg01227.html from the original 89-patch kit That earlier patch was approved by Jeff: > OK with expected changes due to renaming/updates to const handling. > Please repost the final patch for archival purposes. in https://gcc.gnu.org/ml/gcc-patches/2014-05/msg00804.html gcc/ * coretypes.h (gimple_omp_atomic_store): New typedef. (const_gimple_omp_atomic_store): New typedef. * gimple-pretty-print.c (dump_gimple_omp_atomic_store): Require a gimple_omp_atomic_store rather than a plain gimple. (pp_gimple_stmt_1): Add checked cast to gimple_omp_atomic_store within GIMPLE_OMP_ATOMIC_STORE case of switch statement. * gimple-walk.c (walk_gimple_op): Likewise. * gimple.c (gimple_build_omp_atomic_store): Return a gimple_omp_atomic_store rather than a plain gimple. * gimple.h (gimple_build_omp_atomic_store): Return a gimple_omp_atomic_store rather than a plain gimple. (gimple_omp_atomic_store_set_val): Require a gimple_omp_atomic_store rather than a plain gimple. (gimple_omp_atomic_store_val_ptr): Likewise. (gimple_omp_atomic_store_val): Require a const_gimple_omp_atomic_store rather than a plain const_gimple. * gimplify.c (gimplify_omp_atomic): Strengthen locals "loadstmt" and "storestmt" from gimple to gimple_omp_atomic_load loadstmt and gimple_omp_atomic_store storestmt respectively. * omp-low.c (expand_omp_atomic): Strengthen local "store" from gimple to gimple_omp_atomic_store. --- gcc/ChangeLog.gimple-classes | 31 +++++++++++++++++++++++++++++++ gcc/coretypes.h | 5 +++++ gcc/gimple-pretty-print.c | 8 +++++--- gcc/gimple-walk.c | 5 +++-- gcc/gimple.c | 5 +++-- gcc/gimple.h | 20 +++++++------------- gcc/gimplify.c | 3 ++- gcc/omp-low.c | 3 ++- 8 files changed, 58 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes index 30267870052..0073b059de4 100644 --- a/gcc/ChangeLog.gimple-classes +++ b/gcc/ChangeLog.gimple-classes @@ -1,5 +1,36 @@ 2014-10-24 David Malcolm + Introduce gimple_omp_atomic_store + + * coretypes.h (gimple_omp_atomic_store): New typedef. + (const_gimple_omp_atomic_store): New typedef. + + * gimple-pretty-print.c (dump_gimple_omp_atomic_store): Require + a gimple_omp_atomic_store rather than a plain gimple. + (pp_gimple_stmt_1): Add checked cast to gimple_omp_atomic_store + within GIMPLE_OMP_ATOMIC_STORE case of switch statement. + * gimple-walk.c (walk_gimple_op): Likewise. + + * gimple.c (gimple_build_omp_atomic_store): Return a + gimple_omp_atomic_store rather than a plain gimple. + + * gimple.h (gimple_build_omp_atomic_store): Return a + gimple_omp_atomic_store rather than a plain gimple. + (gimple_omp_atomic_store_set_val): Require a gimple_omp_atomic_store + rather than a plain gimple. + (gimple_omp_atomic_store_val_ptr): Likewise. + (gimple_omp_atomic_store_val): Require a + const_gimple_omp_atomic_store rather than a plain const_gimple. + + * gimplify.c (gimplify_omp_atomic): Strengthen locals "loadstmt" and + "storestmt" from gimple to gimple_omp_atomic_load loadstmt and + gimple_omp_atomic_store storestmt respectively. + + * omp-low.c (expand_omp_atomic): Strengthen local "store" from + gimple to gimple_omp_atomic_store. + +2014-10-24 David Malcolm + Introduce gimple_omp_atomic_load * coretypes.h (gimple_omp_atomic_load): New typedef. diff --git a/gcc/coretypes.h b/gcc/coretypes.h index 06b3be8f258..78647b21d3d 100644 --- a/gcc/coretypes.h +++ b/gcc/coretypes.h @@ -171,6 +171,11 @@ typedef struct gimple_statement_omp_atomic_load *gimple_omp_atomic_load; typedef const struct gimple_statement_omp_atomic_load * const_gimple_omp_atomic_load; +struct gimple_statement_omp_atomic_store; +typedef struct gimple_statement_omp_atomic_store *gimple_omp_atomic_store; +typedef const struct gimple_statement_omp_atomic_store * + const_gimple_omp_atomic_store; + union section; typedef union section section; struct gcc_options; diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index eafb6cdb91e..62e4bf836d0 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -2000,8 +2000,8 @@ dump_gimple_omp_atomic_load (pretty_printer *buffer, gimple_omp_atomic_load gs, in dumpfile.h). */ static void -dump_gimple_omp_atomic_store (pretty_printer *buffer, gimple gs, int spc, - int flags) +dump_gimple_omp_atomic_store (pretty_printer *buffer, + gimple_omp_atomic_store gs, int spc, int flags) { if (flags & TDF_RAW) { @@ -2149,7 +2149,9 @@ pp_gimple_stmt_1 (pretty_printer *buffer, gimple gs, int spc, int flags) break; case GIMPLE_OMP_ATOMIC_STORE: - dump_gimple_omp_atomic_store (buffer, gs, spc, flags); + dump_gimple_omp_atomic_store (buffer, + as_a (gs), + spc, flags); break; case GIMPLE_OMP_FOR: diff --git a/gcc/gimple-walk.c b/gcc/gimple-walk.c index af672182744..987b8560940 100644 --- a/gcc/gimple-walk.c +++ b/gcc/gimple-walk.c @@ -434,8 +434,9 @@ walk_gimple_op (gimple stmt, walk_tree_fn callback_op, break; case GIMPLE_OMP_ATOMIC_STORE: - ret = walk_tree (gimple_omp_atomic_store_val_ptr (stmt), callback_op, - wi, pset); + ret = walk_tree (gimple_omp_atomic_store_val_ptr ( + as_a (stmt)), + callback_op, wi, pset); if (ret) return ret; break; diff --git a/gcc/gimple.c b/gcc/gimple.c index 8672b83ebff..1bc176cc9cc 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -1094,10 +1094,11 @@ gimple_build_omp_atomic_load (tree lhs, tree rhs) VAL is the value we are storing. */ -gimple +gimple_omp_atomic_store gimple_build_omp_atomic_store (tree val) { - gimple p = gimple_alloc (GIMPLE_OMP_ATOMIC_STORE, 0); + gimple_omp_atomic_store p = + as_a (gimple_alloc (GIMPLE_OMP_ATOMIC_STORE, 0)); gimple_omp_atomic_store_set_val (p, val); return p; } diff --git a/gcc/gimple.h b/gcc/gimple.h index a302529d31f..4513fcbfe45 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -1358,7 +1358,7 @@ gimple gimple_build_omp_single (gimple_seq, tree); gimple gimple_build_omp_target (gimple_seq, int, tree); gimple gimple_build_omp_teams (gimple_seq, tree); gimple_omp_atomic_load gimple_build_omp_atomic_load (tree, tree); -gimple gimple_build_omp_atomic_store (tree); +gimple_omp_atomic_store gimple_build_omp_atomic_store (tree); gimple_transaction gimple_build_transaction (gimple_seq, tree); gimple gimple_build_predict (enum br_predictor, enum prediction); extern void gimple_seq_add_stmt (gimple_seq *, gimple); @@ -5367,33 +5367,27 @@ gimple_omp_for_cond (const_gimple gs, size_t i) /* Set the value being stored in an atomic store. */ static inline void -gimple_omp_atomic_store_set_val (gimple g, tree val) +gimple_omp_atomic_store_set_val (gimple_omp_atomic_store store_stmt, tree val) { - gimple_statement_omp_atomic_store *omp_atomic_store_stmt = - as_a (g); - omp_atomic_store_stmt->val = val; + store_stmt->val = val; } /* Return the value being stored in an atomic store. */ static inline tree -gimple_omp_atomic_store_val (const_gimple g) +gimple_omp_atomic_store_val (const_gimple_omp_atomic_store store_stmt) { - const gimple_statement_omp_atomic_store *omp_atomic_store_stmt = - as_a (g); - return omp_atomic_store_stmt->val; + return store_stmt->val; } /* Return a pointer to the value being stored in an atomic store. */ static inline tree * -gimple_omp_atomic_store_val_ptr (gimple g) +gimple_omp_atomic_store_val_ptr (gimple_omp_atomic_store store_stmt) { - gimple_statement_omp_atomic_store *omp_atomic_store_stmt = - as_a (g); - return &omp_atomic_store_stmt->val; + return &store_stmt->val; } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 26cc2d04050..a9692330261 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -7308,7 +7308,8 @@ gimplify_omp_atomic (tree *expr_p, gimple_seq *pre_p) ? NULL : TREE_OPERAND (*expr_p, 1); tree type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (addr))); tree tmp_load; - gimple loadstmt, storestmt; + gimple_omp_atomic_load loadstmt; + gimple_omp_atomic_store storestmt; tmp_load = create_tmp_reg (type, NULL); if (rhs && goa_stabilize_expr (&rhs, pre_p, addr, tmp_load) < 0) diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 40cba5cb3ad..78ec43f63f3 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -8188,7 +8188,8 @@ expand_omp_atomic (struct omp_region *region) basic_block load_bb = region->entry, store_bb = region->exit; gimple_omp_atomic_load load = as_a (last_stmt (load_bb)); - gimple store = last_stmt (store_bb); + gimple_omp_atomic_store store = + as_a (last_stmt (store_bb)); tree loaded_val = gimple_omp_atomic_load_lhs (load); tree addr = gimple_omp_atomic_load_rhs (load); tree stored_val = gimple_omp_atomic_store_val (store); -- 2.11.4.GIT