diff options
author | Richard Biener <rguenther@suse.de> | 2019-02-22 08:38:14 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-02-22 08:38:14 +0000 |
commit | 229d576cde53ac4396583da3642ca969cca413d1 (patch) | |
tree | 90ee3349ab449b0ce61e8104f5c1086026142119 /gcc/cfghooks.c | |
parent | 3c8b06dcc68be1ba6dbb01fbbd32ba2a337dd3b8 (diff) | |
download | gcc-229d576cde53ac4396583da3642ca969cca413d1.zip gcc-229d576cde53ac4396583da3642ca969cca413d1.tar.gz gcc-229d576cde53ac4396583da3642ca969cca413d1.tar.bz2 |
re PR tree-optimization/87609 (miscompilation with restrict and loop)
2019-02-22 Richard Biener <rguenther@suse.de>
PR middle-end/87609
* cfghooks.h (dependence_hash): New typedef.
(struct copy_bb_data): New type.
(cfg_hooks::duplicate_block): Adjust to take a copy_bb_data argument.
(duplicate_block): Likewise.
* cfghooks.c (duplicate_block): Pass down copy_bb_data.
(copy_bbs): Create and pass down copy_bb_data.
* cfgrtl.c (cfg_layout_duplicate_bb): Adjust.
(rtl_duplicate_bb): Likewise.
* tree-cfg.c (gimple_duplicate_bb): If the copy_bb_data arg is not NULL
remap dependence info.
* gcc.dg/torture/restrict-7.c: New testcase.
From-SVN: r269098
Diffstat (limited to 'gcc/cfghooks.c')
-rw-r--r-- | gcc/cfghooks.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c index 6562bea..a1d603a 100644 --- a/gcc/cfghooks.c +++ b/gcc/cfghooks.c @@ -1066,7 +1066,7 @@ can_duplicate_block_p (const_basic_block bb) AFTER. */ basic_block -duplicate_block (basic_block bb, edge e, basic_block after) +duplicate_block (basic_block bb, edge e, basic_block after, copy_bb_data *id) { edge s, n; basic_block new_bb; @@ -1082,7 +1082,7 @@ duplicate_block (basic_block bb, edge e, basic_block after) gcc_checking_assert (can_duplicate_block_p (bb)); - new_bb = cfg_hooks->duplicate_block (bb); + new_bb = cfg_hooks->duplicate_block (bb, id); if (after) move_block_after (new_bb, after); @@ -1337,6 +1337,7 @@ copy_bbs (basic_block *bbs, unsigned n, basic_block *new_bbs, unsigned i, j; basic_block bb, new_bb, dom_bb; edge e; + copy_bb_data id; /* Mark the blocks to be copied. This is used by edge creation hooks to decide whether to reallocate PHI nodes capacity to avoid reallocating @@ -1349,7 +1350,7 @@ copy_bbs (basic_block *bbs, unsigned n, basic_block *new_bbs, { /* Duplicate. */ bb = bbs[i]; - new_bb = new_bbs[i] = duplicate_block (bb, NULL, after); + new_bb = new_bbs[i] = duplicate_block (bb, NULL, after, &id); after = new_bb; if (bb->loop_father) { |