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))
       7  void 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  
      22  int 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