diff options
author | Bin Cheng <bin.cheng@arm.com> | 2017-03-28 15:35:56 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2017-03-28 15:35:56 +0000 |
commit | 9d384e80bda2cf905cd550c8908494210ae11c15 (patch) | |
tree | 8a5453ed2ca619ddeb6950e881cbe6b779430443 /gcc/tree-vect-loop.c | |
parent | 3e907b90563ad90752acf1b318bdac33d546c7f7 (diff) | |
download | gcc-9d384e80bda2cf905cd550c8908494210ae11c15.zip gcc-9d384e80bda2cf905cd550c8908494210ae11c15.tar.gz gcc-9d384e80bda2cf905cd550c8908494210ae11c15.tar.bz2 |
tree-vect-loop.c (optimize_mask_stores): Add bb to the right loop.
* tree-vect-loop.c (optimize_mask_stores): Add bb to the right
loop.
From-SVN: r246541
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 6bbf816..af874e7 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -7229,6 +7229,7 @@ optimize_mask_stores (struct loop *loop) unsigned nbbs = loop->num_nodes; unsigned i; basic_block bb; + struct loop *bb_loop; gimple_stmt_iterator gsi; gimple *stmt; auto_vec<gimple *> worklist; @@ -7267,11 +7268,16 @@ optimize_mask_stores (struct loop *loop) last = worklist.pop (); mask = gimple_call_arg (last, 2); bb = gimple_bb (last); - /* Create new bb. */ + /* Create then_bb and if-then structure in CFG, then_bb belongs to + the same loop as if_bb. It could be different to LOOP when two + level loop-nest is vectorized and mask_store belongs to the inner + one. */ e = split_block (bb, last); + bb_loop = bb->loop_father; + gcc_assert (loop == bb_loop || flow_loop_nested_p (loop, bb_loop)); join_bb = e->dest; store_bb = create_empty_bb (bb); - add_bb_to_loop (store_bb, loop); + add_bb_to_loop (store_bb, bb_loop); e->flags = EDGE_TRUE_VALUE; efalse = make_edge (bb, store_bb, EDGE_FALSE_VALUE); /* Put STORE_BB to likely part. */ |