aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-loop-distribution.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-loop-distribution.cc')
-rw-r--r--gcc/tree-loop-distribution.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc
index fc0cd39..6be5afd 100644
--- a/gcc/tree-loop-distribution.cc
+++ b/gcc/tree-loop-distribution.cc
@@ -1197,6 +1197,16 @@ generate_memset_builtin (class loop *loop, partition *partition)
/* The new statements will be placed before LOOP. */
gsi = gsi_last_bb (loop_preheader_edge (loop)->src);
+ if (flag_openacc
+ && gsi_stmt (gsi)
+ && gimple_call_internal_p (gsi_stmt (gsi), IFN_UNIQUE)
+ && (TREE_INT_CST_LOW (gimple_call_arg (gsi_stmt (gsi), 0))
+ == (unsigned HOST_WIDE_INT) IFN_UNIQUE_OACC_FORK))
+ {
+ edge e = split_block (loop_preheader_edge (loop)->src, gsi_stmt (gsi));
+ gsi = gsi_last_bb (e->dest);
+ }
+
nb_bytes = rewrite_to_non_trapping_overflow (builtin->size);
nb_bytes = force_gimple_operand_gsi (&gsi, nb_bytes, true, NULL_TREE,
false, GSI_CONTINUE_LINKING);
@@ -1251,6 +1261,16 @@ generate_memcpy_builtin (class loop *loop, partition *partition)
/* The new statements will be placed before LOOP. */
gsi = gsi_last_bb (loop_preheader_edge (loop)->src);
+ if (flag_openacc
+ && gsi_stmt (gsi)
+ && gimple_call_internal_p (gsi_stmt (gsi), IFN_UNIQUE)
+ && (TREE_INT_CST_LOW (gimple_call_arg (gsi_stmt (gsi), 0))
+ == (unsigned HOST_WIDE_INT) IFN_UNIQUE_OACC_FORK))
+ {
+ edge e = split_block (loop_preheader_edge (loop)->src, gsi_stmt (gsi));
+ gsi = gsi_last_bb (e->dest);
+ }
+
nb_bytes = rewrite_to_non_trapping_overflow (builtin->size);
nb_bytes = force_gimple_operand_gsi (&gsi, nb_bytes, true, NULL_TREE,
false, GSI_CONTINUE_LINKING);