1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fdump-tree-lim2-details" } */
       3  
       4  int x;
       5  int a[100];
       6  
       7  struct a
       8  {
       9    int X;
      10    int Y;
      11  };
      12  
      13  /* Word size is long long for 64-bit mingw target.  */
      14  #ifdef _WIN64
      15  #define LONG long long
      16  #else
      17  #define LONG long
      18  #endif
      19  
      20  struct a arr[100];
      21  
      22  void test1(int b)
      23  {
      24    unsigned i;
      25  
      26    /* And here.  */
      27    for (i = 0; i < 100; i++)
      28      {
      29        arr[b+8].X += i;
      30        arr[b+9].X += i;
      31      }
      32  }
      33  
      34  void test2(struct a *A, int b)
      35  {
      36    unsigned i;
      37  
      38    /* And here as well.  */
      39    for (i = 0; i < 100; i++)
      40      {
      41        A[b].X += i;
      42        A[b+1].Y += i;
      43      }
      44  }
      45  
      46  void test3(unsigned LONG b)
      47  {
      48    unsigned i;
      49  
      50    /* And here.  */
      51    for (i = 0; i < 100; i++)
      52      {
      53        arr[b+8].X += i;
      54        arr[b+9].X += i;
      55      }
      56  }
      57  
      58  void test4(struct a *A, unsigned LONG b)
      59  {
      60    unsigned i;
      61  
      62    /* And here as well.  */
      63    for (i = 0; i < 100; i++)
      64      {
      65        A[b].X += i;
      66        A[b+1].Y += i;
      67      }
      68  }
      69  /* long index not hoisted for avr target PR 36561 */
      70  /* { dg-final { scan-tree-dump-times "Executing store motion of" 8 "lim2" { xfail { avr-*-* msp430-*-* } } } } */
      71  /* { dg-final { scan-tree-dump-times "Executing store motion of" 6 "lim2" { target { avr-*-* msp430-*-* } } } } */