This avoids endless cycling when a PHI node with unchanged backedge
value (the PHI result appearing there) is subject to CSE since doing
that effectively alters the hash entry. The way to avoid this is
to ignore such edges when processing the PHI node.
2021-03-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/99694
* tree-ssa-sccvn.c (visit_phi): Ignore edges with the
PHI result.
* gcc.dg/torture/pr99694.c: New testcase.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-w" } */
+
+#include <stdint.h>
+
+int a, b, c;
+void d() {
+ uint16_t e;
+ int32_t *f;
+ int32_t *g;
+ if (a) {
+ int32_t *k;
+ for (;; *k += 1) {
+ int32_t **i = &f;
+ int32_t **l = &g;
+ for (e = 6; e; e++) {
+ g = k = f;
+ j:
+ **l = 0;
+ }
+ *i = c;
+ }
+ }
+ uint16_t i = &e;
+ b = i / 0;
+ goto j;
+}
{
tree def = PHI_ARG_DEF_FROM_EDGE (phi, e);
+ if (def == PHI_RESULT (phi))
+ continue;
++n_executable;
if (TREE_CODE (def) == SSA_NAME)
{