🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #1340

Inlining bug

#1340
From: T.N. Vijaykumar.
Date: Mon, 09 Nov 1992 17:47
3667 lines
68159 bytes
Hi

I got the 2.3.1 version after you advised me to do so. Unfortunately,
the bug seems to prevail. Here is the rest of the story.


vijay

INLINING BUG 


Gcc version number : 2.3.1


The input file after preprocessing is as follows.  I have marked the
place where the funtion is getting inlined by /*++++++++++++*/ which
produces code that segmentation faults. The call in "tautology" to
"taut_special_cases" gets inlined. This inlined version has bad code.
The function "taut_special_cases" is declared as inline.
---------------------------------------------------------

typedef unsigned int	size_t;		

extern	struct	_iobuf {
	int	_cnt;
	char	*_ptr;
	char	*_base;
	int	_bufsiz;
	short	_flag;
	short	_file;
} _iob[3];
typedef	struct _iobuf	FILE;

typedef	long	fpos_t;


extern FILE
	*fopen(),
	*fdopen(),
	*freopen(),
	*popen(),
	*tmpfile();
extern char
	*ctermid(),
	*cuserid(),
	*fgets(),
	*gets(),
	*tmpnam();
extern int
	fclose(),
	fflush(),
	fgetc(),
	fgetpos(),
	fprintf(),
	fputc(),
	fputs(),
	fscanf(),
	fseek(),
	fsetpos(),
	printf(),
	puts(),
	remove(),
	rename(),
	scanf(),
	setvbuf(),
	sscanf(),
	ungetc(),
	vfprintf(),
	vprintf(),
	vsprintf();
extern long
	ftell();
extern size_t
	fread(),
	fwrite();
extern void
	clearerr(),
	perror(),
	rewind(),
	setbuf(),
	setbuffer();


extern char
	*tempnam();
extern int
	getw(),
	pclose(),
	putw();

extern int
	setlinebuf();

extern char	*sprintf();

typedef struct sm_element_struct sm_element;
typedef struct sm_row_struct sm_row;
typedef struct sm_col_struct sm_col;
typedef struct sm_matrix_struct sm_matrix;

struct sm_element_struct {
    int row_num;		
    int col_num;		
    sm_element *next_row;	
    sm_element *prev_row;	
    sm_element *next_col;	
    sm_element *prev_col;	
    char *user_word;		
};

struct sm_row_struct {
    int row_num;		
    int length;			
    int flag;			
    sm_element *first_col;	
    sm_element *last_col;	
    sm_row *next_row;		
    sm_row *prev_row;		
    char *user_word;		
};

struct sm_col_struct {
    int col_num;		
    int length;			
    int flag;			
    sm_element *first_row;	
    sm_element *last_row;	
    sm_col *next_col;		
    sm_col *prev_col;		
    char *user_word;		
};

struct sm_matrix_struct {
    sm_row **rows;		
    int rows_size;		
    sm_col **cols;		
    int cols_size;		
    sm_row *first_row;		
    sm_row *last_row;		
    int nrows;			
    sm_col *first_col;		
    sm_col *last_col;		
    int ncols;			
    char *user_word;		
};

extern sm_matrix *sm_alloc(), *sm_alloc_size(), *sm_dup();
extern void sm_free(), sm_delrow(), sm_delcol(), sm_resize();
extern void sm_write(), sm_print(), sm_dump(), sm_cleanup();
extern void sm_copy_row(), sm_copy_col();
extern void sm_remove(), sm_remove_element();
extern sm_element *sm_insert(), *sm_find();
extern sm_row *sm_longest_row();
extern sm_col *sm_longest_col();
extern int sm_read(), sm_read_compressed();

extern sm_row *sm_row_alloc(), *sm_row_dup(), *sm_row_and();
extern void sm_row_free(), sm_row_remove(), sm_row_print();
extern sm_element *sm_row_insert(), *sm_row_find();
extern int sm_row_contains(), sm_row_intersects();
extern int sm_row_compare(), sm_row_hash();

extern sm_col *sm_col_alloc(), *sm_col_dup(), *sm_col_and();
extern void sm_col_free(), sm_col_remove(), sm_col_print();
extern sm_element *sm_col_insert(), *sm_col_find();
extern int sm_col_contains(), sm_col_intersects();
extern int sm_col_compare(), sm_col_hash();

extern int sm_row_dominance(), sm_col_dominance(), sm_block_partition();




extern sm_row *sm_minimum_cover();

extern	unsigned short *_pctype;
extern  unsigned short _ctype__[];

extern	int	tolower(), toupper();

extern FILE *popen(), *tmpfile();
extern int pclose();

extern void clearerr();


extern void rewind();

extern void abort(), free(), exit(), perror();
extern char *getenv(), *malloc(), *realloc();
extern int system();
extern double atof();

extern char *strcpy(), *strncpy(), *strcat(), *strncat(), *strerror();
extern char *strpbrk(), *strtok(), *strchr(), *strrchr(), *strstr();
extern int strcoll(), strxfrm(), strncmp(), strlen(), strspn(), strcspn();
extern char *memmove(), *memccpy(), *memchr(), *memcpy(), *memset();
extern int memcmp(), strcmp();

extern long util_cpu_time();
extern int util_getopt();
extern void util_getopt_reset();
extern char *util_path_search();
extern char *util_file_search();
extern int util_pipefork();
extern void util_print_cpu_stats();
extern char *util_print_time();
extern int util_save_image();
extern char *util_strsav();
extern char *util_tilde_expand();
extern void util_restart();



extern int util_optind;
extern char *util_optarg;

typedef unsigned int *pset;


typedef struct set_family {
    int wsize;                  
    int sf_size;                
    int capacity;               
    int count;                  
    int active_count;           
    pset data;                  
    struct set_family *next;    
} set_family_t, *pset_family;


extern int bit_count[256];



typedef struct cost_struct {
    int cubes;			
    int in;			
    int out;			
    int mv;			
    int total;			
    int primes;			
} cost_t, *pcost;



typedef struct pair_struct {
    int cnt;
    int *var1;
    int *var2;
} pair_t, *ppair;



typedef struct symbolic_list_struct {
    int variable;
    int pos;
    struct symbolic_list_struct *next;
} symbolic_list_t;



typedef struct symbolic_label_struct {
    char *label;
    struct symbolic_label_struct *next;
} symbolic_label_t;



typedef struct symbolic_struct {
    symbolic_list_t *symbolic_list;	
    int symbolic_list_length;		
    symbolic_label_t *symbolic_label;	
    int symbolic_label_length;		
    struct symbolic_struct *next;
} symbolic_t;



typedef struct {
                     pset_family F, D, R;		
    char *filename;             
    int pla_type;               
                      pset phase;                
    ppair pair;                 
    char **label;		
    symbolic_t *symbolic;	
    symbolic_t *symbolic_output;
} PLA_t, *pPLA;


extern unsigned int debug;              
extern int verbose_debug;              
extern char *total_name[     16];    
extern long total_time[     16];     
extern int total_calls[     16];     

extern int echo_comments;		
extern int echo_unknown_commands;	
extern int force_irredundant;          
extern int skip_make_sparse;
extern int kiss;                       
extern int pos;                        
extern int print_solution;             
extern int recompute_onset;            
extern int remove_essential;           
extern int single_expand;              
extern int summary;                    
extern int trace;                      
extern int unwrap_onset;               
extern int use_random_order;		
extern int use_super_gasp;		
extern char *filename;			
extern int debug_exact_minimization;   





struct pla_types_struct {
    char *key;
    int value;
};


struct cube_struct {
    int size;                   
    int num_vars;               
    int num_binary_vars;        
    int *first_part;            
    int *last_part;             
    int *part_size;             
    int *first_word;            
    int *last_word;             
    pset binary_mask;           
    pset mv_mask;               
    pset *var_mask;             
    pset *temp;                 
    pset fullset;               
    pset emptyset;              
    unsigned int inmask;        
    int inword;                 
    int *sparse;                
    int num_mv_vars;            
    int output;                 
};

struct cdata_struct {
    int *part_zeros;            
    int *var_zeros;             
    int *parts_active;          
    int *is_unate;             
    int vars_active;            
    int vars_unate;             
    int best;                   
};


