LLVM: include/llvm/CodeGen/MachineInstrBundleIterator.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CODEGEN_MACHINEINSTRBUNDLEITERATOR_H

14#define LLVM_CODEGEN_MACHINEINSTRBUNDLEITERATOR_H

15

18#include

19#include

20#include <type_traits>

21

22namespace llvm {

23

49

52

53 template static Iterator getBundleBegin(Iterator I) {

54 if (I.isEnd())

55 while (I->isBundledWithPred())

56 --I;

57 return I;

58 }

59

60

61 template static Iterator getBundleFinal(Iterator I) {

62 if (I.isEnd())

63 while (I->isBundledWithSucc())

64 ++I;

65 return I;

66 }

67

68

69 template static void increment(Iterator &I) {

71 }

72

73

74 template static void decrement(Iterator &I) {

76 }

77};

78

80

81 template static Iterator getBundleBegin(Iterator I) {

83 I.getReverse())

84 .getReverse();

85 }

86

87

88 template static Iterator getBundleFinal(Iterator I) {

90 I.getReverse())

91 .getReverse();

92 }

93

94

95 template static void increment(Iterator &I) {

97 }

98

99

100 template static void decrement(Iterator &I) {

102 }

103};

104

105

106

107template <typename Ty, bool IsReverse = false>

110 using instr_iterator = typename Traits::instr_iterator;

111

112 instr_iterator MII;

113

114public:

115 using value_type = typename instr_iterator::value_type;

117 using pointer = typename instr_iterator::pointer;

118 using reference = typename instr_iterator::reference;

119 using const_pointer = typename instr_iterator::const_pointer;

122

123private:

124 using nonconst_instr_iterator = typename Traits::nonconst_instr_iterator;

125 using const_instr_iterator = typename Traits::const_instr_iterator;

126 using nonconst_iterator =

128 IsReverse>;

130

131public:

133 assert((MI.getNodePtr() || MI.isEnd() || MI->isBundledWithPred()) &&

134 "It's not legal to initialize MachineInstrBundleIterator with a "

135 "bundled MI");

136 }

137

139 assert(MI.isBundledWithPred() && "It's not legal to initialize "

140 "MachineInstrBundleIterator with a "

141 "bundled MI");

142 }

143

145

146 assert((MI || MI->isBundledWithPred()) && "It's not legal to initialize "

147 "MachineInstrBundleIterator "

148 "with a bundled MI");

149 }

150

151

152 template

155 std::enable_if_t<std::is_convertible<OtherTy *, Ty *>::value, void *> =

156 nullptr)

158

160

161

162

163

164

165

166

167

168

172

173

177

180

181

182 bool isValid() const { return MII.getNodePtr(); }

183

186 return L.MII == R.MII;

187 }

189 const const_instr_iterator &R) {

190 return L.MII == R;

191 }

192 friend bool operator==(const const_instr_iterator &L,

194 return L == R.MII;

195 }

197 const nonconst_instr_iterator &R) {

198 return L.MII == R;

199 }

200 friend bool operator==(const nonconst_instr_iterator &L,

202 return L == R.MII;

203 }

205 return L == const_instr_iterator(R);

206 }

208 return const_instr_iterator(L) == R;

209 }

212 return L == &R;

213 }

216 return &L == R;

217 }

218

221 return !(L == R);

222 }

224 const const_instr_iterator &R) {

225 return !(L == R);

226 }

227 friend bool operator!=(const const_instr_iterator &L,

229 return !(L == R);

230 }

232 const nonconst_instr_iterator &R) {

233 return !(L == R);

234 }

235 friend bool operator!=(const nonconst_instr_iterator &L,

237 return !(L == R);

238 }

240 return !(L == R);

241 }

243 return !(L == R);

244 }

247 return !(L == R);

248 }

251 return !(L == R);

252 }

253

254

265 --*this;

266 return Temp;

267 }

270 ++*this;

271 return Temp;

272 }

273

275

277

278

279

280

281

282

284};

285

286}

287

288#endif

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

