Article View: gnu.gcc.bug
Article #1340Inlining bug
From: T.N. Vijaykumar.
Date: Mon, 09 Nov 1992 17:47
Date: Mon, 09 Nov 1992 17:47
3667 lines
68159 bytes
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!vijayShow 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