extern struct pla_types_struct pla_types[];
extern struct cube_struct cube, temp_cube_save;
extern struct cdata_struct cdata, temp_cdata_save;

	extern int binate_split_select();
	extern                  pset_family cubeunlist();
	extern                   pset *cofactor();
	extern                   pset *cube1list();
	extern                   pset *cube2list();
	extern                   pset *cube3list();
	extern                   pset *scofactor();
	extern void massive_count();
	extern                  pset_family complement();
	extern                  pset_family simplify();
	extern void simp_comp();
	extern int d1_rm_equal();
	extern int rm2_contain();
	extern int rm2_equal();
	extern int rm_contain();
	extern int rm_equal();
	extern int rm_rev_contain();
	extern pset *sf_list();
	extern pset *sf_sort();
	extern pset_family d1merge();
	extern pset_family dist_merge();
	extern pset_family sf_contain();
	extern pset_family sf_dupl();
	extern pset_family sf_ind_contain();
	extern pset_family sf_ind_unlist();
	extern pset_family sf_merge();
	extern pset_family sf_rev_contain();
	extern pset_family sf_union();
	extern pset_family sf_unlist();
	extern void cube_setup();
	extern void restore_cube_struct();
	extern void save_cube_struct();
	extern void setdown_cube();
	extern PLA_labels();
	extern char *get_word();
	extern int label_index();
	extern int read_pla();
	extern int read_symbolic();
	extern pPLA new_PLA();
	extern void PLA_summary();
	extern void free_PLA();
	extern void parse_pla();
	extern void read_cube();
	extern void skip_line();
	extern foreach_output_function();
	extern int cubelist_partition();
	extern int so_both_do_espresso();
	extern int so_both_do_exact();
	extern int so_both_save();
	extern int so_do_espresso();
	extern int so_do_exact();
	extern int so_save();
	extern                  pset_family cof_output();
	extern                  pset_family lex_sort();
	extern                  pset_family mini_sort();
	extern                  pset_family random_order();
	extern                  pset_family size_sort();
	extern                  pset_family sort_reduce();
	extern                  pset_family uncof_output();
	extern                  pset_family unravel();
	extern                  pset_family unravel_range();
	extern void so_both_espresso();
	extern void so_espresso();
	extern char *fmt_cost();
	extern char *print_cost();
	extern char *	util_strsav();
	extern void copy_cost();
	extern void cover_cost();
	extern void fatal();
	extern void print_trace();
	extern void size_stamp();
	extern void totals();
	extern char *fmt_cube();
	extern char *fmt_expanded_cube();
	extern char *pc1();
	extern char *pc2();
	extern char *pc3();
	extern int makeup_labels();
	extern kiss_output();
	extern kiss_print_cube();
	extern output_symbolic_constraints();
	extern void cprint();
	extern void debug1_print();
	extern void debug_print();
	extern void eqn_output();
	extern void fpr_header();
	extern void fprint_pla();
	extern void pls_group();
	extern void pls_label();
	extern void pls_output();
	extern void print_cube();
	extern void print_expanded_cube();
	extern void sf_debug_print();
	extern find_equiv_outputs();
	extern int check_equiv();
	extern                  pset_family espresso();
	extern int essen_cube();
	extern                  pset_family cb_consensus();
	extern                  pset_family cb_consensus_dist0();
	extern                  pset_family essential();
	extern                  pset_family minimize_exact();
	extern                  pset_family minimize_exact_literals();
	extern int feasibly_covered();
	extern int most_frequent();
	extern                  pset_family all_primes();
	extern                  pset_family expand();
	extern                  pset_family find_all_primes();
	extern void elim_lowering();
	extern void essen_parts();
	extern void essen_raising();
	extern void expand1();
	extern void mincov();
	extern void select_feasible();
	extern void setup_BB_CC();
	extern                  pset_family expand_gasp();
	extern                  pset_family irred_gasp();
	extern                  pset_family last_gasp();
	extern                  pset_family super_gasp();
	extern void expand1_gasp();
	extern int 	util_getopt();
	extern find_dc_inputs();
	extern find_inputs();
	extern form_bitvector();
	extern map_dcset();
	extern map_output_symbolic();
	extern map_symbolic();
	extern                  pset_family map_symbolic_cover();
	extern symbolic_hack_labels();
	extern int cube_is_covered();
	extern int taut_special_cases();
	extern int tautology();
	extern                  pset_family irredundant();
	extern void mark_irredundant();
	extern void irred_split_cover();
	extern sm_matrix *irred_derive_table();
	extern pset minterms();
	extern void explode();
	extern void map();
	extern output_phase_setup();
	extern pPLA set_phase();
	extern                  pset_family opo();
	extern                   pset find_phase();
	extern pset_family find_covers();
	extern pset_family form_cover_table();
	extern pset_family opo_leaf();
	extern pset_family opo_recur();
	extern void opoall();
	extern void phase_assignment();
	extern void repeated_phase_assignment();
	extern generate_all_pairs();
	extern int **find_pairing_cost();
	extern int find_best_cost();
	extern int greedy_best_cost();
	extern int minimize_pair();
	extern int pair_free();
	extern pair_all();
	extern                  pset_family delvar();
	extern                  pset_family pairvar();
	extern ppair pair_best_cost();
	extern ppair pair_new();
	extern ppair pair_save();
	extern print_pair();
	extern void find_optimal_pairing();
	extern void set_pair();
	extern void set_pair1();
	extern                  pset_family primes_consensus();
	extern int sccc_special_cases();
	extern                  pset_family reduce();
	extern                   pset reduce_cube();
	extern                   pset sccc();
	extern                   pset sccc_cube();
	extern                   pset sccc_merge();
	extern int set_andp();
	extern int set_orp();
	extern int setp_disjoint();
	extern int setp_empty();
	extern int setp_equal();
	extern int setp_full();
	extern int setp_implies();
	extern char *pbv1();
	extern char *ps1();
	extern int *sf_count();
	extern int *sf_count_restricted();
	extern int bit_index();
	extern int set_dist();
	extern int set_ord();
	extern void set_adjcnt();
	extern pset set_and();
	extern pset set_clear();
	extern pset set_copy();
	extern pset set_diff();
	extern pset set_fill();
	extern pset set_merge();
	extern pset set_or();
	extern pset set_xor();
	extern pset sf_and();
	extern pset sf_or();
	extern pset_family sf_active();
	extern pset_family sf_addcol();
	extern pset_family sf_addset();
	extern pset_family sf_append();
	extern pset_family sf_bm_read();
	extern pset_family sf_compress();
	extern pset_family sf_copy();
	extern pset_family sf_copy_col();
	extern pset_family sf_delc();
	extern pset_family sf_delcol();
	extern pset_family sf_inactive();
	extern pset_family sf_join();
	extern pset_family sf_new();
	extern pset_family sf_permute();
	extern pset_family sf_read();
	extern pset_family sf_save();
	extern pset_family sf_transpose();
	extern void set_write();
	extern void sf_bm_print();
	extern void sf_cleanup();
	extern void sf_delset();
	extern void sf_free();
	extern void sf_print();
	extern void sf_write();
	extern int ccommon();
	extern int cdist0();
	extern int full_row();
	extern int ascend();
	extern int cactive();
	extern int cdist();
	extern int cdist01();
	extern int cvolume();
	extern int d1_order();
	extern int d1_order_size();
	extern int desc1();
	extern int descend();
	extern int lex_order();
	extern int lex_order1();
	extern pset force_lower();
	extern void consensus();
	extern                  pset_family cb1_dsharp();
	extern                  pset_family cb_dsharp();
	extern                  pset_family cb_recur_dsharp();
	extern                  pset_family cb_recur_sharp();
	extern                  pset_family cb_sharp();
	extern                  pset_family cv_dsharp();
	extern                  pset_family cv_intersect();
	extern                  pset_family cv_sharp();
	extern                  pset_family dsharp();
	extern                  pset_family make_disjoint();
	extern                  pset_family sharp();
pset do_sm_minimum_cover();
	extern                  pset_family make_sparse();
	extern                  pset_family mv_reduce();
	extern qsort();
	extern qst();
	extern                  pset_family find_all_minimal_covers_petrick();
	extern                  pset_family map_cover_to_unate();
	extern                  pset_family map_unate_to_cover();
	extern pset_family exact_minimum_cover();
	extern pset_family gen_primes();
	extern pset_family unate_compl();
	extern pset_family unate_complement();
	extern pset_family unate_intersect();
	extern PLA_permute();
	extern int PLA_verify();
	extern int check_consistency();
	extern int verify();

static void fcube_is_covered();
static void ftautology();
static int ftaut_special_cases();


static int Rp_current;



inline int taut_special_cases(T)
                  pset *T;			
{
    register                   pset *T1, *Tsave, p, ceil=cube.temp[0], temp=cube.temp[1];
                      pset *A, *B;
    int var;

    
    for(T1 = T+2; (p = *T1++) != 0; ) {
	if (full_row(p, T[0])) {
	            		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	    return 	1;
	}
    }

    
start:
        {register int i_=                          ( T[0][0] & 0x03ff); do ceil[i_]= T[0][i_]; while (--i_>=0);};
    for(T1 = T+2; (p = *T1++) != 0; ) {
	    {register int i_=               ( ceil[0] & 0x03ff);          (ceil[0] &= ~0x03ff, ceil[0] |= (i_));    do ceil[i_] =  ceil[i_] |  p[i_]; while (--i_>0);};
    }
    if (! setp_equal(ceil, cube.fullset)) {
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 0;
    }

    
    massive_count(T);

    
    if (cdata.vars_unate == cdata.vars_active) {
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 0;

    
    } else if (cdata.vars_active == 1) {
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 	1;

    
    } else if (cdata.vars_unate != 0) {
	
	(void) set_copy(ceil, cube.emptyset);
	for(var = 0; var < cube.num_vars; var++) {
	    if (cdata.is_unate[var]) {
		    {register int i_=               ( ceil[0] & 0x03ff);          (ceil[0] &= ~0x03ff, ceil[0] |= (i_));    do ceil[i_] =  ceil[i_] |  cube.var_mask[var][i_]; while (--i_>0);};
	    }
	}

	
	for(Tsave = T1 = T+2; (p = *T1++) != 0; ) {
	    if (setp_implies(ceil, set_or(temp, p, T[0]))) {
		*Tsave++ = p;
	    }
	}
	*Tsave++ = 0;
	T[1] = (                  pset) Tsave;

	if (debug &            0x0200) {
	    printf("UNATE_REDUCTION: %d unate variables, reduced to %d\n",
		cdata.vars_unate,          (((                  pset *) T[1] - T) - 3));
	}
	goto start;

    
    } else if (cdata.var_zeros[cdata.best] <          (((                  pset *) T[1] - T) - 3) / 2) {
	if (cubelist_partition(T, &A, &B, debug &            0x0200) == 0) {
	    return 2;
	} else {
	            		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	    if (tautology(A)) {
		        		    ((B[0]) ? (free((char *) (B[0])), (B[0]) = 0) : 0); 		    ((B) ? (free((char *) (B)), (B) = 0) : 0);;
		return 	1;
	    } else {
		return tautology(B);
	    }
	}
    }

    
    return 2;
}



                 pset_family
