Fix yield bug part 2
[satcheck.git] / schedulebuilder.cc
index 3bc6e96b2a729d6e1f0dac59922bf386901fa5d7..68a4b77f115e5b6ff87571eeee1f5121eea786b6 100644 (file)
@@ -13,6 +13,7 @@
 #include "constgen.h"
 #include "branchrecord.h"
 #include "storeloadset.h"
+#include "model.h"
 
 ScheduleBuilder::ScheduleBuilder(MCExecution *_execution, ConstGen *cgen) :
        cg(cgen),
@@ -69,7 +70,6 @@ void ScheduleBuilder::buildSchedule(bool * satsolution) {
                        EPRecord *next=processRecord(record, satsolution);
 #ifdef TSO
                        if (next != NULL) {
-
                                if (next->getType()==STORE) {
                                        stores[index]->push_back(next);
                                        next=getNextRecord(next);
@@ -84,6 +84,9 @@ void ScheduleBuilder::buildSchedule(bool * satsolution) {
                        }
 #endif
                        if (next!=record) {
+#ifdef DUMP_SAT_SCHEDULE
+                               neatPrint(record, cg, satsolution);
+#endif
                                threads[index]=next;
                                index=index-1;
                        }
@@ -111,6 +114,10 @@ void ScheduleBuilder::buildSchedule(bool * satsolution) {
                if (earliest == NULL)
                        break;
 
+#ifdef DUMP_SAT_SCHEDULE
+               neatPrint(earliest, cg, satsolution);
+#endif
+
                for(uint index=0;index<threads.size();index++) {
                        EPRecord *record=threads[index];
                        if (record==earliest) {
@@ -215,6 +222,8 @@ EPRecord * ScheduleBuilder::processRecord(EPRecord *record, bool *satsolution) {
        case LABEL:
                break;
        case YIELD:
+               if (model->params.noexecyields)
+                       return NULL;
                break;
        default:
                ASSERT(0);