LLVM: include/llvm/IR/InstIterator.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef LLVM_IR_INSTITERATOR_H
19#define LLVM_IR_INSTITERATOR_H
20
25#include
26
27namespace llvm {
28
29
30
31
32template <class BB_t, class BB_i_t, class BI_t, class II_t> class InstIterator {
33 using BBty = BB_t;
34 using BBIty = BB_i_t;
35 using BIty = BI_t;
36 using IIty = II_t;
37 BB_t *BBs;
38 BB_i_t BB;
39 BI_t BI;
40
41public:
47
48
50
51
52 template<typename A, typename B, typename C, typename D>
54 : BBs(II.BBs), BB(II.BB), BI(II.BI) {}
55
56 template<typename A, typename B, typename C, typename D>
58 : BBs(II.BBs), BB(II.BB), BI(II.BI) {}
59
61 : BBs(&m.getBasicBlockList()), BB(BBs->begin()) {
62 if (BB != BBs->end()) {
63 BI = BB->begin();
64 advanceToNextBB();
65 }
66 }
67
69 : BBs(&m.getBasicBlockList()), BB(BBs->end()) {
70 }
71
72
75
78
80 return BB == y.BB && (BB == BBs->end() || BI == y.BI);
81 }
85
87 ++BI;
88 advanceToNextBB();
89 return *this;
90 }
94
96 while (BB == BBs->end() || BI == BB->begin()) {
97 --BB;
98 BI = BB->end();
99 }
100 --BI;
101 return *this;
102 }
106
107private:
108 inline void advanceToNextBB() {
109
110
111 while (BI == BB->end()) {
112 ++BB;
113 if (BB == BBs->end()) break;
114 BI = BB->begin();
115 }
116 }
117};
118
128
157
158}
159
160#endif
Expand Atomic instructions
uint64_t IntrinsicInst * II
InstListType::const_iterator const_iterator
InstListType::iterator iterator
Instruction iterators...
BasicBlockListType::iterator iterator
BasicBlockListType::const_iterator const_iterator
Definition InstIterator.h:32
InstIterator & operator++()
Definition InstIterator.h:86
reference operator*() const
Definition InstIterator.h:76
InstIterator & operator--()
Definition InstIterator.h:95
InstIterator(const InstIterator< A, B, C, D > &II)
Definition InstIterator.h:53
bool operator!=(const InstIterator &y) const
Definition InstIterator.h:82
InstIterator(M &m, bool)
Definition InstIterator.h:68
bool operator==(const InstIterator &y) const
Definition InstIterator.h:79
InstIterator(M &m)
Definition InstIterator.h:60
InstIterator operator++(int)
Definition InstIterator.h:91
signed difference_type
Definition InstIterator.h:44
IIty & reference
Definition InstIterator.h:46
std::bidirectional_iterator_tag iterator_category
Definition InstIterator.h:42
IIty value_type
Definition InstIterator.h:43
InstIterator(InstIterator< A, B, C, D > &II)
Definition InstIterator.h:57
InstIterator operator--(int)
Definition InstIterator.h:103
BIty & getInstructionIterator()
Definition InstIterator.h:74
BBIty & getBasicBlockIterator()
Definition InstIterator.h:73
IIty * pointer
Definition InstIterator.h:45
pointer operator->() const
Definition InstIterator.h:77
A range adaptor for a pair of iterators.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
This is an optimization pass for GlobalISel generic memory operations.
InstIterator< SymbolTableList< BasicBlock >, Function::iterator, BasicBlock::iterator, Instruction > inst_iterator
Definition InstIterator.h:119
inst_iterator inst_begin(Function *F)
Definition InstIterator.h:129
iterator_range< const_inst_iterator > const_inst_range
Definition InstIterator.h:127
InstIterator< const SymbolTableList< BasicBlock >, Function::const_iterator, BasicBlock::const_iterator, const Instruction > const_inst_iterator
Definition InstIterator.h:122
inst_iterator inst_end(Function *F)
Definition InstIterator.h:130
iterator_range< inst_iterator > inst_range
Definition InstIterator.h:126