irredundant(F, D)
                 pset_family F, D;
{
    mark_irredundant(F, D);
    return sf_inactive(F);
}






void
mark_irredundant(F, D)
                 pset_family F, D;
{
                     pset_family E, Rt, Rp;
    pset p, p1, last;
    sm_matrix *table;
    sm_row *cover;
    sm_element *pe;

    
    irred_split_cover(F, D, &E, &Rt, &Rp);
    table = irred_derive_table(D, E, Rp);
    cover = sm_minimum_cover(table, 		((int *) 0),  1,  0);

    
        for( p=F->data, last= p+F->count*F->wsize; p< last; p+=F->wsize) {
	        (p[0] &= ~ (          0x2000          ));
	        (p[0] &= ~ (        0x0400          ));
    }
        for( p=E->data, last= p+E->count*E->wsize; p< last; p+=E->wsize) {
	p1 =    ((F)->data + (F)->wsize * (                (p[0] >> 16)));
	 {    if (! (setp_equal(p1, p))) {	(void) fprintf((&_iob[2]),	    "Assertion failed: file %s, line %d\n\"%s\"\n",	    "irred.c", 49, "setp_equal(p1, p)");	(void) fflush((&_iob[1]));	abort();    }};
	          (p1[0] |= (          0x2000          ));
	          (p1[0] |= (        0x0400          ));		
    }
    		for( pe = cover->first_col;  pe != 0;  pe =  pe->next_col) {
	p1 =    ((F)->data + (F)->wsize * ( pe->col_num));
	          (p1[0] |= (          0x2000          ));
    }

    if (debug &           0x0020) {
	printf("# IRRED: F=%d E=%d R=%d Rt=%d Rp=%d Rc=%d Final=%d Bound=%d\n",
	    F->count, E->count, Rt->count+Rp->count, Rt->count, Rp->count,
	    cover->length, E->count + cover->length, 0);
    }

               sf_free(E);
               sf_free(Rt);
               sf_free(Rp);
    sm_free(table);
    sm_row_free(cover);
}









void
irred_split_cover(F, D, E, Rt, Rp)
                 pset_family F, D;
                 pset_family *E, *Rt, *Rp;
{
    register                   pset p, last;
    register int index;
                     pset_family R;
                      pset *FD, *ED;

    
    index = 0;
        for( p=F->data, last= p+F->count*F->wsize; p< last; p+=F->wsize) {
	      (p[0] &= 0xffff, p[0] |= (( index) << 16));
	index++;
    }

    *E =             sf_new(10, cube.size);
    *Rt =             sf_new(10, cube.size);
    *Rp =             sf_new(10, cube.size);
    R =             sf_new(10, cube.size);

    
    FD = cube2list(F, D);
        for( p=F->data, last= p+F->count*F->wsize; p< last; p+=F->wsize) {
	if (cube_is_covered(FD, p)) {
	    R = sf_addset(R, p);
	} else {
	    *E = sf_addset(*E, p);
	}
	if (debug & 	0x4000) {
	    (void) printf("IRRED1: zr=%d ze=%d to-go=%d time=%s\n",
		R->count, (*E)->count, F->count - (R->count + (*E)->count),
			util_print_time(		util_cpu_time()));
	}
    }
            		    ((FD[0]) ? (free((char *) (FD[0])), (FD[0]) = 0) : 0); 		    ((FD) ? (free((char *) (FD)), (FD) = 0) : 0);;

    
    ED = cube2list(*E, D);
        for( p=R->data, last= p+R->count*R->wsize; p< last; p+=R->wsize) {
	if (cube_is_covered(ED, p)) {
	    *Rt = sf_addset(*Rt, p);
	} else {
	    *Rp = sf_addset(*Rp, p);
	}
	if (debug & 	0x4000) {
	    (void) printf("IRRED1: zr=%d zrt=%d to-go=%d time=%s\n",
		(*Rp)->count, (*Rt)->count,
		R->count - ((*Rp)->count +(*Rt)->count), 	util_print_time(		util_cpu_time()));
	}
    }
            		    ((ED[0]) ? (free((char *) (ED[0])), (ED[0]) = 0) : 0); 		    ((ED) ? (free((char *) (ED)), (ED) = 0) : 0);;

               sf_free(R);
}







sm_matrix *
irred_derive_table(D, E, Rp)
                 pset_family D, E, Rp;
{
    register                   pset last, p, *list;
    sm_matrix *table;
    int size_last_dominance, i;

    
        for( p=D->data, last= p+D->count*D->wsize; p< last; p+=D->wsize) {
	        (p[0] &= ~ (          0x1000          ));
    }
        for( p=E->data, last= p+E->count*E->wsize; p< last; p+=E->wsize) {
	        (p[0] &= ~ (          0x1000          ));
    }

    
        for( p=Rp->data, last= p+Rp->count*Rp->wsize; p< last; p+=Rp->wsize) {
	          (p[0] |= (          0x1000          ));             
    }

    
    list = cube3list(D, E, Rp);
    table = sm_alloc();
    size_last_dominance = 0;
    i = 0;
        for( p=Rp->data, last= p+Rp->count*Rp->wsize; p< last; p+=Rp->wsize) {
	Rp_current =                (p[0] >> 16);
	fcube_is_covered(list, p, table);
	        (p[0] &= ~ (          0x1000          ));	
	if (debug & 	0x4000) {
	    (void) printf("IRRED1: %d of %d to-go=%d, table=%dx%d time=%s\n",
		i, Rp->count, Rp->count - i,
		table->nrows, table->ncols, 	util_print_time(		util_cpu_time()));
	}
	
	if (table->nrows - size_last_dominance > 1000) {
	    (void) sm_row_dominance(table);
	    size_last_dominance = table->nrows;
	    if (debug & 	0x4000) {
		(void) printf("IRRED1: delete redundant rows, now %dx%d\n",
		    table->nrows, table->ncols);
	    }
	}
	i++;
    }
            		    ((list[0]) ? (free((char *) (list[0])), (list[0]) = 0) : 0); 		    ((list) ? (free((char *) (list)), (list) = 0) : 0);;

    return table;
}


int
cube_is_covered(T, c)
                  pset *T, c;
{
    return tautology(cofactor(T,c));
}




int
tautology(T)
                  pset *T;         
{
    register                   pset cl, cr;
    register int best, result;
    static int taut_level = 0;

    if (debug &            0x0200) {
	debug_print(T, "TAUTOLOGY", taut_level++);
    }
/*+++++++++++++++++++++++++++++++++++++++++++++++++++*/
    if ((result = taut_special_cases(T)) == 2) {
	cl =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	cr =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	best = binate_split_select(T, cl, cr,            0x0200);
	result = tautology(scofactor(T, cl, best)) &&
		 tautology(scofactor(T, cr, best));
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	            			    ((cl) ? (free((char *) (cl)), (cl) = 0) : 0);
	            			    ((cr) ? (free((char *) (cr)), (cr) = 0) : 0);
    }

    if (debug &            0x0200) {
	printf("exit TAUTOLOGY[%d]: %s\n", --taut_level,  ((result) == 0 ? "FALSE" : ((result) == 1 ? "TRUE" : "MAYBE")));
    }
    return result;
}






static void
fcube_is_covered(T, c, table)
                  pset *T, c;
sm_matrix *table;
{
    ftautology(cofactor(T,c), table);
}



static void
ftautology(T, table)
                  pset *T;         	
sm_matrix *table;
{
    register                   pset cl, cr;
    register int best;
    static int ftaut_level = 0;

    if (debug &            0x0200) {
	debug_print(T, "FIND_TAUTOLOGY", ftaut_level++);
    }

    if (ftaut_special_cases(T, table) == 2) {
	cl =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	cr =               	set_clear(	    ((unsigned int *) malloc(sizeof(unsigned int) * (           ((cube.size) <=             32               ? 2 : (     ((((cube.size)-1) >>          5               ) + 1) + 1))))), cube.size);
	best = binate_split_select(T, cl, cr,            0x0200);

	ftautology(scofactor(T, cl, best), table);
	ftautology(scofactor(T, cr, best), table);

	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	            			    ((cl) ? (free((char *) (cl)), (cl) = 0) : 0);
	            			    ((cr) ? (free((char *) (cr)), (cr) = 0) : 0);
    }

    if (debug &            0x0200) {
	(void) printf("exit FIND_TAUTOLOGY[%d]: table is %d by %d\n",
	    --ftaut_level, table->nrows, table->ncols);
    }
}

