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/SEGMapBase.h"
20 #include "IR/SEG/SymbolicExprGraph.h"
37 std::unordered_set<SEGNodeBase *> positive_items;
38 std::unordered_set<SEGNodeBase *> negative_items;
47 bool and_clause(Clause *c);
52 static bool and_clause(Clause *c1, Clause *c2, Clause *result);
55 friend class SEGSerializer;
69 std::unordered_set<Clause *> constraints;
90 void set_default_constraint();
96 bool Cond =
false,
bool fromDisk =
false);
99 friend class SEGSerializer;
100 friend class SEGHash;
107 bool get_cond()
const {
return cond; }
116 SEGNodeBase *get_cond_node()
const {
return cond_node; }
119 void set_dbg_str(std::string str);
122 std::string get_dbg_str()
const;
125 bool is_satisfiable()
const;
128 bool is_always_satisfied()
const;
131 bool is_compound()
const;
136 bool is_interface_region();
140 static bool has_contradictory(kvec<SEGRegionNode *> ®ions,
147 static bool classof(
const SEGObject *O) {
148 return O->getKind() == SEGOBJK_Region;