/* PR target/6838 from cato@df.lth.se.
   cris-elf got an ICE with -O2: the insn matching
      (insn 49 48 52 (parallel[
		  (set (mem/s:HI (plus:SI (reg/v/f:SI 0 r0 [24])
			      (const_int 8 [0x8])) [5 <variable>.c+0 S2 A8])
		      (reg:HI 2 r2 [27]))
		  (set (reg/f:SI 2 r2 [31])
		      (plus:SI (reg/v/f:SI 0 r0 [24])
			  (const_int 8 [0x8])))
	      ] ) 24 {*mov_sidehi_mem} (nil)
	  (nil))
   forced a splitter through the output pattern "#", but there was no
   matching splitter.  */

/* The ptx assembler appears to clobber 'b' inside foo during the f1 call.
   Reported to nvidia 2016-05-18.  */
/* { dg-skip-if "PTX assembler bug" { nvptx-*-* } { "-O0" } { "" } } */

struct xx
 {
   int a;
   struct xx *b;
   short c;
 };

int f1 (struct xx *);
void f2 (void);

int
foo (struct xx *p, int b, int c, int d)
{
  int a;

  for (;;)
    {
      a = f1(p);
      if (a)
	return (0);
      if (b)
	continue;
      p->c = d;
      if (p->a)
	f2 ();
      if (c)
	f2 ();
      d = p->c;
      switch (a)
	{
	case 1:
	  if (p->b)
	    f2 ();
	  if (c)
	    f2 ();
	default:
	  break;
	}
    }
  return d;
}

int main (void)
{
  struct xx s = {0, &s, 23};
  if (foo (&s, 0, 0, 0) != 0 || s.a != 0 || s.b != &s || s.c != 0)
    abort ();
  exit (0);
}

int
f1 (struct xx *p)
{
  static int beenhere = 0;
  if (beenhere++ > 1)
    abort ();
  return beenhere > 1;
}

void
f2 (void)
{
  abort ();
}
