/* PR target/91102 */
/* { dg-do compile } */
/* { dg-options "-O2" } */

int
foo (long d, long l)
{
  register long e asm ("x1") = d;
  register long f asm("x2") = l;
  asm ("" : : "r" (e), "r" (f));
  return 3;
}

struct T { int i; int j; };
union S { long h; struct T t; };

void
bar (union S b)
{
  while (1)
    {
      union S c = b;
      c.t.j++;
      b.h = foo (b.h, c.h);
    }
}