1 /* { dg-do compile { target {{ i?86-*-* x86_64-*-* } && lp64 } } } */
2 /* { dg-options "-O2 -fgimple -m64 -fdump-tree-ivopts-details" } */
3 
4 /* The test 'if (p2 > p_limit2)' can be replaced, so iv p2 can be
5  * eliminated.  */
6 long int __GIMPLE (ssa,startwith("fix_loops"))
foo(long int * p,long int * p2,int N1,int N2)7 foo (long int * p, long int * p2, int N1, int N2)
8 {
9   long int s;
10   long int * p_limit2;
11   long int * p_limit;
12   long unsigned int _1;
13   long unsigned int _2;
14   long unsigned int _3;
15   long unsigned int _4;
16   long int _5;
17 
18   __BB(2):
19   _1 = (long unsigned int) N1_10(D);
20   _2 = _1 * 8ul;
21   p_limit_12 = p_11(D) + _2;
22   _3 = (long unsigned int) N2_13(D);
23   _4 = _3 * 8ul;
24   p_limit2_15 = p2_14(D) + _4;
25   if (p_11(D) <= p_limit_12)
26     goto __BB3;
27   else
28     goto __BB13;
29 
30   __BB(13):
31   goto __BB9;
32 
33   __BB(9):
34   goto __BB6;
35 
36   __BB(3):
37   p_20 = p_11(D) + 8ul;
38   p2_23 = p2_14(D) + 8ul;
39   if (p_limit2_15 < p2_23)
40     goto __BB14;
41   else
42     goto __BB7;
43 
44   __BB(14):
45   goto __BB9;
46 
47   __BB(7):
48   goto __BB5;
49 
50   __BB(4):
51   p_16 = p_26 + 8ul;
52   p2_17 = p2_27 + 8ul;
53   if (p_limit2_15 < p2_17)
54     goto __BB11;
55   else
56     goto __BB8;
57 
58   __BB(11):
59   goto __BB6;
60 
61   __BB(8):
62   goto __BB5;
63 
64   __BB(5):
65   s_24 = __PHI (__BB7: 0l, __BB8: s_19);
66   p_26 = __PHI (__BB7: p_20, __BB8: p_16);
67   p2_27 = __PHI (__BB7: p2_23, __BB8: p2_17);
68   _5 = __MEM <long int> (p_26);
69   s_19 = _5 + s_24;
70   if (p_limit_12 >= p_26)
71     goto __BB4;
72   else
73     goto __BB12;
74 
75   __BB(12):
76   goto __BB6;
77 
78   __BB(6):
79   s_25 = __PHI (__BB12: s_19, __BB11: s_19, __BB9: 0l);
80   return s_25;
81 }
82 
83 /* { dg-final { scan-tree-dump-times "Replacing" 1 "ivopts" } } */
84