static int
ftaut_special_cases(T, table)
                  pset *T;                 
sm_matrix *table;
{
    register                   pset *T1, *Tsave, p, temp = cube.temp[0], ceil = cube.temp[1];
    int var, rownum;

    
    for(T1 = T+2; (p = *T1++) != 0; ) {
	if (!         (p[0] & (          0x1000          ))) {
	    if (full_row(p, T[0])) {
		
		        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
		return 	1;
	    }
	}
    }

    
start:
    massive_count(T);

    
    if (cdata.vars_unate == cdata.vars_active) {
	
	rownum = table->last_row ? table->last_row->row_num+1 : 0;
	(void) sm_insert(table, rownum, Rp_current);
	for(T1 = T+2; (p = *T1++) != 0; ) {
	    if (        (p[0] & (          0x1000          ))) {
		
		if (full_row(p, T[0])) {
		    (void) sm_insert(table, rownum, (int)                (p[0] >> 16));
		}
	    }
	}
	        		    ((T[0]) ? (free((char *) (T[0])), (T[0]) = 0) : 0); 		    ((T) ? (free((char *) (T)), (T) = 0) : 0);;
	return 	1;

    
    } else if (cdata.vars_unate != 0) {
	
	(void) set_copy(ceil, cube.emptyset);
	for(var = 0; var < cube.num_vars; var++) {
	    if (cdata.is_unate[var]) {
		    {register int i_=               ( ceil[0] & 0x03ff);          (ceil[0] &= ~0x03ff, ceil[0] |= (i_));    do ceil[i_] =  ceil[i_] |  cube.var_mask[var][i_]; while (--i_>0);};
	    }
	}

	
	for(Tsave = T1 = T+2; (p = *T1++) != 0; ) {
	    if (setp_implies(ceil, set_or(temp, p, T[0]))) {
		*Tsave++ = p;
	    }
	}
	*Tsave++ = 0;
	T[1] = (                  pset) Tsave;

	if (debug &            0x0200) {
	    printf("UNATE_REDUCTION: %d unate variables, reduced to %d\n",
		cdata.vars_unate,          (((                  pset *) T[1] - T) - 3));
	}
	goto start;
    }

    
    return 2;
}
--------------------------------------------------------------------


The assembly produced is as follows :- I have marked the insns that
are leading to segmentation fault by /*+++++++++++++++++*/. The firsst
insn moves 0 into $5 and the next insn dereferences thru $5.
---------------------------------------------------------------------
	.file	1 "myppirred.c"
	.set	nobopt

 # GNU C 2.3.1 [AL 1.1, MM 28] DECstation running ultrix compiled by CC

 # Cc1 defaults:

 # Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
 # -O

gcc2_compiled.:
	.rdata
	.align	2
$LC0:
	.ascii	"UNATE_REDUCTION: %d unate variables, reduced to %d\n\000"
	.text
	.align	2
	.globl	taut_special_cases

	.loc	1 1586
	.ent	taut_special_cases
taut_special_cases:
	.frame	$sp,64,$31		# vars= 16, regs= 7/0, args = 16, extra= 0
	.mask	0x803f0000,-8
	.fmask	0x00000000,0
	subu	$sp,$sp,64
	sw	$31,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	lw	$2,cube+44
	move	$19,$4
	lw	$16,8($19)
	lw	$20,0($2)
	lw	$21,4($2)
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L78
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L77:
	lw	$5,0($19)
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L138
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L77
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L78:
	lw	$2,0($19)
	#nop
	lw	$2,0($2)
	#nop
	andi	$5,$2,0x03ff
$L79:
	lw	$2,0($19)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($3)
	subu	$5,$5,1
	.set	noreorder
	.set	nomacro
	bgez	$5,$L79
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,8($19)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L83
	addu	$17,$19,12
	.set	macro
	.set	reorder

	li	$6,-1024			# 0xfffffc00
$L88:
	lw	$2,0($20)
	#nop
	andi	$5,$2,0x03ff
	and	$2,$2,$6
	or	$2,$5,$2
	sw	$2,0($20)
$L85:
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$16
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L85
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L88
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L83:
	lw	$5,cube+48
	.set	noreorder
	.set	nomacro
	jal	setp_equal
	move	$4,$20
	.set	macro
	.set	reorder

	beq	$2,$0,$L137
	.set	noreorder
	.set	nomacro
	jal	massive_count
	move	$4,$19
	.set	macro
	.set	reorder

	la	$2,cdata+20
	lw	$3,0($2)
	lw	$2,-4($2)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$3,$2,$L94
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L137:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L96
	jal	free
	sw	$0,0($19)
$L96:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L135
	move	$2,$0
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L135
	move	$2,$0
	.set	macro
	.set	reorder

$L94:
	lw	$3,cdata+16
	#nop
	bne	$3,$2,$L100
$L138:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L102
	jal	free
	sw	$0,0($19)
$L102:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L100:
	lw	$2,cdata+20
	#nop
	beq	$2,$0,$L106
	la	$16,cube+52
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_copy
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$2,-48($16)
	#nop
	.set	noreorder
	.set	nomacro
	blez	$2,$L108
	move	$6,$0
	.set	macro
	.set	reorder

	li	$9,-1024			# 0xfffffc00
	la	$8,cube+4
$L114:
	lw	$2,cdata+12
	sll	$3,$6,2
	addu	$3,$3,$2
	lw	$2,0($3)
	#nop
	beq	$2,$0,$L109
	lw	$2,0($20)
	sll	$7,$6,2
	andi	$5,$2,0x03ff
	and	$2,$2,$9
	or	$2,$5,$2
	sw	$2,0($20)
$L111:
	lw	$2,cube+40
	#nop
	addu	$2,$7,$2
	lw	$2,0($2)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L111
	sw	$2,0($4)
	.set	macro
	.set	reorder

$L109:
	lw	$2,0($8)
	addu	$6,$6,1
	slt	$2,$6,$2
	bne	$2,$0,$L114
$L108:
	lw	$16,8($19)
	addu	$18,$19,8
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L116
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L119:
	lw	$6,0($19)
	move	$4,$21
	.set	noreorder
	.set	nomacro
	jal	set_or
	move	$5,$16
	.set	macro
	.set	reorder

	move	$4,$20
	.set	noreorder
	.set	nomacro
	jal	setp_implies
	move	$5,$2
	.set	macro
	.set	reorder

	beq	$2,$0,$L115
	sw	$16,0($18)
	addu	$18,$18,4
$L115:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L119
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L116:
	sw	$0,0($18)
	lw	$2,debug
	addu	$18,$18,4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L78
	sw	$18,4($19)
	.set	macro
	.set	reorder

	subu	$6,$18,$19
	sra	$6,$6,2
	lw	$5,cdata+20
	la	$4,$LC0
	.set	noreorder
	.set	nomacro
	jal	printf
	subu	$6,$6,3
	.set	macro
	.set	reorder

	j	$L78
$L106:
	lw	$4,cdata+24
	lw	$2,cdata+4
	sll	$4,$4,2
	addu	$4,$4,$2
	lw	$2,4($19)
	#nop
	subu	$2,$2,$19
	sra	$2,$2,2
	subu	$2,$2,3
	srl	$3,$2,31
	addu	$2,$2,$3
	lw	$3,0($4)
	sra	$2,$2,1
	slt	$3,$3,$2
	.set	noreorder
	.set	nomacro
	beq	$3,$0,$L99
	move	$4,$19
	.set	macro
	.set	reorder

	lw	$7,debug
	addu	$5,$sp,16
	addu	$6,$sp,20
	.set	noreorder
	.set	nomacro
	jal	cubelist_partition
	andi	$7,$7,0x0200
	.set	macro
	.set	reorder

	beq	$2,$0,$L99
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L126
	jal	free
	sw	$0,0($19)
$L126:
	beq	$19,$0,$L128
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L128:
	lw	$4,16($sp)
	jal	tautology
	beq	$2,$0,$L129
	lw	$2,20($sp)
	#nop
	lw	$4,0($2)
	#nop
	beq	$4,$0,$L131
	jal	free
	lw	$2,20($sp)
	#nop
	sw	$0,0($2)
$L131:
	lw	$4,20($sp)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$4,$0,$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	jal	free
	sw	$0,20($sp)
	.set	noreorder
	.set	nomacro
	j	$L135
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L129:
	lw	$4,20($sp)
	jal	tautology
	j	$L135
$L99:
	li	$2,0x00000002		# 2
$L135:
	lw	$31,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,64
	j	$31
	.end	taut_special_cases
	.align	2
	.globl	irredundant

	.loc	1 1672
	.ent	irredundant
irredundant:
	.frame	$sp,24,$31		# vars= 0, regs= 2/0, args = 16, extra= 0
	.mask	0x80010000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,24
	sw	$31,20($sp)
	sw	$16,16($sp)
	.set	noreorder
	.set	nomacro
	jal	mark_irredundant
	move	$16,$4
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sf_inactive
	move	$4,$16
	.set	macro
	.set	reorder

	lw	$31,20($sp)
	lw	$16,16($sp)
	addu	$sp,$sp,24
	j	$31
	.end	irredundant
	.rdata
	.align	2
