int tracevalue(void) { if (critbit0_contains(&traced,&x)) return 1; if (!critbit0_insert(&totrace,0,&x)) return -1; for (;;) { switch(critbit0_firstprefixed(&totrace,0,&x,&empty)) { case 1: critbit0_delete(&totrace,0,&x); break; case 0: if (!str0_increment(&value,0)) return -1; return 1; default: return -1; } if (critbit0_contains(&blockvisible,&x)) if (!critbit0_contains(&blocklive,&x)) continue; if (!critbit0_contains(&traced,&x)) { if (!critbit0_insert(&traced,0,&x)) return -1; if (!str0_copy(&key,0,&x)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&value)) return -1; if (!critbit0_insert(&values,0,&key)) return -1; if (!str0_copy(&key,0,&x)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_allprefixed(&assignusegraph,0,&y,&key,addtotrace) < 1) return -1; } } }
int main(int argc,char **argv) { while (str0_getline(&line,0) > 0) { if (!str0_increment(&line,0)) return 111; str0_putline(&line); } return 0; }
int findentries2(void) { switch(findentries2_state) { case 0: if (!str0_copy(&n,0,&inputfield)) return -1; if (!str0_copy(&next,0,&inputfield)) return -1; if (!str0_increment(&next,0)) return -1; findentries2_state = 1; return 1; case 1: if (str0_equalc(&inputfield,"leave")) { findentries2_state = 20; return 1; } if (str0_equalc(&inputfield,"goto")) { findentries2_state = 30; return 1; } if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&next)) return -1; if (!critbit0_insert(&nextinsn,0,&key)) return -1; if (str0_equalc(&inputfield,"maybegoto")) { findentries2_state = 30; return 1; } if (str0_equalc(&inputfield,"enter")) { findentries2_state = 10; return 1; } break; case 10: if (!critbit0_insert(&blockbegins,0,&n)) return -1; if (!critbit0_insert(&entries,0,&n)) return -1; if (critbit0_allprefixed(&inputregs,0,&v,&empty,findentries3) < 1) nomem(); break; case 20: if (!critbit0_insert(&exits,0,&n)) return -1; if (critbit0_allprefixed(&outputregs,0,&v,&empty,findexits3) < 1) nomem(); break; case 30: if (!critbit0_insert(&blockbegins,0,&next)) return -1; if (!str0_copy(&key,0,&inputfield)) return -1; if (!str0_concatc(&key,0,":")) return -1; switch(critbit0_firstprefixed(&labels,0,&next,&key)) { case 1: break; case 0: if (!str0_copyc(&outputline,0,"error:unknown label ")) return -1; if (!str0_concat(&outputline,0,&key)) return -1; if (!str0_concat(&outputline,0,&inputline)) return -1; str0_putline(&outputline); return 0; default: return -1; } if (!critbit0_insert(&blockbegins,0,&next)) return -1; if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&next)) return -1; if (!critbit0_insert(&nextinsn,0,&key)) return -1; } return 0; }
int findblocks2(void) { if (critbit0_contains(&blockbegins,&inputfield)) { if (!str0_copy(&n,0,&inputfield)) return -1; for (;;) { if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":<")) return -1; if (critbit0_allprefixed(&uses,0,&v,&key,findblocks_read) < 1) return -1; if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":kill>")) return -1; if (critbit0_allprefixed(&uses,0,&v,&key,findblocks_kill) < 1) return -1; if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":>")) return -1; if (critbit0_allprefixed(&uses,0,&v,&key,findblocks_write) < 1) return -1; if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_copy(&next,0,&n)) return -1; if (!str0_increment(&next,0)) return -1; if (!str0_concat(&key,0,&next)) return -1; if (critbit0_contains(&blockbegins,&next)) break; if (!critbit0_contains(&nextinsn,&key)) break; if (!str0_copy(&n,0,&next)) return -1; } if (!critbit0_insert(&blockends,0,&n)) return -1; if (!str0_copy(&key,0,&inputfield)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&n)) return -1; if (!critbit0_insert(&blockleaps,0,&key)) return -1; findblocks_finallinks_writing = 1; if (!str0_copy(&key,0,&inputfield)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_allprefixed(&blockassigned,0,&v,&key,findblocks_finallinks) < 1) nomem(); findblocks_finallinks_writing = 0; if (!str0_copy(&key,0,&inputfield)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_allprefixed(&blockread,0,&v,&key,findblocks_finallinks) < 1) nomem(); return 0; } return 0; }
int allocate_alive(void) { if (!str0_copy(&key,0,&x)) return -1; if (!str0_concat(&key,0,&v)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_firstprefixed(&values,0,&y,&key) < 1) return -1; if (critbit0_contains(&livevalues,&y)) return 1; if (!str0_copy(&key,0,&v)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_firstprefixed(&vtypes,0,&type,&key) < 1) return -1; if (str0_equalc(&type,"flags")) return 1; /* XXX */ if (allocate_state == 1) { if (!str0_copy(&key,0,&type)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_allprefixed(&livevaluetypes,0,&z,&key,recordconflict) < 1) return -1; } if (!critbit0_insert(&livevalues,0,&y)) return -1; if (!str0_copy(&key,0,&type)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&y)) return -1; if (!critbit0_insert(&livevaluetypes,0,&key)) return -1; if (allocate_state == 2) { switch(critbit0_insert(&allocated,0,&y)) { case 2: break; case 1: if (!str0_copy(&key,0,&y)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_firstprefixed(&allocations,0,&z,&key) < 1) return -1; if (critbit0_contains(&liveregs,&z)) { if (!str0_copyc(&outputline,0,"error:internal register misassignment:")) return -1; if (!str0_concat(&outputline,0,&z)) return -1; str0_putline(&outputline); } if (!critbit0_insert(&liveregs,0,&z)) return -1; if (str0_equalc(&type,"float80")) { if (!str0_copy(&key,0,&v)) return -1; if (!str0_concatc(&key,0,"#")) return -1; if (!str0_concat(&key,0,&y)) return -1; if (!str0_concatc(&key,0,"=")) return -1; if (!str0_concat(&key,0,&z)) return -1; if (!critbit0_insert(&livefloat80regs,0,&key)) return -1; } return 1; default: return -1; } if (!str0_copyc(&r,0,"1")) return -1; for (;;) { if (!str0_copy(&key,0,&type)) return -1; if (!str0_concatc(&key,0,"#")) return -1; if (!str0_concat(&key,0,&r)) return -1; if (!critbit0_contains(&liveregs,&key)) { if (!str0_copy(&key,0,&y)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&type)) return -1; if (!str0_concatc(&key,0,"#")) return -1; if (!str0_concat(&key,0,&r)) return -1; if (!critbit0_contains(&avoidregs,&key)) break; } if (!str0_increment(&r,0)) return -1; } if (!str0_copy(&key,0,&type)) return -1; if (!str0_concatc(&key,0,"#")) return -1; if (!str0_concat(&key,0,&r)) return -1; if (!critbit0_insert(&liveregs,0,&key)) return -1; if (str0_equalc(&type,"float80")) { if (!str0_copy(&z,0,&v)) return -1; if (!str0_concatc(&z,0,"#")) return -1; if (!str0_concat(&z,0,&y)) return -1; if (!str0_concatc(&z,0,"=")) return -1; if (!str0_concat(&z,0,&key)) return -1; if (!critbit0_insert(&livefloat80regs,0,&z)) return -1; } if (!str0_copy(&key,0,&y)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&type)) return -1; if (!str0_concatc(&key,0,"#")) return -1; if (!str0_concat(&key,0,&r)) return -1; if (!critbit0_insert(&allocations,0,&key)) return -1; if (!str0_copy(&key,0,&y)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_copy(&u,0,&type)) return -1; if (!str0_concatc(&u,0,"#")) return -1; if (!str0_concat(&u,0,&r)) return -1; if (critbit0_allprefixed(&conflicts,0,&z,&key,followconflict) < 1) return -1; return 1; } return 1; }
int allocate(void) { if (critbit0_contains(&traced,&n)) { if (!str0_copyc(&outputline,0,"error:falling through entry:")) return -1; if (!str0_concat(&outputline,0,&n)) return -1; str0_putline(&outputline); return 1; } for (;;) { if (!critbit0_contains(&traced,&n)) { if (!critbit0_insert(&traced,0,&n)) return -1; if (critbit0_contains(&blockbegins,&n)) { critbit0_clear(&livevalues,0); critbit0_clear(&livevaluetypes,0); critbit0_clear(&liveregs,0); critbit0_clear(&livefloat80regs,0); } if (!str0_copy(&x,0,&n)) return -1; if (!str0_concatc(&x,0,"=")) return -1; if (critbit0_allprefixed(&blocklive,0,&v,&x,allocate_alive) < 0) return -1; if (!str0_copy(&x,0,&n)) return -1; if (!str0_concatc(&x,0,"<")) return -1; if (critbit0_allprefixed(&reads,0,&v,&x,allocate_alive) < 0) return -1; if (!str0_copy(&x,0,&n)) return -1; if (!str0_concatc(&x,0,"<")) return -1; if (critbit0_allprefixed(&finalreads,0,&v,&x,allocate_dead) < 0) return -1; if (!str0_copy(&x,0,&n)) return -1; if (!str0_concatc(&x,0,">")) return -1; if (critbit0_allprefixed(&assignments,0,&v,&x,allocate_alive) < 0) return -1; if (critbit0_allprefixed(&livefloat80regs,0,&v,&empty,recordfloat80) < 0) return -1; if (!str0_copy(&next,0,&n)) return -1; if (!str0_increment(&next,0)) return -1; if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (critbit0_allprefixed(&nextinsn,0,&y,&key,addtotrace) < 0) return -1; if (!str0_copy(&key,0,&n)) return -1; if (!str0_concatc(&key,0,":")) return -1; if (!str0_concat(&key,0,&next)) return -1; if (critbit0_contains(&nextinsn,&key)) { if (!str0_copy(&n,0,&next)) return -1; continue; } } switch(critbit0_firstprefixed(&totrace,0,&n,&empty)) { case 1: break; case 0: return 1; default: return -1; } critbit0_delete(&totrace,0,&n); } }