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