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