OSDN Git Service

2009-01-13 Sebastian Pop <sebastian.pop@amd.com>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / graphite / scop-15.c
1 /* { dg-options "-O2 -fgraphite -fdump-tree-graphite-all" } */
2
3 #  define EXTERN(type, array)  extern type array[]
4 typedef unsigned char  uch;
5 typedef unsigned short ush;
6 EXTERN(uch, window);
7 EXTERN(ush, prev);
8 #ifndef WSIZE
9 #  define WSIZE 0x8000
10 #endif                
11 #define MIN_MATCH  3
12 #define MAX_MATCH  258
13 #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
14 #define MAX_DIST  (WSIZE-MIN_LOOKAHEAD)
15 #define near
16 typedef unsigned IPos;
17 unsigned near max_chain_length;
18 extern unsigned near strstart;
19 unsigned int near prev_length;
20 #define NIL 0
21 unsigned near good_match;
22 int near nice_match;
23 #define WMASK     (WSIZE-1)
24 int longest_match(IPos cur_match)
25 {
26     unsigned chain_length = max_chain_length;
27     register uch *scan = window + strstart;  
28     register uch *match;                     
29     register int len;                        
30     int best_len = prev_length;              
31     IPos limit = strstart > (IPos)MAX_DIST ? strstart - (IPos)MAX_DIST : NIL;
32     register uch *strend = window + strstart + MAX_MATCH;
33     register uch scan_end   = scan[best_len];
34     if (prev_length >= good_match) {
35     }
36     do {
37         if (match[best_len]   != scan_end  ||
38             *++match          != scan[1])      continue;
39         do {
40         } while (*++scan == *++match && *++scan == *++match &&
41                  scan < strend);
42         len = MAX_MATCH - (int)(strend - scan);
43         if (len > best_len) {
44             best_len = len;
45             if (len >= nice_match) break;
46         }
47     } while ((cur_match = prev[cur_match & WMASK]) > limit
48              && --chain_length != 0);
49     return best_len;
50 }
51
52 /* { dg-final { scan-tree-dump-times "number of SCoPs: 0" 1 "graphite"} } */
53 /* { dg-final { cleanup-tree-dump "graphite" } } */