aboutsummaryrefslogtreecommitdiff
path: root/gcc/omp-general.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/omp-general.h')
-rw-r--r--gcc/omp-general.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/gcc/omp-general.h b/gcc/omp-general.h
new file mode 100644
index 0000000..634fdcc
--- /dev/null
+++ b/gcc/omp-general.h
@@ -0,0 +1,91 @@
+/* General types and functions that are uselful for processing of OpenMP,
+ OpenACC and similar directivers at various stages of compilation.
+
+ Copyright (C) 2005-2016 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_OMP_GENERAL_H
+#define GCC_OMP_GENERAL_H
+
+#include "gomp-constants.h"
+
+/* Flags for an OpenACC loop. */
+
+enum oacc_loop_flags {
+ OLF_SEQ = 1u << 0, /* Explicitly sequential */
+ OLF_AUTO = 1u << 1, /* Compiler chooses axes. */
+ OLF_INDEPENDENT = 1u << 2, /* Iterations are known independent. */
+ OLF_GANG_STATIC = 1u << 3, /* Gang partitioning is static (has op). */
+
+ /* Explicitly specified loop axes. */
+ OLF_DIM_BASE = 4,
+ OLF_DIM_GANG = 1u << (OLF_DIM_BASE + GOMP_DIM_GANG),
+ OLF_DIM_WORKER = 1u << (OLF_DIM_BASE + GOMP_DIM_WORKER),
+ OLF_DIM_VECTOR = 1u << (OLF_DIM_BASE + GOMP_DIM_VECTOR),
+
+ OLF_MAX = OLF_DIM_BASE + GOMP_DIM_MAX
+};
+
+/* A structure holding the elements of:
+ for (V = N1; V cond N2; V += STEP) [...] */
+
+struct omp_for_data_loop
+{
+ tree v, n1, n2, step;
+ enum tree_code cond_code;
+};
+
+/* A structure describing the main elements of a parallel loop. */
+
+struct omp_for_data
+{
+ struct omp_for_data_loop loop;
+ tree chunk_size;
+ gomp_for *for_stmt;
+ tree pre, iter_type;
+ int collapse;
+ int ordered;
+ bool have_nowait, have_ordered, simd_schedule;
+ unsigned char sched_modifiers;
+ enum omp_clause_schedule_kind sched_kind;
+ struct omp_for_data_loop *loops;
+};
+
+#define OACC_FN_ATTRIB "oacc function"
+
+extern tree omp_find_clause (tree clauses, enum omp_clause_code kind);
+extern bool omp_is_reference (tree decl);
+extern void omp_adjust_for_condition (location_t loc, enum tree_code *cond_code,
+ tree *n2);
+extern tree omp_get_for_step_from_incr (location_t loc, tree incr);
+extern void omp_extract_for_data (gomp_for *for_stmt, struct omp_for_data *fd,
+ struct omp_for_data_loop *loops);
+extern gimple *omp_build_barrier (tree lhs);
+extern int omp_max_vf (void);
+extern int omp_max_simt_vf (void);
+extern tree oacc_launch_pack (unsigned code, tree device, unsigned op);
+extern void oacc_replace_fn_attrib (tree fn, tree dims);
+extern void oacc_set_fn_attrib (tree fn, tree clauses, bool is_kernel,
+ vec<tree> *args);
+extern tree oacc_build_routine_dims (tree clauses);
+extern tree oacc_get_fn_attrib (tree fn);
+extern bool oacc_fn_attrib_kernels_p (tree attr);
+extern int oacc_get_fn_dim_size (tree fn, int axis);
+extern int oacc_get_ifn_dim_arg (const gimple *stmt);
+
+#endif /* GCC_OMP_GENERAL_H */