9 #ifndef IR_SEG_SEGREGIONNODE_H
10 #define IR_SEG_SEGREGIONNODE_H
12 #include <llvm/IR/BasicBlock.h>
13 #include <llvm/IR/Function.h>
14 #include <llvm/IR/Instructions.h>
15 #include <llvm/IR/Value.h>
17 #include <unordered_set>
19 #include "IR/SEG/SymbolicExprGraph.h"
24 class PersistedSEGRegionNode;
42 virtual void assembleSEGObject(std::map<int, SEGObject *> &FuncSEGObjMap);
46 std::unordered_set<SEGNodeBase *> positive_items;
47 std::unordered_set<SEGNodeBase *> negative_items;
56 bool and_clause(
Clause *c);
76 std::unordered_set<Clause *> constraints;
97 void set_default_constraint();
110 virtual PersistedSEGObject *createPersistedObject()
const;
114 bool get_cond()
const {
return cond; }
123 SEGNodeBase *get_cond_node()
const {
return cond_node; }
126 void set_dbg_str(std::string str);
129 std::string get_dbg_str()
const;
132 bool is_satisfiable()
const;
135 bool is_always_satisfied()
const;
143 bool is_interface_region();
147 static bool has_contradictory(kvec<SEGRegionNode *> ®ions,
154 static bool classof(
const SEGObject *O) {
155 return O->getKind() == SEGOBJK_Region;