1 /* PR tree-optimization/19828 */
2 /* { dg-do compile } */
3 /* { dg-options "-O1 -fdump-tree-lim2-details" } */
4 
5 int cst_fun1 (int) __attribute__((__const__));
6 int cst_fun2 (int) __attribute__((__const__));
7 int pure_fun1 (int) __attribute__((__pure__));
8 int pure_fun2 (int) __attribute__((__pure__));
9 int foo (void);
10 
xxx(void)11 int xxx (void)
12 {
13   int i, k = foo (), x = 0;
14 
15   for (i = 0; i < 100; i++)
16     {
17       x += cst_fun1 (k);
18       x += pure_fun1 (k);
19 
20       if (k)
21 	{
22 	  x += cst_fun2 (k);
23 	  x += pure_fun2 (k);
24 	}
25     }
26 
27   return x;
28 }
29 
30 /* Calls to cst_fun1 and pure_fun1 may be moved out of the loop.
31    Calls to cst_fun2 and pure_fun2 should not be, since calling
32    with k = 0 may be invalid.  */
33 
34 /* { dg-final { scan-tree-dump-times "Moving statement" 2 "lim2" } } */
35