$LC1:
	.ascii	"Assertion failed: file %s, line %d\n"
	.ascii	"\"%s\"\n\000"
	.sdata
	.align	2
$LC2:
	.ascii	"irred.c\000"
	.rdata
	.align	2
$LC3:
	.ascii	"setp_equal(p1, p)\000"
	.align	2
$LC4:
	.ascii	"# IRRED: F=%d E=%d R=%d Rt=%d Rp=%d Rc=%d Final=%d Bound"
	.ascii	"=%d\n\000"
	.text
	.align	2
	.globl	mark_irredundant

	.loc	1 1685
	.ent	mark_irredundant
mark_irredundant:
	.frame	$sp,88,$31		# vars= 16, regs= 8/0, args = 40, extra= 0
	.mask	0x807f0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,88
	sw	$31,84($sp)
	sw	$22,80($sp)
	sw	$21,76($sp)
	sw	$20,72($sp)
	sw	$19,68($sp)
	sw	$18,64($sp)
	sw	$17,60($sp)
	sw	$16,56($sp)
	move	$19,$4
	move	$16,$5
	addu	$2,$sp,48
	sw	$2,16($sp)
	addu	$6,$sp,40
	.set	noreorder
	.set	nomacro
	jal	irred_split_cover
	addu	$7,$sp,44
	.set	macro
	.set	reorder

	lw	$5,40($sp)
	lw	$6,48($sp)
	.set	noreorder
	.set	nomacro
	jal	irred_derive_table
	move	$4,$16
	.set	macro
	.set	reorder

	move	$22,$2
	move	$4,$22
	move	$5,$0
	li	$6,0x00000001		# 1
	.set	noreorder
	.set	nomacro
	jal	sm_minimum_cover
	move	$7,$0
	.set	macro
	.set	reorder

	move	$20,$2
	lw	$2,12($19)
	lw	$3,0($19)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($19)
	sll	$2,$2,2
	addu	$18,$17,$2
	sltu	$2,$17,$18
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L142
	li	$3,-1025			# 0xfffffbff
	.set	macro
	.set	reorder

	li	$4,-8193			# 0xffffdfff
$L144:
	lw	$2,0($17)
	#nop
	and	$2,$2,$4
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,0($19)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$18
	bne	$2,$0,$L144
$L142:
	lw	$3,40($sp)
	#nop
	lw	$17,20($3)
	lw	$2,12($3)
	lw	$3,0($3)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	#nop
	sll	$2,$2,2
	addu	$18,$17,$2
	sltu	$2,$17,$18
	beq	$2,$0,$L146
	la	$21,$LC3
$L149:
	lhu	$2,2($17)
	lw	$3,0($19)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$3,20($19)
	move	$5,$17
	sll	$2,$2,2
	addu	$16,$2,$3
	.set	noreorder
	.set	nomacro
	jal	setp_equal
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L148
	sw	$21,16($sp)
	la	$4,_iob+40
	la	$5,$LC1
	la	$6,$LC2
	.set	noreorder
	.set	nomacro
	jal	fprintf
	li	$7,0x00000031		# 49
	.set	macro
	.set	reorder

	la	$4,_iob+20
	jal	fflush
	jal	abort
$L148:
	lw	$2,0($16)
	#nop
	ori	$2,$2,0x2400
	sw	$2,0($16)
	lw	$2,40($sp)
	#nop
	lw	$2,0($2)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$18
	bne	$2,$0,$L149
$L146:
	lw	$4,12($20)
	#nop
	beq	$4,$0,$L151
$L153:
	lw	$3,0($19)
	lw	$2,4($4)
	#nop
	mult	$3,$2
	mflo	$3
	#nop
	lw	$2,20($19)
	sll	$3,$3,2
	addu	$16,$3,$2
	lw	$2,0($16)
	#nop
	ori	$2,$2,0x2000
	sw	$2,0($16)
	lw	$4,16($4)
	#nop
	bne	$4,$0,$L153
$L151:
	lw	$2,debug
	#nop
	andi	$2,$2,0x0020
	beq	$2,$0,$L154
	lw	$2,44($sp)
	lw	$3,48($sp)
	lw	$6,40($sp)
	lw	$7,12($2)
	lw	$8,12($3)
	sw	$7,16($sp)
	lw	$2,12($3)
	#nop
	sw	$2,20($sp)
	lw	$2,4($20)
	#nop
	sw	$2,24($sp)
	lw	$2,12($6)
	lw	$3,4($20)
	sw	$0,32($sp)
	addu	$2,$2,$3
	sw	$2,28($sp)
	lw	$5,12($19)
	lw	$6,12($6)
	la	$4,$LC4
	.set	noreorder
	.set	nomacro
	jal	printf
	addu	$7,$7,$8
	.set	macro
	.set	reorder

$L154:
	lw	$4,40($sp)
	jal	sf_free
	lw	$4,44($sp)
	jal	sf_free
	lw	$4,48($sp)
	jal	sf_free
	.set	noreorder
	.set	nomacro
	jal	sm_free
	move	$4,$22
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sm_row_free
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$31,84($sp)
	lw	$22,80($sp)
	lw	$21,76($sp)
	lw	$20,72($sp)
	lw	$19,68($sp)
	lw	$18,64($sp)
	lw	$17,60($sp)
	lw	$16,56($sp)
	addu	$sp,$sp,88
	j	$31
	.end	mark_irredundant
	.rdata
	.align	2
$LC5:
	.ascii	"IRRED1: zr=%d ze=%d to-go=%d time=%s\n\000"
	.align	2
$LC6:
	.ascii	"IRRED1: zr=%d zrt=%d to-go=%d time=%s\n\000"
	.text
	.align	2
	.globl	irred_split_cover

	.loc	1 1737
	.ent	irred_split_cover
irred_split_cover:
	.frame	$sp,72,$31		# vars= 8, regs= 10/0, args = 24, extra= 0
	.mask	0xc0ff0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,72
	sw	$31,68($sp)
	sw	$fp,64($sp)
	sw	$23,60($sp)
	sw	$22,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	move	$18,$4
	sw	$5,24($sp)
	lw	$2,12($18)
	lw	$3,0($18)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	move	$22,$6
	move	$fp,$7
	lw	$19,20($18)
	sll	$2,$2,2
	addu	$21,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L157
	move	$4,$0
	.set	macro
	.set	reorder

$L159:
	lhu	$3,0($19)
	sll	$2,$4,16
	or	$2,$2,$3
	sw	$2,0($19)
	lw	$2,0($18)
	#nop
	sll	$2,$2,2
	addu	$19,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L159
	addu	$4,$4,1
	.set	macro
	.set	reorder

$L157:
	la	$16,cube
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	sw	$2,0($22)
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	sw	$2,0($fp)
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	lw	$8,88($sp)
	#nop
	sw	$2,0($8)
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	sf_new
	li	$4,0x0000000a		# 10
	.set	macro
	.set	reorder

	lw	$5,24($sp)
	move	$20,$2
	.set	noreorder
	.set	nomacro
	jal	cube2list
	move	$4,$18
	.set	macro
	.set	reorder

	move	$23,$2
	lw	$2,12($18)
	lw	$3,0($18)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$19,20($18)
	sll	$2,$2,2
	addu	$21,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L161
	move	$4,$23
	.set	macro
	.set	reorder

$L182:
	.set	noreorder
	.set	nomacro
	jal	cube_is_covered
	move	$5,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L163
	move	$4,$20
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L164
	move	$20,$2
	.set	macro
	.set	reorder

$L163:
	lw	$4,0($22)
	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	sw	$2,0($22)
$L164:
	lw	$2,debug
	#nop
	andi	$2,$2,0x4000
	beq	$2,$0,$L162
	lw	$17,0($22)
	lw	$3,12($20)
	lw	$2,12($17)
	lw	$16,12($18)
	addu	$3,$3,$2
	.set	noreorder
	.set	nomacro
	jal	util_cpu_time
	subu	$16,$16,$3
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	util_print_time
	move	$4,$2
	.set	macro
	.set	reorder

	sw	$2,16($sp)
	lw	$5,12($20)
	lw	$6,12($17)
	la	$4,$LC5
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$7,$16
	.set	macro
	.set	reorder

$L162:
	lw	$2,0($18)
	#nop
	sll	$2,$2,2
	addu	$19,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L182
	move	$4,$23
	.set	macro
	.set	reorder

$L161:
	lw	$4,0($23)
	#nop
	beq	$4,$0,$L168
	jal	free
	sw	$0,0($23)
$L168:
	beq	$23,$0,$L170
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$23
	.set	macro
	.set	reorder

$L170:
	lw	$4,0($22)
	lw	$5,24($sp)
	jal	cube2list
	move	$22,$2
	lw	$2,12($20)
	lw	$3,0($20)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$19,20($20)
	sll	$2,$2,2
	addu	$21,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L172
	move	$4,$22
	.set	macro
	.set	reorder

$L183:
	.set	noreorder
	.set	nomacro
	jal	cube_is_covered
	move	$5,$19
	.set	macro
	.set	reorder

	beq	$2,$0,$L174
	lw	$4,0($fp)
	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L175
	sw	$2,0($fp)
	.set	macro
	.set	reorder

