===================================================================
@@ -3355,6 +3355,12 @@ set_ssa_val_to (tree from, tree to)
if (currval != to
&& !operand_equal_p (currval, to, 0)
+ /* Different undefined SSA names are not actually different. See
+ PR82320 for a testcase were we'd otherwise not terminate iteration. */
+ && !(TREE_CODE (currval) == SSA_NAME
+ && TREE_CODE (to) == SSA_NAME
+ && ssa_undefined_value_p (currval, false)
+ && ssa_undefined_value_p (to, false))
/* ??? For addresses involving volatile objects or types operand_equal_p
does not reliably detect ADDR_EXPRs as equal. We know we are only
getting invariant gimple addresses here, so can use
===================================================================
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+
+void
+ec (int n4, short int ea)
+{
+ if (1)
+ {
+ if (ea != 0)
+ {
+ int *c1 = (int *)&ea;
+
+nn:
+ for (;;)
+ ++*c1;
+ }
+ }
+ else
+ {
+ int *lq = &n4;
+ int *md;
+ int da;
+
+ goto nn;
+
+r1:
+ md = lq;
+ for (da = 0; da < 1; ++da)
+ {
+ig:
+ ++n4;
+ *md += n4;
+ }
+ }
+
+ for (ea = 0; ea < 1; ++ea)
+ goto r1;
+
+ goto ig;
+}