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