$L174:
	lw	$8,88($sp)
	#nop
	lw	$4,0($8)
	.set	noreorder
	.set	nomacro
	jal	sf_addset
	move	$5,$19
	.set	macro
	.set	reorder

	lw	$8,88($sp)
	#nop
	sw	$2,0($8)
$L175:
	lw	$2,debug
	#nop
	andi	$2,$2,0x4000
	beq	$2,$0,$L173
	lw	$8,88($sp)
	#nop
	lw	$17,0($8)
	lw	$18,0($fp)
	lw	$3,12($17)
	lw	$2,12($18)
	lw	$16,12($20)
	addu	$3,$3,$2
	.set	noreorder
	.set	nomacro
	jal	util_cpu_time
	subu	$16,$16,$3
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	util_print_time
	move	$4,$2
	.set	macro
	.set	reorder

	sw	$2,16($sp)
	lw	$5,12($17)
	lw	$6,12($18)
	la	$4,$LC6
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$7,$16
	.set	macro
	.set	reorder

$L173:
	lw	$2,0($20)
	#nop
	sll	$2,$2,2
	addu	$19,$19,$2
	sltu	$2,$19,$21
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L183
	move	$4,$22
	.set	macro
	.set	reorder

$L172:
	lw	$4,0($22)
	#nop
	beq	$4,$0,$L179
	jal	free
	sw	$0,0($22)
$L179:
	beq	$22,$0,$L181
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$22
	.set	macro
	.set	reorder

$L181:
	.set	noreorder
	.set	nomacro
	jal	sf_free
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$31,68($sp)
	lw	$fp,64($sp)
	lw	$23,60($sp)
	lw	$22,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,72
	j	$31
	.end	irred_split_cover
	.rdata
	.align	2
$LC7:
	.ascii	"IRRED1: %d of %d to-go=%d, table=%dx%d time=%s\n\000"
	.align	2
$LC8:
	.ascii	"IRRED1: delete redundant rows, now %dx%d\n\000"
	.text
	.align	2
	.globl	irred_derive_table

	.loc	1 1800
	.ent	irred_derive_table
irred_derive_table:
	.frame	$sp,72,$31		# vars= 0, regs= 9/0, args = 32, extra= 0
	.mask	0x80ff0000,-8
	.fmask	0x00000000,0
	subu	$sp,$sp,72
	sw	$31,64($sp)
	sw	$23,60($sp)
	sw	$22,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	lw	$2,12($4)
	lw	$3,0($4)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($4)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L186
	move	$20,$6
	.set	macro
	.set	reorder

	li	$3,-4097			# 0xffffefff
$L188:
	lw	$2,0($17)
	#nop
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,0($4)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	bne	$2,$0,$L188
$L186:
	lw	$2,12($5)
	lw	$3,0($5)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($5)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L190
	li	$3,-4097			# 0xffffefff
	.set	macro
	.set	reorder

$L192:
	lw	$2,0($17)
	#nop
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,0($5)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	bne	$2,$0,$L192
$L190:
	lw	$2,12($20)
	lw	$3,0($20)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	lw	$17,20($20)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	beq	$2,$0,$L194
$L196:
	lw	$2,0($17)
	#nop
	ori	$2,$2,0x1000
	sw	$2,0($17)
	lw	$2,0($20)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	bne	$2,$0,$L196
$L194:
	.set	noreorder
	.set	nomacro
	jal	cube3list
	move	$6,$20
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sm_alloc
	move	$23,$2
	.set	macro
	.set	reorder

	move	$18,$2
	lw	$2,12($20)
	lw	$3,0($20)
	#nop
	mult	$2,$3
	mflo	$2
	#nop
	move	$22,$0
	lw	$17,20($20)
	sll	$2,$2,2
	addu	$19,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L198
	move	$21,$0
	.set	macro
	.set	reorder

	move	$4,$23
$L208:
	lhu	$2,2($17)
	move	$5,$17
	sw	$2,Rp_current
	.set	noreorder
	.set	nomacro
	jal	fcube_is_covered
	move	$6,$18
	.set	macro
	.set	reorder

	lw	$2,0($17)
	li	$3,-4097			# 0xffffefff
	and	$2,$2,$3
	sw	$2,0($17)
	lw	$2,debug
	#nop
	andi	$2,$2,0x4000
	beq	$2,$0,$L200
	lw	$2,24($18)
	lw	$16,12($20)
	sw	$2,16($sp)
	lw	$2,36($18)
	subu	$16,$16,$21
	.set	noreorder
	.set	nomacro
	jal	util_cpu_time
	sw	$2,20($sp)
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	util_print_time
	move	$4,$2
	.set	macro
	.set	reorder

	sw	$2,24($sp)
	la	$4,$LC7
	lw	$6,12($20)
	move	$5,$21
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$7,$16
	.set	macro
	.set	reorder

$L200:
	lw	$2,24($18)
	#nop
	subu	$2,$2,$22
	slt	$2,$2,1001
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L201
	addu	$21,$21,1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	sm_row_dominance
	move	$4,$18
	.set	macro
	.set	reorder

	lw	$2,debug
	lw	$22,24($18)
	andi	$2,$2,0x4000
	beq	$2,$0,$L201
	lw	$6,36($18)
	la	$4,$LC8
	.set	noreorder
	.set	nomacro
	jal	printf
	move	$5,$22
	.set	macro
	.set	reorder

$L201:
	lw	$2,0($20)
	#nop
	sll	$2,$2,2
	addu	$17,$17,$2
	sltu	$2,$17,$19
	.set	noreorder
	.set	nomacro
	bne	$2,$0,$L208
	move	$4,$23
	.set	macro
	.set	reorder

$L198:
	lw	$4,0($23)
	#nop
	beq	$4,$0,$L205
	jal	free
	sw	$0,0($23)
$L205:
	.set	noreorder
	.set	nomacro
	beq	$23,$0,$L209
	move	$2,$18
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$23
	.set	macro
	.set	reorder

	move	$2,$18
$L209:
	lw	$31,64($sp)
	lw	$23,60($sp)
	lw	$22,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,72
	j	$31
	.end	irred_derive_table
	.align	2
	.globl	cube_is_covered

	.loc	1 1852
	.ent	cube_is_covered
cube_is_covered:
	.frame	$sp,24,$31		# vars= 0, regs= 1/0, args = 16, extra= 0
	.mask	0x80000000,-8
	.fmask	0x00000000,0
	subu	$sp,$sp,24
	sw	$31,16($sp)
	jal	cofactor
	.set	noreorder
	.set	nomacro
	jal	tautology
	move	$4,$2
	.set	macro
	.set	reorder

	lw	$31,16($sp)
	addu	$sp,$sp,24
	j	$31
	.end	cube_is_covered
	.sdata
	.align	2
taut_level.14:
	.word	0
	.rdata
	.align	2
$LC9:
	.ascii	"TAUTOLOGY\000"
	.align	2
$LC10:
	.ascii	"exit TAUTOLOGY[%d]: %s\n\000"
	.sdata
	.align	2
$LC11:
	.ascii	"TRUE\000"
	.align	2
$LC12:
	.ascii	"MAYBE\000"
	.align	2
$LC13:
	.ascii	"FALSE\000"
	.text
	.align	2
	.globl	tautology

	.loc	1 1862
	.ent	tautology
tautology:
	.frame	$sp,64,$31		# vars= 16, regs= 8/0, args = 16, extra= 0
	.mask	0x807f0000,-4
	.fmask	0x00000000,0
	lw	$2,debug
	subu	$sp,$sp,64
	sw	$31,60($sp)
	sw	$22,56($sp)
	sw	$21,52($sp)
	sw	$20,48($sp)
	sw	$19,44($sp)
	sw	$18,40($sp)
	sw	$17,36($sp)
	sw	$16,32($sp)
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L212
	move	$21,$4
	.set	macro
	.set	reorder

	lw	$6,taut_level.14
	la	$5,$LC9
	addu	$2,$6,1
	sw	$2,taut_level.14
	jal	debug_print
$L212:
	lw	$2,cube+44
	lw	$16,8($21)
	lw	$20,0($2)
	lw	$22,4($2)
	move	$19,$21
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L224
	addu	$17,$21,12
	.set	macro
	.set	reorder

	move	$19,$0 		/*++++++++++++++++++++++++++++++++*/
$L223:
	lw	$5,0($19)	/*++++++++++++++++++++++++++++++++*/
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L301
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L223
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L224:
	lw	$2,0($19)
	#nop
	lw	$2,0($2)
	#nop
	andi	$5,$2,0x03ff
$L225:
	lw	$2,0($19)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($3)
	subu	$5,$5,1
	.set	noreorder
	.set	nomacro
	bgez	$5,$L225
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,8($19)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L229
	addu	$17,$19,12
	.set	macro
	.set	reorder

	li	$6,-1024			# 0xfffffc00
$L234:
	lw	$2,0($20)
	#nop
	andi	$5,$2,0x03ff
	and	$2,$2,$6
	or	$2,$5,$2
	sw	$2,0($20)
$L231:
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$16
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L231
	sw	$2,0($4)
	.set	macro
	.set	reorder

	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L234
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L229:
	lw	$5,cube+48
	.set	noreorder
	.set	nomacro
	jal	setp_equal
	move	$4,$20
	.set	macro
	.set	reorder

	beq	$2,$0,$L300
	.set	noreorder
	.set	nomacro
	jal	massive_count
	move	$4,$19
	.set	macro
	.set	reorder

	lw	$3,cdata+20
	lw	$2,cdata+16
	#nop
	.set	noreorder
	.set	nomacro
	bne	$3,$2,$L240
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L300:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L242
	jal	free
	sw	$0,0($19)
