@@ -5521,7 +5521,22 @@ cse_insn (rtx_insn *insn)
}
if (sets[i].rtl != 0 && dest != SET_DEST (sets[i].rtl))
- sets[i].dest_hash = HASH (SET_DEST (sets[i].rtl), mode);
+ {
+ do_not_record = 0;
+ sets[i].dest_hash = HASH (SET_DEST (sets[i].rtl), mode);
+ if (do_not_record)
+ {
+ rtx dst = SET_DEST (sets[i].rtl);
+ if (REG_P (dst) || GET_CODE (dst) == SUBREG)
+ invalidate (dst, VOIDmode);
+ else if (MEM_P (dst))
+ invalidate (dst, VOIDmode);
+ else if (GET_CODE (dst) == STRICT_LOW_PART
+ || GET_CODE (dst) == ZERO_EXTRACT)
+ invalidate (XEXP (dst, 0), GET_MODE (dst));
+ sets[i].rtl = 0;
+ }
+ }
#ifdef HAVE_cc0
/* If setting CC0, record what it was set to, or a constant, if it
@@ -0,0 +1,30 @@
+/* PR rtl-optimization/64756 */
+
+int a, *tmp, **c = &tmp;
+volatile int d;
+static int *volatile *e = &tmp;
+unsigned int f;
+
+static void
+fn1 (int *p)
+{
+ int g;
+ for (; f < 1; f++)
+ for (g = 1; g >= 0; g--)
+ {
+ d || d;
+ *c = p;
+
+ if (tmp != &a)
+ __builtin_abort ();
+
+ *e = 0;
+ }
+}
+
+int
+main ()
+{
+ fn1 (&a);
+ return 0;
+}