#include "traceanalysis.h"
#include "hashtable.h"
+struct sc_statistics {
+ unsigned long long elapsedtime;
+ unsigned int sccount;
+ unsigned int nonsccount;
+};
+
class SCAnalysis : public TraceAnalysis {
public:
- SCAnalysis(const ModelExecution *execution);
+ SCAnalysis();
~SCAnalysis();
+ virtual void setExecution(ModelExecution * execution);
virtual void analyze(action_list_t *);
+ virtual const char * name();
+ virtual bool option(char *);
+ virtual void finish();
+
SNAPSHOTALLOC
private:
+ void update_stats();
void print_list(action_list_t *list);
- void buildVectors(action_list_t *);
+ int buildVectors(action_list_t *);
bool updateConstraints(ModelAction *act);
void computeCV(action_list_t *);
action_list_t * generateSC(action_list_t *);
bool processRead(ModelAction *read, ClockVector *cv);
- ModelAction * getNextAction();
- bool merge(ClockVector * cv, const ModelAction * act, ClockVector *cv2);
+ int getNextActions(ModelAction **array);
+ bool merge(ClockVector *cv, const ModelAction *act, const ModelAction *act2);
+ void check_rf(action_list_t *list);
+ void reset(action_list_t *list);
+ ModelAction* pruneArray(ModelAction**, int);
+
int maxthreads;
- HashTable<const ModelAction *,ClockVector *, uintptr_t, 4 > * cvmap;
- HashTable<const ModelAction *,const ModelAction *, uintptr_t, 4 > * cycleset;
- SnapVector<action_list_t> * threadlists;
- const ModelExecution *execution;
+ HashTable<const ModelAction *, ClockVector *, uintptr_t, 4 > cvmap;
+ bool cyclic;
+ HashTable<const ModelAction *, const ModelAction *, uintptr_t, 4 > badrfset;
+ HashTable<void *, const ModelAction *, uintptr_t, 4 > lastwrmap;
+ SnapVector<action_list_t> threadlists;
+ ModelExecution *execution;
+ bool print_always;
+ bool print_buggy;
+ bool print_nonsc;
+ bool time;
+ struct sc_statistics *stats;
};
#endif