1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -fdump-tree-lsplit-details" } */
       3  
       4  extern const int step;
       5  
       6  int ga, gb;
       7  
       8  __attribute__((pure)) __attribute__((noinline)) int inc (int i)
       9  {
      10    return i + step;
      11  }
      12  
      13  extern int do_something (void);
      14  
      15  void test1 (int n)
      16  {
      17    int i;
      18  
      19    for (i = 0; i < n; i = inc (i))
      20      {
      21        if (ga)
      22          ga = do_something ();
      23      }
      24  }
      25  
      26  void test2 (int n, int p)
      27  {
      28    int i;
      29    int v;
      30  
      31    for (i = 0; i < n ; i = inc (i))
      32      {
      33        if (ga)
      34         {
      35           v = inc (2);
      36           gb += 1;
      37         }
      38        else
      39         {
      40           v = p * p;
      41           gb *= 3;
      42         }
      43  
      44        if (v < 10)
      45          ga = do_something ();
      46      }
      47  }
      48  
      49  void test3 (int n, int p)
      50  {
      51    int i;
      52    int c = p + 1;
      53    int v;
      54  
      55    for (i = 0; i < n ; i = inc (i))
      56      {
      57        if (c)
      58         {
      59           v = inc (c);
      60           gb += 1;
      61         }
      62        else
      63         {
      64           v = p * p;
      65           gb *= 3;
      66         }
      67  
      68        if (v < 10)
      69          c = do_something ();
      70      }
      71  }
      72  
      73  void test4 (int n, int p)
      74  {
      75    int i;
      76    int v;
      77  
      78    for (i = 0; i < n ; i = inc (i))
      79      {
      80        if (ga)
      81         {
      82           v = inc (2);
      83           if (gb > 16)
      84             v = inc (5);  
      85         }
      86        else
      87         {
      88           v = p * p;
      89           gb += 2;
      90         }
      91  
      92        if (v < 10)
      93          ga = do_something ();
      94      }
      95  }
      96  
      97  /* { dg-final { scan-tree-dump-times "loop split on semi-invariant condition at false branch" 3 "lsplit" } } */