aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-02-01 09:18:47 +0100
committerRichard Biener <rguenther@suse.de>2024-02-01 11:12:47 +0100
commitb84f8a5e0a7ef3e5bd0d186fc7e280d9c43c5b7f (patch)
tree1356a566d4e813af66b3506f58141c23a575cf85
parentd85c17a2b628b7e783716ac376bdb60ddc2afb9a (diff)
downloadgcc-b84f8a5e0a7ef3e5bd0d186fc7e280d9c43c5b7f.zip
gcc-b84f8a5e0a7ef3e5bd0d186fc7e280d9c43c5b7f.tar.gz
gcc-b84f8a5e0a7ef3e5bd0d186fc7e280d9c43c5b7f.tar.bz2
tree-optimization/113693 - LC SSA and region VN
The following fixes LC SSA preserving with region VN which was broken when availability checking was enhanced to treat not visited value numbers as available. The following makes sure to honor availability data we put in place for LC SSA preserving instead. PR tree-optimization/113693 * tree-ssa-sccvn.cc (rpo_elim::eliminate_avail): Honor avail data when available. * gcc.dg/pr113693.c: New testcase.
-rw-r--r--gcc/testsuite/gcc.dg/pr113693.c13
-rw-r--r--gcc/tree-ssa-sccvn.cc11
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/testsuite/gcc.dg/pr113693.c b/gcc/testsuite/gcc.dg/pr113693.c
new file mode 100644
index 0000000..a6f5519
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr113693.c
@@ -0,0 +1,13 @@
+/* { dg-do compile { target bitint } } */
+/* { dg-options "-O2 -fdbg-cnt=vect_loop:1" } */
+
+_BitInt(837) g, h;
+
+void
+fn1(void)
+{
+ for (; g; g++)
+ for (; h; h++)
+ ;
+}
+/* { dg-message "dbgcnt" "" { target *-*-* } 0 } */
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index 9bed9b3..bbcf865 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -7723,12 +7723,15 @@ rpo_elim::eliminate_avail (basic_block bb, tree op)
if (SSA_NAME_IS_DEFAULT_DEF (valnum))
return valnum;
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;
+ {
+ /* See above. But when there's availability info prefer
+ what we recorded there for example to preserve LC SSA. */
+ if (!valnum_info->visited)
+ return valnum;
+ return NULL_TREE;
+ }
if (av->location == bb->index)
/* On tramp3d 90% of the cases are here. */
return ssa_name (av->leader);