$L242:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L244
	move	$16,$0
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L244:
	.set	noreorder
	.set	nomacro
	j	$L302
	li	$2,0x00000002		# 2
	.set	macro
	.set	reorder

$L240:
	lw	$3,cdata+16
	#nop
	bne	$3,$2,$L246
$L301:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L248
	jal	free
	sw	$0,0($19)
$L248:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L214
	li	$16,0x00000001		# 1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L214
	li	$16,0x00000001		# 1
	.set	macro
	.set	reorder

$L246:
	lw	$2,cdata+20
	#nop
	beq	$2,$0,$L252
	lw	$5,cube+52
	.set	noreorder
	.set	nomacro
	jal	set_copy
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$2,cube+4
	#nop
	.set	noreorder
	.set	nomacro
	blez	$2,$L254
	move	$6,$0
	.set	macro
	.set	reorder

	li	$8,-1024			# 0xfffffc00
$L260:
	lw	$2,cdata+12
	sll	$3,$6,2
	addu	$3,$3,$2
	lw	$2,0($3)
	#nop
	beq	$2,$0,$L255
	lw	$2,0($20)
	sll	$7,$6,2
	andi	$5,$2,0x03ff
	and	$2,$2,$8
	or	$2,$5,$2
	sw	$2,0($20)
$L257:
	lw	$2,cube+40
	#nop
	addu	$2,$7,$2
	lw	$2,0($2)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L257
	sw	$2,0($4)
	.set	macro
	.set	reorder

$L255:
	lw	$2,cube+4
	addu	$6,$6,1
	slt	$2,$6,$2
	bne	$2,$0,$L260
$L254:
	lw	$16,8($19)
	addu	$18,$19,8
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L262
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L265:
	lw	$6,0($19)
	move	$4,$22
	.set	noreorder
	.set	nomacro
	jal	set_or
	move	$5,$16
	.set	macro
	.set	reorder

	move	$4,$20
	.set	noreorder
	.set	nomacro
	jal	setp_implies
	move	$5,$2
	.set	macro
	.set	reorder

	beq	$2,$0,$L261
	sw	$16,0($18)
	addu	$18,$18,4
$L261:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L265
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L262:
	sw	$0,0($18)
	lw	$2,debug
	addu	$18,$18,4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L224
	sw	$18,4($19)
	.set	macro
	.set	reorder

	subu	$6,$18,$19
	sra	$6,$6,2
	lw	$5,cdata+20
	la	$4,$LC0
	.set	noreorder
	.set	nomacro
	jal	printf
	subu	$6,$6,3
	.set	macro
	.set	reorder

	j	$L224
$L252:
	lw	$4,cdata+24
	lw	$2,cdata+4
	sll	$4,$4,2
	addu	$4,$4,$2
	lw	$2,4($19)
	#nop
	subu	$2,$2,$19
	sra	$2,$2,2
	subu	$2,$2,3
	srl	$3,$2,31
	addu	$2,$2,$3
	lw	$3,0($4)
	sra	$2,$2,1
	slt	$3,$3,$2
	.set	noreorder
	.set	nomacro
	beq	$3,$0,$L245
	move	$4,$19
	.set	macro
	.set	reorder

	lw	$7,debug
	addu	$5,$sp,16
	addu	$6,$sp,20
	.set	noreorder
	.set	nomacro
	jal	cubelist_partition
	andi	$7,$7,0x0200
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L214
	li	$16,0x00000002		# 2
	.set	macro
	.set	reorder

	lw	$4,0($19)
	#nop
	beq	$4,$0,$L272
	jal	free
	sw	$0,0($19)
$L272:
	beq	$19,$0,$L274
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L274:
	lw	$4,16($sp)
	jal	tautology
	beq	$2,$0,$L275
	lw	$2,20($sp)
	#nop
	lw	$4,0($2)
	#nop
	beq	$4,$0,$L277
	jal	free
	lw	$2,20($sp)
	#nop
	sw	$0,0($2)
$L277:
	lw	$4,20($sp)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$4,$0,$L214
	li	$16,0x00000001		# 1
	.set	macro
	.set	reorder

	jal	free
	.set	noreorder
	.set	nomacro
	j	$L214
	sw	$0,20($sp)
	.set	macro
	.set	reorder

$L275:
	lw	$4,20($sp)
	jal	tautology
	.set	noreorder
	.set	nomacro
	j	$L214
	move	$16,$2
	.set	macro
	.set	reorder

$L245:
	li	$16,0x00000002		# 2
$L214:
	li	$2,0x00000002		# 2
$L302:
	bne	$16,$2,$L213
	lw	$2,cube
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L281
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L282
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L281:
	li	$4,0x00000008		# 8
$L282:
	jal	malloc
	la	$16,cube
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$19,$2
	lw	$2,0($16)
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L283
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L284
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L283:
	li	$4,0x00000008		# 8
$L284:
	.set	noreorder
	.set	nomacro
	jal	malloc
	move	$16,$0
	.set	macro
	.set	reorder

	lw	$5,cube
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$17,$2
	move	$4,$21
	move	$5,$19
	move	$6,$17
	.set	noreorder
	.set	nomacro
	jal	binate_split_select
	li	$7,0x00000200		# 512
	.set	macro
	.set	reorder

	move	$18,$2
	move	$4,$21
	move	$5,$19
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$18
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	tautology
	move	$4,$2
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L285
	move	$4,$21
	.set	macro
	.set	reorder

	move	$5,$17
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$18
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	tautology
	move	$4,$2
	.set	macro
	.set	reorder

	sltu	$16,$0,$2
$L285:
	lw	$4,0($21)
	#nop
	beq	$4,$0,$L287
	jal	free
	sw	$0,0($21)
$L287:
	beq	$21,$0,$L289
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$21
	.set	macro
	.set	reorder

$L289:
	beq	$19,$0,$L291
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L291:
	beq	$17,$0,$L213
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$17
	.set	macro
	.set	reorder

$L213:
	lw	$2,debug
	#nop
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L303
	move	$2,$16
	.set	macro
	.set	reorder

	lw	$2,taut_level.14
	#nop
	subu	$2,$2,1
	sw	$2,taut_level.14
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L295
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	la	$6,$LC12
	bne	$16,$2,$L296
	la	$6,$LC11
	j	$L296
$L295:
	la	$6,$LC13
$L296:
	lw	$5,taut_level.14
	la	$4,$LC10
	jal	printf
	move	$2,$16
$L303:
	lw	$31,60($sp)
	lw	$22,56($sp)
	lw	$21,52($sp)
	lw	$20,48($sp)
	lw	$19,44($sp)
	lw	$18,40($sp)
	lw	$17,36($sp)
	lw	$16,32($sp)
	addu	$sp,$sp,64
	j	$31
	.end	tautology
	.align	2

	.loc	1 1896
	.ent	fcube_is_covered
fcube_is_covered:
	.frame	$sp,24,$31		# vars= 0, regs= 2/0, args = 16, extra= 0
	.mask	0x80010000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,24
	sw	$31,20($sp)
	sw	$16,16($sp)
	.set	noreorder
	.set	nomacro
	jal	cofactor
	move	$16,$6
	.set	macro
	.set	reorder

	move	$4,$2
	.set	noreorder
	.set	nomacro
	jal	ftautology
	move	$5,$16
	.set	macro
	.set	reorder

	lw	$31,20($sp)
	lw	$16,16($sp)
	addu	$sp,$sp,24
	j	$31
	.end	fcube_is_covered
	.sdata
	.align	2
ftaut_level.19:
	.word	0
	.rdata
	.align	2
$LC14:
	.ascii	"FIND_TAUTOLOGY\000"
	.align	2
$LC15:
	.ascii	"exit FIND_TAUTOLOGY[%d]: table is %d by %d\n\000"
	.text
	.align	2

	.loc	1 1906
	.ent	ftautology
ftautology:
	.frame	$sp,40,$31		# vars= 0, regs= 6/0, args = 16, extra= 0
	.mask	0x801f0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,40
	sw	$31,36($sp)
	sw	$20,32($sp)
	sw	$19,28($sp)
	sw	$18,24($sp)
	sw	$17,20($sp)
	sw	$16,16($sp)
	lw	$2,debug
	move	$17,$4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L306
	move	$20,$5
	.set	macro
	.set	reorder

	lw	$6,ftaut_level.19
	la	$5,$LC14
	addu	$2,$6,1
	sw	$2,ftaut_level.19
	jal	debug_print
$L306:
	move	$4,$17
	.set	noreorder
	.set	nomacro
	jal	ftaut_special_cases
	move	$5,$20
	.set	macro
	.set	reorder

	li	$3,0x00000002		# 2
	bne	$2,$3,$L307
	lw	$2,cube
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L308
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L309
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L308:
	li	$4,0x00000008		# 8
$L309:
	jal	malloc
	la	$16,cube
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$19,$2
	lw	$2,0($16)
	#nop
	slt	$2,$2,33
	bne	$2,$0,$L310
	lw	$2,cube
	#nop
	subu	$4,$2,1
	sra	$4,$4,5
	addu	$4,$4,2
	.set	noreorder
	.set	nomacro
	j	$L311
	sll	$4,$4,2
	.set	macro
	.set	reorder

