152284Sobrien/* Inspired from sbitmap_a_or_b_and_c_cg function in sbitmap.c.  */
252284Sobrien/* { dg-do run } */
352284Sobrien/* { dg-options "-O2 -fmodulo-sched -fmodulo-sched-allow-regmoves -fdump-rtl-sms" } */
490075Sobrien
552284Sobrienextern void abort (void);
690075Sobrien
790075Sobrienint a[5] = { 0, 1, 0, 0, 0 };
890075Sobrienint b[5] = { 0, 1, 0, 1, 0 };
990075Sobrienint c[5] = { 0, 0, 1, 1, 0 };
1052284Sobrienint dst[5] = { 0, 0, 0, 0, 0 };
1152284Sobrien
1252284Sobrien__attribute__ ((noinline))
1352284Sobrienvoid
1452284Sobrienfoo (int size, int *ap, int *bp, int *cp, int *dstp)
1552284Sobrien{
1652284Sobrien  unsigned int i, n = size;
1752284Sobrien  int changed = 0;
1852284Sobrien
1952284Sobrien  for (i = 0; i < n; i++)
2052284Sobrien    {
2152284Sobrien      const int tmp = *ap++ | (*bp++ & *cp++);
2290075Sobrien      changed |= *dstp ^ tmp;
2390075Sobrien      *dstp++ = tmp;
2452284Sobrien    }
2590075Sobrien
2690075Sobrien  if (changed == 0)
2790075Sobrien    abort ();
2890075Sobrien}
2952284Sobrien
3052284Sobrienint
3190075Sobrienmain ()
32{
33  foo (5, a, b, c, dst);
34  return 0;
35}
36
37/* { dg-final { scan-rtl-dump-times "SMS succeeded" 1 "sms" { target spu-*-* powerpc*-*-* } } } */
38/* { dg-final { cleanup-rtl-dump "sms" } } */
39
40