===================================================================
@@ -227,6 +227,10 @@ struct GTY ((chain_next ("%h.next"))) lo
Other values means unroll with the given unrolling factor. */
unsigned short unroll;
+ /* If this loop was inlined the main clique of the callee which does
+ not need remapping when copying the loop body. */
+ unsigned short owned_clique;
+
/* For SIMD loops, this is a unique identifier of the loop, referenced
by IFN_GOMP_SIMD_VF, IFN_GOMP_SIMD_LANE and IFN_GOMP_SIMD_LAST_LANE
builtins. */
===================================================================
@@ -1024,6 +1024,7 @@ copy_loop_info (struct loop *loop, struc
target->force_vectorize = loop->force_vectorize;
target->in_oacc_kernels_region = loop->in_oacc_kernels_region;
target->unroll = loop->unroll;
+ target->owned_clique = loop->owned_clique;
}
/* Copies copy of LOOP as subloop of TARGET loop, placing newly
===================================================================
@@ -6244,7 +6244,8 @@ gimple_duplicate_bb (basic_block bb, cop
op = TREE_OPERAND (op, 0);
if ((TREE_CODE (op) == MEM_REF
|| TREE_CODE (op) == TARGET_MEM_REF)
- && MR_DEPENDENCE_CLIQUE (op) > 1)
+ && MR_DEPENDENCE_CLIQUE (op) > 1
+ && MR_DEPENDENCE_CLIQUE (op) != bb->loop_father->owned_clique)
{
if (!id->dependence_map)
id->dependence_map = new hash_map<dependence_hash,
===================================================================
@@ -2670,6 +2670,11 @@ copy_loops (copy_body_data *id,
cfun->has_unroll = true;
if (dest_loop->force_vectorize)
cfun->has_force_vectorize_loops = true;
+ if (id->src_cfun->last_clique != 0)
+ dest_loop->owned_clique
+ = remap_dependence_clique (id,
+ src_loop->owned_clique
+ ? src_loop->owned_clique : 1);
/* Finally place it into the loop array and the loop tree. */
place_new_loop (cfun, dest_loop);
===================================================================
@@ -826,6 +826,7 @@ input_cfg (struct lto_input_block *ib, s
/* Read OMP SIMD related info. */
loop->safelen = streamer_read_hwi (ib);
loop->unroll = streamer_read_hwi (ib);
+ loop->owned_clique = streamer_read_hwi (ib);
loop->dont_vectorize = streamer_read_hwi (ib);
loop->force_vectorize = streamer_read_hwi (ib);
loop->simduid = stream_read_tree (ib, data_in);
===================================================================
@@ -1938,6 +1938,7 @@ output_cfg (struct output_block *ob, str
/* Write OMP SIMD related info. */
streamer_write_hwi (ob, loop->safelen);
streamer_write_hwi (ob, loop->unroll);
+ streamer_write_hwi (ob, loop->owned_clique);
streamer_write_hwi (ob, loop->dont_vectorize);
streamer_write_hwi (ob, loop->force_vectorize);
stream_write_tree (ob, loop->simduid, true);