1 /* { dg-do run } */ 2 /* { dg-options "-O3 -fmodulo-sched -fstrict-aliasing -fdump-rtl-sms -fmodulo-sched-allow-regmoves --param sms-min-sc=1" } */ 3 4 extern void abort (void); 5 6 __attribute__ ((noinline)) foo(int * __restrict__ a,int * __restrict__ b,short * c)7void foo (int * __restrict__ a, int * __restrict__ b, short * c) 8 { 9 int i; 10 for(i = 0; i < 100; i+=4) 11 { 12 a[i] = b[i] * c[i]; 13 a[i+1] = b[i+1] * c[i+1]; 14 a[i+2] = b[i+2] * c[i+2]; 15 a[i+3] = b[i+3] * c[i+3]; 16 } 17 } 18 19 int a[100], b[100]; 20 short c[100]; 21 main()22int main() 23 { 24 #if (__SIZEOF_INT__ <= 2) 25 int i; 26 long res; 27 #else 28 int i, res; 29 #endif 30 for(i = 0; i < 100; i++) 31 { 32 b[i] = c[i] = i; 33 } 34 foo(a, b, c); 35 36 res = 0; 37 for(i = 0; i < 100; i++) 38 { 39 res += a[i]; 40 } 41 if(res != 328350) 42 abort(); 43 44 return 0; 45 } 46 47 /* { dg-final { scan-rtl-dump-times "SMS succeeded" 1 "sms" { target spu-*-* } } } */ 48 49