From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55855 invoked by alias); 1 Oct 2015 15:17:00 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 53527 invoked by uid 89); 1 Oct 2015 15:16:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.9 required=5.0 tests=BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-qg0-f51.google.com Received: from mail-qg0-f51.google.com (HELO mail-qg0-f51.google.com) (209.85.192.51) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 01 Oct 2015 15:16:58 +0000 Received: by qgx61 with SMTP id 61so70005385qgx.3 for ; Thu, 01 Oct 2015 08:16:55 -0700 (PDT) X-Received: by 10.140.99.117 with SMTP id p108mr12711809qge.91.1443712615800; Thu, 01 Oct 2015 08:16:55 -0700 (PDT) Received: from ?IPv6:2601:181:c000:c497:a2a8:cdff:fe3e:b48? ([2601:181:c000:c497:a2a8:cdff:fe3e:b48]) by smtp.googlemail.com with ESMTPSA id n23sm2593796qkl.17.2015.10.01.08.16.55 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Oct 2015 08:16:55 -0700 (PDT) To: GCC Patches From: Nathan Sidwell Subject: [gomp4] gimple fold acc_on_device Message-ID: <560D4E66.6060209@acm.org> Date: Thu, 01 Oct 2015 15:17:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030806050307000100090009" X-SW-Source: 2015-10/txt/msg00085.txt.bz2 This is a multi-part message in MIME format. --------------030806050307000100090009 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 162 I've applied this version of the acc_on_device folding to gomp4. See https://gcc.gnu.org/ml/gcc-patches/2015-10/msg00074.html for the trunk discussion. nathan --------------030806050307000100090009 Content-Type: text/x-patch; name="gomp4-ondev-3.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="gomp4-ondev-3.patch" Content-length: 3824 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. Index: builtins.c =================================================================== --- builtins.c (revision 228288) +++ builtins.c (working copy) @@ -64,8 +64,6 @@ along with GCC; see the file COPYING3. #include "cgraph.h" #include "tree-chkp.h" #include "rtl-chkp.h" -#include "gomp-constants.h" -#include "omp-low.h" static tree do_mpc_arg1 (tree, tree, int (*)(mpc_ptr, mpc_srcptr, mpc_rnd_t)); @@ -10230,27 +10228,6 @@ fold_builtin_1 (location_t loc, tree fnd 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; } Index: gimple-fold.c =================================================================== --- gimple-fold.c (revision 228288) +++ gimple-fold.c (working copy) @@ -62,6 +62,7 @@ along with GCC; see the file COPYING3. #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_ 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_iterato 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:; } --------------030806050307000100090009--