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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15#ifndef LLVM_CODEGEN_MACHINEOUTLINER_H

16#define LLVM_CODEGEN_MACHINEOUTLINER_H

17

22#include <initializer_list>

23

24namespace llvm {

26

27

28

29

30

31

32

33

35

36

37

39private:

40

41 unsigned StartIdx = 0;

42

43

44 unsigned Len = 0;

45

46

48

49

51

52

54

55

56

57 unsigned CallOverhead = 0;

58

59

60

61

62

63

65

66

67

68

69

71

72

73 bool FromEndOfBlockToStartOfSeqWasSet = false;

74

75

76 bool InSeqWasSet = false;

77

78

80 assert(MBB->getParent()->getRegInfo().tracksLiveness() &&

81 "Candidate's Machine Function must track liveness");

82

83 if (FromEndOfBlockToStartOfSeqWasSet)

84 return;

85 FromEndOfBlockToStartOfSeqWasSet = true;

86 FromEndOfBlockToStartOfSeq.init(TRI);

87 FromEndOfBlockToStartOfSeq.addLiveOuts(*MBB);

88

89

92 FromEndOfBlockToStartOfSeq.stepBackward(MI);

93 }

94

95

97 assert(MBB->getParent()->getRegInfo().tracksLiveness() &&

98 "Candidate's Machine Function must track liveness");

99

100 if (InSeqWasSet)

101 return;

102 InSeqWasSet = true;

103 InSeq.init(TRI);

104 for (auto &MI : *this)

105 InSeq.accumulate(MI);

106 }

107

108public:

109

110

112

113

114

116

117

119

120

122

123

125

126

127 unsigned getEndIdx() const { return StartIdx + Len - 1; }

128

129

130

133 CallOverhead = CO;

134 }

135

136

138

141

146

147

148

149

150

151

152

153

154

155

156

157

158

161 if (!FromEndOfBlockToStartOfSeqWasSet)

162 initFromEndOfBlockToStartOfSeq(TRI);

163 return FromEndOfBlockToStartOfSeq.available(Reg);

164 }

165

166

167

170 if (!FromEndOfBlockToStartOfSeqWasSet)

171 initFromEndOfBlockToStartOfSeq(TRI);

173 return !FromEndOfBlockToStartOfSeq.available(Reg);

174 });

175 }

176

177

178

179

180

181

182

183

184

186 if (!InSeqWasSet)

187 initInSeq(TRI);

188 return InSeq.available(Reg);

189 }

190

191

192

193

194

195

196

197

199

204 : StartIdx(StartIdx), Len(Len), FirstInst(FirstInst), LastInst(LastInst),

207

208

209

213

214};

215

216

217

219

220public:

222

223

224

226

227

228

230

231

233

234

236

237

239

240

241

243 unsigned CallOverhead = 0;

245 CallOverhead += C.getCallOverhead();

247 }

248

249

253

254

255

259 return (NotOutlinedCost < OutlinedCost) ? 0

260 : NotOutlinedCost - OutlinedCost;

261 }

262

263

265

274

277};

278

279

280

285

287

288

289

290

291

296

297

298

301 unsigned CallOverhead =

303 ? 0

306 }

307

310};

311

312}

313}

314

315#endif

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

static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")

Register const TargetRegisterInfo * TRI

A set of register units used to track register liveness.

MachineInstrBundleIterator< MachineInstr, true > reverse_iterator

MachineInstrBundleIterator< MachineInstr > iterator

Representation of each machine instruction.

Wrapper class representing virtual and physical registers.

TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...

@ C

The default llvm calling convention, compatible with C.

Definition MachineOutliner.h:25

InstrType

Represents how an instruction should be mapped by the outliner.

Definition MachineOutliner.h:34

@ Legal

Definition MachineOutliner.h:34

@ LegalTerminator

Definition MachineOutliner.h:34

@ Illegal

Definition MachineOutliner.h:34

@ Invisible

Definition MachineOutliner.h:34

This is an optimization pass for GlobalISel generic memory operations.

iterator_range< T > make_range(T x, T y)

Convenience function for iterating over sub-ranges.

bool any_of(R &&range, UnaryPredicate P)

Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.

An individual sequence of instructions to be replaced with a call to an outlined function.

Definition MachineOutliner.h:38

unsigned Flags

Target-specific flags for this Candidate's MBB.

Definition MachineOutliner.h:118

