Commit 94ec37a9 by Richard Biener Committed by Richard Biener

re PR target/89578 (5% runtime regression for 481.wrf at -Ofast -flto)

2019-03-08  Richard Biener  <rguenther@suse.de>

	PR middle-end/89578
	* cfgloop.h (struct loop): Add owned_clique field.
	* cfgloopmanip.c (copy_loop_info): Copy it.
	* tree-cfg.c (gimple_duplicate_bb): Do not remap owned_clique
	cliques.
	* tree-inline.c (copy_loops): Remap owned_clique.
	* lto-streamer-in.c (input_cfg): Stream owned_clique.
	* lto-streamer-out.c (output_cfg): Likewise.

From-SVN: r269484
parent 5d1504d4
2019-03-08 Richard Biener <rguenther@suse.de>
PR middle-end/89578
* cfgloop.h (struct loop): Add owned_clique field.
* cfgloopmanip.c (copy_loop_info): Copy it.
* tree-cfg.c (gimple_duplicate_bb): Do not remap owned_clique
cliques.
* tree-inline.c (copy_loops): Remap owned_clique.
* lto-streamer-in.c (input_cfg): Stream owned_clique.
* lto-streamer-out.c (output_cfg): Likewise.
2019-03-08 Jakub Jelinek <jakub@redhat.com>
PR target/80190
......
......@@ -227,6 +227,10 @@ struct GTY ((chain_next ("%h.next"))) loop {
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, struct loop *target)
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
......
......@@ -826,6 +826,7 @@ input_cfg (struct lto_input_block *ib, struct data_in *data_in,
/* 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, struct function *fn)
/* 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);
......
......@@ -6244,7 +6244,8 @@ gimple_duplicate_bb (basic_block bb, copy_bb_data *id)
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);
......
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