From: Luis C. <lfc...@us...> - 2003-08-25 19:01:01
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs1:/tmp/cvs-serv10388/emu Modified Files: Tag: demand_branch demand.c Log Message: * Cleanups Index: demand.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/Attic/demand.c,v retrieving revision 1.1.2.14 retrieving revision 1.1.2.15 diff -u -r1.1.2.14 -r1.1.2.15 --- demand.c 13 May 2003 18:12:53 -0000 1.1.2.14 +++ demand.c 25 Aug 2003 18:50:36 -0000 1.1.2.15 @@ -171,7 +171,7 @@ b = from; while (b < to) { if (cp_demanded(b)) { - subg = nlcp_ptcp(b); + subg = (VariantSF) nlcp_ptcp(b); /* if the topmost cp is a generator, it could be the topmost generator, thus ptcp is NULL */ if (subg == NULL) { /* && b->prev_top == to) { */ @@ -257,29 +257,7 @@ /********************************************************************* unschedule_scope(cutpoint): reclaims stacks for given scope **********************************************************************/ -void unschedule_scope(Choice cutpoint) -{ - Choice locbreg; - - ebreg = cp_ebreg(cutpoint); - hbreg = cp_hreg(cutpoint); - if ((Choice) breg != (Choice) cutpoint) { - CPtr xtemp1, xtemp2; - unwind_trail(breg,xtemp1,xtemp2); - /* skip deleted choicepoints (from previous iterations) */ - for (locbreg=cutpoint; - cp_deleted(locbreg) || is_compl_susp_frame(locbreg); - locbreg=cp_prevtop(locbreg)) - ; - breg = (CPtr) locbreg; - } -} - -/********************************************************************* - ec_unschedule_scope(cutpoint): reclaims stacks for given scope - Early completion version -**********************************************************************/ -void ec_unschedule_scope(Choice cutpoint, Choice prevbreg) +void unschedule_scope(Choice cutpoint, Choice prevbreg) { Choice locbreg; @@ -291,7 +269,7 @@ /* skip deleted choicepoints (from previous iterations) */ for (locbreg=prevbreg; cp_deleted(locbreg) || is_compl_susp_frame(locbreg); - locbreg=cp_prevtop(locbreg)) + locbreg= (Choice) cp_prevtop(locbreg)) ; breg = (CPtr) locbreg; } @@ -325,48 +303,8 @@ topmost generator */ btmp->prev = (CPtr) to; /* invalidate possible trailing choicepoints */ - b = from; - while (!is_generator_choicepoint(b) && - !is_consumer_choicepoint(b) && - !is_compl_susp_frame(b) && - (Choice) subg_cp_ptr(cp_ptcp(b)) < to) { - b = (Choice) cp_scopeprev(b); - } - breg = (CPtr) b; - } -} - -/********************************************************************* - ec_detach_generator(from,to): finds the topmost generator in the scope - and removes its consumer part (i.e., makes forward continuation point - to a failure instruction) - Early completion version -**********************************************************************/ -void ec_detach_generator(Choice to) -{ - Choice b; - TChoice btmp=NULL; - - b = (breg < bfreg ? breg : bfreg); - while (b < to) { - if (!cp_demanded(b) && !cp_deleted(b)) { - CPtr untagged_pcreg = (CPtr) ((unsigned long) cp_pcreg(b) & ~0x3); -/* CPtr untagged_pcreg = (CPtr) (string_val(cp_pcreg(b))); */ - if (is_generator_pcreg(untagged_pcreg)) - btmp = (TChoice) b; - cp_demand(b); - } - b = (Choice) cp_prevtop(b); - } - if (btmp) { - /* delete consumer part from topmost generator */ - btmp->cpreg = (byte *) &fail_inst; - /* short circuit possible prolog choicepoints older than the - topmost generator */ - btmp->prev = (CPtr) to; - /* invalidate possible trailing choicepoints */ if (breg < bfreg) { - b = breg; + b = (Choice) breg; while (!is_generator_choicepoint(b) && !is_consumer_choicepoint(b) && !is_compl_susp_frame(b) && @@ -375,9 +313,18 @@ } breg = (CPtr) b; } +/* b = from; */ +/* while (!is_generator_choicepoint(b) && */ +/* !is_consumer_choicepoint(b) && */ +/* !is_compl_susp_frame(b) && */ +/* (Choice) subg_cp_ptr(cp_ptcp(b)) < to) { */ +/* b = (Choice) cp_scopeprev(b); */ +/* } */ +/* breg = (CPtr) b; */ } } + /********************************************************************* safe_cut(from,to): checks whether it is safe to cut without demand (as in cut_xsb.h:cut_code); cuts if safe @@ -446,13 +393,13 @@ switch (status) { case 0: /* no external demand & no trapped CPs */ delete_tables((Choice) breg,cutpoint); - unschedule_scope(cutpoint); + unschedule_scope(cutpoint,cutpoint); xsb_dbgmsg((LOG_DEMAND,"[demand] removing all choicepoints.\n")); break; case 1: /* no external demand & trapped CPs */ delete_tables((Choice) breg,cutpoint); FreezeDemandRegisters; - unschedule_scope(cutpoint); + unschedule_scope(cutpoint,cutpoint); xsb_dbgmsg((LOG_DEMAND,"[demand] freezing stack.\n")); break; case 2: @@ -473,65 +420,54 @@ int status; Choice cutpoint; Choice btop; + VariantSF subgoal; if (flags[TRACE_STA]) early_completions++; - btop = (bfreg < breg ? bfreg : breg); - cutpoint = cp_prevtop(producer); + btop = (Choice) (bfreg < breg ? bfreg : breg); + cutpoint = (Choice) cp_prevtop(producer); xsb_dbgmsg((LOG_DEMAND,"[demand-ec] Old breg=%p\n",breg)); if (cutpoint != (Choice) breg) { -/* if (cutpoint != (Choice) btop) { */ #ifdef CP_DEBUG xsb_dbgmsg((LOG_DEMAND,"[demand-ec] Early-completing goal: %s/%d at %p.\n", - ((Psc)(((Choice)producer)->psc)->nameptr), - ((Psc)(((Choice)producer)->psc)->arity), + ((Psc)producer->psc)->nameptr, + ((Psc)producer->psc)->arity, breg)); #endif xsb_dbgmsg((LOG_DEMAND, "[demand-ec] start: producer=%p, breg=%p, bfreg=%p, cutpoint=%p.\n", producer, breg, bfreg, cutpoint)); -#if defined(CP_DEBUG) && defined(DEBUG_VERBOSE) -/* if (cur_log_level & LOG_DEMAND) */ -/* print_cp_backtrace(breg); */ -#endif mark_scope((Choice) breg, cutpoint); status = check_external_demand((Choice) btop, cutpoint); -/* status = check_external_demand((Choice) breg, cutpoint); */ + subgoal = (VariantSF) ((TChoice)producer)->subgoal_ptr; switch (status) { case 0: /* no external demand & no trapped CPs */ delete_tables((Choice) btop,producer); -/* delete_tables((Choice) breg,producer); */ - ec_unschedule_scope(cutpoint,cp_prevbreg(producer)); + unschedule_scope(cutpoint, (Choice) cp_prevbreg(producer)); breg = cp_prevbreg(producer); - reclaim_incomplete_table_structs(producer); + reclaim_incomplete_table_structs(subgoal); compl_subgoal_ptr(subg_compl_stack_ptr(tcp_subgoal_ptr(producer)))=NULL; xsb_dbgmsg((LOG_DEMAND, "[demand-ec] removing all choicepoints. New breg=%p\n", breg)); - if (bfreg < cutpoint) { + if ((unsigned long) bfreg < (unsigned long) cutpoint) { bfreg = breg; } break; case 1: /* no external demand & trapped CPs */ - reclaim_incomplete_table_structs(producer); + reclaim_incomplete_table_structs(subgoal); delete_tables((Choice) btop,producer); -/* delete_tables((Choice) breg,producer); */ FreezeDemandRegisters; compl_subgoal_ptr(subg_compl_stack_ptr(tcp_subgoal_ptr(producer)))=NULL; - ec_unschedule_scope(cutpoint,cp_prevbreg(producer)); + unschedule_scope(cutpoint,(Choice) cp_prevbreg(producer)); xsb_dbgmsg((LOG_DEMAND,"[demand-ec] freezing stack.\n")); break; case 2: - ec_detach_generator(cutpoint); -/* detach_generator((Choice)breg,cutpoint); */ + detach_generator((Choice) (breg < bfreg ? breg : bfreg), cutpoint); xsb_dbgmsg((LOG_DEMAND,"[demand-ec] keeping all choicepoints.\n")); break; } -#if defined(CP_DEBUG) && defined(DEBUG_VERBOSE) -/* if (cur_log_level & LOG_DEMAND) */ -/* print_cp_backtrace(breg); */ -#endif xsb_dbgmsg((LOG_DEMAND,"[demand-ec] end: breg=%p, bfreg=%p, cutpoint=%p.\n", breg, bfreg, cutpoint)); } @@ -547,7 +483,7 @@ mark_scope((Choice) breg,cutpoint); delete_tables((Choice) breg,cutpoint); /* FreezeDemandRegisters; */ - unschedule_scope(cutpoint); + unschedule_scope(cutpoint,cutpoint); } } |