1 /* { dg-do compile { target {{ i?86-*-* x86_64-*-* } && lp64 } } } */
2 /* { dg-options "-O2 -fgimple -m64 -fdump-tree-ivopts-details" } */
3 
4 /* Exit tests 'i < N1' and 'p2 > p_limit2' can be replaced, so
5  * two ivs i and p2 can be eliminate.  */
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   int i;
12   long unsigned int _1;
13   long unsigned int _2;
14   long int _3;
15 
16   __BB(2):
17   _1 = (long unsigned int) N2_9(D);
18   _2 = _1 * 8ul;
19   p_limit2_11 = p2_10(D) + _2;
20   if (N1_13(D) > 0)
21     goto __BB3;
22   else
23     goto __BB13;
24 
25   __BB(13):
26   goto __BB9;
27 
28   __BB(9):
29   goto __BB6;
30 
31   __BB(3):
32   p_22 = p_12(D) + 8ul;
33   p2_23 = p2_10(D) + 8ul;
34   if (p_limit2_11 < p2_23)
35     goto __BB14;
36   else
37     goto __BB7;
38 
39   __BB(14):
40   goto __BB9;
41 
42   __BB(7):
43   goto __BB5;
44 
45   __BB(4):
46   p_14 = p_27 + 8ul;
47   p2_15 = p2_28 + 8ul;
48   i_16 = i_29 + 1;
49   if (p_limit2_11 < p2_15)
50     goto __BB11;
51   else
52     goto __BB8;
53 
54   __BB(11):
55   goto __BB6;
56 
57   __BB(8):
58   goto __BB5;
59 
60   __BB(5):
61   s_25 = __PHI (__BB7: 0l, __BB8: s_18);
62   p_27 = __PHI (__BB7: p_22, __BB8: p_14);
63   p2_28 = __PHI (__BB7: p2_23, __BB8: p2_15);
64   i_29 = __PHI (__BB7: 1, __BB8: i_16);
65   _3 = __MEM <long int> (p_27);
66   s_18 = _3 + s_25;
67   if (N1_13(D) > i_29)
68     goto __BB4;
69   else
70     goto __BB12;
71 
72   __BB(12):
73   goto __BB6;
74 
75   __BB(6):
76   s_26 = __PHI (__BB12: s_18, __BB11: s_18, __BB9: 0l);
77   return s_26;
78 }
79 
80 /* { dg-final { scan-tree-dump-times "Replacing" 2 "ivopts"} } */
81