projects
/
c11tester.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
model: add read-acquire/fence-release support
[c11tester.git]
/
cyclegraph.h
diff --git
a/cyclegraph.h
b/cyclegraph.h
index 013a11a793bd9f20971a881af2c104a59e3085ec..f0f04ffee0c3ca1f9cd3ef2edf46c2743e6c0515 100644
(file)
--- a/
cyclegraph.h
+++ b/
cyclegraph.h
@@
-8,7
+8,10
@@
#include "hashtable.h"
#include <vector>
#include <inttypes.h>
#include "hashtable.h"
#include <vector>
#include <inttypes.h>
+#include "config.h"
+#include "mymemory.h"
+class Promise;
class CycleNode;
class ModelAction;
class CycleNode;
class ModelAction;
@@
-21,17
+24,26
@@
class CycleGraph {
bool checkForCycles();
bool checkForRMWViolation();
void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
bool checkForCycles();
bool checkForRMWViolation();
void addRMWEdge(const ModelAction *from, const ModelAction *rmw);
-
+ bool checkPromise(const ModelAction *from, Promise *p);
bool checkReachable(const ModelAction *from, const ModelAction *to);
void startChanges();
void commitChanges();
void rollbackChanges();
bool checkReachable(const ModelAction *from, const ModelAction *to);
void startChanges();
void commitChanges();
void rollbackChanges();
+#if SUPPORT_MOD_ORDER_DUMP
+ void dumpNodes(FILE *file);
+ void dumpGraphToFile(const char * filename);
+#endif
+ SNAPSHOTALLOC
private:
CycleNode * getNode(const ModelAction *);
private:
CycleNode * getNode(const ModelAction *);
+ HashTable<CycleNode *, CycleNode *, uintptr_t, 4, model_malloc, model_calloc, model_free> * discovered;
/** @brief A table for mapping ModelActions to CycleNodes */
HashTable<const ModelAction *, CycleNode *, uintptr_t, 4> actionToNode;
/** @brief A table for mapping ModelActions to CycleNodes */
HashTable<const ModelAction *, CycleNode *, uintptr_t, 4> actionToNode;
+#if SUPPORT_MOD_ORDER_DUMP
+ std::vector<CycleNode *> nodeList;
+#endif
bool checkReachable(CycleNode *from, CycleNode *to);
bool checkReachable(CycleNode *from, CycleNode *to);
@@
-50,10
+62,12
@@
class CycleGraph {
class CycleNode {
public:
CycleNode(const ModelAction *action);
class CycleNode {
public:
CycleNode(const ModelAction *action);
-
void
addEdge(CycleNode * node);
+
bool
addEdge(CycleNode * node);
std::vector<CycleNode *> * getEdges();
bool setRMW(CycleNode *);
CycleNode* getRMW();
std::vector<CycleNode *> * getEdges();
bool setRMW(CycleNode *);
CycleNode* getRMW();
+ const ModelAction * getAction() {return action;};
+
void popEdge() {
edges.pop_back();
};
void popEdge() {
edges.pop_back();
};
@@
-61,6
+75,7
@@
class CycleNode {
hasRMW=NULL;
}
hasRMW=NULL;
}
+ SNAPSHOTALLOC
private:
/** @brief The ModelAction that this node represents */
const ModelAction *action;
private:
/** @brief The ModelAction that this node represents */
const ModelAction *action;