new file mode 100644
@@ -0,0 +1,64 @@
+/* PR rtl-optimization/70672 */
+/* PR rtl-optimization/68814 */
+/* { dg-do run { target { stdint_types } } } */
+/* { dg-options "-O2" } */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+struct pair {
+ uint32_t one;
+ uint32_t two;
+};
+
+union u {
+ struct pair pair;
+ uint64_t num;
+};
+
+uint64_t __attribute__ ((noinline))
+f(uint64_t a)
+{
+ union u x;
+
+ x.num = a;
+
+ x.pair.one = x.pair.two;
+ x.pair.two = 0;
+
+ return x.num;
+}
+
+uint64_t __attribute__ ((noinline))
+g(uint64_t a)
+{
+ union u x;
+
+ x.num = a;
+
+ x.pair.two = x.pair.one;
+ x.pair.one = 0;
+
+ return x.num;
+}
+
+int
+main (void)
+{
+ uint64_t x = 0x123456789abcdef0ULL;
+ uint64_t fx = f(x);
+ uint64_t gx = g(x);
+ uint64_t fgx = f(gx);
+ uint64_t gfx = g(fx);
+
+ if ((fx & gx))
+ abort ();
+
+ if ((fgx & gfx))
+ abort ();
+
+ if ((fgx | gfx) != x)
+ abort ();
+
+ return 0;
+}