9 #include <llvm/ADT/DenseSet.h>
10 #include <llvm/Support/raw_ostream.h>
27 llvm::SmallVector<DAGBlock *, 4>
Succs;
29 llvm::SmallVector<DAGBlock *, 4>
Preds;
68 llvm::raw_ostream &operator<<(llvm::raw_ostream &os,
DAGBlock &node);
77 using NodeList = std::vector<std::unique_ptr<DAGBlock>>;
83 , std::random_access_iterator_tag
88 : llvm::iterator_adaptor_base
91 , std::random_access_iterator_tag
97 DAGBlock *operator*()
const {
return this->I->get(); }
98 DAGBlock *operator->()
const {
return operator*(); }
107 DAGBlock *operator[] (
Block *block) {
return blocks_[block]; }
108 DAGBlock *operator[] (
unsigned idx) {
return &*nodes_[idx]; }
110 Func &GetFunc() {
return func_; }
113 size_t size()
const {
return nodes_.size(); }
114 node_iterator begin() {
return node_iterator(nodes_.begin()); }
115 node_iterator end() {
return node_iterator(nodes_.end()); }
116 reverse_node_iterator rbegin() {
return reverse_node_iterator(nodes_.rbegin()); }
117 reverse_node_iterator rend() {
return reverse_node_iterator(nodes_.rend()); }
125 std::unordered_map<Block *, DAGBlock *> blocks_;