$L310:
	li	$4,0x00000008		# 8
$L311:
	jal	malloc
	lw	$5,cube
	.set	noreorder
	.set	nomacro
	jal	set_clear
	move	$4,$2
	.set	macro
	.set	reorder

	move	$18,$2
	move	$4,$17
	move	$5,$19
	move	$6,$18
	.set	noreorder
	.set	nomacro
	jal	binate_split_select
	li	$7,0x00000200		# 512
	.set	macro
	.set	reorder

	move	$16,$2
	move	$4,$17
	move	$5,$19
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$16
	.set	macro
	.set	reorder

	move	$4,$2
	.set	noreorder
	.set	nomacro
	jal	ftautology
	move	$5,$20
	.set	macro
	.set	reorder

	move	$4,$17
	move	$5,$18
	.set	noreorder
	.set	nomacro
	jal	scofactor
	move	$6,$16
	.set	macro
	.set	reorder

	move	$4,$2
	.set	noreorder
	.set	nomacro
	jal	ftautology
	move	$5,$20
	.set	macro
	.set	reorder

	lw	$4,0($17)
	#nop
	beq	$4,$0,$L313
	jal	free
	sw	$0,0($17)
$L313:
	beq	$17,$0,$L315
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$17
	.set	macro
	.set	reorder

$L315:
	beq	$19,$0,$L317
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

$L317:
	beq	$18,$0,$L307
	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$18
	.set	macro
	.set	reorder

$L307:
	lw	$2,debug
	#nop
	andi	$2,$2,0x0200
	beq	$2,$0,$L320
	lw	$5,ftaut_level.19
	lw	$6,24($20)
	lw	$7,36($20)
	la	$4,$LC15
	subu	$5,$5,1
	sw	$5,ftaut_level.19
	jal	printf
$L320:
	lw	$31,36($sp)
	lw	$20,32($sp)
	lw	$19,28($sp)
	lw	$18,24($sp)
	lw	$17,20($sp)
	lw	$16,16($sp)
	addu	$sp,$sp,40
	j	$31
	.end	ftautology
	.align	2

	.loc	1 1938
	.ent	ftaut_special_cases
ftaut_special_cases:
	.frame	$sp,56,$31		# vars= 8, regs= 8/0, args = 16, extra= 0
	.mask	0x807f0000,-4
	.fmask	0x00000000,0
	subu	$sp,$sp,56
	sw	$31,52($sp)
	sw	$22,48($sp)
	sw	$21,44($sp)
	sw	$20,40($sp)
	sw	$19,36($sp)
	sw	$18,32($sp)
	sw	$17,28($sp)
	sw	$16,24($sp)
	lw	$2,cube+44
	move	$19,$4
	lw	$16,8($19)
	lw	$22,0($2)
	lw	$20,4($2)
	move	$21,$5
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L332
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L331:
	lw	$2,0($16)
	#nop
	andi	$2,$2,0x1000
	bne	$2,$0,$L322
	lw	$5,0($19)
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	bne	$2,$0,$L337
$L322:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L331
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L332:
	.set	noreorder
	.set	nomacro
	jal	massive_count
	move	$4,$19
	.set	macro
	.set	reorder

	la	$2,cdata+20
	lw	$3,0($2)
	lw	$2,-4($2)
	#nop
	bne	$3,$2,$L333
	lw	$2,20($21)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L335
	move	$18,$0
	.set	macro
	.set	reorder

	lw	$2,0($2)
	#nop
	addu	$18,$2,1
$L335:
	lw	$6,Rp_current
	move	$4,$21
	.set	noreorder
	.set	nomacro
	jal	sm_insert
	move	$5,$18
	.set	macro
	.set	reorder

	lw	$16,8($19)
	#nop
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L337
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L341:
	lw	$2,0($16)
	#nop
	andi	$2,$2,0x1000
	beq	$2,$0,$L336
	lw	$5,0($19)
	.set	noreorder
	.set	nomacro
	jal	full_row
	move	$4,$16
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L336
	move	$4,$21
	.set	macro
	.set	reorder

	lhu	$6,2($16)
	.set	noreorder
	.set	nomacro
	jal	sm_insert
	move	$5,$18
	.set	macro
	.set	reorder

$L336:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L341
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L337:
	lw	$4,0($19)
	#nop
	beq	$4,$0,$L343
	jal	free
	sw	$0,0($19)
$L343:
	.set	noreorder
	.set	nomacro
	beq	$19,$0,$L362
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	jal	free
	move	$4,$19
	.set	macro
	.set	reorder

	.set	noreorder
	.set	nomacro
	j	$L362
	li	$2,0x00000001		# 1
	.set	macro
	.set	reorder

$L333:
	lw	$2,cdata+20
	#nop
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L362
	li	$2,0x00000002		# 2
	.set	macro
	.set	reorder

	la	$16,cube+52
	lw	$5,0($16)
	.set	noreorder
	.set	nomacro
	jal	set_copy
	move	$4,$20
	.set	macro
	.set	reorder

	lw	$2,-48($16)
	#nop
	.set	noreorder
	.set	nomacro
	blez	$2,$L349
	move	$6,$0
	.set	macro
	.set	reorder

	li	$9,-1024			# 0xfffffc00
	la	$8,cube+4
$L355:
	lw	$2,cdata+12
	sll	$3,$6,2
	addu	$3,$3,$2
	lw	$2,0($3)
	#nop
	beq	$2,$0,$L350
	lw	$2,0($20)
	sll	$7,$6,2
	andi	$5,$2,0x03ff
	and	$2,$2,$9
	or	$2,$5,$2
	sw	$2,0($20)
$L352:
	lw	$2,cube+40
	#nop
	addu	$2,$7,$2
	lw	$2,0($2)
	sll	$3,$5,2
	addu	$4,$3,$20
	addu	$3,$3,$2
	lw	$2,0($4)
	lw	$3,0($3)
	subu	$5,$5,1
	or	$2,$2,$3
	.set	noreorder
	.set	nomacro
	bgtz	$5,$L352
	sw	$2,0($4)
	.set	macro
	.set	reorder

$L350:
	lw	$2,0($8)
	addu	$6,$6,1
	slt	$2,$6,$2
	bne	$2,$0,$L355
$L349:
	lw	$16,8($19)
	addu	$18,$19,8
	.set	noreorder
	.set	nomacro
	beq	$16,$0,$L357
	addu	$17,$19,12
	.set	macro
	.set	reorder

$L360:
	lw	$6,0($19)
	move	$4,$22
	.set	noreorder
	.set	nomacro
	jal	set_or
	move	$5,$16
	.set	macro
	.set	reorder

	move	$4,$20
	.set	noreorder
	.set	nomacro
	jal	setp_implies
	move	$5,$2
	.set	macro
	.set	reorder

	beq	$2,$0,$L356
	sw	$16,0($18)
	addu	$18,$18,4
$L356:
	lw	$16,0($17)
	#nop
	.set	noreorder
	.set	nomacro
	bne	$16,$0,$L360
	addu	$17,$17,4
	.set	macro
	.set	reorder

$L357:
	sw	$0,0($18)
	lw	$2,debug
	addu	$18,$18,4
	andi	$2,$2,0x0200
	.set	noreorder
	.set	nomacro
	beq	$2,$0,$L332
	sw	$18,4($19)
	.set	macro
	.set	reorder

	subu	$6,$18,$19
	sra	$6,$6,2
	lw	$5,cdata+20
	la	$4,$LC0
	.set	noreorder
	.set	nomacro
	jal	printf
	subu	$6,$6,3
	.set	macro
	.set	reorder

	j	$L332
$L362:
	lw	$31,52($sp)
	lw	$22,48($sp)
	lw	$21,44($sp)
	lw	$20,40($sp)
	lw	$19,36($sp)
	lw	$18,32($sp)
	lw	$17,28($sp)
	lw	$16,24($sp)
	addu	$sp,$sp,56
	j	$31
	.end	ftaut_special_cases

	.lcomm	Rp_current,8
--------------------------------------------------------------------


command line arguments : -O


tm.h : DECstation ULTRIX version  md : MIPS.md

Machine DECstation 3100

OS ULTRIX V4.2A (REv. 272) 
Technical Details
Message-ID: <9211100547.AA00264@trecce.cs.wisc.edu>
Path: arc1-ca.pugleaf.net!sparky!uunet!stanford.edu!ames!saimiri.primate.wisc.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!cs.wisc.edu!vijay

Show Full Headers
Complete Article Headers
Newsgroups: gnu.gcc.bug
Path: arc1-ca.pugleaf.net!sparky!uunet!stanford.edu!ames!saimiri.primate.wisc.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!cs.wisc.edu!vijay
From: vijay@cs.wisc.edu (T.N. Vijaykumar.)
Subject: Inlining bug
Message-ID: <9211100547.AA00264@trecce.cs.wisc.edu>
Sender: gnulists@ai.mit.edu
Organization: Gnus Not Usenet
Distribution: gnu
Date: Mon, 9 Nov 1992 17:47:27 GMT
Approved: bug-gcc@prep.ai.mit.edu
Lines: 3671