From 481261380243a1a01b85247285d0cc03a8090540 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 1 Oct 2015 14:13:30 +0000 Subject: [PATCH] builtins.c: Don't include gomp-constants.h. * builtins.c: Don't include gomp-constants.h. (fold_builtin_1): Don't fold acc_on_device here. * gimple-fold.c: Include gomp-constants.h. (gimple_fold_builtin_acc_on_device): New. (gimple_fold_builtin): Call it. From-SVN: r228340 --- gcc/ChangeLog | 8 ++++++++ gcc/builtins.c | 22 ---------------------- gcc/gimple-fold.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 70f964617b3..06c9a298153 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-10-01 Nathan Sidwell + + * builtins.c: Don't include gomp-constants.h. + (fold_builtin_1): Don't fold acc_on_device here. + * gimple-fold.c: Include gomp-constants.h. + (gimple_fold_builtin_acc_on_device): New. + (gimple_fold_builtin): Call it. + 2015-10-01 H.J. Lu * config/i386/x86-tune.def (X86_TUNE_USE_BT): Enable for diff --git a/gcc/builtins.c b/gcc/builtins.c index 2ff1a8c82bb..e20c1f8ff99 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -68,7 +68,6 @@ along with GCC; see the file COPYING3. If not see #include "cgraph.h" #include "tree-chkp.h" #include "rtl-chkp.h" -#include "gomp-constants.h" static tree do_mpc_arg1 (tree, tree, int (*)(mpc_ptr, mpc_srcptr, mpc_rnd_t)); @@ -10234,27 +10233,6 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0) return build_empty_stmt (loc); break; - case BUILT_IN_ACC_ON_DEVICE: - /* Don't fold on_device until we know which compiler is active. */ - if (symtab->state == EXPANSION) - { - unsigned val_host = GOMP_DEVICE_HOST; - unsigned val_dev = GOMP_DEVICE_NONE; - -#ifdef ACCEL_COMPILER - val_host = GOMP_DEVICE_NOT_HOST; - val_dev = ACCEL_COMPILER_acc_device; -#endif - tree host = build2 (EQ_EXPR, boolean_type_node, arg0, - build_int_cst (integer_type_node, val_host)); - tree dev = build2 (EQ_EXPR, boolean_type_node, arg0, - build_int_cst (integer_type_node, val_dev)); - - tree result = build2 (TRUTH_OR_EXPR, boolean_type_node, host, dev); - return fold_convert (integer_type_node, result); - } - break; - default: break; } diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 9f5e4e99a2c..a6caaa49068 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -62,6 +62,7 @@ along with GCC; see the file COPYING3. If not see #include "output.h" #include "tree-eh.h" #include "gimple-match.h" +#include "gomp-constants.h" /* Return true when DECL can be referenced from current unit. FROM_DECL (if non-null) specify constructor of variable DECL was taken from. @@ -2708,6 +2709,47 @@ gimple_fold_builtin_strlen (gimple_stmt_iterator *gsi) return true; } +/* Fold a call to __builtin_acc_on_device. */ + +static bool +gimple_fold_builtin_acc_on_device (gimple_stmt_iterator *gsi, tree arg0) +{ + /* Defer folding until we know which compiler we're in. */ + if (symtab->state != EXPANSION) + return false; + + unsigned val_host = GOMP_DEVICE_HOST; + unsigned val_dev = GOMP_DEVICE_NONE; + +#ifdef ACCEL_COMPILER + val_host = GOMP_DEVICE_NOT_HOST; + val_dev = ACCEL_COMPILER_acc_device; +#endif + + location_t loc = gimple_location (gsi_stmt (*gsi)); + + tree host_eq = make_ssa_name (boolean_type_node); + gimple *host_ass = gimple_build_assign + (host_eq, EQ_EXPR, arg0, build_int_cst (TREE_TYPE (arg0), val_host)); + gimple_set_location (host_ass, loc); + gsi_insert_before (gsi, host_ass, GSI_SAME_STMT); + + tree dev_eq = make_ssa_name (boolean_type_node); + gimple *dev_ass = gimple_build_assign + (dev_eq, EQ_EXPR, arg0, build_int_cst (TREE_TYPE (arg0), val_dev)); + gimple_set_location (dev_ass, loc); + gsi_insert_before (gsi, dev_ass, GSI_SAME_STMT); + + tree result = make_ssa_name (boolean_type_node); + gimple *result_ass = gimple_build_assign + (result, BIT_IOR_EXPR, host_eq, dev_eq); + gimple_set_location (result_ass, loc); + gsi_insert_before (gsi, result_ass, GSI_SAME_STMT); + + replace_call_with_value (gsi, result); + + return true; +} /* Fold the non-target builtin at *GSI and return whether any simplification was made. */ @@ -2848,6 +2890,9 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi) n == 3 ? gimple_call_arg (stmt, 2) : NULL_TREE, fcode); + case BUILT_IN_ACC_ON_DEVICE: + return gimple_fold_builtin_acc_on_device (gsi, + gimple_call_arg (stmt, 0)); default:; } -- 2.30.2