/* { dg-do compile } */ /* { dg-options "-O2" } */ typedef unsigned IPos; typedef unsigned char uch; extern uch window[]; unsigned max_chain_length; unsigned strstart; int longest_match(IPos cur_match, int len, int best_len) { unsigned chain_length = max_chain_length; register uch *scan = window + strstart; register uch *match; register uch scan_end1 = scan[best_len-1]; register uch scan_end = scan[best_len]; do { ; match = window + cur_match; if (match[best_len] != scan_end || match[best_len-1] != scan_end1 || *match != *scan || *++match != scan[1]) continue; best_len = len; } while ( --chain_length != 0); return best_len; }