MachineInstr & front()

Definition MachineOutliner.h:142

bool isAnyUnavailableAcrossOrOutOfSeq(std::initializer_list< Register > Regs, const TargetRegisterInfo &TRI)

Definition MachineOutliner.h:168

unsigned getCallOverhead() const

Returns the call overhead of this candidate if it is in the list.

Definition MachineOutliner.h:137

void setCallInfo(unsigned CID, unsigned CO)

Set the CallConstructionID and CallOverhead of this candidate to CID and CO respectively.

Definition MachineOutliner.h:131

unsigned Benefit

The number of instructions that would be saved by outlining every candidate of this type.

Definition MachineOutliner.h:198

MachineBasicBlock * getMBB() const

Definition MachineOutliner.h:145

MachineFunction * getMF() const

Definition MachineOutliner.h:144

MachineInstr & back()

Definition MachineOutliner.h:143

MachineBasicBlock::iterator begin()

Definition MachineOutliner.h:139

bool operator<(const Candidate &RHS) const

Used to ensure that Candidates are outlined in an order that preserves the start and end indices of o...

Definition MachineOutliner.h:210

unsigned getEndIdx() const

Return the end index of this candidate.

Definition MachineOutliner.h:127

Candidate(unsigned StartIdx, unsigned Len, MachineBasicBlock::iterator &FirstInst, MachineBasicBlock::iterator &LastInst, MachineBasicBlock *MBB, unsigned FunctionIdx, unsigned Flags)

Definition MachineOutliner.h:200

unsigned CallConstructionID

Identifier denoting the instructions to emit to call an outlined function from this point.

Definition MachineOutliner.h:115

bool isAvailableInsideSeq(Register Reg, const TargetRegisterInfo &TRI)

Definition MachineOutliner.h:185

unsigned getStartIdx() const

Return the start index of this candidate.

Definition MachineOutliner.h:124

MachineBasicBlock::iterator end()

Definition MachineOutliner.h:140

bool isAvailableAcrossAndOutOfSeq(Register Reg, const TargetRegisterInfo &TRI)

Definition MachineOutliner.h:159

unsigned getLength() const

Return the number of instructions in this Candidate.

Definition MachineOutliner.h:121

unsigned FunctionIdx

The index of this Candidate's OutlinedFunction in the list of OutlinedFunctions.

Definition MachineOutliner.h:111

~GlobalOutlinedFunction() override=default

unsigned GlobalOccurrenceCount

Definition MachineOutliner.h:286

GlobalOutlinedFunction(std::unique_ptr< OutlinedFunction > OF, unsigned GlobalOccurrenceCount)

Definition MachineOutliner.h:282

unsigned getOccurrenceCount() const override

Return the number of times that appear globally.

Definition MachineOutliner.h:292

unsigned getOutliningCost() const override

Return the outlining cost using the global occurrence count with the same cost as the first (unique) ...

Definition MachineOutliner.h:299

GlobalOutlinedFunction()=delete

virtual unsigned getOccurrenceCount() const

Return the number of candidates for this OutlinedFunction.

Definition MachineOutliner.h:238

virtual unsigned getOutliningCost() const

Return the number of bytes it would take to outline this function.

Definition MachineOutliner.h:242

unsigned getBenefit() const

Return the number of instructions that would be saved by outlining this function.

Definition MachineOutliner.h:256

unsigned getNotOutlinedCost() const

Return the size in bytes of the unoutlined sequences.

Definition MachineOutliner.h:250

OutlinedFunction()=delete

MachineFunction * MF

The actual outlined function created.

Definition MachineOutliner.h:225

unsigned FrameConstructionID

Target-defined identifier for constructing a frame for this function.

Definition MachineOutliner.h:235

unsigned getNumInstrs() const

Return the number of instructions in this sequence.

Definition MachineOutliner.h:264

OutlinedFunction(std::vector< Candidate > &Candidates, unsigned SequenceSize, unsigned FrameOverhead, unsigned FrameConstructionID)

Definition MachineOutliner.h:266

unsigned FrameOverhead

Target-defined overhead of constructing a frame for this function.

Definition MachineOutliner.h:232

unsigned SequenceSize

Represents the size of a sequence in bytes.

Definition MachineOutliner.h:229

virtual ~OutlinedFunction()=default

std::vector< Candidate > Candidates

Definition MachineOutliner.h:221