Commit 451e8dae by Nathan Sidwell Committed by Nathan Sidwell

gimple-fold.c: Include omp-low.h.

	* gimple-fold.c: Include omp-low.h.
	(fold_internal_goacc_dim): New.
	(gimple_fold_call): Call it.

From-SVN: r229816
parent e01d41e5
2015-11-05 Nathan Sidwell <nathan@codesourcery.com>
* gimple-fold.c: Include omp-low.h.
(fold_internal_goacc_dim): New.
(gimple_fold_call): Call it.
2015-11-05 Jakub Jelinek <jakub@redhat.com> 2015-11-05 Jakub Jelinek <jakub@redhat.com>
Ilya Verbin <ilya.verbin@intel.com> Ilya Verbin <ilya.verbin@intel.com>
...@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-match.h" #include "gimple-match.h"
#include "gomp-constants.h" #include "gomp-constants.h"
#include "optabs-query.h" #include "optabs-query.h"
#include "omp-low.h"
/* Return true when DECL can be referenced from current unit. /* Return true when DECL can be referenced from current unit.
...@@ -2906,6 +2907,28 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi) ...@@ -2906,6 +2907,28 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi)
return false; return false;
} }
/* Transform IFN_GOACC_DIM_SIZE and IFN_GOACC_DIM_POS internal
function calls to constants, where possible. */
static tree
fold_internal_goacc_dim (const gimple *call)
{
int axis = get_oacc_ifn_dim_arg (call);
int size = get_oacc_fn_dim_size (current_function_decl, axis);
bool is_pos = gimple_call_internal_fn (call) == IFN_GOACC_DIM_POS;
tree result = NULL_TREE;
/* If the size is 1, or we only want the size and it is not dynamic,
we know the answer. */
if (size == 1 || (!is_pos && size))
{
tree type = TREE_TYPE (gimple_call_lhs (call));
result = build_int_cst (type, size - is_pos);
}
return result;
}
/* Return true if ARG0 CODE ARG1 in infinite signed precision operation /* Return true if ARG0 CODE ARG1 in infinite signed precision operation
doesn't fit into TYPE. The test for overflow should be regardless of doesn't fit into TYPE. The test for overflow should be regardless of
-fwrapv, and even for unsigned types. */ -fwrapv, and even for unsigned types. */
...@@ -3106,6 +3129,10 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) ...@@ -3106,6 +3129,10 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace)
return true; return true;
} }
break; break;
case IFN_GOACC_DIM_SIZE:
case IFN_GOACC_DIM_POS:
result = fold_internal_goacc_dim (stmt);
break;
case IFN_UBSAN_CHECK_ADD: case IFN_UBSAN_CHECK_ADD:
subcode = PLUS_EXPR; subcode = PLUS_EXPR;
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment