aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-10-04 15:25:33 +0200
committerRichard Biener <rguenther@suse.de>2023-10-05 10:23:32 +0200
commitb583a2940af90d03f535648fef111cb158933f7d (patch)
treeb89485b5aea638dc9d07e7f464b9e6ba2fec9cae /gcc
parentffbd7c3d0fd1b9b10ef5a0f2b2e64bd234620167 (diff)
downloadgcc-b583a2940af90d03f535648fef111cb158933f7d.zip
gcc-b583a2940af90d03f535648fef111cb158933f7d.tar.gz
gcc-b583a2940af90d03f535648fef111cb158933f7d.tar.bz2
Avoid left around copies when value-numbering BBs
The following makes sure to treat values whose definition we didn't visit as available since those by definition must dominate the entry of the region. That avoids unpropagated copies after if-conversion and resulting SLP discovery fails (which doesn't handle plain copies). * tree-ssa-sccvn.cc (rpo_elim::eliminate_avail): Not visited value numbers are available itself.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-ssa-sccvn.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index e464985..d2aab38 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -7688,7 +7688,11 @@ rpo_elim::eliminate_avail (basic_block bb, tree op)
{
if (SSA_NAME_IS_DEFAULT_DEF (valnum))
return valnum;
- vn_avail *av = VN_INFO (valnum)->avail;
+ vn_ssa_aux_t valnum_info = VN_INFO (valnum);
+ /* See above. */
+ if (!valnum_info->visited)
+ return valnum;
+ vn_avail *av = valnum_info->avail;
if (!av)
return NULL_TREE;
if (av->location == bb->index)