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