1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-ivopts-details" } */
3 
4 int *a;
5 
6 int
foo1(long long s,long long l)7 foo1 (long long s, long long l)
8 {
9   long long i;
10 
11   for (i = s; i < l; i++)
12     {
13       a[(short)i] = 0;
14     }
15   return 0;
16 }
17 
18 int
foo2(unsigned char s,unsigned char l,unsigned char c)19 foo2 (unsigned char s, unsigned char l, unsigned char c)
20 {
21   unsigned char i, step = 1;
22   int sum = 0;
23 
24   for (i = s; i < l; i++)
25     {
26       sum += a[c];
27       c += step;
28     }
29 
30   return sum;
31 }
32 
33 int
foo3(unsigned char s,unsigned char l,unsigned char c)34 foo3 (unsigned char s, unsigned char l, unsigned char c)
35 {
36   unsigned char i;
37   int sum = 0;
38 
39   for (i = s; i != l; i += c)
40     {
41       sum += a[i];
42     }
43 
44   return sum;
45 }
46 
47 int
foo4(unsigned char s,unsigned char l)48 foo4 (unsigned char s, unsigned char l)
49 {
50   unsigned char i;
51   int sum = 0;
52 
53   for (i = s; i != l; i++)
54     {
55       sum += a[i];
56     }
57 
58   return sum;
59 }
60 
61 /* Address of array references are not scevs.  */
62 /* { dg-final { scan-tree-dump-not "  Type:\\tADDRESS\n  Use \[0-9\].\[0-9\]:" "ivopts" } } */
63