friend bool operator!=(const MachineInstrBundleIterator &L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:219

friend bool operator!=(const MachineInstrBundleIterator &L, const const_instr_iterator &R)

Definition MachineInstrBundleIterator.h:223

friend bool operator==(const nonconst_instr_iterator &L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:200

friend bool operator==(const const_instr_iterator &L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:192

reverse_iterator getReverse() const

Definition MachineInstrBundleIterator.h:283

MachineInstrBundleIterator(pointer MI)

Definition MachineInstrBundleIterator.h:144

typename instr_iterator::difference_type difference_type

Definition MachineInstrBundleIterator.h:116

friend bool operator!=(const_reference L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:249

friend bool operator==(const MachineInstrBundleIterator &L, const nonconst_instr_iterator &R)

Definition MachineInstrBundleIterator.h:196

friend bool operator==(const MachineInstrBundleIterator &L, const_pointer R)

Definition MachineInstrBundleIterator.h:204

friend bool operator!=(const const_instr_iterator &L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:227

friend bool operator!=(const_pointer L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:242

nonconst_iterator getNonConstIterator() const

Definition MachineInstrBundleIterator.h:276

MachineInstrBundleIterator(const MachineInstrBundleIterator< OtherTy, IsReverse > &I, std::enable_if_t< std::is_convertible< OtherTy *, Ty * >::value, void * >=nullptr)

Definition MachineInstrBundleIterator.h:153

friend bool operator==(const MachineInstrBundleIterator &L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:184

friend bool operator==(const MachineInstrBundleIterator &L, const const_instr_iterator &R)

Definition MachineInstrBundleIterator.h:188

friend bool operator==(const MachineInstrBundleIterator &L, const_reference R)

Definition MachineInstrBundleIterator.h:210

typename instr_iterator::value_type value_type

Definition MachineInstrBundleIterator.h:115

MachineInstrBundleIterator & operator++()

Definition MachineInstrBundleIterator.h:259

friend bool operator!=(const MachineInstrBundleIterator &L, const nonconst_instr_iterator &R)

Definition MachineInstrBundleIterator.h:231

friend bool operator!=(const MachineInstrBundleIterator &L, const_pointer R)

Definition MachineInstrBundleIterator.h:239

typename instr_iterator::pointer pointer

Definition MachineInstrBundleIterator.h:117

MachineInstrBundleIterator & operator--()

Definition MachineInstrBundleIterator.h:255

friend bool operator==(const_reference L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:214

friend bool operator!=(const nonconst_instr_iterator &L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:235

instr_iterator getInstrIterator() const

Definition MachineInstrBundleIterator.h:274

MachineInstrBundleIterator(reference MI)

Definition MachineInstrBundleIterator.h:138

MachineInstrBundleIterator operator--(int)

Definition MachineInstrBundleIterator.h:263

std::bidirectional_iterator_tag iterator_category

Definition MachineInstrBundleIterator.h:121

friend bool operator!=(const MachineInstrBundleIterator &L, const_reference R)

Definition MachineInstrBundleIterator.h:245

typename instr_iterator::const_pointer const_pointer

Definition MachineInstrBundleIterator.h:119

static MachineInstrBundleIterator getAtBundleBegin(instr_iterator MI)

Get the bundle iterator for the given instruction's bundle.

Definition MachineInstrBundleIterator.h:174

MachineInstrBundleIterator(const MachineInstrBundleIterator< Ty, !IsReverse > &I)

Explicit conversion between forward/reverse iterators.

Definition MachineInstrBundleIterator.h:169

reference operator*() const

Definition MachineInstrBundleIterator.h:178

friend bool operator==(const_pointer L, const MachineInstrBundleIterator &R)

Definition MachineInstrBundleIterator.h:207

typename instr_iterator::reference reference

Definition MachineInstrBundleIterator.h:118

MachineInstrBundleIterator(instr_iterator MI)

Definition MachineInstrBundleIterator.h:132

MachineInstrBundleIterator()

Definition MachineInstrBundleIterator.h:159

typename instr_iterator::const_reference const_reference

Definition MachineInstrBundleIterator.h:120

MachineInstrBundleIterator operator++(int)

Definition MachineInstrBundleIterator.h:268

pointer operator->() const

Definition MachineInstrBundleIterator.h:179

bool isValid() const

Check for null.

Definition MachineInstrBundleIterator.h:182

A simple intrusive list implementation.

ilist_select_iterator_type< OptionsT, true, true > const_reverse_iterator

ilist_select_iterator_type< OptionsT, true, false > reverse_iterator

ilist_select_iterator_type< OptionsT, false, false > iterator

ilist_select_iterator_type< OptionsT, false, true > const_iterator

This file defines classes to implement an intrusive doubly linked list class (i.e.

This is an optimization pass for GlobalISel generic memory operations.

static Iterator getBundleBegin(Iterator I)

Get the beginning of the current bundle.

Definition MachineInstrBundleIterator.h:53

static void increment(Iterator &I)

Increment forward ilist iterator.

Definition MachineInstrBundleIterator.h:69

static Iterator getBundleFinal(Iterator I)

Get the final node of the current bundle.

Definition MachineInstrBundleIterator.h:61

static void decrement(Iterator &I)

Decrement forward ilist iterator.

Definition MachineInstrBundleIterator.h:74

static Iterator getBundleFinal(Iterator I)

Get the final node of the current bundle.

Definition MachineInstrBundleIterator.h:88

static Iterator getBundleBegin(Iterator I)

Get the beginning of the current bundle.

Definition MachineInstrBundleIterator.h:81

static void decrement(Iterator &I)

Decrement reverse ilist iterator.

Definition MachineInstrBundleIterator.h:100

static void increment(Iterator &I)

Increment reverse ilist iterator.

Definition MachineInstrBundleIterator.h:95

simple_ilist< T, ilist_sentinel_tracking< true > > list_type

Definition MachineInstrBundleIterator.h:26

typename list_type::iterator instr_iterator

Definition MachineInstrBundleIterator.h:27

typename list_type::iterator nonconst_instr_iterator

Definition MachineInstrBundleIterator.h:28

typename list_type::const_iterator const_instr_iterator

Definition MachineInstrBundleIterator.h:29

typename list_type::reverse_iterator nonconst_instr_iterator

Definition MachineInstrBundleIterator.h:34

typename list_type::const_reverse_iterator const_instr_iterator

Definition MachineInstrBundleIterator.h:35

simple_ilist< T, ilist_sentinel_tracking< true > > list_type

Definition MachineInstrBundleIterator.h:32

typename list_type::reverse_iterator instr_iterator

Definition MachineInstrBundleIterator.h:33

typename list_type::iterator nonconst_instr_iterator

Definition MachineInstrBundleIterator.h:40

typename list_type::const_iterator const_instr_iterator

Definition MachineInstrBundleIterator.h:41

simple_ilist< T, ilist_sentinel_tracking< true > > list_type

Definition MachineInstrBundleIterator.h:38

typename list_type::const_iterator instr_iterator

Definition MachineInstrBundleIterator.h:39

typename list_type::reverse_iterator nonconst_instr_iterator

Definition MachineInstrBundleIterator.h:46

simple_ilist< T, ilist_sentinel_tracking< true > > list_type

Definition MachineInstrBundleIterator.h:44

typename list_type::const_reverse_iterator instr_iterator

Definition MachineInstrBundleIterator.h:45

typename list_type::const_reverse_iterator const_instr_iterator

Definition MachineInstrBundleIterator.h:47