int
TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN (struct cgraph_node *, struct cgraph_simd_clone *, tree, int, bool)
¶This hook should set vecsize_mangle, vecsize_int, vecsize_float fields in simd_clone structure pointed by clone_info argument and also simdlen field if it was previously 0. vecsize_mangle is a marker for the backend only. vecsize_int and vecsize_float should be left zero on targets where the number of lanes is not determined by the bitsize (in which case simdlen is always used). The hook should return 0 if SIMD clones shouldn’t be emitted, or number of vecsize_mangle variants that should be emitted.
void
TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *)
¶This hook should add implicit attribute(target("..."))
attribute
to SIMD clone node if needed.
int
TARGET_SIMD_CLONE_USABLE (struct cgraph_node *, machine_mode)
¶This hook should return -1 if SIMD clone node shouldn’t be used in vectorized loops in current function with vector_mode, or non-negative number if it is usable. In that case, the smaller the number is, the more desirable it is to use it.
int
TARGET_SIMT_VF (void)
¶Return number of threads in SIMT thread group on the target.
int
TARGET_OMP_DEVICE_KIND_ARCH_ISA (enum omp_device_kind_arch_isa trait, const char *name)
¶Return 1 if trait name is present in the OpenMP context’s device trait set, return 0 if not present in any OpenMP context in the whole translation unit, or -1 if not present in the current OpenMP context but might be present in another OpenMP context in the same TU.
bool
TARGET_GOACC_VALIDATE_DIMS (tree decl, int *dims, int fn_level, unsigned used)
¶This hook should check the launch dimensions provided for an OpenACC compute region, or routine. Defaulted values are represented as -1 and non-constant values as 0. The fn_level is negative for the function corresponding to the compute region. For a routine it is the outermost level at which partitioned execution may be spawned. The hook should verify non-default values. If DECL is NULL, global defaults are being validated and unspecified defaults should be filled in. Diagnostics should be issued as appropriate. Return true, if changes have been made. You must override this hook to provide dimensions larger than 1.
int
TARGET_GOACC_DIM_LIMIT (int axis)
¶This hook should return the maximum size of a particular dimension, or zero if unbounded.
bool
TARGET_GOACC_FORK_JOIN (gcall *call, const int *dims, bool is_fork)
¶This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN function calls to target-specific gimple, or indicate whether they should be retained. It is executed during the oacc_device_lower pass. It should return true, if the call should be retained. It should return false, if it is to be deleted (either because target-specific gimple has been inserted before it, or there is no need for it). The default hook returns false, if there are no RTL expanders for them.
void
TARGET_GOACC_REDUCTION (gcall *call)
¶This hook is used by the oacc_transform pass to expand calls to the GOACC_REDUCTION internal function, into a sequence of gimple instructions. call is gimple statement containing the call to the function. This hook removes statement call after the expanded sequence has been inserted. This hook is also responsible for allocating any storage for reductions when necessary.
tree
TARGET_PREFERRED_ELSE_VALUE (unsigned ifn, tree type, unsigned nops, tree *ops)
¶This hook returns the target’s preferred final argument for a call
to conditional internal function ifn (really of type
internal_fn
). type specifies the return type of the
function and ops are the operands to the conditional operation,
of which there are nops.
For example, if ifn is IFN_COND_ADD
, the hook returns
a value of type type that should be used when ‘ops[0]’
and ‘ops[1]’ are conditionally added together.
This hook is only relevant if the target supports conditional patterns
like cond_addm
. The default implementation returns a zero
constant of type type.
tree
TARGET_GOACC_ADJUST_PRIVATE_DECL (location_t loc, tree var, int level)
¶This hook, if defined, is used by accelerator target back-ends to adjust
OpenACC variable declarations that should be made private to the given
parallelism level (i.e. GOMP_DIM_GANG
, GOMP_DIM_WORKER
or
GOMP_DIM_VECTOR
). A typical use for this hook is to force variable
declarations at the gang
level to reside in GPU shared memory.
loc may be used for diagnostic purposes.
You may also use the TARGET_GOACC_EXPAND_VAR_DECL
hook if the
adjusted variable declaration needs to be expanded to RTL in a non-standard
way.
rtx
TARGET_GOACC_EXPAND_VAR_DECL (tree var)
¶This hook, if defined, is used by accelerator target back-ends to expand
specially handled kinds of VAR_DECL
expressions. A particular use is
to place variables with specific attributes inside special accelarator
memories. A return value of NULL
indicates that the target does not
handle this VAR_DECL
, and normal RTL expanding is resumed.
Only define this hook if your accelerator target needs to expand certain
VAR_DECL
nodes in a way that differs from the default. You can also adjust
private variables at OpenACC device-lowering time using the
TARGET_GOACC_ADJUST_PRIVATE_DECL
target hook.
tree
TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD (tree rec, bool sender, const char *name, unsigned HOST_WIDE_INT offset)
¶Create a record used to propagate local-variable state from an active worker to other workers. A possible implementation might adjust the type of REC to place the new variable in shared GPU memory.
Presence of this target hook indicates that middle end neutering/broadcasting be used.
void
TARGET_GOACC_SHARED_MEM_LAYOUT (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, int[], unsigned HOST_WIDE_INT[], unsigned HOST_WIDE_INT[])
¶Lay out a fixed shared-memory region on the target. The LO and HI arguments should be set to a range of addresses that can be used for worker broadcasting. The dimensions, reduction size and gang-private size arguments are for the current offload region.